dma: add recipient parsing from headers
[dragonfly.git] / libexec / dma / dma.c
index 61abe22..a77fb8c 100644 (file)
@@ -350,6 +350,7 @@ main(int argc, char **argv)
        struct queue queue;
        int i, ch;
        int nodot = 0, doqueue = 0, showq = 0, queue_only = 0;
+       int recp_from_header = 0;
 
        atexit(deltmp);
 
@@ -365,7 +366,7 @@ main(int argc, char **argv)
        }
 
        opterr = 0;
-       while ((ch = getopt(argc, argv, ":A:b:B:C:d:Df:F:h:iL:N:no:O:q:r:R:UV:vX:")) != -1) {
+       while ((ch = getopt(argc, argv, ":A:b:B:C:d:Df:F:h:iL:N:no:O:q:r:R:tUV:vX:")) != -1) {
                switch (ch) {
                case 'A':
                        /* -AX is being ignored, except for -A{c,m} */
@@ -394,6 +395,10 @@ main(int argc, char **argv)
                        sender = optarg;
                        break;
 
+               case 't':
+                       recp_from_header = 1;
+                       break;
+
                case 'o':
                        /* -oX is being ignored, except for -oi */
                        if (optarg[0] != 'i')
@@ -491,22 +496,25 @@ skipopts:
        if ((sender = set_from(&queue, sender)) == NULL)
                errlog(1, NULL);
 
+       if (newspoolf(&queue) != 0)
+               errlog(1, "can not create temp file");
+
+       setlogident("%s", queue.id);
+
        for (i = 0; i < argc; i++) {
                if (add_recp(&queue, argv[i], 1) != 0)
                        errlogx(1, "invalid recipient `%s'", argv[i]);
        }
 
-       if (LIST_EMPTY(&queue.queue))
+       if (LIST_EMPTY(&queue.queue) && !recp_from_header)
                errlogx(1, "no recipients");
 
-       if (newspoolf(&queue) != 0)
-               errlog(1, "can not create temp file");
-
-       setlogident("%s", queue.id);
-
-       if (readmail(&queue, nodot) != 0)
+       if (readmail(&queue, nodot, recp_from_header) != 0)
                errlog(1, "can not read mail");
 
+       if (LIST_EMPTY(&queue.queue))
+               errlogx(1, "no recipients");
+
        if (linkspool(&queue) != 0)
                errlog(1, "can not create spools");