|
version 1.1.1.4, 2013/07/22 10:46:12
|
version 1.1.1.5, 2014/06/15 16:12:54
|
|
Line 145 sudo_getpwuid(uid_t uid)
|
Line 145 sudo_getpwuid(uid_t uid)
|
| /* item->d.pw = NULL; */ |
/* item->d.pw = NULL; */ |
| } |
} |
| if (rbinsert(pwcache_byuid, item) != NULL) |
if (rbinsert(pwcache_byuid, item) != NULL) |
| fatalx(_("unable to cache uid %u, already exists"), | fatalx(U_("unable to cache uid %u, already exists"), |
| (unsigned int) uid); |
(unsigned int) uid); |
| #ifdef HAVE_SETAUTHDB |
#ifdef HAVE_SETAUTHDB |
| aix_restoreauthdb(); |
aix_restoreauthdb(); |
|
Line 187 sudo_getpwnam(const char *name)
|
Line 187 sudo_getpwnam(const char *name)
|
| /* item->d.pw = NULL; */ |
/* item->d.pw = NULL; */ |
| } |
} |
| if (rbinsert(pwcache_byname, item) != NULL) |
if (rbinsert(pwcache_byname, item) != NULL) |
| fatalx(_("unable to cache user %s, already exists"), name); | fatalx(U_("unable to cache user %s, already exists"), name); |
| #ifdef HAVE_SETAUTHDB |
#ifdef HAVE_SETAUTHDB |
| aix_restoreauthdb(); |
aix_restoreauthdb(); |
| #endif |
#endif |
|
Line 270 sudo_mkpwent(const char *user, uid_t uid, gid_t gid, c
|
Line 270 sudo_mkpwent(const char *user, uid_t uid, gid_t gid, c
|
| struct passwd * |
struct passwd * |
| sudo_fakepwnam(const char *user, gid_t gid) |
sudo_fakepwnam(const char *user, gid_t gid) |
| { |
{ |
| |
const char *errstr; |
| uid_t uid; |
uid_t uid; |
| |
debug_decl(sudo_fakepwnam, SUDO_DEBUG_NSS) |
| |
|
| uid = (uid_t) atoi(user + 1); | uid = (uid_t) atoid(user + 1, NULL, NULL, &errstr); |
| return sudo_mkpwent(user, uid, gid, NULL, NULL); | if (errstr != NULL) { |
| | sudo_debug_printf(SUDO_DEBUG_DEBUG|SUDO_DEBUG_DIAG, |
| | "uid %s %s", user, errstr); |
| | debug_return_ptr(NULL); |
| | } |
| | debug_return_ptr(sudo_mkpwent(user, uid, gid, NULL, NULL)); |
| } |
} |
| |
|
| void |
void |
|
Line 383 sudo_getgrgid(gid_t gid)
|
Line 390 sudo_getgrgid(gid_t gid)
|
| /* item->d.gr = NULL; */ |
/* item->d.gr = NULL; */ |
| } |
} |
| if (rbinsert(grcache_bygid, item) != NULL) |
if (rbinsert(grcache_bygid, item) != NULL) |
| fatalx(_("unable to cache gid %u, already exists"), | fatalx(U_("unable to cache gid %u, already exists"), |
| (unsigned int) gid); |
(unsigned int) gid); |
| done: |
done: |
| item->refcnt++; |
item->refcnt++; |
|
Line 419 sudo_getgrnam(const char *name)
|
Line 426 sudo_getgrnam(const char *name)
|
| /* item->d.gr = NULL; */ |
/* item->d.gr = NULL; */ |
| } |
} |
| if (rbinsert(grcache_byname, item) != NULL) |
if (rbinsert(grcache_byname, item) != NULL) |
| fatalx(_("unable to cache group %s, already exists"), name); | fatalx(U_("unable to cache group %s, already exists"), name); |
| done: |
done: |
| item->refcnt++; |
item->refcnt++; |
| debug_return_ptr(item->d.gr); |
debug_return_ptr(item->d.gr); |
|
Line 432 struct group *
|
Line 439 struct group *
|
| sudo_fakegrnam(const char *group) |
sudo_fakegrnam(const char *group) |
| { |
{ |
| struct cache_item_gr *gritem; |
struct cache_item_gr *gritem; |
| |
const char *errstr; |
| struct group *gr; |
struct group *gr; |
| struct rbnode *node; |
struct rbnode *node; |
| size_t len, name_len; |
size_t len, name_len; |
|
Line 444 sudo_fakegrnam(const char *group)
|
Line 452 sudo_fakegrnam(const char *group)
|
| for (i = 0; i < 2; i++) { |
for (i = 0; i < 2; i++) { |
| gritem = ecalloc(1, len); |
gritem = ecalloc(1, len); |
| gr = &gritem->gr; |
gr = &gritem->gr; |
| gr->gr_gid = (gid_t) atoi(group + 1); | gr->gr_gid = (gid_t) atoid(group + 1, NULL, NULL, &errstr); |
| gr->gr_name = (char *)(gritem + 1); |
gr->gr_name = (char *)(gritem + 1); |
| memcpy(gr->gr_name, group, name_len + 1); |
memcpy(gr->gr_name, group, name_len + 1); |
| |
if (errstr != NULL) { |
| |
sudo_debug_printf(SUDO_DEBUG_DEBUG|SUDO_DEBUG_DIAG, |
| |
"gid %s %s", group, errstr); |
| |
efree(gritem); |
| |
debug_return_ptr(NULL); |
| |
} |
| |
|
| gritem->cache.refcnt = 1; |
gritem->cache.refcnt = 1; |
| gritem->cache.d.gr = gr; |
gritem->cache.d.gr = gr; |
|
Line 549 sudo_endgrent(void)
|
Line 563 sudo_endgrent(void)
|
| } |
} |
| |
|
| struct group_list * |
struct group_list * |
| sudo_get_grlist(struct passwd *pw) | sudo_get_grlist(const struct passwd *pw) |
| { |
{ |
| struct cache_item key, *item; |
struct cache_item key, *item; |
| struct rbnode *node; |
struct rbnode *node; |
|
Line 575 sudo_get_grlist(struct passwd *pw)
|
Line 589 sudo_get_grlist(struct passwd *pw)
|
| /* item->d.grlist = NULL; */ |
/* item->d.grlist = NULL; */ |
| } |
} |
| if (rbinsert(grlist_cache, item) != NULL) |
if (rbinsert(grlist_cache, item) != NULL) |
| fatalx(_("unable to cache group list for %s, already exists"), | fatalx(U_("unable to cache group list for %s, already exists"), |
| pw->pw_name); |
pw->pw_name); |
| done: |
done: |
| item->refcnt++; |
item->refcnt++; |
|
Line 595 sudo_set_grlist(struct passwd *pw, char * const *group
|
Line 609 sudo_set_grlist(struct passwd *pw, char * const *group
|
| key.k.name = pw->pw_name; |
key.k.name = pw->pw_name; |
| if ((node = rbfind(grlist_cache, &key)) == NULL) { |
if ((node = rbfind(grlist_cache, &key)) == NULL) { |
| if ((item = sudo_make_grlist_item(pw, groups, gids)) == NULL) |
if ((item = sudo_make_grlist_item(pw, groups, gids)) == NULL) |
| fatalx(_("unable to parse groups for %s"), pw->pw_name); | fatalx(U_("unable to parse groups for %s"), pw->pw_name); |
| if (rbinsert(grlist_cache, item) != NULL) |
if (rbinsert(grlist_cache, item) != NULL) |
| fatalx(_("unable to cache group list for %s, already exists"), | fatalx(U_("unable to cache group list for %s, already exists"), |
| pw->pw_name); |
pw->pw_name); |
| } |
} |
| debug_return; |
debug_return; |
| } |
} |
| |
|
| bool |
bool |
| user_in_group(struct passwd *pw, const char *group) | user_in_group(const struct passwd *pw, const char *group) |
| { |
{ |
| struct group_list *grlist; |
struct group_list *grlist; |
| struct group *grp = NULL; |
struct group *grp = NULL; |
| |
const char *errstr; |
| int i; |
int i; |
| bool matched = false; |
bool matched = false; |
| debug_decl(user_in_group, SUDO_DEBUG_NSS) |
debug_decl(user_in_group, SUDO_DEBUG_NSS) |
|
Line 617 user_in_group(struct passwd *pw, const char *group)
|
Line 632 user_in_group(struct passwd *pw, const char *group)
|
| * If it could be a sudo-style group ID check gids first. |
* If it could be a sudo-style group ID check gids first. |
| */ |
*/ |
| if (group[0] == '#') { |
if (group[0] == '#') { |
| gid_t gid = atoi(group + 1); | gid_t gid = (gid_t) atoid(group + 1, NULL, NULL, &errstr); |
| if (gid == pw->pw_gid) { | if (errstr != NULL) { |
| matched = true; | sudo_debug_printf(SUDO_DEBUG_DEBUG|SUDO_DEBUG_DIAG, |
| goto done; | "gid %s %s", group, errstr); |
| } | } else { |
| for (i = 0; i < grlist->ngids; i++) { | if (gid == pw->pw_gid) { |
| if (gid == grlist->gids[i]) { | |
| matched = true; |
matched = true; |
| goto done; |
goto done; |
| |
} |
| |
for (i = 0; i < grlist->ngids; i++) { |
| |
if (gid == grlist->gids[i]) { |
| |
matched = true; |
| |
goto done; |
| |
} |
| } |
} |
| } |
} |
| } |
} |