]> git.ipfire.org Git - people/ms/dma.git/blobdiff - dma-mbox-create.c
dns: do not treat unreachable DNS server as permanent error
[people/ms/dma.git] / dma-mbox-create.c
index 26b86d3692d24fb6125fec72021873ddae7aeec4..532a7afbe0b53b43bf23515b4de8deec66ed367e 100644 (file)
@@ -54,7 +54,7 @@
 
 
 static void
-logfail(const char *fmt, ...)
+logfail(int exitcode, const char *fmt, ...)
 {
        int oerrno = errno;
        va_list ap;
@@ -73,7 +73,7 @@ logfail(const char *fmt, ...)
        else
                syslog(LOG_ERR, errno ? "%m" : "unknown error");
 
-       exit(1);
+       exit(exitcode);
 }
 
 /*
@@ -98,21 +98,21 @@ main(int argc, char **argv)
        errno = 0;
        gr = getgrnam(DMA_GROUP);
        if (!gr)
-               logfail("cannot find dma group `%s'", DMA_GROUP);
+               logfail(EX_CONFIG, "cannot find dma group `%s'", DMA_GROUP);
 
        mail_gid = gr->gr_gid;
 
        if (setgid(mail_gid) != 0)
-               logfail("cannot set gid to %d (%s)", mail_gid, DMA_GROUP);
+               logfail(EX_NOPERM, "cannot set gid to %d (%s)", mail_gid, DMA_GROUP);
        if (getegid() != mail_gid)
-               logfail("cannot set gid to %d (%s), still at %d", mail_gid, DMA_GROUP, getegid());
+               logfail(EX_NOPERM, "cannot set gid to %d (%s), still at %d", mail_gid, DMA_GROUP, getegid());
 
        /*
         * We take exactly one argument: the username.
         */
        if (argc != 2) {
                errno = 0;
-               logfail("no arguments");
+               logfail(EX_USAGE, "no arguments");
        }
        user = argv[1];
 
@@ -121,7 +121,7 @@ main(int argc, char **argv)
        /* the username may not contain a pathname separator */
        if (strchr(user, '/')) {
                errno = 0;
-               logfail("path separator in username `%s'", user);
+               logfail(EX_DATAERR, "path separator in username `%s'", user);
                exit(1);
        }
 
@@ -129,7 +129,7 @@ main(int argc, char **argv)
        errno = 0;
        pw = getpwnam(user);
        if (!pw)
-               logfail("cannot find user `%s'", user);
+               logfail(EX_NOUSER, "cannot find user `%s'", user);
 
        user_uid = pw->pw_uid;
 
@@ -137,20 +137,20 @@ main(int argc, char **argv)
        if (error < 0 || (size_t)error >= sizeof(fn)) {
                if (error >= 0) {
                        errno = 0;
-                       logfail("mbox path too long");
+                       logfail(EX_USAGE, "mbox path too long");
                }
-               logfail("cannot build mbox path for `%s/%s'", _PATH_MAILDIR, user);
+               logfail(EX_CANTCREAT, "cannot build mbox path for `%s/%s'", _PATH_MAILDIR, user);
        }
 
        f = open(fn, O_RDONLY|O_CREAT, 0600);
        if (f < 0)
-               logfail("cannot open mbox `%s'", fn);
+               logfail(EX_NOINPUT, "cannt open mbox `%s'", fn);
 
        if (fchown(f, user_uid, mail_gid))
-               logfail("cannot change owner of mbox `%s'", fn);
+               logfail(EX_OSERR, "cannot change owner of mbox `%s'", fn);
 
        if (fchmod(f, 0620))
-               logfail("cannot change permissions of mbox `%s'", fn);
+               logfail(EX_OSERR, "cannot change permissions of mbox `%s'", fn);
 
        /* file should be present with the right owner and permissions */