X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/220dcd2dda3136cefd20951e34e963f37f8e2132..ffe0615cdabdb2fd43c9cae6aaaf99a8831c2c10:/uip/send.c diff --git a/uip/send.c b/uip/send.c index 9d634ed1..1bfd0608 100644 --- a/uip/send.c +++ b/uip/send.c @@ -25,107 +25,78 @@ # define TLSminc(a) 0 #endif /* TLS_SUPPORT */ -static struct swit switches[] = { -#define ALIASW 0 - { "alias aliasfile", 0 }, -#define DEBUGSW 1 - { "debug", -5 }, -#define DRAFTSW 2 - { "draft", 0 }, -#define DFOLDSW 3 - { "draftfolder +folder", 6 }, -#define DMSGSW 4 - { "draftmessage msg", 6 }, -#define NDFLDSW 5 - { "nodraftfolder", 0 }, -#define FILTSW 6 - { "filter filterfile", 0 }, -#define NFILTSW 7 - { "nofilter", 0 }, -#define FRMTSW 8 - { "format", 0 }, -#define NFRMTSW 9 - { "noformat", 0 }, -#define FORWSW 10 - { "forward", 0 }, -#define NFORWSW 11 - { "noforward", 0 }, -#define MIMESW 12 - { "mime", 0 }, -#define NMIMESW 13 - { "nomime", 0 }, -#define MSGDSW 14 - { "msgid", 0 }, -#define NMSGDSW 15 - { "nomsgid", 0 }, -#define PUSHSW 16 - { "push", 0 }, -#define NPUSHSW 17 - { "nopush", 0 }, -#define SPLITSW 18 - { "split seconds", 0 }, -#define UNIQSW 19 - { "unique", -6 }, -#define NUNIQSW 20 - { "nounique", -8 }, -#define VERBSW 21 - { "verbose", 0 }, -#define NVERBSW 22 - { "noverbose", 0 }, -#define WATCSW 23 - { "watch", 0 }, -#define NWATCSW 24 - { "nowatch", 0 }, -#define WIDTHSW 25 - { "width columns", 0 }, -#define VERSIONSW 26 - { "version", 0 }, -#define HELPSW 27 - { "help", 0 }, -#define BITSTUFFSW 28 - { "dashstuffing", -12 }, -#define NBITSTUFFSW 29 - { "nodashstuffing", -14 }, -#define MAILSW 30 - { "mail", -4 }, -#define SAMLSW 31 - { "saml", -4 }, -#define SENDSW 32 - { "send", -4 }, -#define SOMLSW 33 - { "soml", -4 }, -#define CLIESW 34 - { "client host", -6 }, -#define SERVSW 35 - { "server host", 6 }, -#define SNOOPSW 36 - { "snoop", 5 }, -#define SASLSW 37 - { "sasl", SASLminc(4) }, -#define SASLMECHSW 38 - { "saslmech mechanism", SASLminc(-5) }, -#define USERSW 39 - { "user username", SASLminc(-4) }, -#define ATTACHSW 40 - { "attach", 6 }, -#define ATTACHFORMATSW 41 - { "attachformat", 7 }, -#define PORTSW 42 - { "port server-port-name/number" , 4 }, -#define TLSSW 43 - { "tls", TLSminc(-3) }, - { NULL, 0 } -}; - -static struct swit anyl[] = { -#define NOSW 0 - { "no", 0 }, -#define YESW 1 - { "yes", 0 }, -#define LISTDSW 2 - { "list", 0 }, - { NULL, 0 } -}; +#define SEND_SWITCHES \ + X("alias aliasfile", 0, ALIASW) \ + X("debug", -5, DEBUGSW) \ + X("draft", 0, DRAFTSW) \ + X("draftfolder +folder", 6, DFOLDSW) \ + X("draftmessage msg", 6, DMSGSW) \ + X("nodraftfolder", 0, NDFLDSW) \ + X("filter filterfile", 0, FILTSW) \ + X("nofilter", 0, NFILTSW) \ + X("format", 0, FRMTSW) \ + X("noformat", 0, NFRMTSW) \ + X("forward", 0, FORWSW) \ + X("noforward", 0, NFORWSW) \ + X("mime", 0, MIMESW) \ + X("nomime", 0, NMIMESW) \ + X("msgid", 0, MSGDSW) \ + X("nomsgid", 0, NMSGDSW) \ + X("push", 0, PUSHSW) \ + X("nopush", 0, NPUSHSW) \ + X("split seconds", 0, SPLITSW) \ + X("unique", -6, UNIQSW) \ + X("nounique", -8, NUNIQSW) \ + X("verbose", 0, VERBSW) \ + X("noverbose", 0, NVERBSW) \ + X("watch", 0, WATCSW) \ + X("nowatch", 0, NWATCSW) \ + X("width columns", 0, WIDTHSW) \ + X("version", 0, VERSIONSW) \ + X("help", 0, HELPSW) \ + X("dashstuffing", -12, BITSTUFFSW) \ + X("nodashstuffing", -14, NBITSTUFFSW) \ + X("mail", -4, MAILSW) \ + X("saml", -4, SAMLSW) \ + X("send", -4, SENDSW) \ + X("soml", -4, SOMLSW) \ + X("client host", -6, CLIESW) \ + X("server host", 6, SERVSW) \ + X("snoop", 5, SNOOPSW) \ + X("sasl", SASLminc(4), SASLSW) \ + X("nosasl", SASLminc(-6), NOSASLSW) \ + X("saslmaxssf", SASLminc(-10), SASLMXSSFSW) \ + X("saslmech mechanism", SASLminc(-5), SASLMECHSW) \ + X("user username", SASLminc(-4), USERSW) \ + X("attach", 6, ATTACHSW) \ + X("noattach", 0, NOATTACHSW) \ + X("attachformat", 7, ATTACHFORMATSW) \ + X("port server-port-name/number", 4, PORTSW) \ + X("tls", TLSminc(-3), TLSSW) \ + X("notls", TLSminc(-5), NTLSSW) \ + X("mts smtp|sendmail/smtp|sendmail/pipe", 2, MTSSW) \ + X("messageid localname|random", 2, MESSAGEIDSW) \ + +#define X(sw, minchars, id) id, +DEFINE_SWITCH_ENUM(SEND); +#undef X + +#define X(sw, minchars, id) { sw, minchars, id }, +DEFINE_SWITCH_ARRAY(SEND, switches); +#undef X + +#define USE_SWITCHES \ + X("no", 0, NOSW) \ + X("yes", 0, YESW) \ + X("list", 0, LISTDSW) \ + +#define X(sw, minchars, id) id, +DEFINE_SWITCH_ENUM(USE); +#undef X + +#define X(sw, minchars, id) { sw, minchars, id }, +DEFINE_SWITCH_ARRAY(USE, anyl); +#undef X extern int debugsw; /* from sendsbr.c */ extern int forwsw; @@ -151,11 +122,8 @@ main (int argc, char **argv) char *msgs[MAXARGS], *vec[MAXARGS]; struct msgs *mp; struct stat st; - char *attach = (char *)0; /* header field name for attachments */ - int attachformat = 0; /* mhbuild format specifier for attachments */ -#ifdef UCI - FILE *fp; -#endif /* UCI */ + char *attach = NMH_ATTACH_HEADER; /* header field name for attachments */ + int attachformat = 1; /* mhbuild format specifier for attachments */ #ifdef LOCALE setlocale(LC_ALL, ""); @@ -193,10 +161,10 @@ main (int argc, char **argv) case HELPSW: snprintf (buf, sizeof(buf), "%s [file] [switches]", invo_name); print_help (buf, switches, 1); - done (1); + done (0); case VERSIONSW: print_version(invo_name); - done (1); + done (0); case DRAFTSW: msgs[msgp++] = draft; @@ -281,7 +249,9 @@ main (int argc, char **argv) case SOMLSW: case SNOOPSW: case SASLSW: + case NOSASLSW: case TLSSW: + case NTLSSW: vec[vecp++] = --cp; continue; @@ -291,8 +261,11 @@ main (int argc, char **argv) case CLIESW: case SERVSW: case SASLMECHSW: + case SASLMXSSFSW: case USERSW: case PORTSW: + case MTSSW: + case MESSAGEIDSW: vec[vecp++] = --cp; if (!(cp = *argp++) || *cp == '-') adios (NULL, "missing argument to %s", argp[-2]); @@ -303,6 +276,9 @@ main (int argc, char **argv) if (!(attach = *argp++) || *attach == '-') adios (NULL, "missing argument to %s", argp[-2]); continue; + case NOATTACHSW: + attach = NULL; + continue; case ATTACHFORMATSW: if (! *argp || **argp == '-') @@ -411,18 +387,6 @@ go_to_it: if ((cp = getenv ("SIGNATURE")) == NULL || *cp == 0) if ((cp = context_find ("signature")) && *cp) m_putenv ("SIGNATURE", cp); -#ifdef UCI - else { - snprintf (buf, sizeof(buf), "%s/.signature", mypath); - if ((fp = fopen (buf, "r")) != NULL - && fgets (buf, sizeof buf, fp) != NULL) { - fclose (fp); - if (cp = strchr (buf, '\n')) - *cp = 0; - m_putenv ("SIGNATURE", buf); - } - } -#endif /* UCI */ for (msgnum = 0; msgnum < msgp; msgnum++) if (stat (msgs[msgnum], &st) == NOTOK) @@ -441,8 +405,10 @@ go_to_it: && altmsg) { vec[vecp++] = "-dist"; distfile = getcpy (m_mktemp2 (altmsg, invo_name, NULL, NULL)); + unlink(distfile); if (link (altmsg, distfile) == NOTOK) { - if (errno != EXDEV + /* Cygwin with FAT32 filesystem produces EPERM. */ + if (errno != EXDEV && errno != EPERM #ifdef EISREMOTE && errno != EISREMOTE #endif /* EISREMOTE */