]> git.ipfire.org Git - people/ms/dma.git/blobdiff - mail.c
Merge pull request #34 from mtremer/better-authentication
[people/ms/dma.git] / mail.c
diff --git a/mail.c b/mail.c
index e0a22af19c8d55a57a21711525a4158aa506a2ad..a6d11fcae685a9dd1440fd4782de4a5628826cee 100644 (file)
--- a/mail.c
+++ b/mail.c
@@ -1,8 +1,9 @@
 /*
+ * Copyright (c) 2008-2014, Simon Schubert <2@0x2c.org>.
  * Copyright (c) 2008 The DragonFly Project.  All rights reserved.
  *
  * This code is derived from software contributed to The DragonFly Project
- * by Simon 'corecode' Schubert <corecode@fs.ei.tum.de>.
+ * by Simon Schubert <2@0x2c.org>.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -51,13 +52,13 @@ bounce(struct qitem *it, const char *reason)
        /* Don't bounce bounced mails */
        if (it->sender[0] == 0) {
                syslog(LOG_INFO, "can not bounce a bounce message, discarding");
-               exit(1);
+               exit(EX_SOFTWARE);
        }
 
        bzero(&bounceq, sizeof(bounceq));
        LIST_INIT(&bounceq.queue);
        bounceq.sender = "";
-       if (add_recp(&bounceq, it->sender, 1) != 0)
+       if (add_recp(&bounceq, it->sender, EXPAND_WILDCARD) != 0)
                goto fail;
 
        if (newspoolf(&bounceq) != 0)
@@ -69,7 +70,7 @@ bounce(struct qitem *it, const char *reason)
        error = fprintf(bounceq.mailf,
                "Received: from MAILER-DAEMON\n"
                "\tid %s\n"
-               "\tby %s (%s)\n"
+               "\tby %s (%s);\n"
                "\t%s\n"
                "X-Original-To: <%s>\n"
                "From: MAILER-DAEMON <>\n"
@@ -132,7 +133,7 @@ bounce(struct qitem *it, const char *reason)
 fail:
        syslog(LOG_CRIT, "error creating bounce: %m");
        delqueue(it);
-       exit(1);
+       exit(EX_IOERR);
 }
 
 struct parse_state {
@@ -332,10 +333,10 @@ newaddr:
        ps->pos = 0;
        addr = strdup(ps->addr);
        if (addr == NULL)
-               errlog(1, NULL);
+               errlog(EX_SOFTWARE, NULL);
 
-       if (add_recp(queue, addr, 1) != 0)
-               errlogx(1, "invalid recipient `%s'", addr);
+       if (add_recp(queue, addr, EXPAND_WILDCARD) != 0)
+               errlogx(EX_DATAERR, "invalid recipient `%s'", addr);
 
        goto again;
 }
@@ -360,7 +361,7 @@ readmail(struct queue *queue, int nodot, int recp_from_header)
                "Received: from %s (uid %d)\n"
                "\t(envelope-from %s)\n"
                "\tid %s\n"
-               "\tby %s (%s)\n"
+               "\tby %s (%s);\n"
                "\t%s\n",
                username, useruid,
                queue->sender,
@@ -374,7 +375,9 @@ readmail(struct queue *queue, int nodot, int recp_from_header)
                if (fgets(line, sizeof(line) - 1, stdin) == NULL)
                        break;
                if (had_last_line)
-                       errlogx(1, "bad mail input format");
+                       errlogx(EX_DATAERR, "bad mail input format:"
+                               " from %s (uid %d) (envelope-from %s)",
+                               username, useruid, queue->sender);
                linelen = strlen(line);
                if (linelen == 0 || line[linelen - 1] != '\n') {
                        /*
@@ -405,7 +408,7 @@ readmail(struct queue *queue, int nodot, int recp_from_header)
 
                        if (parse_state.state != NONE) {
                                if (parse_addrs(&parse_state, line, queue) < 0) {
-                                       errlogx(1, "invalid address in header\n");
+                                       errlogx(EX_DATAERR, "invalid address in header\n");
                                        /* NOTREACHED */
                                }
                        }
@@ -416,7 +419,7 @@ readmail(struct queue *queue, int nodot, int recp_from_header)
                                        strprefixcmp(line, "Bcc:") == 0)) {
                                parse_state.state = START;
                                if (parse_addrs(&parse_state, line, queue) < 0) {
-                                       errlogx(1, "invalid address in header\n");
+                                       errlogx(EX_DATAERR, "invalid address in header\n");
                                        /* NOTREACHED */
                                }
                        }