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; |
|
} |
} |
} |
} |
} |
} |
} |