X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=uip%2Fspost.c;h=cc163ac0b2fa672a72350163eb36a3f563bd5eec;hp=262e84db13196030d382bb5edfdb9171dbf57a58;hb=5b792c4424571f05bc2008e3109797d18d7d00d1;hpb=8e5be81f784682822f5e868c1bf3c8624682bd23 diff --git a/uip/spost.c b/uip/spost.c index 262e84d..cc163ac 100644 --- a/uip/spost.c +++ b/uip/spost.c @@ -215,104 +215,110 @@ main(int argc, char **argv) while ((cp = *argp++)) { if (*cp == '-') { switch (smatch(++cp, switches)) { - case AMBIGSW: - ambigsw(cp, switches); - done(1); - case UNKWNSW: - adios(NULL, "-%s unknown", cp); + case AMBIGSW: + ambigsw(cp, switches); + done(1); + case UNKWNSW: + adios(NULL, "-%s unknown", cp); + + case HELPSW: + snprintf(buf, sizeof(buf), + "%s [switches] file", + invo_name); + print_help(buf, switches, 1); + done(1); + case VERSIONSW: + print_version(invo_name); + done(1); + + case DEBUGSW: + debug++; + continue; - case HELPSW: - snprintf(buf, sizeof(buf), "%s [switches] file", invo_name); - print_help(buf, switches, 1); - done(1); - case VERSIONSW: - print_version(invo_name); + case DISTSW: + msgstate = resent; + continue; + + case FILTSW: + if (!(filter = *argp++) || *filter == '-') + adios(NULL, "missing argument to %s", + argp[-2]); + continue; + case NFILTSW: + filter = NULL; + continue; + + case REMVSW: + rmflg++; + continue; + case NREMVSW: + rmflg = 0; + continue; + + case BACKSW: + backflg++; + continue; + case NBACKSW: + backflg = 0; + continue; + + case VERBSW: + verbose++; + continue; + case NVERBSW: + verbose = 0; + continue; + + case WATCSW: + watch++; + continue; + case NWATCSW: + watch = 0; + continue; + + case PUSHSW: + pushflg++; + continue; + case NPUSHSW: + pushflg = 0; + continue; + + case ALIASW: + if (!(cp = *argp++) || *cp == '-') + adios(NULL, "missing argument to %s", + argp[-2]); + aliasflg = 1; + if ((state = alias(cp)) != AK_OK) + adios(NULL, "aliasing error in file %s - %s", cp, akerror(state) ); + continue; + case NALIASW: + aliasflg = 0; + continue; + + case WIDTHSW: + if (!(cp = *argp++) || *cp == '-') + adios(NULL, "missing argument to %s", + argp[-2]); + outputlinelen = atoi(cp); + if (outputlinelen <= 10) + outputlinelen = 72; + continue; + + case LIBSW: + if (!(cp = *argp++) || *cp == '-') + adios(NULL, "missing argument to %s", + argp[-2]); + /* create a minimal context */ + if (context_foil(cp) == -1) done(1); + continue; - case DEBUGSW: - debug++; - continue; - - case DISTSW: - msgstate = resent; - continue; - - case FILTSW: - if (!(filter = *argp++) || - *filter == '-') - adios(NULL, "missing argument to %s", argp[-2]); - continue; - case NFILTSW: - filter = NULL; - continue; - - case REMVSW: - rmflg++; - continue; - case NREMVSW: - rmflg = 0; - continue; - - case BACKSW: - backflg++; - continue; - case NBACKSW: - backflg = 0; - continue; - - case VERBSW: - verbose++; - continue; - case NVERBSW: - verbose = 0; - continue; - - case WATCSW: - watch++; - continue; - case NWATCSW: - watch = 0; - continue; - - case PUSHSW: - pushflg++; - continue; - case NPUSHSW: - pushflg = 0; - continue; - - case ALIASW: - if (!(cp = *argp++) || *cp == '-') - adios(NULL, "missing argument to %s", argp[-2]); - aliasflg = 1; - if ((state = alias(cp)) != AK_OK) - adios(NULL, "aliasing error in file %s - %s", cp, akerror(state) ); - continue; - case NALIASW: - aliasflg = 0; - continue; - - case WIDTHSW: - if (!(cp = *argp++) || *cp == '-') - adios(NULL, "missing argument to %s", argp[-2]); - outputlinelen = atoi(cp); - if (outputlinelen <= 10) - outputlinelen = 72; - continue; - - case LIBSW: - if (!(cp = *argp++) || *cp == '-') - adios(NULL, "missing argument to %s", argp[-2]); - /* create a minimal context */ - if (context_foil(cp) == -1) - done(1); - continue; - - case ANNOSW: - /* -idanno switch ignored */ - if (!(cp = *argp++) || *cp == '-') - adios(NULL, "missing argument to %s", argp[-2]); - continue; + case ANNOSW: + /* -idanno switch ignored */ + if (!(cp = *argp++) || *cp == '-') + adios(NULL, "missing argument to %s", + argp[-2]); + continue; } } if (msg) @@ -348,43 +354,44 @@ main(int argc, char **argv) for (compnum = 1, state = FLD;;) { switch (state = m_getfld(state, name, buf, sizeof(buf), in)) { - case FLD: - compnum++; - putfmt(name, buf, out); - continue; - - case FLDPLUS: - compnum++; + case FLD: + compnum++; + putfmt(name, buf, out); + continue; + + case FLDPLUS: + compnum++; + cp = add(buf, cp); + while (state == FLDPLUS) { + state = m_getfld(state, name, buf, + sizeof(buf), in); cp = add(buf, cp); - while (state == FLDPLUS) { - state = m_getfld(state, name, buf, - sizeof(buf), in); - cp = add(buf, cp); - } - putfmt(name, cp, out); - free(cp); - continue; - - case BODY: - finish_headers(out); - fprintf(out, "\n%s", buf); - while (state == BODY) { - state = m_getfld(state, name, buf, - sizeof(buf), in); - fputs(buf, out); - } - break; + } + putfmt(name, cp, out); + free(cp); + continue; + + case BODY: + finish_headers(out); + fprintf(out, "\n%s", buf); + while (state == BODY) { + state = m_getfld(state, name, buf, + sizeof(buf), in); + fputs(buf, out); + } + break; - case FILEEOF: - finish_headers(out); - break; + case FILEEOF: + finish_headers(out); + break; - case LENERR: - case FMTERR: - adios(NULL, "message format error in component #%d", compnum); + case LENERR: + case FMTERR: + adios(NULL, "message format error in component #%d", + compnum); - default: - adios(NULL, "getfld() returned %d", state); + default: + adios(NULL, "getfld() returned %d", state); } break; } @@ -427,16 +434,16 @@ main(int argc, char **argv) for (i=0; (pid = vfork()) == NOTOK && i < 5; i++) sleep(5); switch (pid) { - case NOTOK: - fprintf(verbose ? stdout : stderr, - "%s: can't fork to %s\n", - invo_name, sendmail); - exit(-1); - case OK: - /* we're the child .. */ - break; - default: - exit(0); + case NOTOK: + fprintf(verbose ? stdout : stderr, + "%s: can't fork to %s\n", + invo_name, sendmail); + exit(-1); + case OK: + /* we're the child .. */ + break; + default: + exit(0); } } execv(sendmail, sargv); @@ -565,63 +572,63 @@ static void finish_headers(FILE *out) { switch (msgstate) { - case normal: - if (!(msgflags & MDAT)) - fprintf(out, "Date: %s\n", dtimenow(0)); + case normal: + if (!(msgflags & MDAT)) + fprintf(out, "Date: %s\n", dtimenow(0)); - if (msgflags & MFRM) { + if (msgflags & MFRM) { + /* + ** There was already a From: in the draft. + ** Don't add one. + */ + if (!draft_from_masquerading) /* - ** There was already a From: in the draft. - ** Don't add one. + ** mts.conf didn't contain + ** "masquerade:[...]draft_from[...]" + ** so we'll reveal the user's + ** actual account@thismachine + ** address in a Sender: header + ** (and use it as the envelope + ** From: later). */ - if (!draft_from_masquerading) - /* - ** mts.conf didn't contain - ** "masquerade:[...]draft_from[...]" - ** so we'll reveal the user's - ** actual account@thismachine - ** address in a Sender: header - ** (and use it as the envelope - ** From: later). - */ - fprintf(out, "Sender: %s\n", from); - } else - fprintf(out, "From: %s\n", signature); + fprintf(out, "Sender: %s\n", from); + } else + fprintf(out, "From: %s\n", signature); #ifdef notdef - if (!(msgflags & MVIS)) - fprintf(out, "Bcc: Blind Distribution List: ;\n"); + if (!(msgflags & MVIS)) + fprintf(out, "Bcc: Blind Distribution List: ;\n"); #endif /* notdef */ - break; + break; - case resent: - if (!(msgflags & MRDT)) - fprintf(out, "Resent-Date: %s\n", dtimenow(0)); - if (msgflags & MRFM) { + case resent: + if (!(msgflags & MRDT)) + fprintf(out, "Resent-Date: %s\n", dtimenow(0)); + if (msgflags & MRFM) { + /* + ** There was already a Resent-From: in draft. + ** Don't add one. + */ + if (!draft_from_masquerading) /* - ** There was already a Resent-From: in draft. - ** Don't add one. + ** mts.conf didn't contain + ** "masquerade:[...]draft_from[...]" + ** so we'll reveal the user's + ** actual account@thismachine + ** address in a Sender: header + ** (and use it as the envelope + ** From: later). */ - if (!draft_from_masquerading) - /* - ** mts.conf didn't contain - ** "masquerade:[...]draft_from[...]" - ** so we'll reveal the user's - ** actual account@thismachine - ** address in a Sender: header - ** (and use it as the envelope - ** From: later). - */ - fprintf(out, "Resent-Sender: %s\n", - from); - } else - /* Construct a Resent-From: header. */ - fprintf(out, "Resent-From: %s\n", signature); + fprintf(out, "Resent-Sender: %s\n", + from); + } else + /* Construct a Resent-From: header. */ + fprintf(out, "Resent-From: %s\n", signature); #ifdef notdef - if (!(msgflags & MVIS)) - fprintf(out, "Resent-Bcc: Blind Re-Distribution List: ;\n"); + if (!(msgflags & MVIS)) + fprintf(out, "Resent-Bcc: Blind Re-Distribution List: ;\n"); #endif /* notdef */ - break; + break; } if (badmsg) @@ -793,27 +800,27 @@ make_bcc_file(void) for (i = 0; (child_id = vfork()) == NOTOK && i < 5; i++) sleep(5); switch (child_id) { - case NOTOK: - adios("vfork", "unable to"); - - case OK: - dup2(fileno(out), 1); - - i = 1; - vec[i++] = "-forward"; - vec[i++] = "-form"; - vec[i++] = filter; - vec[i++] = tmpfil; - vec[i] = NULL; - - execvp(mhlproc, vec); - adios(mhlproc, "unable to exec"); - - default: - if (status = pidwait(child_id, OK)) - admonish(NULL, "%s lost (status=0%o)", - vec[0], status); - break; + case NOTOK: + adios("vfork", "unable to"); + + case OK: + dup2(fileno(out), 1); + + i = 1; + vec[i++] = "-forward"; + vec[i++] = "-form"; + vec[i++] = filter; + vec[i++] = tmpfil; + vec[i] = NULL; + + execvp(mhlproc, vec); + adios(mhlproc, "unable to exec"); + + default: + if (status = pidwait(child_id, OK)) + admonish(NULL, "%s lost (status=0%o)", + vec[0], status); + break; } } @@ -853,31 +860,29 @@ fcc(char *file, char *folder) for (i = 0; (child_id = vfork()) == NOTOK && i < 5; i++) sleep(5); switch (child_id) { - case NOTOK: + case NOTOK: + if (!verbose) + fprintf(stderr, " %sFcc %s: ", msgstate == resent ? + "Resent-" : "", folder); + fprintf(verbose ? stdout : stderr, "no forks, so not ok\n"); + break; + + case OK: + snprintf(fold, sizeof(fold), "%s%s", + *folder == '+' || *folder == '@' ? "" : "+", folder); + execlp(fileproc, mhbasename(fileproc), + "-link", "-file", file, fold, NULL); + _exit(-1); + + default: + if ((status = pidwait(child_id, OK))) { if (!verbose) fprintf(stderr, " %sFcc %s: ", msgstate == resent ? "Resent-" : "", folder); - fprintf(verbose ? stdout : stderr, "no forks, so not ok\n"); - break; - - case OK: - snprintf(fold, sizeof(fold), "%s%s", - *folder == '+' || *folder == '@' ? "" : "+", folder); - execlp(fileproc, mhbasename(fileproc), - "-link", "-file", file, fold, NULL); - _exit(-1); - - default: - if ((status = pidwait(child_id, OK))) { - if (!verbose) - fprintf(stderr, " %sFcc %s: ", - msgstate == resent ? - "Resent-" : "", - folder); - fprintf(verbose ? stdout : stderr, - " errored (0%o)\n", status); - } + fprintf(verbose ? stdout : stderr, " errored (0%o)\n", + status); + } } fflush(stdout);