home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume24 / elm2.3patches / part02 < prev    next >
Text File  |  1991-03-05  |  31KB  |  1,021 lines

  1. Subject:  v24i026:  Elm mail system, release 2.3, patches, Part02/11
  2. Newsgroups: comp.sources.unix
  3. Approved: rsalz@uunet.UU.NET
  4. X-Checksum-Snefru: 36676cb3 03f70437 d87989de 9eb22187
  5.  
  6. Submitted-by: Syd Weinstein <syd@DSI.COM>
  7. Posting-number: Volume 24, Issue 26
  8. Archive-name: elm2.3patches/part02
  9.  
  10. Subject: elm 2.3 Patch #2
  11. Summary: This is an official patch for elm 2.3 system.  Please apply it.
  12. Priority: MEDIUM
  13.  
  14. More of the release cleanup, more to come still...
  15.  
  16. Update install to update test prompts for alias current message
  17. From: Syd
  18.  
  19. Some wait system calls return with -1 and errno=4 (interrupted system call) when the
  20. editor is invoked, suspended, and then resumed.  Loop until wait returns pid, or
  21. returns -1 *if errno != EINTR*.  If wait returns -1 and errno = EINTR, we wait again.
  22. Some flock()s refuse to exclusively lock a fd open for read-only access.
  23. From: pdc%lunch.wpd@sgi.com (Paul Close)
  24.  
  25. Use a close-on-exec pipe to diagnose exec() failures.
  26. From: tct!chip@uunet.UU.NET (Chip Salzenberg)
  27.  
  28. Allow use of submit with mmdf instead of sendmail stub
  29. From: martin <martin@hppcmart.grenoble.hp.com>
  30.  
  31. Fix:    From rn, say "| patch -p -N -d DIR", where DIR is your elm source
  32.     directory.  Outside of rn, say "cd DIR; patch -p -N <thisarticle".
  33.     If you don't have the patch program, apply the following by hand,
  34.     or get patch (version 2.0, latest patchlevel).
  35.  
  36.     After patching:
  37.         sh Configure -d
  38.         make
  39.         make install
  40.  
  41.     If patch indicates that patchlevel is the wrong version, you may need
  42.     to apply one or more previous patches, or the patch may already
  43.     have been applied.  See the patchlevel.h file to find out what has or
  44.     has not been applied.  In any event, don't continue with the patch.
  45.  
  46.     If you are missing previous patches they can be obtained from our:
  47.     archive server.
  48.  
  49.     Syd Weinstein
  50.     elm@DSI.COM
  51.  
  52.     The patches are available from the dsinc archive server
  53.     Send the following message to archive-server@DSI.COM for
  54.     a list of available patches:
  55.  
  56.     Subject: patch list
  57.     send index elm
  58.  
  59. Index: hdrs/patchlevel.h
  60. Prereq: 1
  61. *** ../elm2.3/hdrs/patchlevel.h    Tue Jun  5 22:02:31 1990
  62. --- hdrs/patchlevel.h    Sat Jun  9 21:18:04 1990
  63. ***************
  64. *** 1 ****
  65. ! #define PATCHLEVEL 1
  66. --- 1 ----
  67. ! #define PATCHLEVEL 2
  68.  
  69. Index: Instruct
  70. *** ../elm2.3/Instruct    Sat Apr 28 22:40:44 1990
  71. --- Instruct    Sat Jun  9 21:17:13 1990
  72. ***************
  73. *** 1,7 ****
  74.                   Instructions
  75.                   ------------
  76.   
  77. !                 Last Update: $Date: 90/04/28 22:40:43 $
  78.   
  79.   
  80.       This file contains instructions on how to create and install
  81. --- 1,7 ----
  82.                   Instructions
  83.                   ------------
  84.   
  85. !                 Last Update: $Date: 90/06/09 21:17:05 $
  86.   
  87.   
  88.       This file contains instructions on how to create and install
  89. ***************
  90. *** 72,80 ****
  91.       $ elm -f test/test.mail
  92.   
  93.   should read in EIGHT messages from various people.  While here, try to
  94. ! A)lias C)urrent message for each of the eight messages to confirm that
  95. ! the reply/address system is working okay.  Now Q)uit without having 
  96. ! marked anything for deletion...answer the questions accordingly.
  97.   
  98.   If you get this far you're in wonderful shape!  In fact, you're done!
  99.   
  100. --- 72,81 ----
  101.       $ elm -f test/test.mail
  102.   
  103.   should read in EIGHT messages from various people.  While here, try to
  104. ! A)lias, A)lias current message for each of the eight messages to
  105. ! confirm that the reply/address system is working okay.  Now Q)uit
  106. ! without having marked anything for deletion...answer the questions
  107. ! accordingly.
  108.   
  109.   If you get this far you're in wonderful shape!  In fact, you're done!
  110.   
  111. ***************
  112. *** 106,114 ****
  113.   
  114.   That's it!
  115.   ----------
  116. -     Author's address:    taylor@hplabs.HP.COM
  117. -                 hplabs!taylor
  118.   
  119.     This document and the entire mail system is
  120.   
  121. --- 107,112 ----
  122.  
  123. Index: Configure
  124. Prereq: 4.1.1.1
  125. *** ../elm2.3/Configure    Tue Jun  5 22:02:33 1990
  126. --- Configure    Sat Jun  9 23:25:30 1990
  127. ***************
  128. *** 8,14 ****
  129.   # and edit it to reflect your system.  Some packages may include samples
  130.   # of config.h for certain machines, so you might look for one of those.)
  131.   #
  132. ! # $Header: /files/home/users/syd/elm.rel/RCS/Configure,v 4.1.1.1 90/05/31 20:46:41 syd Exp $
  133.   #
  134.   # Yes, you may rip this off to use in other distribution packages.
  135.   # (Note: this Configure script was generated automatically.  Rather than
  136. --- 8,14 ----
  137.   # and edit it to reflect your system.  Some packages may include samples
  138.   # of config.h for certain machines, so you might look for one of those.)
  139.   #
  140. ! # $Header: /files/home/users/syd/elm.rel/RCS/Configure,v 4.1.1.4 90/06/09 23:24:59 syd Exp $
  141.   #
  142.   # Yes, you may rip this off to use in other distribution packages.
  143.   # (Note: this Configure script was generated automatically.  Rather than
  144. ***************
  145. *** 110,115 ****
  146. --- 110,116 ----
  147.   sendmail=''
  148.   shar=''
  149.   smail=''
  150. + submit=''
  151.   tbl=''
  152.   troff=''
  153.   nroff=''
  154. ***************
  155. *** 257,263 ****
  156.   attrlist="$attrlist i186 __m88k__ m88k DGUX __DGUX__"
  157.   d_newshome="/usr/NeWS"
  158.   defvoidused=7
  159. ! pth="/usr/ucb /bin /usr/bin /usr/local /usr/local/bin /usr/lbin /usr/plx /usr/5bin /vol/local/bin /etc /usr/lib /lib /usr/local/lib /sys5.3/bin /sys5.3/usr/bin /bsd4.3/bin /bsd4.3/usr/bin /bsd4.3/usr/ucb /usr/convex"
  160.   
  161.   : check for out bin directory
  162.   if test ! -d ../bin; then
  163. --- 258,264 ----
  164.   attrlist="$attrlist i186 __m88k__ m88k DGUX __DGUX__"
  165.   d_newshome="/usr/NeWS"
  166.   defvoidused=7
  167. ! pth="/usr/ucb /bin /usr/bin /usr/local /usr/local/bin /usr/lbin /usr/plx /usr/5bin /vol/local/bin /etc /usr/lib /lib /usr/local/lib /sys5.3/bin /sys5.3/usr/bin /bsd4.3/bin /bsd4.3/usr/bin /bsd4.3/usr/ucb /usr/convex /usr/mmdf/bin"
  168.   
  169.   : check for out bin directory
  170.   if test ! -d ../bin; then
  171. ***************
  172. *** 526,531 ****
  173. --- 527,533 ----
  174.   sendmail
  175.   shar
  176.   smail
  177. + submit
  178.   tar
  179.   tbl
  180.   test
  181. ***************
  182. *** 2323,2332 ****
  183.       fi
  184.   fi
  185.   
  186.   : determine mail delivery agent for Elm to use
  187.   case "$mailer" in
  188.   '')
  189. !     if $test -f "$sendmail"; then
  190.       dflt="$sendmail"
  191.       elif $test -f "$rmail"; then
  192.       dflt="$rmail"
  193. --- 2325,2360 ----
  194.       fi
  195.   fi
  196.   
  197. + case "$d_mmdf" in
  198. + "$define") dflt=y;;
  199. + "$undef")  dflt=n;;
  200. + *)    if $test -f "$submit"; then
  201. +         dflt=y
  202. +     fi
  203. +     ;;
  204. + esac
  205. + $cat <<EOM
  206. +  
  207. + Some systems run MMDF as their Mail Transport Agent.  MMDF uses
  208. + a different way of delimiting messages in the mailbox files.
  209. + Usually this is a series of four Control A's.  $package needs to know
  210. + if this system uses MMDF.
  211. + EOM
  212. + rp="Does this system use MMDF as its MTA? [$dflt]"
  213. + $echo $n "$rp $c"
  214. + . myread
  215. + case "$ans" in
  216. + y*) d_mmdf="$define";;
  217. + *)  d_mmdf="$undef";;
  218. + esac
  219.   : determine mail delivery agent for Elm to use
  220.   case "$mailer" in
  221.   '')
  222. !     if $test "$d_mmdf" = "$define" -a -f "$submit"; then
  223. !     dflt="$submit"
  224. !     elif $test -f "$sendmail"; then
  225.       dflt="$sendmail"
  226.       elif $test -f "$rmail"; then
  227.       dflt="$rmail"
  228. ***************
  229. *** 2367,2372 ****
  230. --- 2395,2403 ----
  231.   if $test "$mailer" != "$sendmail"; then
  232.       sendmail=''
  233.   fi
  234. + if $test "$mailer" != "$submit"; then
  235. +     submit=''
  236. + fi
  237.   
  238.   : check for internet mailer
  239.   case "$d_internet" in
  240. ***************
  241. *** 2374,2379 ****
  242. --- 2405,2412 ----
  243.   "$undef")    dflt=n;;
  244.   *)    if $test -f "$sendmail"; then
  245.           dflt=y
  246. +     elif $test -f "$submit"; then
  247. +         dflt=y
  248.       elif $test -f "$smail"; then
  249.           dflt=y
  250.       else
  251. ***************
  252. *** 2421,2447 ****
  253.   set mkdir d_mkdir
  254.   eval $inlibc
  255.   
  256. - case "$d_mmdf" in
  257. - "$define") dflt=y;;
  258. - "$undef")  dflt=n;;
  259. - *)    dflt=n;;
  260. - esac
  261. - $cat <<EOM
  262. -  
  263. - Some systems run MMDF as their Mail Transport Agent.  MMDF uses
  264. - a different way of delimiting messages in the mailbox files.
  265. - Usually this is a series of four Control A's.  $package needs to know
  266. - if this system uses MMDF.
  267. - EOM
  268. - rp="Does this system use MMDF as its MTA? [$dflt]"
  269. - $echo $n "$rp $c"
  270. - . myread
  271. - case "$ans" in
  272. - y*) d_mmdf="$define";;
  273. - *)  d_mmdf="$undef";;
  274. - esac
  275.   : ask about newmail running in the background automatically
  276.   case "$d_newauto" in
  277.   "$define")    dflt=y;;
  278. --- 2454,2459 ----
  279. ***************
  280. *** 2510,2515 ****
  281. --- 2522,2532 ----
  282.       d_noaddfrom="$define"
  283.       d_nocheckvalid="$define"
  284.       d_usedomain="$undef"
  285. + elif $test -f "$submit"; then
  286. +     echo "You're running submit with MMDF.  Setting noaddfrom, nocheckvalid, usedomain"
  287. +     d_noaddfrom="$undef"
  288. +     d_nocheckvalid="$define"
  289. +     d_usedomain="$define"
  290.   else
  291.       case "$d_nocheckvalid" in
  292.       "$define") dflt=n;;
  293. ***************
  294. *** 2519,2525 ****
  295.   
  296.       $cat << EOM
  297.   
  298. ! Since you're not running sendmail, should I check local user entered
  299.   addresses against the valid mailboxes on this system?
  300.   EOM
  301.   
  302. --- 2536,2542 ----
  303.   
  304.       $cat << EOM
  305.   
  306. ! Since you're not running sendmail or submit, should I check local user entered
  307.   addresses against the valid mailboxes on this system?
  308.   EOM
  309.   
  310. ***************
  311. *** 3144,3149 ****
  312. --- 3161,3169 ----
  313.   elif $contains 'void.*signal' $$.tmp >/dev/null 2>&1 ; then
  314.       echo "You have void (*signal())() instead of int."
  315.       d_voidsig="$define"
  316. + elif $contains 'extern.*signal' $$.tmp >/dev/null 2>&1 ; then
  317. +     echo "You have int (*signal())() instead of void."
  318. +     d_voidsig="$undef"
  319.   elif $test -n "$d_voidsig"; then
  320.       echo $n "As you already told me, signal handlers return "
  321.       if $test "$d_voidsig" = "$define"; then
  322. ***************
  323. *** 3153,3159 ****
  324.       fi
  325.   else
  326.       echo "I can't determine whether signal handlers return void or int..."
  327. !     echo "I'm assuming they return void like ANSI and POSIX want"
  328.       d_voidsig="$define"
  329.   fi
  330.   rm -f $$.tmp
  331. --- 3173,3181 ----
  332.       fi
  333.   else
  334.       echo "I can't determine whether signal handlers return void or int..."
  335. !     echo "I'm assuming they return void like ANSI and POSIX want."
  336. !     echo "If not, you will have to change d_voidsig from $define to $undef"
  337. !     echo "in config.sh at the edit question at the end of Configure"
  338.       d_voidsig="$define"
  339.   fi
  340.   rm -f $$.tmp
  341. ***************
  342. *** 3788,3793 ****
  343. --- 3810,3816 ----
  344.   sendmail='$sendmail'
  345.   shar='$shar'
  346.   smail='$smail'
  347. + submit='$submit'
  348.   tbl='$tbl'
  349.   troff='$troff'
  350.   nroff='$nroff'
  351.  
  352.  
  353. Index: Patchlist
  354. *** ../elm2.3/Patchlist    Sat Apr 28 22:40:57 1990
  355. --- Patchlist    Sat Jun  9 23:00:32 1990
  356. ***************
  357. *** 1,3 ****
  358. ! This file will contain the date and comment header from each
  359. ! official patch as issued.  Since this is the full new release,
  360. ! there are currently no patches.
  361. --- 1,67 ----
  362. !     Elm 2.3 Patch 2 - Release cleanup - Part II
  363. !     Sat Jun  9 22:59:02 EDT 1990 (Creation date, not posting date)
  364. ! Update install to update test prompts for alias current message
  365. ! From: Syd
  366. ! Some wait system calls return with -1 and errno=4 (interrupted system call) when the
  367. ! editor is invoked, suspended, and then resumed.  Loop until wait returns pid, or
  368. ! returns -1 *if errno != EINTR*.  If wait returns -1 and errno = EINTR, we wait again.
  369. ! Some flock()s refuse to exclusively lock a fd open for read-only access.
  370. ! From: pdc%lunch.wpd@sgi.com (Paul Close)
  371. ! Use a close-on-exec pipe to diagnose exec() failures.
  372. ! From: tct!chip@uunet.UU.NET (Chip Salzenberg)
  373. ! Allow use of submit with mmdf instead of sendmail stub
  374. ! From: martin <martin@hppcmart.grenoble.hp.com>
  375. !     Elm 2.3 Patch 1 - Release cleanup - Part I
  376. !     Tue Jun  5 22:25:25 EDT 1990 (Creation date, not posting date)
  377. ! Fixed Metaconfig prototype for voidsig, the test was backwards
  378. ! (had a -z where a -n should have been)
  379. ! From: Syd
  380. ! The open system call in actions.c for EMERGENCY_MAILBOX and EMER_MBOX
  381. ! were tested with the inequality >= 0 exactly backwards.
  382. ! If the user's system mail box (/usr/spool/mail/user_id) is
  383. ! removed the attempt of filter to flock it fails.  If it does not exist then
  384. ! it should create it and then lock it.
  385. ! From: john@hopf.math.nwu.edu (John Franks)
  386. ! Allow nesting on () in comment in address
  387. ! From: Chip Rosenthal <chip@chinacat.Unicom.COM>
  388. ! Fix boundary condition in add_name_to_list() where it fails to
  389. ! print error message.
  390. ! From: Chip Rosenthal <chip@chinacat.Unicom.COM>
  391. ! Fixes the 'g' Group Reply command to send to the cc list also.
  392. ! A bad variable name caused it to be ignored.
  393. ! From: chip@chinacat.Unicom.COM (Chip Rosenthal)
  394. ! Fixes when ALLOW_SUBSHELL #define'd and you are in the
  395. ! Message Header Edit Screen and the mail you just composed
  396. ! is not a reply THEN the subshell command is executed.
  397. ! From: zvr@natasha.cs.wisc.EDU (Alexios Zavras)
  398. ! Fixes where src/curses.c attempts to set the screen size via the ioctl
  399. ! TIOCGWINSIZ if it exsists. It should only use the row or col size as
  400. ! returned from the ioctl if they are not 0.
  401. ! From: muller%sdcc10@ucsd.edu (Keith Muller)
  402. ! alias command in ELM2.3 fails because of the wrong sized aliases.hash
  403. ! newalias did not truncate existing file (aliases.hash)
  404. ! From: Toshinori Maeno <tmaeno@cc.titech.ac.jp>
  405. ! Fix htonl() double define problems
  406. ! From: Syd
  407. ! Fix aliases.hash.tmp being over 14 chars and causing rename problems
  408. ! on a 14 character limit system.
  409. ! From: Syd
  410. ! Fix now spurious error message for alias recursive expansion
  411. ! when alias lookup is on a string over 20 chars long.  If that
  412. ! long, its just not an alias, so just return.
  413. ! From: Syd
  414.  
  415.  
  416. Index: doc/Ref.guide
  417. Prereq: 4.1
  418. *** ../elm2.3/doc/Ref.guide    Sat Apr 28 22:41:15 1990
  419. --- doc/Ref.guide    Sat Jun  9 22:49:53 1990
  420. ***************
  421. *** 1,4 ****
  422. ! .\" @(#)$Id: Ref.guide,v 4.1 90/04/28 22:41:08 syd Exp $
  423.   .\"
  424.   .\"  Reference guide to the Elm mail system.
  425.   .\"  format with 
  426. --- 1,4 ----
  427. ! .\" @(#)$Id: Ref.guide,v 4.1.1.1 90/06/09 22:49:11 syd Exp $
  428.   .\"
  429.   .\"  Reference guide to the Elm mail system.
  430.   .\"  format with 
  431. ***************
  432. *** 12,17 ****
  433. --- 12,21 ----
  434.   .\"  (C) Copyright 1988, 1989, 1990 Usenet Community Trust
  435.   .\"
  436.   .\"  $Log:    Ref.guide,v $
  437. + .\" Revision 4.1.1.1  90/06/09  22:49:11  syd
  438. + .\" Droped obsolete control Q command from list
  439. + .\" From: Joe Wasik
  440. + .\" 
  441.   .\" Revision 4.1  90/04/28  22:41:08  syd
  442.   .\" checkin of Elm 2.3 as of Release PL0
  443.   .\" 
  444. ***************
  445. *** 438,444 ****
  446.   If on, this tells \f2elm\f1 that you have an HP terminal and enables
  447.   the <NEXT>, <PREV>, <HOME> and <SHIFT-HOME> keys.  (The default is OFF.)
  448.   
  449. ! .lp menus* 1.0i
  450.   If turned off, this will inhibit the Menu display on all of the 
  451.   screen displays within the \f2elm\f1 program.  (Note that this is
  452.   overridden by the similar `-m' command line option,
  453. --- 442,448 ----
  454.   If on, this tells \f2elm\f1 that you have an HP terminal and enables
  455.   the <NEXT>, <PREV>, <HOME> and <SHIFT-HOME> keys.  (The default is OFF.)
  456.   
  457. ! .lp menu* 1.0i
  458.   If turned off, this will inhibit the Menu display on all of the 
  459.   screen displays within the \f2elm\f1 program.  (Note that this is
  460.   overridden by the similar `-m' command line option,
  461.  
  462. Index: doc/Users.guide
  463. Prereq: 4.1
  464. *** ../elm2.3/doc/Users.guide    Sat Apr 28 22:41:20 1990
  465. --- doc/Users.guide    Sat Jun  9 22:50:05 1990
  466. ***************
  467. *** 1,4 ****
  468. ! .\" @(#)$Id: Users.guide,v 4.1 90/04/28 22:41:16 syd Exp $
  469.   .\"
  470.   .\"  Users guide to the ELM mail system.
  471.   .\"  format with:
  472. --- 1,4 ----
  473. ! .\" @(#)$Id: Users.guide,v 4.1.1.1 90/06/09 22:49:54 syd Exp $
  474.   .\"
  475.   .\"  Users guide to the ELM mail system.
  476.   .\"  format with:
  477. ***************
  478. *** 12,17 ****
  479. --- 12,21 ----
  480.   .\"  (C) Copyright 1988, 1989, 1990 Usenet Community Trust
  481.   .\"
  482.   .\"  $Log:    Users.guide,v $
  483. + .\" Revision 4.1.1.1  90/06/09  22:49:54  syd
  484. + .\" Droped obsolete control Q command from list
  485. + .\" From: Joe Wasik
  486. + .\" 
  487.   .\" Revision 4.1  90/04/28  22:41:16  syd
  488.   .\" checkin of Elm 2.3 as of Release PL0
  489.   .\" 
  490. ***************
  491. *** 506,513 ****
  492.   Quit \(em maybe prompting for messages to delete, store, or keep.
  493.   .lp \h'18p'Q 90p
  494.   Quick quit \(em like quit but without prompting.
  495. - .lp \h'18p'<control>-Q 90p
  496. - Exit immediately \(em don't record as read, don't save...
  497.   .lp \h'18p'r 90p
  498.   Reply to the author of current message.
  499.   .lp \h'18p's 90p
  500. --- 510,515 ----
  501.  
  502. Index: hdrs/sysdefs.SH
  503. Prereq: 4.1
  504. *** ../elm2.3/hdrs/sysdefs.SH    Sat Apr 28 22:42:15 1990
  505. --- hdrs/sysdefs.SH    Sat Jun  9 22:28:43 1990
  506. ***************
  507. *** 12,20 ****
  508.   esac
  509.   echo "Extracting hdrs/sysdefs.h (with variable substitutions)"
  510.   sed <<!GROK!THIS! >sysdefs.h -e 's!^#undef!/\*#undef!'
  511. ! /* $Id: sysdefs.SH,v 4.1 90/04/28 22:42:14 syd Exp $ */
  512.   /*******************************************************************************
  513. !  *  The Elm Mail System  -  $Revision: 4.1 $   $State: Exp $
  514.    *
  515.    *             Copyright (c) 1986, 1987 Dave Taylor
  516.    *             Copyright (c) 1988, 1989, 1990 USENET Community Trust
  517. --- 12,20 ----
  518.   esac
  519.   echo "Extracting hdrs/sysdefs.h (with variable substitutions)"
  520.   sed <<!GROK!THIS! >sysdefs.h -e 's!^#undef!/\*#undef!'
  521. ! /* $Id: sysdefs.SH,v 4.1.1.1 90/06/09 22:28:42 syd Exp $ */
  522.   /*******************************************************************************
  523. !  *  The Elm Mail System  -  $Revision: 4.1.1.1 $   $State: Exp $
  524.    *
  525.    *             Copyright (c) 1986, 1987 Dave Taylor
  526.    *             Copyright (c) 1988, 1989, 1990 USENET Community Trust
  527. ***************
  528. *** 26,31 ****
  529. --- 26,35 ----
  530.    *
  531.    *******************************************************************************
  532.    * $Log:    sysdefs.SH,v $
  533. +  * Revision 4.1.1.1  90/06/09  22:28:42  syd
  534. +  * Allow use of submit with mmdf instead of sendmail stub
  535. +  * From: martin <martin@hppcmart.grenoble.hp.com>
  536. +  * 
  537.    * Revision 4.1  90/04/28  22:42:14  syd
  538.    * checkin of Elm 2.3 as of Release PL0
  539.    * 
  540. ***************
  541. *** 98,104 ****
  542.   
  543.   #define sendmail    "$sendmail"
  544.   #define smflags        "-oi -oem"    /* ignore dots and mail back errors */
  545. ! #define smflagsv      "-oi -oem -v"   /* Verbose voyuer mode */
  546.   #define mailer        "$mailer"
  547.   
  548.   #define mailx        "$mailx"
  549. --- 102,110 ----
  550.   
  551.   #define sendmail    "$sendmail"
  552.   #define smflags        "-oi -oem"    /* ignore dots and mail back errors */
  553. ! #define smflagsv          "-oi -oem -v"   /* Verbose voyuer mode */
  554. ! #define submitmail         "$submit"
  555. ! #define submitflags     "-mlrnxto,cc*"
  556.   #define mailer        "$mailer"
  557.   
  558.   #define mailx        "$mailx"
  559.  
  560. Index: src/editmsg.c
  561. Prereq: 4.1
  562. *** ../elm2.3/src/editmsg.c    Sat Apr 28 22:42:49 1990
  563. --- src/editmsg.c    Sat Jun  9 23:33:31 1990
  564. ***************
  565. *** 1,8 ****
  566.   
  567. ! static char rcsid[] = "@(#)$Id: editmsg.c,v 4.1 90/04/28 22:42:47 syd Exp $";
  568.   
  569.   /*******************************************************************************
  570. !  *  The Elm Mail System  -  $Revision: 4.1 $   $State: Exp $
  571.    *
  572.    *             Copyright (c) 1986, 1987 Dave Taylor
  573.    *             Copyright (c) 1988, 1989, 1990 USENET Community Trust
  574. --- 1,8 ----
  575.   
  576. ! static char rcsid[] = "@(#)$Id: editmsg.c,v 4.1.1.1 90/06/09 23:33:06 syd Exp $";
  577.   
  578.   /*******************************************************************************
  579. !  *  The Elm Mail System  -  $Revision: 4.1.1.1 $   $State: Exp $
  580.    *
  581.    *             Copyright (c) 1986, 1987 Dave Taylor
  582.    *             Copyright (c) 1988, 1989, 1990 USENET Community Trust
  583. ***************
  584. *** 14,19 ****
  585. --- 14,23 ----
  586.    *
  587.    *******************************************************************************
  588.    * $Log:    editmsg.c,v $
  589. +  * Revision 4.1.1.1  90/06/09  23:33:06  syd
  590. +  * Only say cannot invoke on -1 error which is cannot do exec in system call
  591. +  * From: Syd
  592. +  * 
  593.    * Revision 4.1  90/04/28  22:42:47  syd
  594.    * checkin of Elm 2.3 as of Release PL0
  595.    * 
  596. ***************
  597. *** 76,82 ****
  598.       if (cursor_control)
  599.         transmit_functions(OFF);        /* function keys are local */
  600.   
  601. !     if ((stat = system_call(buffer, SH, TRUE, FALSE)) != 0) { 
  602.         dprint(1,(debugfile, 
  603.             "System call failed with stat %d (edit_the_message)\n", 
  604.             stat));
  605. --- 80,86 ----
  606.       if (cursor_control)
  607.         transmit_functions(OFF);        /* function keys are local */
  608.   
  609. !     if ((stat = system_call(buffer, SH, TRUE, FALSE)) == -1) { 
  610.         dprint(1,(debugfile, 
  611.             "System call failed with stat %d (edit_the_message)\n", 
  612.             stat));
  613.  
  614. Index: src/leavembox.c
  615. Prereq: 4.1
  616. *** ../elm2.3/src/leavembox.c    Sat Apr 28 22:43:20 1990
  617. --- src/leavembox.c    Sat Jun  9 21:53:32 1990
  618. ***************
  619. *** 1,8 ****
  620.   
  621. ! static char rcsid[] = "@(#)$Id: leavembox.c,v 4.1 90/04/28 22:43:18 syd Exp $";
  622.   
  623.   /*******************************************************************************
  624. !  *  The Elm Mail System  -  $Revision: 4.1 $   $State: Exp $
  625.    *
  626.    *             Copyright (c) 1986, 1987 Dave Taylor
  627.    *             Copyright (c) 1988, 1989, 1990 USENET Community Trust
  628. --- 1,8 ----
  629.   
  630. ! static char rcsid[] = "@(#)$Id: leavembox.c,v 4.1.1.1 90/06/09 21:33:23 syd Exp $";
  631.   
  632.   /*******************************************************************************
  633. !  *  The Elm Mail System  -  $Revision: 4.1.1.1 $   $State: Exp $
  634.    *
  635.    *             Copyright (c) 1986, 1987 Dave Taylor
  636.    *             Copyright (c) 1988, 1989, 1990 USENET Community Trust
  637. ***************
  638. *** 14,19 ****
  639. --- 14,26 ----
  640.    *
  641.    *******************************************************************************
  642.    * $Log:    leavembox.c,v $
  643. +  * Revision 4.1.1.1  90/06/09  21:33:23  syd
  644. +  * Some wait system calls return with -1 and errno=4 (interrupted system call) when the
  645. +  * editor is invoked, suspended, and then resumed.  Loop until wait returns pid, or
  646. +  * returns -1 *if errno != EINTR*.  If wait returns -1 and errno = EINTR, we wait again.
  647. +  * Some flock()s refuse to exclusively lock a fd open for read-only access.
  648. +  * From: pdc%lunch.wpd@sgi.com (Paul Close)
  649. +  * 
  650.    * Revision 4.1  90/04/28  22:43:18  syd
  651.    * checkin of Elm 2.3 as of Release PL0
  652.    * 
  653. ***************
  654. *** 795,801 ****
  655.         /* Now we also need to lock the file with flock(2) */
  656.   
  657.         /* Open mail file separately for locking */
  658. !       if((flock_fd = open(cur_folder, O_RDONLY)) < 0) {
  659.       dprint(1, (debugfile, 
  660.           "Error encountered attempting to reopen %s for lock\n", cur_folder));
  661.       dprint(1, (debugfile, "** %s - %s **\n", error_name(errno),
  662. --- 802,808 ----
  663.         /* Now we also need to lock the file with flock(2) */
  664.   
  665.         /* Open mail file separately for locking */
  666. !       if((flock_fd = open(cur_folder, O_RDWR)) < 0) {
  667.       dprint(1, (debugfile, 
  668.           "Error encountered attempting to reopen %s for lock\n", cur_folder));
  669.       dprint(1, (debugfile, "** %s - %s **\n", error_name(errno),
  670.  
  671. Index: src/mailmsg2.c
  672. Prereq: 4.1
  673. *** ../elm2.3/src/mailmsg2.c    Sat Apr 28 22:43:30 1990
  674. --- src/mailmsg2.c    Sat Jun  9 23:20:28 1990
  675. ***************
  676. *** 1,8 ****
  677.   
  678. ! static char rcsid[] = "@(#)$Id: mailmsg2.c,v 4.1 90/04/28 22:43:28 syd Exp $";
  679.   
  680.   /*******************************************************************************
  681. !  *  The Elm Mail System  -  $Revision: 4.1 $   $State: Exp $
  682.    *
  683.    *             Copyright (c) 1986, 1987 Dave Taylor
  684.    *             Copyright (c) 1988, 1989, 1990 USENET Community Trust
  685. --- 1,8 ----
  686.   
  687. ! static char rcsid[] = "@(#)$Id: mailmsg2.c,v 4.1.1.2 90/06/09 23:20:24 syd Exp $";
  688.   
  689.   /*******************************************************************************
  690. !  *  The Elm Mail System  -  $Revision: 4.1.1.2 $   $State: Exp $
  691.    *
  692.    *             Copyright (c) 1986, 1987 Dave Taylor
  693.    *             Copyright (c) 1988, 1989, 1990 USENET Community Trust
  694. ***************
  695. *** 14,19 ****
  696. --- 14,26 ----
  697.    *
  698.    *******************************************************************************
  699.    * $Log:    mailmsg2.c,v $
  700. +  * Revision 4.1.1.2  90/06/09  23:20:24  syd
  701. +  * fix typo
  702. +  * 
  703. +  * Revision 4.1.1.1  90/06/09  22:28:39  syd
  704. +  * Allow use of submit with mmdf instead of sendmail stub
  705. +  * From: martin <martin@hppcmart.grenoble.hp.com>
  706. +  * 
  707.    * Revision 4.1  90/04/28  22:43:28  syd
  708.    * checkin of Elm 2.3 as of Release PL0
  709.    * 
  710. ***************
  711. *** 339,347 ****
  712.                                )
  713.   #endif
  714.           
  715. !          strcpy(mailerflags, (sendmail_verbose ? smflagsv : smflags));
  716.         else
  717. !          mailerflags[0] ='\0';
  718.   
  719.         quote_args(very_long_buffer, strip_parens(strip_commas(expanded_to)));
  720.         strcpy(expanded_to, very_long_buffer);
  721. --- 346,356 ----
  722.                                )
  723.   #endif
  724.           
  725. !         strcpy(mailerflags, (sendmail_verbose ? smflagsv : smflags));
  726. !       else if (strcmp(submitmail, mailer) == 0)
  727. !         strcpy(mailerflags, submitflags);
  728.         else
  729. !         mailerflags[0] ='\0';
  730.   
  731.         quote_args(very_long_buffer, strip_parens(strip_commas(expanded_to)));
  732.         strcpy(expanded_to, very_long_buffer);
  733.  
  734.  
  735. Index: src/syscall.c
  736. Prereq: 4.1
  737. *** ../elm2.3/src/syscall.c    Sat Apr 28 22:44:19 1990
  738. --- src/syscall.c    Sat Jun  9 22:00:14 1990
  739. ***************
  740. *** 1,8 ****
  741.   
  742. ! static char rcsid[] = "@(#)$Id: syscall.c,v 4.1 90/04/28 22:44:18 syd Exp $";
  743.   
  744.   /*******************************************************************************
  745. !  *  The Elm Mail System  -  $Revision: 4.1 $   $State: Exp $
  746.    *
  747.    *             Copyright (c) 1986, 1987 Dave Taylor
  748.    *             Copyright (c) 1988, 1989, 1990 USENET Community Trust
  749. --- 1,8 ----
  750.   
  751. ! static char rcsid[] = "@(#)$Id: syscall.c,v 4.1.1.2 90/06/09 22:00:13 syd Exp $";
  752.   
  753.   /*******************************************************************************
  754. !  *  The Elm Mail System  -  $Revision: 4.1.1.2 $   $State: Exp $
  755.    *
  756.    *             Copyright (c) 1986, 1987 Dave Taylor
  757.    *             Copyright (c) 1988, 1989, 1990 USENET Community Trust
  758. ***************
  759. *** 14,19 ****
  760. --- 14,30 ----
  761.    *
  762.    *******************************************************************************
  763.    * $Log:    syscall.c,v $
  764. +  * Revision 4.1.1.2  90/06/09  22:00:13  syd
  765. +  * Use a close-on-exec pipe to diagnose exec() failures.
  766. +  * From: tct!chip@uunet.UU.NET (Chip Salzenberg)
  767. +  * 
  768. +  * Revision 4.1.1.1  90/06/09  21:33:22  syd
  769. +  * Some wait system calls return with -1 and errno=4 (interrupted system call) when the
  770. +  * editor is invoked, suspended, and then resumed.  Loop until wait returns pid, or
  771. +  * returns -1 *if errno != EINTR*.  If wait returns -1 and errno = EINTR, we wait again.
  772. +  * Some flock()s refuse to exclusively lock a fd open for read-only access.
  773. +  * From: pdc%lunch.wpd@sgi.com (Paul Close)
  774. +  * 
  775.    * Revision 4.1  90/04/28  22:44:18  syd
  776.    * checkin of Elm 2.3 as of Release PL0
  777.    * 
  778. ***************
  779. *** 28,33 ****
  780. --- 39,45 ----
  781.   #include "headers.h"
  782.   
  783.   #include <signal.h>
  784. + #include <errno.h>
  785.   
  786.   #ifdef BSD
  787.   #  include <sys/wait.h>
  788. ***************
  789. *** 111,117 ****
  790.           a message being edited when a user connection is
  791.           dropped is recovered by vi's expreserve program **/
  792.   
  793. !     int stat = 0, pid, w;
  794.   #if defined(BSD) && !defined(WEXITSTATUS)
  795.       union wait status;
  796.   #else
  797. --- 123,130 ----
  798.           a message being edited when a user connection is
  799.           dropped is recovered by vi's expreserve program **/
  800.   
  801. !     int pfd[2], stat, pid, w, iteration;
  802. !     char *sh;
  803.   #if defined(BSD) && !defined(WEXITSTATUS)
  804.       union wait status;
  805.   #else
  806. ***************
  807. *** 128,175 ****
  808.       register int (*oldstop)(), (*oldstart)();
  809.   # endif 
  810.   #endif
  811. !     
  812. !     dprint(2, (debugfile,
  813. !         "System Call: %s\n\t%s\n", shell_type == SH? "/bin/sh" : shell,
  814. !         string));
  815.   
  816. ! #ifdef VFORK
  817. !     if ((pid = vfork()) == 0)
  818. ! #else
  819. !     if ((pid = fork()) == 0)
  820. ! #endif
  821. !     {
  822. !       setgid(groupid);    /* and group id            */
  823. !       setuid(userid);    /* back to the normal user! */
  824.   
  825. !       if(allow_signals) {
  826. !         /* program to exec should handle interrupt, accidental hangup, and stop signals */
  827. !         (void)signal(SIGHUP, SIG_DFL);
  828. !         if (allow_interrupt)
  829. !           (void)signal(SIGINT, SIG_DFL);
  830. !         else
  831. !           (void)signal(SIGINT, SIG_IGN);
  832. ! #ifdef SIGTSTP
  833. !         (void)signal(SIGTSTP, SIG_DFL);
  834. !         (void)signal(SIGCONT, SIG_DFL);
  835. ! #endif
  836. !       } else {
  837. !         /* program to exec should ignore interrupt, accidental hangup, and stop signals */
  838. !         (void)signal(SIGHUP, SIG_IGN);
  839. !         (void)signal(SIGINT, SIG_IGN);
  840. ! #ifdef SIGTSTP
  841. !         (void)signal(SIGTSTP, SIG_IGN);
  842. !         (void)signal(SIGCONT, SIG_IGN);
  843. ! #endif
  844. !       }
  845.   
  846. !       if (strlen(shell) > 0 && shell_type == USER_SHELL) {
  847. !         execl(shell, argv_zero(shell), "-c", string, (char *) 0);
  848. !       }
  849. !       else 
  850. !         execl("/bin/sh", "sh", "-c", string, (char *) 0);
  851. !       _exit(127);
  852.       }
  853.   
  854.       istat = signal(SIGINT, SIG_IGN);
  855.       qstat = signal(SIGQUIT, SIG_IGN);
  856. --- 141,165 ----
  857.       register int (*oldstop)(), (*oldstart)();
  858.   # endif 
  859.   #endif
  860. !     extern int errno;
  861.   
  862. !     sh = (shell_type == USER_SHELL) ? shell : "/bin/sh";
  863. !     dprint(2, (debugfile, "System Call: %s\n\t%s\n", sh, string));
  864.   
  865. !     /*
  866. !      * Note the neat trick with close-on-exec pipes.
  867. !      * If the child's exec() succeeds, then the pipe read returns zero.
  868. !      * Otherwise, it returns the zero byte written by the child
  869. !      * after the exec() is attempted.  This is the cleanest way I know
  870. !      * to discover whether an exec() failed.   --CHS
  871. !      */
  872.   
  873. !     if (pipe(pfd) == -1) {
  874. !       perror("pipe");
  875. !       return -1;
  876.       }
  877. +     fcntl(pfd[0], F_SETFD, 1);
  878. +     fcntl(pfd[1], F_SETFD, 1);
  879.   
  880.       istat = signal(SIGINT, SIG_IGN);
  881.       qstat = signal(SIGQUIT, SIG_IGN);
  882. ***************
  883. *** 178,204 ****
  884.       oldstart = signal(SIGCONT, SIG_DFL);
  885.   #endif
  886.   
  887. !     while ((w = wait(&status)) != pid && w != -1)
  888. !         ;
  889.   
  890.   
  891. !     if (w == pid) {
  892.   #ifdef    WEXITSTATUS
  893. !       stat = WEXITSTATUS(status);
  894.   #else
  895.   # ifdef    BSD
  896. !       if (status.w_retcode != 0) stat = status.w_retcode;
  897.   # else
  898. !       stat = status;
  899.   # endif
  900.   #endif
  901. !     }
  902. !     (void)signal(SIGINT, istat);
  903. !     (void)signal(SIGQUIT, qstat);
  904.   #ifdef SIGTSTP
  905. !     (void)signal(SIGTSTP, oldstop);
  906. !     (void)signal(SIGCONT, oldstart);
  907.   #endif
  908.   
  909.       return(stat);
  910. --- 168,254 ----
  911.       oldstart = signal(SIGCONT, SIG_DFL);
  912.   #endif
  913.   
  914. !     stat = -1;        /* Assume failure. */
  915.   
  916. +     for (iteration = 0; iteration < 5; ++iteration) {
  917. +       if (iteration > 0)
  918. +         sleep(2);
  919.   
  920. ! #ifdef VFORK
  921. !       pid = vfork();
  922. ! #else
  923. !       pid = fork();
  924. ! #endif
  925. !       if (pid != -1)
  926. !         break;
  927. !     }
  928. !     if (pid == -1) {
  929. !       perror("fork");
  930. !     }
  931. !     else if (pid == 0) {
  932. !       /*
  933. !        * Set group and user back to their original values.
  934. !        * Note that group must be set first.
  935. !        */
  936. !       setgid(groupid);
  937. !       setuid(userid);
  938. !       /*
  939. !        * Program to exec may or may not be able to handle
  940. !        * interrupt, quit, hangup and stop signals.
  941. !        */
  942. !       (void) signal(SIGHUP, allow_signals ? SIG_DFL : SIG_IGN);
  943. !       (void) signal(SIGINT, (allow_signals && allow_interrupt)?SIG_DFL:SIG_IGN);
  944. !       (void) signal(SIGQUIT, (allow_signals && allow_interrupt)?SIG_DFL:SIG_IGN);
  945. ! #ifdef SIGTSTP
  946. !       (void) signal(SIGTSTP, allow_signals ? SIG_DFL : SIG_IGN);
  947. !       (void) signal(SIGCONT, allow_signals ? SIG_DFL : SIG_IGN);
  948. ! #endif
  949. !       /* Go for it. */
  950. !       execl(sh, argv_zero(sh), "-c", string, (char *) 0);
  951. !       /* If exec fails, we write a byte to the pipe before exiting. */
  952. !       perror(sh);
  953. !       write(pfd[1], "", 1);
  954. !       _exit(127);
  955. !     }
  956. !     else {
  957. !       int rd;
  958. !       char ch;
  959. !       /* Try to read a byte from the pipe. */
  960. !       close(pfd[1]);
  961. !       rd = read(pfd[0], &ch, 1);
  962. !       close(pfd[0]);
  963. !       while ((w = wait(&status)) != pid)
  964. !           if (w == -1 && errno != EINTR)
  965. !           break;
  966. !       /* If we read a byte from the pipe, the exec failed. */
  967. !       if (rd > 0)
  968. !         stat = -1;
  969. !       else if (w == pid) {
  970.   #ifdef    WEXITSTATUS
  971. !         stat = WEXITSTATUS(status);
  972.   #else
  973.   # ifdef    BSD
  974. !         stat = status.w_retcode;
  975.   # else
  976. !         stat = status;
  977.   # endif
  978.   #endif
  979. !       }
  980. !       }
  981. !   
  982. !     (void) signal(SIGINT, istat);
  983. !     (void) signal(SIGQUIT, qstat);
  984.   #ifdef SIGTSTP
  985. !     (void) signal(SIGTSTP, oldstop);
  986. !     (void) signal(SIGCONT, oldstart);
  987.   #endif
  988.   
  989.       return(stat);
  990.  
  991. exit 0 # Just in case...
  992.