summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Andersen <andersen@codepoet.org>2003-06-27 10:43:43 +0000
committerEric Andersen <andersen@codepoet.org>2003-06-27 10:43:43 +0000
commit017c8132edae466e2892faec7ef6b834dfecbd34 (patch)
tree692c913a40337653fbcf9425e1551f2314ffc55b
parent2e55dec21f3310e6868689fc1f4c4074ea3a35bb (diff)
Yet more cleanup for the reentrant pwd/grp functions so they
should now actually be doing the right thing
-rw-r--r--libc/pwd_grp/fgetpwent.c11
-rw-r--r--libc/pwd_grp/fgetspent.c11
-rw-r--r--libc/pwd_grp/getpwnam.c6
-rw-r--r--libc/pwd_grp/getpwuid.c7
-rw-r--r--libc/pwd_grp/getspnam.c7
-rw-r--r--libc/pwd_grp/getspuid.c8
-rw-r--r--libc/pwd_grp/pwent.c7
-rw-r--r--libc/pwd_grp/sgetspent.c11
-rw-r--r--libc/pwd_grp/spent.c7
9 files changed, 55 insertions, 20 deletions
diff --git a/libc/pwd_grp/fgetpwent.c b/libc/pwd_grp/fgetpwent.c
index 8917c29d0..174629fcb 100644
--- a/libc/pwd_grp/fgetpwent.c
+++ b/libc/pwd_grp/fgetpwent.c
@@ -34,12 +34,16 @@ static pthread_mutex_t mylock = PTHREAD_MUTEX_INITIALIZER;
#endif
int fgetpwent_r (FILE *file, struct passwd *password,
- char *buff, size_t buflen, struct passwd **crap)
+ char *buff, size_t buflen, struct passwd **result)
{
+ int res;
if (file == NULL) {
return EINTR;
}
- return(__getpwent_r(password, buff, buflen, fileno(file)));
+ *result = NULL;
+ res = __getpwent_r(password, buff, buflen, fileno(file));
+ *result = password;
+ return res;
}
struct passwd *fgetpwent(FILE * file)
@@ -47,9 +51,10 @@ struct passwd *fgetpwent(FILE * file)
int ret;
static char line_buff[PWD_BUFFER_SIZE];
static struct passwd pwd;
+ struct passwd *result;
LOCK;
- if ((ret=fgetpwent_r(file, &pwd, line_buff, sizeof(line_buff), NULL)) == 0) {
+ if ((ret=fgetpwent_r(file, &pwd, line_buff, sizeof(line_buff), &result)) == 0) {
UNLOCK;
return &pwd;
}
diff --git a/libc/pwd_grp/fgetspent.c b/libc/pwd_grp/fgetspent.c
index 79594ecea..2ecf3a174 100644
--- a/libc/pwd_grp/fgetspent.c
+++ b/libc/pwd_grp/fgetspent.c
@@ -33,12 +33,16 @@ static pthread_mutex_t mylock = PTHREAD_MUTEX_INITIALIZER;
#endif
int fgetspent_r (FILE *file, struct spwd *spwd,
- char *buff, size_t buflen, struct spwd **crap)
+ char *buff, size_t buflen, struct spwd **result)
{
+ int res;
if (file == NULL) {
return EINTR;
}
- return(__getspent_r(spwd, buff, buflen, fileno(file)));
+ *result = NULL;
+ res = __getspent_r(spwd, buff, buflen, fileno(file));
+ *result = spwd;
+ return res;
}
struct spwd *fgetspent(FILE * file)
@@ -46,9 +50,10 @@ struct spwd *fgetspent(FILE * file)
int ret;
static char line_buff[PWD_BUFFER_SIZE];
static struct spwd spwd;
+ struct spwd *result;
LOCK;
- if ((ret=fgetspent_r(file, &spwd, line_buff, sizeof(line_buff), NULL)) == 0) {
+ if ((ret=fgetspent_r(file, &spwd, line_buff, sizeof(line_buff), &result)) == 0) {
UNLOCK;
return &spwd;
}
diff --git a/libc/pwd_grp/getpwnam.c b/libc/pwd_grp/getpwnam.c
index 6f041e2d8..7e81fa081 100644
--- a/libc/pwd_grp/getpwnam.c
+++ b/libc/pwd_grp/getpwnam.c
@@ -42,6 +42,8 @@ int getpwnam_r (const char *name, struct passwd *password,
int ret;
int passwd_fd;
+ *result = NULL;
+
if (name == NULL) {
return EINVAL;
}
@@ -54,6 +56,7 @@ int getpwnam_r (const char *name, struct passwd *password,
if (!strcmp(password->pw_name, name)) {
*result=password;
close(passwd_fd);
+ *result = password;
return 0;
}
}
@@ -66,7 +69,8 @@ struct passwd *getpwnam(const char *name)
{
int ret;
static char line_buff[PWD_BUFFER_SIZE];
- static struct passwd pwd, *result;
+ static struct passwd pwd;
+ struct passwd *result;
LOCK;
if ((ret=getpwnam_r(name, &pwd, line_buff, sizeof(line_buff), &result)) == 0) {
diff --git a/libc/pwd_grp/getpwuid.c b/libc/pwd_grp/getpwuid.c
index c54df0977..4a85aa289 100644
--- a/libc/pwd_grp/getpwuid.c
+++ b/libc/pwd_grp/getpwuid.c
@@ -37,16 +37,18 @@ static pthread_mutex_t mylock = PTHREAD_MUTEX_INITIALIZER;
#endif
int getpwuid_r (uid_t uid, struct passwd *password,
- char *buff, size_t buflen, struct passwd **crap)
+ char *buff, size_t buflen, struct passwd **result)
{
int passwd_fd;
if ((passwd_fd = open(_PATH_PASSWD, O_RDONLY)) < 0)
return errno;
+ *result = NULL;
while (__getpwent_r(password, buff, buflen, passwd_fd) == 0)
if (password->pw_uid == uid) {
close(passwd_fd);
+ *result = password;
return 0;
}
@@ -60,9 +62,10 @@ struct passwd *getpwuid(uid_t uid)
/* file descriptor for the password file currently open */
static char line_buff[PWD_BUFFER_SIZE];
static struct passwd pwd;
+ struct passwd *result;
LOCK;
- if ((ret=getpwuid_r(uid, &pwd, line_buff, sizeof(line_buff), NULL)) == 0) {
+ if ((ret=getpwuid_r(uid, &pwd, line_buff, sizeof(line_buff), &result)) == 0) {
UNLOCK;
return &pwd;
}
diff --git a/libc/pwd_grp/getspnam.c b/libc/pwd_grp/getspnam.c
index 6f3d3a128..f0a4155bf 100644
--- a/libc/pwd_grp/getspnam.c
+++ b/libc/pwd_grp/getspnam.c
@@ -35,7 +35,7 @@ static pthread_mutex_t mylock = PTHREAD_MUTEX_INITIALIZER;
#endif
int getspnam_r (const char *name, struct spwd *spwd,
- char *buff, size_t buflen, struct spwd **crap)
+ char *buff, size_t buflen, struct spwd **result)
{
int spwd_fd;
@@ -46,9 +46,11 @@ int getspnam_r (const char *name, struct spwd *spwd,
if ((spwd_fd = open(_PATH_SHADOW, O_RDONLY)) < 0)
return errno;
+ *result = NULL;
while (__getspent_r(spwd, buff, buflen, spwd_fd) == 0)
if (!strcmp(spwd->sp_namp, name)) {
close(spwd_fd);
+ *result = spwd;
return 0;
}
@@ -61,9 +63,10 @@ struct spwd *getspnam(const char *name)
int ret;
static char line_buff[PWD_BUFFER_SIZE];
static struct spwd spwd;
+ struct spwd *result;
LOCK;
- if ((ret=getspnam_r(name, &spwd, line_buff, sizeof(line_buff), NULL)) == 0) {
+ if ((ret=getspnam_r(name, &spwd, line_buff, sizeof(line_buff), &result)) == 0) {
UNLOCK;
return &spwd;
}
diff --git a/libc/pwd_grp/getspuid.c b/libc/pwd_grp/getspuid.c
index 3fa7fb5a1..b25fddb49 100644
--- a/libc/pwd_grp/getspuid.c
+++ b/libc/pwd_grp/getspuid.c
@@ -41,11 +41,14 @@ int getspuid_r (uid_t uid, struct spwd *spwd,
char pwd_buff[PWD_BUFFER_SIZE];
struct passwd password;
+ *result = NULL;
ret = getpwuid_r(uid, &password, pwd_buff, sizeof(pwd_buff), NULL);
if (ret != 0)
return ret;
- return getspnam_r(password.pw_name, spwd, buff, buflen, result);
+ ret = getspnam_r(password.pw_name, spwd, buff, buflen, result);
+ *result = spwd;
+ return ret;
}
struct spwd *getspuid(uid_t uid)
@@ -53,9 +56,10 @@ struct spwd *getspuid(uid_t uid)
int ret;
static char line_buff[PWD_BUFFER_SIZE];
static struct spwd spwd;
+ struct spwd *result;
LOCK;
- if ((ret=getspuid_r(uid, &spwd, line_buff, sizeof(line_buff), NULL)) == 0) {
+ if ((ret=getspuid_r(uid, &spwd, line_buff, sizeof(line_buff), &result)) == 0) {
UNLOCK;
return &spwd;
}
diff --git a/libc/pwd_grp/pwent.c b/libc/pwd_grp/pwent.c
index f70a6e378..51d2fba96 100644
--- a/libc/pwd_grp/pwent.c
+++ b/libc/pwd_grp/pwent.c
@@ -65,12 +65,14 @@ void endpwent(void)
}
int getpwent_r (struct passwd *password, char *buff,
- size_t buflen, struct passwd **crap)
+ size_t buflen, struct passwd **result)
{
int ret;
LOCK;
+ *result = NULL;
if (pw_fd != -1 && (ret=__getpwent_r(password, buff, buflen, pw_fd)) == 0) {
UNLOCK;
+ *result = password;
return 0;
}
UNLOCK;
@@ -83,8 +85,9 @@ struct passwd *getpwent(void)
int ret;
static char line_buff[PWD_BUFFER_SIZE];
static struct passwd pwd;
+ struct passwd *result;
- if ((ret=getpwent_r(&pwd, line_buff, sizeof(line_buff), NULL)) == 0) {
+ if ((ret=getpwent_r(&pwd, line_buff, sizeof(line_buff), &result)) == 0) {
return &pwd;
}
__set_errno(ret);
diff --git a/libc/pwd_grp/sgetspent.c b/libc/pwd_grp/sgetspent.c
index 5f018b9f1..d2e2ca71a 100644
--- a/libc/pwd_grp/sgetspent.c
+++ b/libc/pwd_grp/sgetspent.c
@@ -33,9 +33,13 @@ static pthread_mutex_t mylock = PTHREAD_MUTEX_INITIALIZER;
#endif
int sgetspent_r (const char *string, struct spwd *spwd,
- char *buff, size_t buflen, struct spwd **crap)
+ char *buff, size_t buflen, struct spwd **result)
{
- return(__sgetspent_r(string, spwd, buff, buflen));
+ int ret;
+ *result = NULL;
+ ret = __sgetspent_r(string, spwd, buff, buflen);
+ *result = spwd;
+ return ret;
}
struct spwd *sgetspent(const char *string)
@@ -43,9 +47,10 @@ struct spwd *sgetspent(const char *string)
int ret;
static char line_buff[PWD_BUFFER_SIZE];
static struct spwd spwd;
+ struct spwd *result;
LOCK;
- if ((ret = sgetspent_r(string, &spwd, line_buff, sizeof(line_buff), NULL)) == 0) {
+ if ((ret = sgetspent_r(string, &spwd, line_buff, sizeof(line_buff), &result)) == 0) {
UNLOCK;
return &spwd;
}
diff --git a/libc/pwd_grp/spent.c b/libc/pwd_grp/spent.c
index b281072f4..734854b24 100644
--- a/libc/pwd_grp/spent.c
+++ b/libc/pwd_grp/spent.c
@@ -62,12 +62,14 @@ void endspent(void)
}
int getspent_r (struct spwd *spwd, char *buff,
- size_t buflen, struct spwd **crap)
+ size_t buflen, struct spwd **result)
{
int ret;
LOCK;
+ *result = NULL;
if (spwd_fd != -1 && (ret=__getspent_r(spwd, buff, buflen, spwd_fd)) == 0) {
UNLOCK;
+ *result = spwd;
return 0;
}
UNLOCK;
@@ -79,9 +81,10 @@ struct spwd *getspent(void)
int ret;
static char line_buff[PWD_BUFFER_SIZE];
static struct spwd spwd;
+ struct spwd *result;
LOCK;
- if ((ret=getspent_r(&spwd, line_buff, sizeof(line_buff), NULL)) == 0) {
+ if ((ret=getspent_r(&spwd, line_buff, sizeof(line_buff), &result)) == 0) {
UNLOCK;
return &spwd;
}