/*
* Copyright (C) 2004, 2006, 2007, 2009, 2012, 2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 2001 Internet Software Consortium.
*
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
* REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
* LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
* OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE.
*/
/* $Id$ */
/*
* The NT Groups have two groups that are not well documented and are
* not normally seen: None and Everyone. A user account belongs to
* any number of groups, but if it is not a member of any group then
* it is a member of the None Group. The None group is not listed
* anywhere. You cannot remove an account from the none group except
* by making it a member of some other group, The second group is the
* Everyone group. All accounts, no matter how many groups that they
* belong to, also belong to the Everyone group. You cannot remove an
* account from the Everyone group.
*/
#ifndef UNICODE
#define UNICODE
#endif /* UNICODE */
/*
* Silence warnings.
*/
#include <windows.h>
#include <assert.h>
#include <lm.h>
#include <isc/ntgroups.h>
unsigned int maxgroups,
unsigned int *totalGroups) {
DWORD i;
*totalGroups = 0;
/*
* Call the NetUserGetLocalGroups function
* specifying information level 0.
*
* The LG_INCLUDE_INDIRECT flag specifies that the
* function should also return the names of the local
* groups in which the user is indirectly a member.
*/
user,
/*
* See if the call succeeds,
*/
if (nStatus != NERR_Success) {
if (nStatus == ERROR_ACCESS_DENIED)
return (ISC_R_NOPERM);
if (nStatus == ERROR_MORE_DATA)
return (ISC_R_NOSPACE);
if (nStatus == NERR_UserNotFound)
dwEntriesRead = 0;
}
/*
* Loop through the entries
*/
for (i = 0;
break;
return (ISC_R_NOMEMORY);
else
(*totalGroups)++;
pTmpLBuf++;
}
}
/* Free the allocated memory. */
/*
* Call the NetUserGetGroups function, specifying level 0.
*/
user,
/*
* See if the call succeeds,
*/
if (nStatus != NERR_Success) {
if (nStatus == ERROR_ACCESS_DENIED)
return (ISC_R_NOPERM);
if (nStatus == ERROR_MORE_DATA)
return (ISC_R_NOSPACE);
if (nStatus == NERR_UserNotFound)
dwEntriesRead = 0;
}
/*
* Loop through the entries
*/
for (i = 0;
break;
return (ISC_R_NOMEMORY);
else
(*totalGroups)++;
pTmpBuf++;
}
}
/*
* Free the allocated memory.
*/
return (ISC_R_SUCCESS);
}