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))
/* 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)
{
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"))
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)
vec[vecp++] = file;
vec[vecp] = NULL;
- execvp (sendproc, vec);
+ execvp (program, vec);
fprintf (stderr, "unable to exec ");
perror (sendproc);
_exit (-1);
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) \
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) \
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;
{
pid_t pid;
int vecp;
- char *vec[MAXARGS];
+ char **vec, *program;
context_save (); /* save the context file */
fflush (stdout);
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 */