diff options
author | Eric Andersen <andersen@codepoet.org> | 2001-03-08 16:45:24 +0000 |
---|---|---|
committer | Eric Andersen <andersen@codepoet.org> | 2001-03-08 16:45:24 +0000 |
commit | 791312e7259153e1235f14a9a9e5cc6055ce8dfc (patch) | |
tree | 81f07808e6af9d42e92a4bba911b3b425f589516 /libc/pwd_grp/getpwuid.c | |
parent | bfb8f8f6ea438e632e808868c44af2bff196cc18 (diff) |
Reworked the password stuff to be reentrant. Group stuff is
still needing to be reworked.
-Erik
Diffstat (limited to 'libc/pwd_grp/getpwuid.c')
-rw-r--r-- | libc/pwd_grp/getpwuid.c | 30 |
1 files changed, 23 insertions, 7 deletions
diff --git a/libc/pwd_grp/getpwuid.c b/libc/pwd_grp/getpwuid.c index 1cd0d691c..307f840e1 100644 --- a/libc/pwd_grp/getpwuid.c +++ b/libc/pwd_grp/getpwuid.c @@ -23,20 +23,36 @@ #include <fcntl.h> #include <pwd.h> -struct passwd *getpwuid(uid_t uid) + +#define PWD_BUFFER_SIZE 256 + +/* file descriptor for the password file currently open */ +static char line_buff[PWD_BUFFER_SIZE]; +static struct passwd pwd; + +int getpwuid_r (uid_t uid, struct passwd *password, + char *buff, size_t buflen, struct passwd **crap) { int passwd_fd; - struct passwd *passwd; if ((passwd_fd = open("/etc/passwd", O_RDONLY)) < 0) - return NULL; + return -1; - while ((passwd = __getpwent(passwd_fd)) != NULL) - if (passwd->pw_uid == uid) { + while (__getpwent_r(password, buff, buflen, passwd_fd) != -1) + if (password->pw_uid == uid) { close(passwd_fd); - return passwd; + return 0; } close(passwd_fd); - return NULL; + return -1; } + +struct passwd *getpwuid(uid_t uid) +{ + if (getpwuid_r(uid, &pwd, line_buff, PWD_BUFFER_SIZE, NULL) != -1) { + return &pwd; + } + return NULL; +} + |