X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/4e3c586d24d33c0d0f6b1f16a84cf9b1a08076d7..b4f2851d:/uip/whatnowsbr.c?ds=inline diff --git a/uip/whatnowsbr.c b/uip/whatnowsbr.c index 712ea7bb..85ba4b90 100644 --- a/uip/whatnowsbr.c +++ b/uip/whatnowsbr.c @@ -40,7 +40,6 @@ #include #include -#include #include #include @@ -82,7 +81,7 @@ DEFINE_SWITCH_ARRAY(WHATNOW, whatnowswitches); X("pwd", 0, PWDCMDSW) \ X("ls", 2, LSCMDSW) \ X("attach", 0, ATTACHCMDSW) \ - X("detach [-n]", 2, DETACHCMDSW) \ + X("detach [-n]", 0, DETACHCMDSW) \ X("alist [-ln] ", 2, ALISTCMDSW) \ #define X(sw, minchars, id) id, @@ -110,11 +109,7 @@ static void writelscmd(char *, int, char *, char **); static void writesomecmd(char *buf, int bufsz, char *cmd, char *trailcmd, char **argp); static FILE* popen_in_dir(const char *dir, const char *cmd, const char *type); static int system_in_dir(const char *dir, const char *cmd); - - -#ifdef HAVE_LSTAT static int copyf (char *, char *); -#endif int @@ -417,7 +412,7 @@ WhatNow (int argc, char **argv) * Build a command line that causes the user's shell to list the file name * arguments. This handles and wildcard expansion, tilde expansion, etc. */ - writelscmd(buf, sizeof(buf), "-d", argp); + writelscmd(buf, sizeof(buf), "-d --", argp); /* * Read back the response from the shell, which contains a number of lines @@ -506,7 +501,7 @@ WhatNow (int argc, char **argv) * We feed all the file names to the shell at once, otherwise you can't * provide a file name with a space in it. */ - writelscmd(buf, sizeof(buf), "-d", argp); + 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'; @@ -552,10 +547,10 @@ 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"); - + cp = buf + ln; - - while (*++argp != (char *)0) { + + while (*argp && *++argp) { ln = strlen(*argp); /* +1 for leading space */ if (ln + trailln + 1 > bufsz - (cp-buf)) @@ -580,7 +575,7 @@ writesomecmd(char *buf, int bufsz, char *cmd, char *trailcmd, char **argp) static void writelscmd(char *buf, int bufsz, char *lsoptions, char **argp) { - char *lscmd = concat ("ls ", lsoptions, " --", NULL); + char *lscmd = concat ("ls ", lsoptions, NULL); writesomecmd(buf, bufsz, lscmd, "", argp); free (lscmd); } @@ -618,7 +613,7 @@ popen_in_dir(const char *dir, const char *cmd, const char *type) /* ensure that $SHELL exists, as the cmd was written relying on a non-blank $SHELL... */ setenv("SHELL","/bin/sh",0); /* don't overwrite */ - + if (getcwd(olddir, sizeof(olddir)) == 0) adios("getcwd", "could not get working directory"); if (chdir(dir) != 0) @@ -647,9 +642,7 @@ editfile (char **ed, char **arg, char *file, int use, struct msgs *mp, char *cp, *prog, **vec; struct stat st; -#ifdef HAVE_LSTAT int slinked = 0; -#endif /* HAVE_LSTAT */ /* Was there a previous edit session? */ if (reedit) { @@ -681,16 +674,12 @@ editfile (char **ed, char **arg, char *file, int use, struct msgs *mp, if (atfile) { unlink (linkpath); -#ifdef HAVE_LSTAT if (link (altpath, linkpath) == NOTOK) { symlink (altpath, linkpath); slinked = 1; } else { slinked = 0; } -#else /* not HAVE_LSTAT */ - link (altpath, linkpath); -#endif /* not HAVE_LSTAT */ } } @@ -741,7 +730,6 @@ editfile (char **ed, char **arg, char *file, int use, struct msgs *mp, } reedit++; -#ifdef HAVE_LSTAT if (altmsg && mp && !is_readonly(mp) @@ -754,16 +742,6 @@ editfile (char **ed, char **arg, char *file, int use, struct msgs *mp, && (unlink (altpath) == NOTOK || link (linkpath, altpath) == NOTOK))) advise (linkpath, "unable to update %s from", altmsg); -#else /* HAVE_LSTAT */ - if (altmsg - && mp - && !is_readonly(mp) - && stat (linkpath, &st) != NOTOK - && st.st_nlink == 1 - && (unlink (altpath) == NOTOK - || link (linkpath, altpath) == NOTOK)) - advise (linkpath, "unable to update %s from", altmsg); -#endif /* HAVE_LSTAT */ } /* normally, we remember which editor we used */ @@ -778,7 +756,6 @@ editfile (char **ed, char **arg, char *file, int use, struct msgs *mp, } -#ifdef HAVE_LSTAT static int copyf (char *ifile, char *ofile) { @@ -804,7 +781,6 @@ copyf (char *ifile, char *ofile) close (out); return i; } -#endif /* HAVE_LSTAT */ /* @@ -816,7 +792,7 @@ sendfile (char **arg, char *file, int pushsw) { pid_t child_id; int i, vecp; - char *cp, *sp, *vec[MAXARGS]; + char *cp, *sp, **vec, *program; /* Translate MIME composition file, if necessary */ if ((cp = context_find ("automimeproc")) @@ -851,8 +827,7 @@ sendfile (char **arg, char *file, int pushsw) case NOTOK: advise (NULL, "unable to fork, so sending directly..."); case OK: - vecp = 0; - vec[vecp++] = invo_name; + vec = argsplit(sendproc, &program, &vecp); if (pushsw) vec[vecp++] = "-push"; if (arg) @@ -861,7 +836,7 @@ sendfile (char **arg, char *file, int pushsw) vec[vecp++] = file; vec[vecp] = NULL; - execvp (sendproc, vec); + execvp (program, vec); fprintf (stderr, "unable to exec "); perror (sendproc); _exit (-1); @@ -1013,10 +988,6 @@ check_draft (char *msgnam) X("help", 0, SHELPSW) \ X("dashstuffing", -12, BITSTUFFSW) \ X("nodashstuffing", -14, NBITSTUFFSW) \ - X("mail", -4, MAILSW) \ - X("saml", -4, SAMLSW) \ - X("send", -4, SSNDSW) \ - X("soml", -4, SOMLSW) \ X("client host", -6, CLIESW) \ X("server host", 6, SERVSW) \ X("snoop", -5, SNOOPSW) \ @@ -1028,11 +999,12 @@ check_draft (char *msgnam) X("saslmaxssf", SASLminc(-10), SASLMXSSFSW) \ X("saslmech", SASLminc(-5), SASLMECHSW) \ X("user", SASLminc(-4), USERSW) \ - X("attach file", 6, SNDATTACHSW) \ + 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("mts smtp|sendmail/smtp|sendmail/pipe", 2, MTSSW) \ X("messageid localname|random", 2, MESSAGEIDSW) \ @@ -1126,13 +1098,19 @@ sendit (char *sp, char **arg, char *file, int pushed) vec[vecp++] = getcpy (m_maildir ("")); if ((cp = context_find ("fileproc"))) { - vec[vecp++] = "-fileproc"; - vec[vecp++] = cp; + vec[vecp++] = "-fileproc"; + vec[vecp++] = cp; } if ((cp = context_find ("mhlproc"))) { - vec[vecp++] = "-mhlproc"; - vec[vecp++] = cp; + vec[vecp++] = "-mhlproc"; + vec[vecp++] = cp; + } + + if ((cp = context_find ("credentials"))) { + /* post doesn't read context so need to pass credentials. */ + vec[vecp++] = "-credentials"; + vec[vecp++] = cp; } while ((cp = *argp++)) { @@ -1202,14 +1180,11 @@ sendit (char *sp, char **arg, char *file, int pushed) case NMSGDSW: case WATCSW: case NWATCSW: - case MAILSW: - case SAMLSW: - case SSNDSW: - case SOMLSW: case SNOOPSW: case SASLSW: case NOSASLSW: case TLSSW: + case INITTLSSW: case NTLSSW: vec[vecp++] = --cp; continue; @@ -1332,7 +1307,7 @@ whomfile (char **arg, char *file) { pid_t pid; int vecp; - char *vec[MAXARGS]; + char **vec, *program; context_save (); /* save the context file */ fflush (stdout); @@ -1343,15 +1318,14 @@ whomfile (char **arg, char *file) return 1; case OK: - vecp = 0; - vec[vecp++] = r1bindex (whomproc, '/'); + vec = argsplit(whomproc, &program, &vecp); vec[vecp++] = file; if (arg) while (*arg) vec[vecp++] = *arg++; vec[vecp] = NULL; - execvp (whomproc, vec); + execvp (program, vec); fprintf (stderr, "unable to exec "); perror (whomproc); _exit (-1); /* NOTREACHED */