X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/c6269d023dbd4424ff7fb98e8642ea098abd6367..63621a81d16ab743de6b57d47578a9a2c670ad22:/uip/whatnowsbr.c diff --git a/uip/whatnowsbr.c b/uip/whatnowsbr.c index f3a7eb17..72b315f4 100644 --- a/uip/whatnowsbr.c +++ b/uip/whatnowsbr.c @@ -1,6 +1,4 @@ - -/* - * whatnowsbr.c -- the WhatNow shell +/* whatnowsbr.c -- the WhatNow shell * * This code is Copyright (c) 2002, by the authors of nmh. See the * COPYRIGHT file in the root directory of the nmh distribution for @@ -43,10 +41,12 @@ #include #include #include - #ifdef OAUTH_SUPPORT # include #endif +#include "sbr/m_maildir.h" +#include "sbr/m_mktemp.h" +#include "sbr/mime_type.h" #define WHATNOW_SWITCHES \ X("draftfolder +folder", 0, DFOLDSW) \ @@ -57,8 +57,6 @@ X("prompt string", 4, PRMPTSW) \ X("version", 0, VERSIONSW) \ X("help", 0, HELPSW) \ - X("attach header-field-name", -6, ATTACHSW) \ - X("noattach", -8, NOATTACHSW) \ #define X(sw, minchars, id) id, @@ -144,7 +142,7 @@ WhatNow (int argc, char **argv) * Get the initial current working directory. */ - if (getcwd(cwd, sizeof (cwd)) == (char *)0) { + if (getcwd(cwd, sizeof (cwd)) == NULL) { adios("getcwd", "could not get working directory"); } @@ -197,20 +195,11 @@ WhatNow (int argc, char **argv) if (!(myprompt = *argp++) || *myprompt == '-') adios (NULL, "missing argument to %s", argp[-2]); continue; - - case ATTACHSW: - advise(NULL, "The -attach switch is deprecated"); - continue; - - case NOATTACHSW: - advise(NULL, "The -noattach switch is deprecated"); - continue; } } if (drft) adios (NULL, "only one draft at a time!"); - else - drft = cp; + drft = cp; } if ((drft == NULL && (drft = getenv ("mhdraft")) == NULL) || *drft == 0) @@ -250,7 +239,7 @@ WhatNow (int argc, char **argv) if (msgnam) showfile (++argp, msgnam); else - advise (NULL, "no alternate message to display"); + inform("no alternate message to display"); break; case BUILDMIMESW: @@ -284,7 +273,7 @@ WhatNow (int argc, char **argv) removefile (drft); } else { if (stat (drft, &st) != NOTOK) - advise (NULL, "draft left on %s", drft); + inform("draft left on %s", drft); } done (1); @@ -318,20 +307,17 @@ WhatNow (int argc, char **argv) * is accustomed to. Read back the absolute path. */ - if (*(argp+1) == (char *)0) { - (void)sprintf(buf, "$SHELL -c \"cd&&pwd\""); + if (*(argp+1) == NULL) { + strcpy(buf, "$SHELL -c \"cd&&pwd\""); } else { writesomecmd(buf, BUFSIZ, "cd", "pwd", argp); } - if ((f = popen_in_dir(cwd, buf, "r")) != (FILE *)0) { + if ((f = popen_in_dir(cwd, buf, "r")) != NULL) { if (fgets(cwd, sizeof (cwd), f) == NULL) { advise (buf, "fgets"); } - - if (strchr(cwd, '\n') != (char *)0) - *strchr(cwd, '\n') = '\0'; - + trim_suffix_c(cwd, '\n'); pclose(f); } else { @@ -342,7 +328,7 @@ WhatNow (int argc, char **argv) case PWDCMDSW: /* Print the working directory for attachments */ - printf("%s\n", cwd); + puts(cwd); break; case LSCMDSW: @@ -366,10 +352,10 @@ WhatNow (int argc, char **argv) if (checkmimeheader(drft)) break; - l = (char *)0; + l = NULL; n = 0; - while (*++argp != (char *)0) { + while (*++argp != NULL) { if (strcmp(*argp, "-l") == 0) l = "/"; @@ -388,7 +374,7 @@ WhatNow (int argc, char **argv) } if (n == -1) - advise((char *)0, "usage is alist [-ln]."); + inform("usage is alist [-ln]."); else annolist(drft, ATTACH_FIELD, l, n); @@ -415,8 +401,8 @@ WhatNow (int argc, char **argv) } } - if (*(argp+1) == (char *)0) { - advise(NULL, "attach command requires file argument(s)."); + if (*(argp+1) == NULL) { + inform("attach command requires file argument(s)."); break; } @@ -434,11 +420,11 @@ WhatNow (int argc, char **argv) * draft. */ - if ((f = popen_in_dir(cwd, buf, "r")) != (FILE *)0) { - while (fgets(shell, sizeof (shell), f) != (char *)0) { + if ((f = popen_in_dir(cwd, buf, "r")) != NULL) { + while (fgets(shell, sizeof (shell), f) != NULL) { char *ctype; - *(strchr(shell, '\n')) = '\0'; + trim_suffix_c(shell, '\n'); if (*shell == '/') { strncpy(file, shell, sizeof(file)); @@ -476,7 +462,7 @@ WhatNow (int argc, char **argv) if (checkmimeheader(drft)) break; - for (n = 0, arguments = argp + 1; *arguments != (char *)0; arguments++) { + for (n = 0, arguments = argp + 1; *arguments != NULL; arguments++) { if (strcmp(*arguments, "-n") == 0) { n = 1; break; @@ -491,15 +477,15 @@ WhatNow (int argc, char **argv) */ if (n == 1) { - for (arguments = argp + 1; *arguments != (char *)0; arguments++) { + for (arguments = argp + 1; *arguments != NULL; arguments++) { if (strcmp(*arguments, "-n") == 0) continue; if (**arguments != '\0') { n = atoi(*arguments); - annotate(drft, ATTACH_FIELD, (char *)0, 1, 0, n, 1); + annotate(drft, ATTACH_FIELD, NULL, 1, 0, n, 1); - for (argp = arguments + 1; *argp != (char *)0; argp++) { + for (argp = arguments + 1; *argp != NULL; argp++) { if (atoi(*argp) > n) { if (atoi(*argp) == 1) *argp = ""; @@ -521,9 +507,9 @@ WhatNow (int argc, char **argv) * provide a file name with a space in it. */ writelscmd(buf, sizeof(buf), "-d --", argp); - if ((f = popen_in_dir(cwd, buf, "r")) != (FILE *)0) { - while (fgets(shell, sizeof (shell), f) != (char *)0) { - *(strchr(shell, '\n')) = '\0'; + if ((f = popen_in_dir(cwd, buf, "r")) != NULL) { + while (fgets(shell, sizeof (shell), f) != NULL) { + trim_suffix_c(shell, '\n'); annotate(drft, ATTACH_FIELD, shell, 1, 0, 0, 1); } pclose(f); @@ -535,7 +521,7 @@ WhatNow (int argc, char **argv) default: /* Unknown command */ - advise (NULL, "say what?"); + inform("say what?"); break; } } @@ -565,7 +551,7 @@ writesomecmd(char *buf, int bufsz, char *cmd, char *trailcmd, char **argp) */ int trailln = strlen(trailcmd) + 4; if (ln < 0 || ln + trailln > bufsz) - adios((char *)0, "arguments too long"); + adios(NULL, "arguments too long"); cp = buf + ln; @@ -573,7 +559,7 @@ writesomecmd(char *buf, int bufsz, char *cmd, char *trailcmd, char **argp) ln = strlen(*argp); /* +1 for leading space */ if (ln + trailln + 1 > bufsz - (cp-buf)) - adios((char *)0, "arguments too long"); + adios(NULL, "arguments too long"); *cp++ = ' '; memcpy(cp, *argp, ln+1); cp += ln; @@ -721,8 +707,8 @@ editfile (char **ed, char **arg, char *file, int use, struct msgs *mp, } if (altmsg) { if (mp) - m_putenv ("mhfolder", mp->foldpath); - m_putenv ("editalt", altpath); + setenv("mhfolder", mp->foldpath, 1); + setenv("editalt", altpath, 1); } vec = argsplit(*ed, &prog, &vecp); @@ -744,9 +730,9 @@ editfile (char **ed, char **arg, char *file, int use, struct msgs *mp, && (!reedit || (status & 0x00ff))) { if (!use && (status & 0xff00) && (rename (file, cp = m_backup (file)) != NOTOK)) { - advise (NULL, "problems with edit--draft left in %s", cp); + inform("problems with edit--draft left in %s", cp); } else { - advise (NULL, "problems with edit--%s preserved", file); + inform("problems with edit--%s preserved", file); } } status = -2; /* maybe "reedit ? -2 : -1"? */ @@ -815,7 +801,7 @@ static int sendfile (char **arg, char *file, int pushsw) { pid_t child_id; - int i, vecp; + int vecp; char *cp, *sp, **vec, *program; /* @@ -832,11 +818,11 @@ sendfile (char **arg, char *file, int pushsw) context_save (); /* save the context file */ fflush (stdout); - for (i = 0; (child_id = fork()) == NOTOK && i < 5; i++) - sleep (5); + child_id = fork(); switch (child_id) { case NOTOK: - advise (NULL, "unable to fork, so sending directly..."); + inform("unable to fork, so sending directly..."); + /* FALLTHRU */ case OK: vec = argsplit(sendproc, &program, &vecp); if (pushsw) @@ -950,13 +936,12 @@ buildfile (char **argp, char *file) X("saslmech", SASLminc(5), SASLMECHSW) \ X("authservice", SASLminc(0), AUTHSERVICESW) \ X("user username", SASLminc(4), USERSW) \ - X("attach fieldname", 6, SNDATTACHSW) \ - X("noattach", 0, SNDNOATTACHSW) \ - X("attachformat", 7, SNDATTACHFORMAT) \ X("port server-port-name/number", 4, PORTSW) \ X("tls", TLSminc(-3), TLSSW) \ X("initialtls", TLSminc(-10), INITTLSSW) \ X("notls", TLSminc(-5), NTLSSW) \ + X("certverify", TLSminc(-10), CERTVERSW) \ + X("nocertverify", TLSminc(-12), NOCERTVERSW) \ X("sendmail program", 0, MTSSM) \ X("mts smtp|sendmail/smtp|sendmail/pipe", 2, MTSSW) \ X("messageid localname|random", 2, MESSAGEIDSW) \ @@ -1072,7 +1057,7 @@ sendit (char *sp, char **arg, char *file, int pushed) ambigsw (cp, sendswitches); return; case UNKWNSW: - advise (NULL, "-%s unknown\n", cp); + inform("-%s unknown\n", cp); return; case SHELPSW: @@ -1092,7 +1077,7 @@ sendit (char *sp, char **arg, char *file, int pushed) case SPLITSW: if (!(cp = *argp++) || sscanf (cp, "%d", &splitsw) != 1) { - advise (NULL, "missing argument to %s", argp[-2]); + inform("missing argument to %s", argp[-2]); return; } continue; @@ -1120,7 +1105,8 @@ sendit (char *sp, char **arg, char *file, int pushed) continue; case DEBUGSW: - debugsw++; /* fall */ + debugsw++; + /* FALLTHRU */ case NFILTSW: case FRMTSW: case NFRMTSW: @@ -1137,6 +1123,8 @@ sendit (char *sp, char **arg, char *file, int pushed) case TLSSW: case INITTLSSW: case NTLSSW: + case CERTVERSW: + case NOCERTVERSW: vec[vecp++] = --cp; continue; @@ -1158,7 +1146,7 @@ sendit (char *sp, char **arg, char *file, int pushed) case SASLMECHSW: saslmech = *argp; - /* fall thru */ + /* FALLTHRU */ case ALIASW: case FILTSW: case WIDTHSW: @@ -1171,7 +1159,7 @@ sendit (char *sp, char **arg, char *file, int pushed) case MESSAGEIDSW: vec[vecp++] = --cp; if (!(cp = *argp++) || *cp == '-') { - advise (NULL, "missing argument to %s", argp[-2]); + inform("missing argument to %s", argp[-2]); return; } vec[vecp++] = cp; @@ -1181,25 +1169,15 @@ sendit (char *sp, char **arg, char *file, int pushed) case SDRFSW: case SDRMSW: if (!(cp = *argp++) || *cp == '-') { - advise (NULL, "missing argument to %s", argp[-2]); + inform("missing argument to %s", argp[-2]); return; } - case SNDRFSW: - continue; - - case SNDATTACHSW: - advise(NULL, "The -attach switch is deprecated"); - continue; - case SNDNOATTACHSW: - advise(NULL, "The -noattach switch is deprecated"); continue; - - case SNDATTACHFORMAT: - advise(NULL, "The -attachformat switch is deprecated"); + case SNDRFSW: continue; } } - advise (NULL, "usage: %s [switches]", sp); + inform("usage: %s [switches]", sp); return; } @@ -1216,7 +1194,7 @@ sendit (char *sp, char **arg, char *file, int pushed) if ((cp = getenv ("SIGNATURE")) == NULL || *cp == 0) if ((cp = context_find ("signature")) && *cp) - m_putenv ("SIGNATURE", cp); + setenv("SIGNATURE", cp, 1); if ((annotext = getenv ("mhannotate")) == NULL || *annotext == 0) annotext = NULL; @@ -1332,8 +1310,8 @@ static int checkmimeheader (char *drft) { FILE *f; - m_getfld_state_t gstate = 0; - char buf[BUFSIZ], name[NAMESZ]; + m_getfld_state_t gstate; + char buf[NMH_BUFSIZ], name[NAMESZ]; int state, retval = 0; if ((f = fopen(drft, "r")) == NULL) { @@ -1341,13 +1319,14 @@ checkmimeheader (char *drft) return (0); } + gstate = m_getfld_state_init(f); for (;;) { int bufsz = sizeof(buf); - switch (state = m_getfld(&gstate, name, buf, &bufsz, f)) { + switch (state = m_getfld2(&gstate, name, buf, &bufsz)) { case FLD: case FLDPLUS: if (strcasecmp(name, VRSN_FIELD) == 0) { - advise(NULL, "Cannot use attach commands with already-" + inform("Cannot use attach commands with already-" "formatted MIME message \"%s\"", drft); retval = 1; break;