Mercurial > dovecot > original-hg > dovecot-1.2
changeset 8830:d6acde4e9fe0 HEAD
auth: Improved getpwnam() and getgrnam() error handling.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Fri, 13 Mar 2009 18:36:50 -0400 |
parents | f67a966f2792 |
children | 116ca52dfcb5 |
files | src/auth/main.c |
diffstat | 1 files changed, 19 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/src/auth/main.c Fri Mar 13 18:05:10 2009 -0400 +++ b/src/auth/main.c Fri Mar 13 18:36:50 2009 -0400 @@ -80,8 +80,19 @@ if (is_numeric(user, '\0')) return strtoul(user, NULL, 10); - if ((pw = getpwnam(user)) == NULL) + errno = 0; + if ((pw = getpwnam(user)) == NULL) { + if (errno != 0) + i_fatal("User '%s' lookup failed: %m", user); + setpwent(); + if (getpwent() == NULL) { + if (errno != 0) + i_fatal("getpwent() failed: %m"); + i_fatal("getpwnam() failed for some reason. " + "Is auth_process_size set to too low?"); + } i_fatal("User doesn't exist: %s", user); + } return pw->pw_uid; } @@ -94,8 +105,13 @@ if (is_numeric(group, '\0')) return strtoul(group, NULL, 10); - if ((gr = getgrnam(group)) == NULL) - i_fatal("Group doesn't exist: %s", group); + errno = 0; + if ((gr = getgrnam(group)) == NULL) { + if (errno != 0) + i_fatal("Group '%s' lookup failed: %m", group); + else + i_fatal("Group doesn't exist: %s", group); + } return gr->gr_gid; }