ccea3@rivm.UUCP (Adri Verhoef) (06/02/88)
Ever since I installed the news software on our UNIX System V.3 machines, we had a slight problem involving /bin/mail, especially when mail gets sent by (some) news programs. Some of the news programs will send mail automatically (e.g. when a control message arrives), and some of the programs are invoked by the user when reading news (when one Replies via (electronic) mail). The problem is that the mail header gets split when /bin/mail is invoked without the new System V.3 `-s' option. There are some occurrences in the news sources of a call to a mailer, of which "/bin/mail" is used by System V. "/bin/mail" should on V.3 be invoked with the `-s' option. Without `-s', headers get split: immediately after the From<user><date>-line a newline is inserted, so that the recipients of the mail, when reading their mail, don't see the "Subject:" line, because this line is separated from the From-line. (When reading the mail that got processed by the news programs, "mailx" will generate a Status: line after the From line but before the inserted blank line; other mail programs will not see the Subject: line either.) An example of a received message produced when mail lacks option `-s': From news Tue May 17 10:10 MET 1988 Date: 17 May 88 09:09:57 GMT To: news Subject: Newsgroup comp.os.os9 changed from moderated to unmoderated Responding-System: rivm05.UUCP comp.os.os9 has been changed from moderated to unmoderated as requested by news *With* the `-s' option, the blank line after the From-line will disappear! Did anyone ever fix this for her/his System V.3 machine(s)? The fixes to the news software follow. NOTICE: If you are running System V.3, then you should #define MAIL_S in defs.h (- with the help of localize.sh you should copy defs.dist to defs.h and modify defs.h according to your needs. The modification to defs.dist that I included here adds "/* define MAIL_S ... */", so it does not #define MAIL_S; if you want to #define MAIL_S, you should take out the "/* ". This will clear the problems involving `mail -s'.) Here are the fixes: *** ../old/control.c --- control.c ************** *** 873,879 #endif /* MMDF */ execl("/usr/bin/mail", "mail", sendto, (char *)NULL); execl("/usr/ucb/mail", "mail", sendto, (char *)NULL); ! execl("/bin/mail", "mail", sendto, (char *)NULL); execl("/usr/bin/mailx", "mail", sendto, (char *)NULL); _exit(1); } --- 873,879 ----- #endif /* MMDF */ execl("/usr/bin/mail", "mail", sendto, (char *)NULL); execl("/usr/ucb/mail", "mail", sendto, (char *)NULL); ! execl("/bin/mail", "mail", MAIL_S sendto, (char *)NULL); execl("/usr/bin/mailx", "mail", sendto, (char *)NULL); _exit(1); } *** ../old/defs.dist --- defs.dist ************** *** 39,44 #define HISTEXP 4*WEEKS /* default no. of seconds to forget in */ #define DFLTSUB "general,all.announce" /* default subscription list */ #define TMAIL "/usr/ucb/Mail" /* Mail program that understands -T */ #define ADMSUB "general,all.announce" /* Mandatory subscription list */ #define PAGE "/usr/ucb/more" /* Default pager */ #define NOTIFY "usenet" /* Tell him about certain ctl messages */ --- 39,45 ----- #define HISTEXP 4*WEEKS /* default no. of seconds to forget in */ #define DFLTSUB "general,all.announce" /* default subscription list */ #define TMAIL "/usr/ucb/Mail" /* Mail program that understands -T */ + /* #define MAIL_S "-s", /* /bin/mail -s suppresses extra newline*/ #define ADMSUB "general,all.announce" /* Mandatory subscription list */ #define PAGE "/usr/ucb/more" /* Default pager */ #define NOTIFY "usenet" /* Tell him about certain ctl messages */ *** ../old/readnews.c --- readnews.c ************** *** 93,99 } if (!(MAILER = getenv("MAILER"))) MAILER = "mail"; /* was /bin/mail */ #ifdef PAGE if (myrc = getenv("PAGER")) --- 93,103 ----- } if (!(MAILER = getenv("MAILER"))) + #ifdef MAIL_S + MAILER = "/bin/mail -s"; /* was /bin/mail */ + #else /* !MAIL_S */ MAILER = "mail"; /* was /bin/mail */ + #endif /* !MAIL_S */ #ifdef PAGE if (myrc = getenv("PAGER")) *** ../old/recmail.c --- recmail.c ************** *** 27,33 #ifndef MAILER #define MAILER "/bin/mail" #endif char mailer[] = MAILER; #define MAXRECIPS 100 --- 27,36 ----- #ifndef MAILER #define MAILER "/bin/mail" #endif + #ifndef MAIL_S + #define MAIL_S /* empty */ + #endif char mailer[] = MAILER; #define MAXRECIPS 100 ************** *** 217,223 (void) close(2); (void) dup(1); } ! execlp(mailer, mailer, recip, (char *)0); perror(mailer); exit(1); } --- 220,226 ----- (void) close(2); (void) dup(1); } ! execlp(mailer, mailer, MAIL_S recip, (char *)0); perror(mailer); exit(1); } *** ../old/sendnews.c --- sendnews.c ************** *** 48,54 #ifdef M_XENIX (void) sprintf(buffer, "/usr/bin/mail %s", *argv); #else /* XENIX is not quite Unix.... */ (void) sprintf(buffer, "/bin/mail %s", *argv); #endif /* !M_XENIX */ #endif /* !SENDMAIL */ #endif --- 48,58 ----- #ifdef M_XENIX (void) sprintf(buffer, "/usr/bin/mail %s", *argv); #else /* XENIX is not quite Unix.... */ + #ifdef MAIL_S + (void) sprintf(buffer, "/bin/mail -s %s", *argv); + #else /* !MAIL_S */ (void) sprintf(buffer, "/bin/mail %s", *argv); + #endif /* !MAIL_S */ #endif /* !M_XENIX */ #endif /* !SENDMAIL */ #endif