]> granicus.if.org Git - sudo/commitdiff
Export group cache from sudoers.so for system_group.so to use.
authorTodd C. Miller <Todd.Miller@courtesan.com>
Wed, 13 Jun 2012 20:21:45 +0000 (16:21 -0400)
committerTodd C. Miller <Todd.Miller@courtesan.com>
Wed, 13 Jun 2012 20:21:45 +0000 (16:21 -0400)
13 files changed:
plugins/sudoers/check.c
plugins/sudoers/iolog.c
plugins/sudoers/iolog_path.c
plugins/sudoers/ldap.c
plugins/sudoers/match.c
plugins/sudoers/pwutil.c
plugins/sudoers/set_perms.c
plugins/sudoers/sudoers.c
plugins/sudoers/sudoers.h
plugins/sudoers/sudoers.map
plugins/sudoers/sudoers.sym
plugins/sudoers/testsudoers.c
plugins/system_group/system_group.c

index 0d6be01892861d8e7d9d0eee8a83b103a537e223..61ed21f1ffa4e833faee84e84df4d4c6b3ba7fba 100644 (file)
@@ -172,7 +172,7 @@ check_user(int validated, int mode)
 
 done:
     sudo_auth_cleanup(auth_pw);
-    pw_delref(auth_pw);
+    sudo_pw_delref(auth_pw);
 
     debug_return_bool(rval);
 }
@@ -751,10 +751,10 @@ get_authpw(void)
        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;
     }
 
index 22096efcf09e2da864d2c7d0582b962505dcdaf8..1782d4f549c1151ce94c49c463d91c025a9aaec6 100644 (file)
@@ -565,10 +565,10 @@ sudoers_io_open(unsigned int version, sudo_conv_t conversation,
 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);
index 964068009f23c4e8aab19e08631812f36e828223..154705d491da0df628a28ffc69e6563d9e47b88b 100644 (file)
@@ -102,7 +102,7 @@ fill_group(char *str, size_t strsize)
 
     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",
@@ -130,7 +130,7 @@ fill_runas_group(char *str, size_t strsize)
     } 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",
index d4ee6f51165d2df77664760f206e60c6027af8dd..a2055390aebadaafd1163e6d5a3c31615e7a5646 100644 (file)
@@ -1126,7 +1126,7 @@ sudo_ldap_build_pass1(struct passwd *pw)
        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;
@@ -1193,9 +1193,9 @@ sudo_ldap_build_pass1(struct passwd *pw)
 
     /* 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)
index f0c5dc1ad80a02c6bbf4d3cf6644c49d6462b52b..bfb59ae4e069ae1484bda4f5dfe69179ad3351de 100644 (file)
@@ -700,7 +700,7 @@ usergr_matches(char *group, char *user, struct passwd *pw)
 
 done:
     if (pw0 != NULL)
-       pw_delref(pw0);
+       sudo_pw_delref(pw0);
 
     debug_return_bool(matched);
 }
index e18c6b0f777ac81713a874134910aeb50e435c78..b887199bcee600de34e82ca90e1318d87172dd37 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * 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
@@ -224,18 +224,18 @@ make_pwitem(const struct passwd *pw, const char *name)
 }
 
 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);
@@ -244,10 +244,10 @@ pw_delref_item(void *v)
 }
 
 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;
 }
 
@@ -378,14 +378,14 @@ sudo_fakepwnamid(const char *user, uid_t uid, gid_t gid)
            /* 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;
            }
        }
@@ -426,11 +426,11 @@ sudo_freepwcache(void)
     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;
     }
 
@@ -598,13 +598,13 @@ again:
            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;
@@ -617,18 +617,18 @@ again:
 }
 
 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);
@@ -637,10 +637,10 @@ gr_delref_item(void *v)
 }
 
 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;
 }
 
@@ -748,14 +748,14 @@ sudo_fakegrnam(const char *group)
            /* 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;
            }
        }
@@ -765,18 +765,18 @@ sudo_fakegrnam(const char *group)
 }
 
 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);
@@ -785,10 +785,10 @@ grlist_delref_item(void *v)
 }
 
 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;
 }
 
@@ -814,15 +814,15 @@ sudo_freegrcache(void)
     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;
     }
 
@@ -841,14 +841,14 @@ sudo_endgrent(void)
 }
 
 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) {
@@ -897,11 +897,11 @@ done:
 }
 
 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
@@ -926,7 +926,7 @@ user_in_group(struct passwd *pw, const char *group)
     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.
         */
@@ -964,8 +964,8 @@ user_in_group(struct passwd *pw, const char *group)
        }
 done:
        if (grp != NULL)
-           gr_delref(grp);
-       grlist_delref(grlist);
+           sudo_gr_delref(grp);
+       sudo_grlist_delref(grlist);
     }
     debug_return_bool(matched);
 }
index e2ae5122f5b45c64b13120ccd33a2747d5568551..be665dae326791cafc4aa45858d1b07caa49ea17 100644 (file)
@@ -91,7 +91,7 @@ rewind_perms(void)
 
     while (perm_stack_depth > 1)
        restore_perms();
-    grlist_delref(perm_stack[0].grlist);
+    sudo_grlist_delref(perm_stack[0].grlist);
 
     debug_return;
 }
@@ -157,7 +157,7 @@ set_perms(int perm)
        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,
@@ -182,7 +182,7 @@ set_perms(int perm)
        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:
@@ -199,7 +199,7 @@ set_perms(int perm)
            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));
@@ -236,7 +236,7 @@ set_perms(int perm)
            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));
@@ -286,7 +286,7 @@ set_perms(int perm)
 
     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;
@@ -326,7 +326,7 @@ set_perms(int perm)
 
     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;
@@ -403,7 +403,7 @@ restore_perms(void)
            goto bad;
        }
     }
-    grlist_delref(state->grlist);
+    sudo_grlist_delref(state->grlist);
     debug_return;
 
 bad:
@@ -458,7 +458,7 @@ set_perms(int perm)
        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,
@@ -484,7 +484,7 @@ set_perms(int perm)
        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:
@@ -501,7 +501,7 @@ set_perms(int perm)
            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));
@@ -546,7 +546,7 @@ set_perms(int perm)
            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));
@@ -596,7 +596,7 @@ set_perms(int perm)
 
     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;
@@ -645,7 +645,7 @@ set_perms(int perm)
 
     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;
@@ -795,7 +795,7 @@ restore_perms(void)
            goto bad;
        }
     }
-    grlist_delref(state->grlist);
+    sudo_grlist_delref(state->grlist);
     debug_return;
 
 bad:
@@ -848,7 +848,7 @@ set_perms(int perm)
        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,
@@ -881,7 +881,7 @@ set_perms(int perm)
        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:
@@ -896,7 +896,7 @@ set_perms(int perm)
            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));
@@ -928,7 +928,7 @@ set_perms(int perm)
            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));
@@ -971,7 +971,7 @@ set_perms(int perm)
 
     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;
@@ -1006,7 +1006,7 @@ set_perms(int perm)
 
     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;
@@ -1082,7 +1082,7 @@ restore_perms(void)
            goto bad;
        }
     }
-    grlist_delref(state->grlist);
+    sudo_grlist_delref(state->grlist);
     debug_return;
 
 bad:
@@ -1150,7 +1150,7 @@ set_perms(int perm)
        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,
@@ -1167,7 +1167,7 @@ set_perms(int perm)
        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:
@@ -1182,7 +1182,7 @@ set_perms(int perm)
            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));
@@ -1214,7 +1214,7 @@ set_perms(int perm)
            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));
@@ -1257,7 +1257,7 @@ set_perms(int perm)
 
     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;
@@ -1292,7 +1292,7 @@ set_perms(int perm)
 
     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;
@@ -1367,7 +1367,7 @@ restore_perms(void)
        warning("seteuid(%d)", ostate->euid);
        goto bad;
     }
-    grlist_delref(state->grlist);
+    sudo_grlist_delref(state->grlist);
     debug_return;
 
 bad:
@@ -1414,7 +1414,7 @@ set_perms(int perm)
        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;
@@ -1423,7 +1423,7 @@ set_perms(int perm)
        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)) {
@@ -1438,7 +1438,7 @@ set_perms(int perm)
            "[%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));
@@ -1463,7 +1463,7 @@ set_perms(int perm)
        state->ruid = ostate->ruid;
        state->rgid = ostate->rgid;
        state->grlist = ostate->grlist;
-       grlist_addref(state->grlist);
+       sudo_grlist_addref(state->grlist);
        break;
     }
 
@@ -1505,7 +1505,7 @@ restore_perms(void)
            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;
@@ -1526,7 +1526,7 @@ runas_setgroups(void)
     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);
     }
 
@@ -1534,7 +1534,7 @@ runas_setgroups(void)
 #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
index 5b700f4380719ba578516bdd2a13c8ff60beb202..02aaf97c078ca75495b83513cafed94b1de9094e 100644 (file)
@@ -268,12 +268,12 @@ sudoers_policy_close(int exit_status, int error_code)
        (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;
 }
@@ -417,7 +417,7 @@ sudoers_policy_main(int argc, char * const argv[], int pwflag, char *env_add[],
            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);
@@ -466,7 +466,7 @@ sudoers_policy_main(int argc, char * const argv[], int pwflag, char *env_add[],
 
            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;
            }
        }
@@ -664,7 +664,7 @@ sudoers_policy_main(int argc, char * const argv[], int pwflag, char *env_add[],
        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 +
@@ -690,7 +690,7 @@ sudoers_policy_main(int argc, char * const argv[], int pwflag, char *env_add[],
            }
        }
        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);
@@ -800,7 +800,7 @@ sudoers_policy_list(int argc, char * const argv[], int verbose,
     }
     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;
     }
 
@@ -865,7 +865,7 @@ init_vars(char * const envp[])
      * 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;
@@ -1116,7 +1116,7 @@ set_runaspw(const char *user)
     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);
@@ -1137,7 +1137,7 @@ set_runasgr(const char *group)
     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);
@@ -1430,7 +1430,7 @@ deserialize_info(char * const args[], char * const settings[], char * const user
                break;
            cp++; /* skip over comma */
        }
-       set_group_list(user_name, gids, ngids);
+       sudo_set_grlist(user_name, gids, ngids);
        efree(gids);
     }
 
index 7f753efefcc1dd84811144c8db8d76d7f976b3f6..420742d0b10a3cb4a3f7794b7c5f72f631eac77a 100644 (file)
@@ -263,28 +263,28 @@ void display_privs(struct sudo_nss_list *, struct passwd *);
 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);
index ae0ca503c23b67f94e82678443851a2c9d5884bb..d690555893766299ae5edeef0b46754bd630677d 100644 (file)
@@ -3,6 +3,11 @@ sudoers.so {
                # 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:
                *;
 };
index 7f7469453c97aaab08a7950054774fe2ff3db253..d52ef1ef4b4db7f4406c04083767f13126f9fdc9 100644 (file)
@@ -1,2 +1,6 @@
 sudoers_policy
 sudoers_io
+sudo_getgrgid
+sudo_getgrnam
+sudo_gr_addref
+sudo_gr_delref
index a3a1814a15e768e3d4ea129be88aab1f9bb1ae26..f71eb83492219dae565ed73ccce883a22c9b29a2 100644 (file)
@@ -360,7 +360,7 @@ set_runaspw(const char *user)
     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);
@@ -378,7 +378,7 @@ set_runasgr(const char *group)
     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);
index f4343f07057d23917d4dbfc8289a3bf41260d36f..b015d39f1e8070251fc1c4328d18294216220542 100644 (file)
@@ -114,7 +114,7 @@ sysgroup_init(int version, sudo_printf_t sudo_printf, char *const argv[])
        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;