Thanks to Jerry Peek and Richard Doty for pointing out that I needed
to add the new command line switches to whatnowsbr.c too
So, here's another version. The new switches now seem to get picked
up and acted upon everywhere I've tried.
Martin
*** mts/sendmail/smail.c.FCS Thu Feb 15 10:29:32 1996
--- mts/sendmail/smail.c Thu Feb 15 18:51:28 1996
***************
*** 58,63 ****
--- 58,64 ----
#define NOTOK (-1)
#define OK 0
#define DONE 1
+ #define NULLCP ((char *) 0)
#define TRUE 1
#define FALSE 0
***************
*** 446,455 ****
/* */
! int sm_winit (mode, from)
register int mode;
! register char *from;
{
#ifdef MPOP
if (sm_ispool && !sm_wfp) {
(void) strlen (strcpy (sm_reply.text,
--- 447,460 ----
/* */
! int sm_winit (mode, from, ret, envid)
register int mode;
! register char *from, *ret, *envid;
{
+ char tmpstr[BUFSIZ];
+
+ tmpstr[0] = '\0';
+
#ifdef MPOP
if (sm_ispool && !sm_wfp) {
(void) strlen (strcpy (sm_reply.text,
***************
*** 459,467 ****
}
#endif /* MPOP */
! switch (smtalk (SM_MAIL, "%s FROM:<%s>",
! mode == S_SEND ? "SEND" : mode == S_SOML ? "SOML"
! : mode == S_SAML ? "SAML" : "MAIL", from)) {
case 250:
sm_addrs = 0;
return RP_OK;
--- 464,483 ----
}
#endif /* MPOP */
! if ((ret != NULLCP || envid != NULLCP) && EHLOset ("DSN")) {
! if (ret != NULLCP && strlen(ret) > 8) ret[8] = '\0';
! if (ret) sprintf(tmpstr, " RET=%s", ret);
! if (envid != NULLCP && strlen(envid) > 100) envid[100] = '\0';
! if (envid) {
! strcat(tmpstr, " ENVID=");
! strcat(tmpstr, envid);
! }
! }
!
! switch (smtalk (SM_MAIL, "%s FROM:<%s>%s",
! mode == S_SEND ? "SEND" : mode == S_SOML ? "SOML"
! : mode == S_SAML ? "SAML" : "MAIL", from,
! tmpstr ? tmpstr : "")) {
case 250:
sm_addrs = 0;
return RP_OK;
***************
*** 482,499 ****
/* ARGUSED */
#endif /* BERK */
! int sm_wadr (mbox, host, path)
register char *mbox;
#ifndef BERK
register
#endif /* not BERK */
char *host,
! *path;
{
#ifndef BERK
! switch (smtalk (SM_RCPT, host && *host ? "RCPT TO:<%s%s@%s>"
! : "RCPT TO:<%s%s>",
! path ? path : "", mbox, host)) {
#else /* BERK */
switch (smtalk (SM_RCPT, "RCPT TO:%s", mbox)) {
#endif /* BERK */
--- 498,531 ----
/* ARGUSED */
#endif /* BERK */
! int sm_wadr (mbox, host, path, notify)
register char *mbox;
#ifndef BERK
register
#endif /* not BERK */
char *host,
! *path,
! *notify;
{
+ char tmpstr[BUFSIZ];
+
+ tmpstr[0] = '\0';
+
#ifndef BERK
! if (notify != NULLCP && EHLOset ("DSN")) {
! if (strlen(notify) > 28) {
! notify[28] = '\0';
! }
!
! sprintf(tmpstr, host && *host ? " NOTIFY=%s ORCPT=rfc822;%s%s@%s" :
! " NOTIFY=%s ORCPT=rfc822;%s%s", notify, path ? path : "", mbox,
! host);
! }
!
! switch (smtalk (SM_RCPT, host && *host ? "RCPT TO:<%s%s@%s>%s"
! : "RCPT TO:<%s%s>%s",
! path ? path : "", mbox, host,
! tmpstr ? tmpstr : "")) {
#else /* BERK */
switch (smtalk (SM_RCPT, "RCPT TO:%s", mbox)) {
#endif /* BERK */
*** uip/post.c.FCS Thu Feb 15 10:18:35 1996
--- uip/post.c Fri Feb 16 18:25:31 1996
***************
*** 157,162 ****
--- 157,169 ----
#define NRECOSW 37
"norecord", -8,
+ #define NOTIFYSW 38
+ "notify option", 0,
+ #define RETSW 39
+ "ret option" , 0,
+ #define ENVIDSW 40
+ "envid id" , 0,
+
NULL, 0
};
***************
*** 339,345 ****
static int queued = 0;
! static char *record = NULLCP;
off_t lseek ();
long time ();
--- 346,353 ----
static int queued = 0;
! static char *record = NULLCP,
! *notify = NULLCP, *ret = NULLCP, *envid = NULLCP;
off_t lseek ();
long time ();
***************
*** 592,597 ****
--- 600,618 ----
case NRECOSW:
record = NULLCP;
continue;
+
+ case RETSW:
+ if (!(ret = *argp++) || *ret == '-')
+ adios (NULLCP, "missing argument to %s", argp[-2]);
+ continue;
+ case ENVIDSW:
+ if (!(envid = *argp++) || *envid == '-')
+ adios (NULLCP, "missing argument to %s", argp[-2]);
+ continue;
+ case NOTIFYSW:
+ if (!(notify = *argp++) || *notify == '-')
+ adios (NULLCP, "missing argument to %s", argp[-2]);
+ continue;
}
if (msg)
adios (NULLCP, "only one message at a time!");
***************
*** 1445,1451 ****
#ifdef SENDMTS
if (!whomsw || checksw)
if (rp_isbad (retval = sm_init (clientsw, serversw, 0, 0, snoop, 0, 0))
! || rp_isbad (retval = sm_winit (smtpmode, from)))
die (NULLCP, "problem initializing server; %s",
rp_string (retval));
#endif /* SENDMTS */
--- 1466,1472 ----
#ifdef SENDMTS
if (!whomsw || checksw)
if (rp_isbad (retval = sm_init (clientsw, serversw, 0, 0, snoop, 0, 0))
! || rp_isbad (retval = sm_winit (smtpmode, from, ret, envid)))
die (NULLCP, "problem initializing server; %s",
rp_string (retval));
#endif /* SENDMTS */
***************
*** 1555,1561 ****
#ifdef SENDMTS
if (rp_isbad (retval = sm_init (clientsw, serversw, watch, verbose, snoop,
onex, queued))
! || rp_isbad (retval = sm_winit (smtpmode, from)))
die (NULLCP, "problem initializing server; %s", rp_string (retval));
#endif /* SENDMTS */
--- 1576,1582 ----
#ifdef SENDMTS
if (rp_isbad (retval = sm_init (clientsw, serversw, watch, verbose, snoop,
onex, queued))
! || rp_isbad (retval = sm_winit (smtpmode, from, ret, envid)))
die (NULLCP, "problem initializing server; %s", rp_string (retval));
#endif /* SENDMTS */
***************
*** 1712,1718 ****
#ifdef SENDMTS
if (rp_isbad (retval = sm_init (clientsw, serversw, watch, verbose, snoop,
0, 0))
! || rp_isbad (retval = sm_winit (smtpmode, from)))
die (NULLCP, "problem initializing server; %s", rp_string (retval));
#endif /* SENDMTS */
--- 1733,1739 ----
#ifdef SENDMTS
if (rp_isbad (retval = sm_init (clientsw, serversw, watch, verbose, snoop,
0, 0))
! || rp_isbad (retval = sm_winit (smtpmode, from, ret, envid)))
die (NULLCP, "problem initializing server; %s", rp_string (retval));
#endif /* SENDMTS */
***************
*** 2234,2240 ****
/* */
switch (retval = sm_wadr (mbox, host,
! lp -> m_type != UUCPHOST ? lp -> m_path : NULLCP)) {
case RP_OK:
if (talk)
printf ("address ok\n");
--- 2255,2262 ----
/* */
switch (retval = sm_wadr (mbox, host,
! lp -> m_type != UUCPHOST ? lp -> m_path : NULLCP,
! notify)) {
case RP_OK:
if (talk)
printf ("address ok\n");
*** uip/send.c.FCS Thu Feb 15 10:10:41 1996
--- uip/send.c Fri Feb 16 18:25:15 1996
***************
*** 127,132 ****
--- 127,139 ----
#define NRECOSW 38
"norecord", -8,
+ #define NOTIFYSW 39
+ "notify option", 0,
+ #define RETSW 40
+ "ret option" , 0,
+ #define ENVIDSW 41
+ "envid id" , 0,
+
NULL, 0
};
***************
*** 316,321 ****
--- 323,331 ----
case CLIESW:
case SERVSW:
case RECORSW:
+ case RETSW:
+ case ENVIDSW:
+ case NOTIFYSW:
vec[vecp++] = --cp;
if (!(cp = *argp++) || *cp == '-')
adios (NULLCP, "missing argument to %s", argp[-2]);
*** uip/whatnowsbr.c.FCS Wed Feb 21 17:28:27 1996
--- uip/whatnowsbr.c Wed Feb 21 17:30:15 1996
***************
*** 661,666 ****
--- 661,673 ----
#define NRECOSW 37
"norecord", -8,
+ #define NOTIFYSW 38
+ "notify option", 0,
+ #define RETSW 39
+ "ret option" , 0,
+ #define ENVIDSW 40
+ "envid id" , 0,
+
NULL, 0
};
***************
*** 799,804 ****
--- 806,814 ----
case CLIESW:
case SERVSW:
case RECORSW:
+ case NOTIFYSW:
+ case RETSW:
+ case ENVIDSW:
vec[vecp++] = --cp;
if (!(cp = *argp++) || *cp == '-') {
advise (NULLCP, "missing argument to %s", argp[-2]);
*** uip/sbboards.c.FCS Thu Feb 15 10:25:16 1996
--- uip/sbboards.c Thu Feb 15 12:44:00 1996
***************
*** 258,264 ****
int retval;
if (rp_isbad (retval = sm_init (NULLCP, NULLCP, 0, 0, 0, 0, 0))
! || rp_isbad (retval = sm_winit (S_MAIL, bb_from)))
return lose ("problem initializing SendMail; %s",
rp_string (retval));
--- 258,264 ----
int retval;
if (rp_isbad (retval = sm_init (NULLCP, NULLCP, 0, 0, 0, 0, 0))
! || rp_isbad (retval = sm_winit (S_MAIL, bb_from, NULLCP, NULLCP)))
return lose ("problem initializing SendMail; %s",
rp_string (retval));
***************
*** 284,290 ****
{
int retval;
! switch (retval = sm_wadr (mbox, host, NULLCP)) {
case RP_OK:
return OK;
--- 284,290 ----
{
int retval;
! switch (retval = sm_wadr (mbox, host, NULLCP, NULLCP)) {
case RP_OK:
return OK;
***************
*** 390,403 ****
return;
if (rp_isbad (sm_init (NULLCP, NULLCP, 0, 0, 0, 0, 0))
! || rp_isbad (sm_winit (S_MAIL, bb_from)))
goto sm_err;
! switch (sm_wadr (bb_from, NULLCP, NULLCP)) {
case RP_OK:
for (i = 0; bb[i]; i++) {
(void) sprintf (buffer, "local-%s-request", bb[i] -> bb_name);
! (void) sm_wadr (buffer, LocalName (), NULLCP);
}
break;
--- 390,403 ----
return;
if (rp_isbad (sm_init (NULLCP, NULLCP, 0, 0, 0, 0, 0))
! || rp_isbad (sm_winit (S_MAIL, bb_from, NULLCP, NULLCP)))
goto sm_err;
! switch (sm_wadr (bb_from, NULLCP, NULLCP, NULLCP)) {
case RP_OK:
for (i = 0; bb[i]; i++) {
(void) sprintf (buffer, "local-%s-request", bb[i] -> bb_name);
! (void) sm_wadr (buffer, LocalName (), NULLCP, NULLCP);
}
break;
*** uip/spop.c.FCS Thu Feb 15 10:30:23 1996
--- uip/spop.c Thu Feb 15 13:39:07 1996
***************
*** 249,255 ****
int retval;
if (rp_isbad (retval = sm_init (NULLCP, NULLCP, 0, 0, 0, 0, 0))
! || rp_isbad (retval = sm_winit (S_MAIL, bb_from)))
return lose ("problem initializing SendMail; %s",
rp_string (retval));
--- 249,255 ----
int retval;
if (rp_isbad (retval = sm_init (NULLCP, NULLCP, 0, 0, 0, 0, 0))
! || rp_isbad (retval = sm_winit (S_MAIL, bb_from, NULLCP, NULLCP)))
return lose ("problem initializing SendMail; %s",
rp_string (retval));
***************
*** 275,281 ****
{
int retval;
! switch (retval = sm_wadr (mbox, host, NULLCP)) {
case RP_OK:
return OK;
--- 275,281 ----
{
int retval;
! switch (retval = sm_wadr (mbox, host, NULLCP, NULLCP)) {
case RP_OK:
return OK;
***************
*** 381,394 ****
return;
if (rp_isbad (sm_init (NULLCP, NULLCP, 0, 0, 0, 0, 0))
! || rp_isbad (sm_winit (S_MAIL, bb_from)))
goto sm_err;
! switch (sm_wadr (bb_from, NULLCP, NULLCP)) {
case RP_OK:
for (i = 0; bb[i]; i++) {
(void) sprintf (buffer, "local-%s-request", bb[i] -> bb_name);
! (void) sm_wadr (buffer, LocalName (), NULLCP);
}
break;
--- 381,394 ----
return;
if (rp_isbad (sm_init (NULLCP, NULLCP, 0, 0, 0, 0, 0))
! || rp_isbad (sm_winit (S_MAIL, bb_from, NULLCP, NULLCP)))
goto sm_err;
! switch (sm_wadr (bb_from, NULLCP, NULLCP, NULLCP)) {
case RP_OK:
for (i = 0; bb[i]; i++) {
(void) sprintf (buffer, "local-%s-request", bb[i] -> bb_name);
! (void) sm_wadr (buffer, LocalName (), NULLCP, NULLCP);
}
break;