tech-userlevel archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: mail.local NSS awareness
Manuel Bouyer <bouyer%antioche.eu.org@localhost> wrote:
> A better patch may be to use getpwnam_r(), which explicitely
> "return 0 on success or entry not found, and non-zero on failure".
Something like this, then?
diff -U 4 -r1.23 mail.local.c
--- mail.local.c 27 Sep 2006 17:15:20 -0000 1.23
+++ mail.local.c 30 Apr 2008 02:53:27 -0000
@@ -56,8 +56,9 @@
#include <string.h>
#include <syslog.h>
#include <time.h>
#include <unistd.h>
+#include <sysexits.h>
#include "pathnames.h"
#define FATAL 1
@@ -180,21 +181,33 @@
char *name;
int lockfile;
{
struct stat sb;
- struct passwd *pw;
+ struct passwd pwres, *pw;
+ char pwbuf[1024];
int created, mbfd, nr, nw, off, rval=0, lfd=-1;
char biffmsg[100], buf[8*1024], path[MAXPATHLEN],
lpath[MAXPATHLEN];
off_t curoff;
/*
* Disallow delivery to unknown names -- special mailboxes can
be
* handled in the sendmail aliases file.
*/
- if (!(pw = getpwnam(name))) {
- err(NOTFATAL, "unknown name: %s", name);
- return(1);
+ if ((getpwnam_r(name, &pwres, pwbuf, sizeof(pwbuf), &pw)) != 0)
{
+ switch (errno) {
+ case EAGAIN:
+ case ETIMEDOUT:
+ err(EX_TEMPFAIL, "unknown name: %s", name);
+ break;
+ default:
+ err(EX_UNAVAILABLE, "unknown name: %s", name);
+ break;
+ }
+ /* NOTREACHED */
+ return(1);
}
+ if (pw == NULL)
+ err(EX_OK, "unknown name: %s", name);
(void)snprintf(path, sizeof path, "%s/%s", _PATH_MAILDIR, name);
if (lockfile) {
--
Emmanuel Dreyfus
http://hcpnet.free.fr/pubz
manu%netbsd.org@localhost
Home |
Main Index |
Thread Index |
Old Index