diff options
author | Alan Jenkins <alan-jenkins@tuffmail.co.uk> | 2008-10-22 15:13:08 +0100 |
---|---|---|
committer | Kay Sievers <kay.sievers@vrfy.org> | 2008-10-22 18:05:46 +0200 |
commit | aaff3d023f89522f56f7cd345b6849e1251a6a74 (patch) | |
tree | a7fb1b471b7beaf69049e46842e0f2ea4546a393 /udev | |
parent | 14f4025607e905cb230c6e5b32488e9f2d07a0d2 (diff) |
use re-entrant variants of getpwnam and getgrnam
Signed-off-by: Alan Jenkins <alan-jenkins@tuffmail.co.uk>
Diffstat (limited to 'udev')
-rw-r--r-- | udev/udev-util.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/udev/udev-util.c b/udev/udev-util.c index 3c2e2a5089..76d7270f66 100644 --- a/udev/udev-util.c +++ b/udev/udev-util.c @@ -126,13 +126,16 @@ int util_unlink_secure(struct udev *udev, const char *filename) uid_t util_lookup_user(struct udev *udev, const char *user) { + int buflen = sysconf(_SC_GETPW_R_SIZE_MAX); + char buf[buflen]; + struct passwd pwbuf; struct passwd *pw; uid_t uid = 0; if (strcmp(user, "root") == 0) return 0; errno = 0; - pw = getpwnam(user); + getpwnam_r(user, &pwbuf, buf, buflen, &pw); if (pw == NULL) { if (errno == 0 || errno == ENOENT || errno == ESRCH) err(udev, "specified user '%s' unknown\n", user); @@ -140,18 +143,22 @@ uid_t util_lookup_user(struct udev *udev, const char *user) err(udev, "error resolving user '%s': %m\n", user); } else uid = pw->pw_uid; + return uid; } extern gid_t util_lookup_group(struct udev *udev, const char *group) { + int buflen = sysconf(_SC_GETGR_R_SIZE_MAX); + char buf[buflen]; + struct group grbuf; struct group *gr; gid_t gid = 0; if (strcmp(group, "root") == 0) return 0; errno = 0; - gr = getgrnam(group); + getgrnam_r(group, &grbuf, buf, buflen, &gr); if (gr == NULL) { if (errno == 0 || errno == ENOENT || errno == ESRCH) err(udev, "specified group '%s' unknown\n", group); |