diff options
Diffstat (limited to 'src/passwd')
-rw-r--r-- | src/passwd/getgrouplist.c | 3 | ||||
-rw-r--r-- | src/passwd/nscd_query.c | 10 | ||||
-rw-r--r-- | src/passwd/putgrent.c | 2 | ||||
-rw-r--r-- | src/passwd/putpwent.c | 2 |
4 files changed, 13 insertions, 4 deletions
diff --git a/src/passwd/getgrouplist.c b/src/passwd/getgrouplist.c index 43e51824..301824ce 100644 --- a/src/passwd/getgrouplist.c +++ b/src/passwd/getgrouplist.c @@ -31,7 +31,8 @@ int getgrouplist(const char *user, gid_t gid, gid_t *groups, int *ngroups) if (resp[INITGRFOUND]) { nscdbuf = calloc(resp[INITGRNGRPS], sizeof(uint32_t)); if (!nscdbuf) goto cleanup; - if (!fread(nscdbuf, sizeof(*nscdbuf)*resp[INITGRNGRPS], 1, f)) { + size_t nbytes = sizeof(*nscdbuf)*resp[INITGRNGRPS]; + if (nbytes && !fread(nscdbuf, nbytes, 1, f)) { if (!ferror(f)) errno = EIO; goto cleanup; } diff --git a/src/passwd/nscd_query.c b/src/passwd/nscd_query.c index d38e371b..dc3406b8 100644 --- a/src/passwd/nscd_query.c +++ b/src/passwd/nscd_query.c @@ -40,7 +40,15 @@ retry: buf[0] = NSCDVERSION; fd = socket(PF_UNIX, SOCK_STREAM | SOCK_CLOEXEC, 0); - if (fd < 0) return NULL; + if (fd < 0) { + if (errno == EAFNOSUPPORT) { + f = fopen("/dev/null", "re"); + if (f) + errno = errno_save; + return f; + } + return 0; + } if(!(f = fdopen(fd, "r"))) { close(fd); diff --git a/src/passwd/putgrent.c b/src/passwd/putgrent.c index a0b320fc..2a8257dc 100644 --- a/src/passwd/putgrent.c +++ b/src/passwd/putgrent.c @@ -7,7 +7,7 @@ int putgrent(const struct group *gr, FILE *f) int r; size_t i; flockfile(f); - if ((r = fprintf(f, "%s:%s:%d:", gr->gr_name, gr->gr_passwd, gr->gr_gid))<0) goto done; + if ((r = fprintf(f, "%s:%s:%u:", gr->gr_name, gr->gr_passwd, gr->gr_gid))<0) goto done; if (gr->gr_mem) for (i=0; gr->gr_mem[i]; i++) if ((r = fprintf(f, "%s%s", i?",":"", gr->gr_mem[i]))<0) goto done; r = fputc('\n', f); diff --git a/src/passwd/putpwent.c b/src/passwd/putpwent.c index 3a02e573..312b7653 100644 --- a/src/passwd/putpwent.c +++ b/src/passwd/putpwent.c @@ -4,7 +4,7 @@ int putpwent(const struct passwd *pw, FILE *f) { - return fprintf(f, "%s:%s:%d:%d:%s:%s:%s\n", + return fprintf(f, "%s:%s:%u:%u:%s:%s:%s\n", pw->pw_name, pw->pw_passwd, pw->pw_uid, pw->pw_gid, pw->pw_gecos, pw->pw_dir, pw->pw_shell)<0 ? -1 : 0; } |