done:
sudo_auth_cleanup(auth_pw);
- pw_delref(auth_pw);
+ sudo_pw_delref(auth_pw);
debug_return_bool(rval);
}
if (runas_pw->pw_name == NULL)
log_fatal(NO_MAIL|MSG_ONLY, _("unknown uid: %u"),
(unsigned int) runas_pw->pw_uid);
- pw_addref(runas_pw);
+ sudo_pw_addref(runas_pw);
pw = runas_pw;
} else {
- pw_addref(sudo_user.pw);
+ sudo_pw_addref(sudo_user.pw);
pw = sudo_user.pw;
}
done:
efree(tofree);
if (details.runas_pw)
- pw_delref(details.runas_pw);
+ sudo_pw_delref(details.runas_pw);
sudo_endpwent();
if (details.runas_gr)
- gr_delref(details.runas_gr);
+ sudo_gr_delref(details.runas_gr);
sudo_endgrent();
debug_return_bool(rval);
if ((grp = sudo_getgrgid(user_gid)) != NULL) {
len = strlcpy(str, grp->gr_name, strsize);
- gr_delref(grp);
+ sudo_gr_delref(grp);
} else {
len = strlen(str);
len = snprintf(str + len, strsize - len, "#%u",
} else {
if ((grp = sudo_getgrgid(runas_pw->pw_gid)) != NULL) {
len = strlcpy(str, grp->gr_name, strsize);
- gr_delref(grp);
+ sudo_gr_delref(grp);
} else {
len = strlen(str);
len = snprintf(str + len, strsize - len, "#%u",
sz += 12 + sudo_ldap_value_len(grp->gr_name);
}
sz += 13 + MAX_UID_T_LEN;
- if ((grlist = get_group_list(pw)) != NULL) {
+ if ((grlist = sudo_get_grlist(pw)) != NULL) {
for (i = 0; i < grlist->ngroups; i++) {
if (grp != NULL && strcasecmp(grlist->groups[i], grp->gr_name) == 0)
continue;
/* Done with groups. */
if (grlist != NULL)
- grlist_delref(grlist);
+ sudo_grlist_delref(grlist);
if (grp != NULL)
- gr_delref(grp);
+ sudo_gr_delref(grp);
/* Add ALL to list and end the global OR */
if (strlcat(buf, "(sudoUser=ALL)", sz) >= sz)
done:
if (pw0 != NULL)
- pw_delref(pw0);
+ sudo_pw_delref(pw0);
debug_return_bool(matched);
}
/*
- * Copyright (c) 1996, 1998-2005, 2007-2011
+ * Copyright (c) 1996, 1998-2005, 2007-2012
* Todd C. Miller <Todd.Miller@courtesan.com>
*
* Permission to use, copy, modify, and distribute this software for any
}
void
-pw_addref(struct passwd *pw)
+sudo_pw_addref(struct passwd *pw)
{
- debug_decl(pw_addref, SUDO_DEBUG_NSS)
+ debug_decl(sudo_pw_addref, SUDO_DEBUG_NSS)
ptr_to_item(pw)->refcnt++;
debug_return;
}
static void
-pw_delref_item(void *v)
+sudo_pw_delref_item(void *v)
{
struct cache_item *item = v;
- debug_decl(pw_delref_item, SUDO_DEBUG_NSS)
+ debug_decl(sudo_pw_delref_item, SUDO_DEBUG_NSS)
if (--item->refcnt == 0)
efree(item);
}
void
-pw_delref(struct passwd *pw)
+sudo_pw_delref(struct passwd *pw)
{
- debug_decl(pw_delref, SUDO_DEBUG_NSS)
- pw_delref_item(ptr_to_item(pw));
+ debug_decl(sudo_pw_delref, SUDO_DEBUG_NSS)
+ sudo_pw_delref_item(ptr_to_item(pw));
debug_return;
}
/* Store by uid, overwriting cached version. */
pwitem->cache.k.uid = pw->pw_uid;
if ((node = rbinsert(pwcache_byuid, &pwitem->cache)) != NULL) {
- pw_delref_item(node->data);
+ sudo_pw_delref_item(node->data);
node->data = &pwitem->cache;
}
} else {
/* Store by name, overwriting cached version. */
pwitem->cache.k.name = pw->pw_name;
if ((node = rbinsert(pwcache_byname, &pwitem->cache)) != NULL) {
- pw_delref_item(node->data);
+ sudo_pw_delref_item(node->data);
node->data = &pwitem->cache;
}
}
debug_decl(sudo_freepwcache, SUDO_DEBUG_NSS)
if (pwcache_byuid != NULL) {
- rbdestroy(pwcache_byuid, pw_delref_item);
+ rbdestroy(pwcache_byuid, sudo_pw_delref_item);
pwcache_byuid = NULL;
}
if (pwcache_byname != NULL) {
- rbdestroy(pwcache_byname, pw_delref_item);
+ rbdestroy(pwcache_byname, sudo_pw_delref_item);
pwcache_byname = NULL;
}
if (cp - (char *)grlitem + len > total) {
total += len + GROUPNAME_LEN;
efree(grlitem);
- gr_delref(grp);
+ sudo_gr_delref(grp);
goto again;
}
memcpy(cp, grp->gr_name, len);
grlist->groups[ngroups++] = cp;
cp += len;
- gr_delref(grp);
+ sudo_gr_delref(grp);
}
}
grlist->ngroups = ngroups;
}
void
-gr_addref(struct group *gr)
+sudo_gr_addref(struct group *gr)
{
- debug_decl(gr_addref, SUDO_DEBUG_NSS)
+ debug_decl(sudo_gr_addref, SUDO_DEBUG_NSS)
ptr_to_item(gr)->refcnt++;
debug_return;
}
static void
-gr_delref_item(void *v)
+sudo_gr_delref_item(void *v)
{
struct cache_item *item = v;
- debug_decl(gr_delref_item, SUDO_DEBUG_NSS)
+ debug_decl(sudo_gr_delref_item, SUDO_DEBUG_NSS)
if (--item->refcnt == 0)
efree(item);
}
void
-gr_delref(struct group *gr)
+sudo_gr_delref(struct group *gr)
{
- debug_decl(gr_delref, SUDO_DEBUG_NSS)
- gr_delref_item(ptr_to_item(gr));
+ debug_decl(sudo_gr_delref, SUDO_DEBUG_NSS)
+ sudo_gr_delref_item(ptr_to_item(gr));
debug_return;
}
/* Store by gid, overwriting cached version. */
gritem->cache.k.gid = gr->gr_gid;
if ((node = rbinsert(grcache_bygid, &gritem->cache)) != NULL) {
- gr_delref_item(node->data);
+ sudo_gr_delref_item(node->data);
node->data = &gritem->cache;
}
} else {
/* Store by name, overwriting cached version. */
gritem->cache.k.name = gr->gr_name;
if ((node = rbinsert(grcache_byname, &gritem->cache)) != NULL) {
- gr_delref_item(node->data);
+ sudo_gr_delref_item(node->data);
node->data = &gritem->cache;
}
}
}
void
-grlist_addref(struct group_list *grlist)
+sudo_grlist_addref(struct group_list *grlist)
{
- debug_decl(gr_addref, SUDO_DEBUG_NSS)
+ debug_decl(sudo_gr_addref, SUDO_DEBUG_NSS)
ptr_to_item(grlist)->refcnt++;
debug_return;
}
static void
-grlist_delref_item(void *v)
+sudo_grlist_delref_item(void *v)
{
struct cache_item *item = v;
- debug_decl(gr_delref_item, SUDO_DEBUG_NSS)
+ debug_decl(sudo_gr_delref_item, SUDO_DEBUG_NSS)
if (--item->refcnt == 0)
efree(item);
}
void
-grlist_delref(struct group_list *grlist)
+sudo_grlist_delref(struct group_list *grlist)
{
- debug_decl(gr_delref, SUDO_DEBUG_NSS)
- grlist_delref_item(ptr_to_item(grlist));
+ debug_decl(sudo_gr_delref, SUDO_DEBUG_NSS)
+ sudo_grlist_delref_item(ptr_to_item(grlist));
debug_return;
}
debug_decl(sudo_freegrcache, SUDO_DEBUG_NSS)
if (grcache_bygid != NULL) {
- rbdestroy(grcache_bygid, gr_delref_item);
+ rbdestroy(grcache_bygid, sudo_gr_delref_item);
grcache_bygid = NULL;
}
if (grcache_byname != NULL) {
- rbdestroy(grcache_byname, gr_delref_item);
+ rbdestroy(grcache_byname, sudo_gr_delref_item);
grcache_byname = NULL;
}
if (grlist_cache != NULL) {
- rbdestroy(grlist_cache, grlist_delref_item);
+ rbdestroy(grlist_cache, sudo_grlist_delref_item);
grlist_cache = NULL;
}
}
struct group_list *
-get_group_list(struct passwd *pw)
+sudo_get_grlist(struct passwd *pw)
{
struct cache_item key, *item;
struct rbnode *node;
size_t len;
GETGROUPS_T *gids;
int ngids;
- debug_decl(get_group_list, SUDO_DEBUG_NSS)
+ debug_decl(sudo_get_grlist, SUDO_DEBUG_NSS)
key.k.name = pw->pw_name;
if ((node = rbfind(grlist_cache, &key)) != NULL) {
}
void
-set_group_list(const char *user, GETGROUPS_T *gids, int ngids)
+sudo_set_grlist(const char *user, GETGROUPS_T *gids, int ngids)
{
struct cache_item key, *item;
struct rbnode *node;
- debug_decl(set_group_list, SUDO_DEBUG_NSS)
+ debug_decl(sudo_set_grlist, SUDO_DEBUG_NSS)
/*
* Cache group db entry if it doesn't already exist
bool matched = false;
debug_decl(user_in_group, SUDO_DEBUG_NSS)
- if ((grlist = get_group_list(pw)) != NULL) {
+ if ((grlist = sudo_get_grlist(pw)) != NULL) {
/*
* If it could be a sudo-style group ID check gids first.
*/
}
done:
if (grp != NULL)
- gr_delref(grp);
- grlist_delref(grlist);
+ sudo_gr_delref(grp);
+ sudo_grlist_delref(grlist);
}
debug_return_bool(matched);
}
while (perm_stack_depth > 1)
restore_perms();
- grlist_delref(perm_stack[0].grlist);
+ sudo_grlist_delref(perm_stack[0].grlist);
debug_return;
}
state->sgid = state->egid; /* in case we are setgid */
#endif
state->grlist = user_group_list;
- grlist_addref(state->grlist);
+ sudo_grlist_addref(state->grlist);
sudo_debug_printf(SUDO_DEBUG_INFO, "%s: PERM_INITIAL: "
"ruid: %d, euid: %d, suid: %d, rgid: %d, egid: %d, sgid: %d",
__func__, (int)state->ruid, (int)state->euid, (int)state->suid,
state->egid = ostate->egid;
state->sgid = ostate->sgid;
state->grlist = ostate->grlist;
- grlist_addref(state->grlist);
+ sudo_grlist_addref(state->grlist);
break;
case PERM_USER:
goto bad;
}
state->grlist = user_group_list;
- grlist_addref(state->grlist);
+ sudo_grlist_addref(state->grlist);
if (state->grlist != ostate->grlist) {
if (sudo_setgroups(state->grlist->ngids, state->grlist->gids)) {
strlcpy(errbuf, "PERM_USER: setgroups", sizeof(errbuf));
goto bad;
}
state->grlist = user_group_list;
- grlist_addref(state->grlist);
+ sudo_grlist_addref(state->grlist);
if (state->grlist != ostate->grlist) {
if (sudo_setgroups(state->grlist->ngids, state->grlist->gids)) {
strlcpy(errbuf, "PERM_FULL_USER: setgroups", sizeof(errbuf));
case PERM_SUDOERS:
state->grlist = ostate->grlist;
- grlist_addref(state->grlist);
+ sudo_grlist_addref(state->grlist);
/* assumes euid == ROOT_UID, ruid == user */
state->rgid = ostate->rgid;
case PERM_TIMESTAMP:
state->grlist = ostate->grlist;
- grlist_addref(state->grlist);
+ sudo_grlist_addref(state->grlist);
state->rgid = ostate->rgid;
state->egid = ostate->egid;
state->sgid = ostate->sgid;
goto bad;
}
}
- grlist_delref(state->grlist);
+ sudo_grlist_delref(state->grlist);
debug_return;
bad:
state->egid = getgidx(ID_EFFECTIVE);
state->sgid = getgidx(ID_SAVED);
state->grlist = user_group_list;
- grlist_addref(state->grlist);
+ sudo_grlist_addref(state->grlist);
sudo_debug_printf(SUDO_DEBUG_INFO, "%s: PERM_INITIAL: "
"ruid: %d, euid: %d, suid: %d, rgid: %d, egid: %d, sgid: %d",
__func__, (unsigned int)state->ruid, (unsigned int)state->euid,
state->egid = ostate->egid;
state->sgid = ostate->sgid;
state->grlist = ostate->grlist;
- grlist_addref(state->grlist);
+ sudo_grlist_addref(state->grlist);
break;
case PERM_USER:
goto bad;
}
state->grlist = user_group_list;
- grlist_addref(state->grlist);
+ sudo_grlist_addref(state->grlist);
if (state->grlist != ostate->grlist) {
if (sudo_setgroups(state->grlist->ngids, state->grlist->gids)) {
strlcpy(errbuf, "PERM_USER: setgroups", sizeof(errbuf));
goto bad;
}
state->grlist = user_group_list;
- grlist_addref(state->grlist);
+ sudo_grlist_addref(state->grlist);
if (state->grlist != ostate->grlist) {
if (sudo_setgroups(state->grlist->ngids, state->grlist->gids)) {
strlcpy(errbuf, "PERM_FULL_USER: setgroups", sizeof(errbuf));
case PERM_SUDOERS:
state->grlist = ostate->grlist;
- grlist_addref(state->grlist);
+ sudo_grlist_addref(state->grlist);
/* assume euid == ROOT_UID, ruid == user */
state->rgid = ostate->rgid;
case PERM_TIMESTAMP:
state->grlist = ostate->grlist;
- grlist_addref(state->grlist);
+ sudo_grlist_addref(state->grlist);
state->rgid = ostate->rgid;
state->egid = ostate->egid;
state->sgid = ostate->sgid;
goto bad;
}
}
- grlist_delref(state->grlist);
+ sudo_grlist_delref(state->grlist);
debug_return;
bad:
state->rgid = getgid();
state->egid = getegid();
state->grlist = user_group_list;
- grlist_addref(state->grlist);
+ sudo_grlist_addref(state->grlist);
sudo_debug_printf(SUDO_DEBUG_INFO, "%s: PERM_INITIAL: "
"ruid: %d, euid: %d, rgid: %d, egid: %d", __func__,
(int)state->ruid, (int)state->euid,
state->rgid = ostate->rgid;
state->egid = ostate->rgid;
state->grlist = ostate->grlist;
- grlist_addref(state->grlist);
+ sudo_grlist_addref(state->grlist);
break;
case PERM_USER:
goto bad;
}
state->grlist = user_group_list;
- grlist_addref(state->grlist);
+ sudo_grlist_addref(state->grlist);
if (state->grlist != ostate->grlist) {
if (sudo_setgroups(state->grlist->ngids, state->grlist->gids)) {
strlcpy(errbuf, "PERM_USER: setgroups", sizeof(errbuf));
goto bad;
}
state->grlist = user_group_list;
- grlist_addref(state->grlist);
+ sudo_grlist_addref(state->grlist);
if (state->grlist != ostate->grlist) {
if (sudo_setgroups(state->grlist->ngids, state->grlist->gids)) {
strlcpy(errbuf, "PERM_FULL_USER: setgroups", sizeof(errbuf));
case PERM_SUDOERS:
state->grlist = ostate->grlist;
- grlist_addref(state->grlist);
+ sudo_grlist_addref(state->grlist);
/* assume euid == ROOT_UID, ruid == user */
state->rgid = ostate->rgid;
case PERM_TIMESTAMP:
state->grlist = ostate->grlist;
- grlist_addref(state->grlist);
+ sudo_grlist_addref(state->grlist);
state->rgid = ostate->rgid;
state->egid = ostate->egid;
state->ruid = ROOT_UID;
goto bad;
}
}
- grlist_delref(state->grlist);
+ sudo_grlist_delref(state->grlist);
debug_return;
bad:
state->rgid = getgid();
state->egid = getegid();
state->grlist = user_group_list;
- grlist_addref(state->grlist);
+ sudo_grlist_addref(state->grlist);
sudo_debug_printf(SUDO_DEBUG_INFO, "%s: PERM_INITIAL: "
"ruid: %d, euid: %d, rgid: %d, egid: %d", __func__,
(int)state->ruid, (int)state->euid,
state->rgid = ostate->rgid;
state->egid = ostate->egid;
state->grlist = ostate->grlist;
- grlist_addref(state->grlist);
+ sudo_grlist_addref(state->grlist);
break;
case PERM_USER:
goto bad;
}
state->grlist = user_group_list;
- grlist_addref(state->grlist);
+ sudo_grlist_addref(state->grlist);
if (state->grlist != ostate->grlist) {
if (sudo_setgroups(state->grlist->ngids, state->grlist->gids)) {
strlcpy(errbuf, "PERM_USER: setgroups", sizeof(errbuf));
goto bad;
}
state->grlist = user_group_list;
- grlist_addref(state->grlist);
+ sudo_grlist_addref(state->grlist);
if (state->grlist != ostate->grlist) {
if (sudo_setgroups(state->grlist->ngids, state->grlist->gids)) {
strlcpy(errbuf, "PERM_FULL_USER: setgroups", sizeof(errbuf));
case PERM_SUDOERS:
state->grlist = ostate->grlist;
- grlist_addref(state->grlist);
+ sudo_grlist_addref(state->grlist);
/* assume euid == ROOT_UID, ruid == user */
state->rgid = ostate->rgid;
case PERM_TIMESTAMP:
state->grlist = ostate->grlist;
- grlist_addref(state->grlist);
+ sudo_grlist_addref(state->grlist);
state->rgid = ostate->rgid;
state->egid = ostate->egid;
state->ruid = ROOT_UID;
warning("seteuid(%d)", ostate->euid);
goto bad;
}
- grlist_delref(state->grlist);
+ sudo_grlist_delref(state->grlist);
debug_return;
bad:
state->ruid = geteuid() == ROOT_UID ? ROOT_UID : getuid();
state->rgid = getgid();
state->grlist = user_group_list;
- grlist_addref(state->grlist);
+ sudo_grlist_addref(state->grlist);
sudo_debug_printf(SUDO_DEBUG_INFO, "%s: PERM_INITIAL: "
"ruid: %d, rgid: %d", __func__, (int)state->ruid, (int)state->rgid);
break;
state->ruid = ROOT_UID;
state->rgid = ostate->rgid;
state->grlist = ostate->grlist;
- grlist_addref(state->grlist);
+ sudo_grlist_addref(state->grlist);
sudo_debug_printf(SUDO_DEBUG_INFO, "%s: PERM_ROOT: uid: "
"[%d] -> [%d]", __func__, (int)ostate->ruid, (int)state->ruid);
if (setuid(ROOT_UID)) {
"[%d] -> [%d]", __func__, (int)ostate->rgid, (int)state->rgid);
(void) setgid(user_gid);
state->grlist = user_group_list;
- grlist_addref(state->grlist);
+ sudo_grlist_addref(state->grlist);
if (state->grlist != ostate->grlist) {
if (sudo_setgroups(state->grlist->ngids, state->grlist->gids)) {
strlcpy(errbuf, "PERM_FULL_USER: setgroups", sizeof(errbuf));
state->ruid = ostate->ruid;
state->rgid = ostate->rgid;
state->grlist = ostate->grlist;
- grlist_addref(state->grlist);
+ sudo_grlist_addref(state->grlist);
break;
}
goto bad;
}
}
- grlist_delref(state->grlist);
+ sudo_grlist_delref(state->grlist);
if (OID(ruid) != -1 && setuid(ostate->ruid)) {
warning("setuid(%d)", (int)ostate->ruid);
goto bad;
debug_decl(runas_setgroups, SUDO_DEBUG_PERMS)
if (def_preserve_groups) {
- grlist_addref(user_group_list);
+ sudo_grlist_addref(user_group_list);
debug_return_ptr(user_group_list);
}
#ifdef HAVE_SETAUTHDB
aix_setauthdb(pw->pw_name);
#endif
- grlist = get_group_list(pw);
+ grlist = sudo_get_grlist(pw);
#ifdef HAVE_SETAUTHDB
aix_restoreauthdb();
#endif
(void)sudo_auth_end_session(runas_pw);
/* Free remaining references to password and group entries. */
- pw_delref(sudo_user.pw);
- pw_delref(runas_pw);
+ sudo_pw_delref(sudo_user.pw);
+ sudo_pw_delref(runas_pw);
if (runas_gr != NULL)
- gr_delref(runas_gr);
+ sudo_gr_delref(runas_gr);
if (user_group_list != NULL)
- grlist_delref(user_group_list);
+ sudo_grlist_delref(user_group_list);
debug_return;
}
pw = sudo_getpwnam(def_timestampowner);
if (pw != NULL) {
timestamp_uid = pw->pw_uid;
- pw_delref(pw);
+ sudo_pw_delref(pw);
} else {
log_error(0, _("timestamp owner (%s): No such user"),
def_timestampowner);
if ((pw = sudo_getpwnam(prev_user)) != NULL) {
if (sudo_user.pw != NULL)
- pw_delref(sudo_user.pw);
+ sudo_pw_delref(sudo_user.pw);
sudo_user.pw = pw;
}
}
gid_t egid;
size_t glsize;
char *cp, *gid_list;
- struct group_list *grlist = get_group_list(runas_pw);
+ struct group_list *grlist = sudo_get_grlist(runas_pw);
/* We reserve an extra spot in the list for the effective gid. */
glsize = sizeof("runas_groups=") - 1 +
}
}
command_info[info_len++] = gid_list;
- grlist_delref(grlist);
+ sudo_grlist_delref(grlist);
}
if (def_closefrom >= 0)
easprintf(&command_info[info_len++], "closefrom=%d", def_closefrom);
}
rval = sudoers_policy_main(argc, argv, I_LISTPW, NULL, NULL, NULL, NULL);
if (list_user) {
- pw_delref(list_pw);
+ sudo_pw_delref(list_pw);
list_pw = NULL;
}
* Get group list.
*/
if (user_group_list == NULL)
- user_group_list = get_group_list(sudo_user.pw);
+ user_group_list = sudo_get_grlist(sudo_user.pw);
/* Set runas callback. */
sudo_defs_table[I_RUNAS_DEFAULT].callback = cb_runas_default;
debug_decl(set_runaspw, SUDO_DEBUG_PLUGIN)
if (runas_pw != NULL)
- pw_delref(runas_pw);
+ sudo_pw_delref(runas_pw);
if (*user == '#') {
if ((runas_pw = sudo_getpwuid(atoi(user + 1))) == NULL)
runas_pw = sudo_fakepwnam(user, runas_gr ? runas_gr->gr_gid : 0);
debug_decl(set_runasgr, SUDO_DEBUG_PLUGIN)
if (runas_gr != NULL)
- gr_delref(runas_gr);
+ sudo_gr_delref(runas_gr);
if (*group == '#') {
if ((runas_gr = sudo_getgrgid(atoi(group + 1))) == NULL)
runas_gr = sudo_fakegrnam(group);
break;
cp++; /* skip over comma */
}
- set_group_list(user_name, gids, ngids);
+ sudo_set_grlist(user_name, gids, ngids);
efree(gids);
}
bool display_cmnd(struct sudo_nss_list *, struct passwd *);
/* pwutil.c */
-void sudo_setgrent(void);
+__dso_public struct group *sudo_getgrgid(gid_t);
+__dso_public struct group *sudo_getgrnam(const char *);
+__dso_public void sudo_gr_addref(struct group *);
+__dso_public void sudo_gr_delref(struct group *);
+bool user_in_group(struct passwd *, const char *);
+struct group *sudo_fakegrnam(const char *);
+struct group_list *sudo_get_grlist(struct passwd *pw);
+struct passwd *sudo_fakepwnam(const char *, gid_t);
+struct passwd *sudo_fakepwnamid(const char *user, uid_t uid, gid_t gid);
+struct passwd *sudo_getpwnam(const char *);
+struct passwd *sudo_getpwuid(uid_t);
void sudo_endgrent(void);
-void sudo_setpwent(void);
void sudo_endpwent(void);
-void sudo_setspent(void);
void sudo_endspent(void);
-struct group_list *get_group_list(struct passwd *pw);
-void set_group_list(const char *, GETGROUPS_T *gids, int ngids);
-struct passwd *sudo_getpwnam(const char *);
-struct passwd *sudo_fakepwnamid(const char *user, uid_t uid, gid_t gid);
-struct passwd *sudo_fakepwnam(const char *, gid_t);
-struct passwd *sudo_getpwuid(uid_t);
-struct group *sudo_getgrnam(const char *);
-struct group *sudo_fakegrnam(const char *);
-struct group *sudo_getgrgid(gid_t);
-void grlist_addref(struct group_list *);
-void grlist_delref(struct group_list *);
-void gr_addref(struct group *);
-void gr_delref(struct group *);
-void pw_addref(struct passwd *);
-void pw_delref(struct passwd *);
-bool user_in_group(struct passwd *, const char *);
+void sudo_grlist_addref(struct group_list *);
+void sudo_grlist_delref(struct group_list *);
+void sudo_pw_addref(struct passwd *);
+void sudo_pw_delref(struct passwd *);
+void sudo_set_grlist(const char *, GETGROUPS_T *gids, int ngids);
+void sudo_setgrent(void);
+void sudo_setpwent(void);
+void sudo_setspent(void);
/* timestr.c */
char *get_timestr(time_t, int);
# Policy and I/O plugin structs
sudoers_policy;
sudoers_io;
+ # Group cache functions for system_group plugin
+ sudo_getgrgid;
+ sudo_getgrnam;
+ sudo_gr_addref;
+ sudo_gr_delref;
local:
*;
};
sudoers_policy
sudoers_io
+sudo_getgrgid
+sudo_getgrnam
+sudo_gr_addref
+sudo_gr_delref
debug_decl(main, SUDO_DEBUG_UTIL)
if (runas_pw != NULL)
- pw_delref(runas_pw);
+ sudo_pw_delref(runas_pw);
if (*user == '#') {
if ((runas_pw = sudo_getpwuid(atoi(user + 1))) == NULL)
runas_pw = sudo_fakepwnam(user, runas_gr ? runas_gr->gr_gid : 0);
debug_decl(main, SUDO_DEBUG_UTIL)
if (runas_gr != NULL)
- gr_delref(runas_gr);
+ sudo_gr_delref(runas_gr);
if (*group == '#') {
if ((runas_gr = sudo_getgrgid(atoi(group + 1))) == NULL)
runas_gr = sudo_fakegrnam(group);
need_setent = true;
}
- handle = dlsym(RTLD_DEFAULT, "gr_delref");
+ handle = dlsym(RTLD_DEFAULT, "sudo_gr_delref");
if (handle != NULL)
sysgroup_gr_delref = (sysgroup_gr_delref_t)handle;