home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume44 / mailagent / patch12 next >
Internet Message Format  |  1994-09-22  |  53KB

  1. From: Raphael Manfredi <ram@acri.fr>
  2. Newsgroups: comp.sources.misc
  3. Subject: v44i086:  mailagent - Flexible mail filtering and processing package, v3.0, Patch12
  4. Date: 22 Sep 1994 12:12:27 -0500
  5. Organization: Advanced Computer Research Institute, Lyon, France
  6. Sender: kent@sparky.sterling.com
  7. Approved: kent@sparky.sterling.com
  8. Message-ID: <35sdtr$r4c@sparky.sterling.com>
  9. X-Md4-Signature: 93670c16558ccb1d64409606a494f576
  10.  
  11. Submitted-by: Raphael Manfredi <ram@acri.fr>
  12. Posting-number: Volume 44, Issue 86
  13. Archive-name: mailagent/patch12
  14. Environment: UNIX, Perl
  15. Patch-To: mailagent: Volume 41, Issue 1-26
  16.  
  17. [The latest patch for mailagent version 3.0 is #16.]
  18.  
  19. System: mailagent version 3.0
  20. Patch #: 12
  21. Priority: MEDIUM
  22. Subject: regenerated Configure with dist-3.0 PL35
  23. Subject: regenerated Makefile.SH with jmake 3.0 PL31
  24. Subject: new edusers script to edit users file
  25. Subject: created
  26. Subject: filter.sh now honours queuewait when defined
  27. Subject: new config parameters callout and linkdirs
  28. Subject: typo fix to enable correct lockfile timeout printing
  29. Subject: added fallback implementation for strcasecmp()
  30. Subject: made fatal() arguments long rather than int for 64-bit machines
  31. Subject: extended security checks to mimic those done by mailagent
  32. Subject: now performs &init_constants as soon as possible
  33. Subject: changed interface for &queue_mail to include first 2 letters
  34. Subject: context is loaded earlier to initialize callout queue
  35. Subject: added definition for $MAX_LINKS, $S_IWOTH, $S_IWGRP and &abs
  36. Subject: changed &email_addr to cache its result and not rely on $cf'user
  37. Subject: moved &init_signals to pl/signals.pl as &catch_signals
  38. Subject: new manual page for edusers
  39. Subject: documents new config parameters callout and linkdirs
  40. Subject: new filtering actions AFTER and DO
  41. Subject: variable msgpath is now defined within a PERL escape
  42. Subject: mention that PERL escape variables are available to new commands
  43. Subject: documents the edusers script and fuzzy address matching
  44. Subject: added fuzzy address matching to avoid duplicates
  45. Subject: detect hostile addresses before it is too late...
  46. Subject: detect strange status-change requests
  47. Subject: now performs locking before changing the users file
  48. Subject: inform user about unrecognized leave-alone requests
  49. Subject: optimize by not re-writing users file if not needed
  50. Subject: now updates new variable folder_saved with folder path
  51. Subject: added various escapes in strings for perl5 support
  52. Subject: create ~/agent.trace if unable to mail command trace back
  53. Subject: interface change for &qmail allows for better log messages
  54. Subject: implements new AFTER and DO filtering commands
  55. Subject: now escapes square brackets in strings for perl5
  56. Subject: defines new folder_saved variable to store folder path
  57. Subject: added escapes in strings for perl5 support
  58. Subject: builtins are now looked for in &run_builtins
  59. Subject: localized variables used by stat()
  60. Subject: added access routines to detect context changes
  61. Subject: context is now written back to disk only when changed
  62. Subject: added callout queue knowledge
  63. Subject: added the &do routine to support new DO filtering command
  64. Subject: replaced all deprecated 'do sub' calls with '&sub'
  65. Subject: typo prevented correct indexing in the @insert array
  66. Subject: propagated change to the &queue_mail interface
  67. Subject: added stubs for DO and AFTER commands
  68. Subject: local() statement was missing in &getdate parameters fetch
  69. Subject: added escapes in regexp for perl5 support
  70. Subject: mailhook package cleaning now done only for subroutines
  71. Subject: package name is separated with '::' in perl5
  72. Subject: added logging at level 25 to debug lexer
  73. Subject: better mismatched braces handling
  74. Subject: localized variables used by stat() and localtime()
  75. Subject: now knows about callout queue messages
  76. Subject: propagates folder_saved as msgpath in PERL escapes
  77. Subject: fixed regexp for perl5 support
  78. Subject: now updates folder_saved variable with file pathname
  79. Subject: ensures the newcmd file is secure
  80. Subject: propagates glob for folder_saved
  81. Subject: removed useless test which prevented correct processing
  82. Subject: builtins handled in &run_builtins to allow re-entrance
  83. Subject: changed interface of &qmail and &queue_mail for wider usage
  84. Subject: do not attempt parsing of config if variable is undefined
  85. Subject: lock rule cache before reading to prevent from concurrent updates
  86. Subject: new DO and AFTER commands
  87. Subject: symbolic directories are now specially handled
  88. Subject: new -m option to monitor agentlog changes via atail
  89. Subject: added regression tests for DO
  90. Subject: added callout queue file definition
  91. Subject: now checks that callout messages are properly listed
  92. Subject: added minimal support for perl5 dataloading
  93. Subject: updated with metaconfig 3.0 PL35
  94. Subject: nine new files
  95. Date: Thu Sep 22 16:43:34 MET DST 1994
  96. From: Raphael Manfredi <ram@acri.fr>
  97.  
  98. Description:
  99.     Regenerated Configure with dist-3.0 PL35 and most Makefile.SH
  100.     files with jmake 3.0 PL31.
  101.  
  102.     New edusers script to edit users file. The package command now
  103.     performs locking of the users file and edusers should be used
  104.     instead of a direct 'vi users' to ensure consistency and avoid
  105.     concurrent updating in the background.
  106.  
  107.     filter.sh now honours queuewait when defined. The C filter already
  108.     did but since  I don't use filter.sh, I sometimes forget about it.
  109.  
  110.     New config parameters callout and linkdirs. The callout parameter
  111.     must be defined if you wish to make use of the new AFTER command.
  112.     The linkdirs parameters controls security checks when facing a
  113.     symbolic directory. When set to ON, mailagent will actively try
  114.     to determine wether files under this symbolic link are secure.
  115.  
  116.     Typo fix in C filter to enable correct lockfile timeout printing.
  117.  
  118.     Added fallback implementation for strcasecmp() in case it is not
  119.     present in the libc.
  120.  
  121.     Made fatal() arguments long rather than int for 64-bit machines
  122.     in the C filter. Hope this won't break filter on 16-bit machines.
  123.     If it does, please let me know ASAP and we'll find something else.
  124.  
  125.     Extended security checks in the C filter to mimic those done by
  126.     mailagent.
  127.  
  128.     New filtering actions AFTER and DO. The AFTER command enables you
  129.     to install a callback for later, after a specified date. The DO
  130.     command lets you call an arbitrary perl routine and is to be
  131.     construed as a low-level access to mailagent's internal.
  132.  
  133.     Actually, combining AFTER and DO via the mailhook interface may be
  134.     useful to perform actions one a timeout has expired. For instance,
  135.     an automatic unsharing command could send a warning after 2 days
  136.     if some of the parts are still missing. Please refer to the
  137.     manual page for syntax details.
  138.  
  139.     Variable $msgpath is now defined within a PERL escape and refers
  140.     to the internal new $folder_saved variable. It points to the
  141.     path of the last saved message/folder.
  142.  
  143.     The mailagent manual page now mentions that PERL escape variables
  144.     are available to user-defined commands, albeit in the newcmd package
  145.     instead of mailhook.
  146.  
  147.     The package command now performs fuzzy address matching to avoid
  148.     duplicates, and tries to detect hostile addresses before it is too
  149.     late... Strange status-change requests are now logged and the users
  150.     file is locked before updating.
  151.  
  152.     The package command will send an error message when faced with a
  153.     leave-alone request for someone who has not been properly registered,
  154.     including a list of the closest e-mail addresses known so far.
  155.  
  156.     Added various escapes in strings and regular expressions for perl5
  157.     support. I even updated bin/perload to produce a dataloaded version
  158.     that can work with perl5 (&pack'name is now &pack::name with perl5).
  159.     However, mailagent fails about 22 of its tests with perl5, so use
  160.     at your own risks. This may either indicate bugs in mailagent's code
  161.     or bugs in perl5, or simply incompatibilities between perl4 and perl5.
  162.     I don't know, I haven't investigated yet.
  163.  
  164.     Create ~/agent.trace if unable to mail command trace back when
  165.     PROCESSing a message.
  166.  
  167.     Context is now written back to disk only when changed.
  168.  
  169.     Added callout queue knowledge, the 'mailagent -l' command will
  170.     also show callout messages stored to be fed as input to callbacks.
  171.  
  172.     Mailhook package cleaning now done only for subroutines. I suspect
  173.     cleaning of variables and hashes via type glob to be really buggy
  174.     in perl4. I haven't ported mailagent to perl5 yet, apart from basic
  175.     changes to let 'perl5 -c magent' run correctly... This may change
  176.     the outcome of tests like cmd/perl or cmd/umask (for the better,
  177.     I hope).
  178.  
  179.     Added logging at level 25 to debug lexer. Levels this high are not
  180.     documented anyway, but I'm just telling you in case you wonder how
  181.     mailagent parses your rule files.
  182.  
  183.     Better mismatched braces handling. A clear warning will now be issued
  184.     if you have mismatched braces in your actions. Before that, mailagent
  185.     could hung in the rule parsing.
  186.  
  187.     Ensures the newcmd file is secure. Since new commands are defined
  188.     there, one could replace some favorite commands of yours with
  189.     trojan horses. I said "could". Now they can't (shouldn't be able
  190.     to, unless I've goofed somewhere).
  191.  
  192.     Removed useless test which prevented correct history processing
  193.     and could cause bugs when issuing vacation messages: they would
  194.     be issued systematically instead of waiting for the correct timeout.
  195.  
  196.     Lock rule cache before reading to prevent from concurrent updates.
  197.  
  198.     New -m option in TEST to monitor agentlog changes via atail. Intended
  199.     to be used in desperate cases. See agent/test/README for details.
  200.  
  201.     Added regression tests for DO, but none for AFTER. Automatic testing
  202.     of that command is not easy. If you wish to contribute a test, you
  203.     are welcome... :-)
  204.  
  205.     nine new files
  206.  
  207.  
  208. Fix:    From rn, say "| patch -p -N -d DIR", where DIR is your mailagent source
  209.     directory.  Outside of rn, say "cd DIR; patch -p -N <thisarticle".
  210.     If you don't have the patch program, apply the following by hand,
  211.     or get patch (version 2.0, latest patchlevel).
  212.  
  213.     After patching:
  214.         *** DO NOTHING--INSTALL ALL PATCHES UP THROUGH #16 FIRST ***
  215.  
  216.     If patch indicates that patchlevel is the wrong version, you may need
  217.     to apply one or more previous patches, or the patch may already
  218.     have been applied.  See the patchlevel.h file to find out what has or
  219.     has not been applied.  In any event, don't continue with the patch.
  220.  
  221.     If you are missing previous patches they can be obtained from me:
  222.  
  223.         Raphael Manfredi <ram@acri.fr>
  224.  
  225.     If you send a mail message of the following form it will greatly speed
  226.     processing:
  227.  
  228.         Subject: Command
  229.         @SH mailpatch PATH mailagent 3.0 LIST
  230.                ^ note the c
  231.  
  232.     where PATH is a return path FROM ME TO YOU either in Internet notation,
  233.     or in bang notation from some well-known host, and LIST is the number
  234.     of one or more patches you need, separated by spaces, commas, and/or
  235.     hyphens.  Saying 35- says everything from 35 to the end.
  236.  
  237.     To get some more detailed instructions, send me the following mail:
  238.  
  239.         Subject: Command
  240.         @SH mailhelp PATH
  241.  
  242.  
  243. Index: patchlevel.h
  244. Prereq: 11
  245. 4c4
  246. < #define PATCHLEVEL 11
  247. ---
  248. > #define PATCHLEVEL 12
  249.  
  250. Index: Configure
  251. Prereq: 3.0.1.4
  252. *** Configure.old    Thu Sep 22 16:42:42 1994
  253. --- Configure    Thu Sep 22 16:42:44 1994
  254. ***************
  255. *** 18,26 ****
  256.   # archive site. Check with Archie if you don't know where that can be.)
  257.   #
  258.   
  259. ! # $Id: Configure,v 3.0.1.4 1994/07/01 14:50:29 ram Exp $
  260.   #
  261. ! # Generated on Fri Jul 01 16:47:56 MET DST 1994 [metaconfig 3.0 PL31]
  262.   
  263.   cat >/tmp/c1$$ <<EOF
  264.   ARGGGHHHH!!!!!
  265. --- 18,26 ----
  266.   # archive site. Check with Archie if you don't know where that can be.)
  267.   #
  268.   
  269. ! # $Id: Configure,v 3.0.1.5 1994/09/22 13:37:44 ram Exp $
  270.   #
  271. ! # Generated on Thu Sep 22 15:19:32 MET DST 1994 [metaconfig 3.0 PL35]
  272.   
  273.   cat >/tmp/c1$$ <<EOF
  274.   ARGGGHHHH!!!!!
  275. ***************
  276. *** 55,69 ****
  277.       ;;
  278.   esac
  279.   
  280. ! : Sanity checks
  281. ! PATH=".:$PATH:/bin:/usr/bin:/usr/local/bin:/usr/ucb:/usr/local:/usr/lbin"
  282. ! PATH=$PATH:'/usr/5bin:/etc:/usr/gnu/bin:/usr/new:/usr/new/bin:/usr/nbin'
  283. ! PATH=$PATH:'/sys5.3/bin:/sys5.3/usr/bin:/bsd4.3/bin:/bsd4.3/usr/ucb'
  284. ! PATH=$PATH:'/bsd4.3/usr/bin:/usr/bsd:/bsd43/bin:/usr/ccs/bin'
  285. ! PATH=$PATH:'/etc:/usr/lib:/usr/ucblib:/lib:/usr/ccs/lib'
  286. ! PATH=$PATH:'/sbin:/usr/sbin:/usr/libexec'
  287.   export PATH
  288.   
  289.   if test ! -t 0; then
  290.       echo "Say 'sh $me', not 'sh <$me'"
  291.       exit 1
  292. --- 55,81 ----
  293.       ;;
  294.   esac
  295.   
  296. ! : Proper PATH setting
  297. ! paths='/bin /usr/bin /usr/local/bin /usr/ucb /usr/local /usr/lbin'
  298. ! paths=$paths:'/usr/5bin /etc /usr/gnu/bin /usr/new /usr/new/bin /usr/nbin'
  299. ! paths=$paths:'/sys5.3/bin /sys5.3/usr/bin /bsd4.3/bin /bsd4.3/usr/ucb'
  300. ! paths=$paths:'/bsd4.3/usr/bin /usr/bsd /bsd43/bin /usr/ccs/bin'
  301. ! paths=$paths:'/etc /usr/lib /usr/ucblib /lib /usr/ccs/lib'
  302. ! paths=$paths:'/sbin /usr/sbin /usr/libexec'
  303. ! for p in $paths
  304. ! do
  305. !     case ":$PATH:" in
  306. !     *:$p:*) ;;
  307. !     *) test -d $p && PATH=$PATH:$p ;;
  308. !     esac
  309. ! done
  310. ! PATH=.:$PATH
  311.   export PATH
  312.   
  313. + : Sanity checks
  314.   if test ! -t 0; then
  315.       echo "Say 'sh $me', not 'sh <$me'"
  316.       exit 1
  317. ***************
  318. *** 211,216 ****
  319. --- 223,229 ----
  320.   d_bsdpgrp=''
  321.   d_setpgrp=''
  322.   d_setsid=''
  323. + d_strccmp=''
  324.   d_index=''
  325.   d_strchr=''
  326.   d_strerrm=''
  327. ***************
  328. *** 225,230 ****
  329. --- 238,244 ----
  330.   usevfork=''
  331.   d_voidsig=''
  332.   signal_t=''
  333. + defeditor=''
  334.   h_fcntl=''
  335.   h_sysfile=''
  336.   i_fcntl=''
  337. ***************
  338. *** 236,241 ****
  339. --- 250,256 ----
  340.   i_sysfilio=''
  341.   i_sysioctl=''
  342.   i_syssockio=''
  343. + i_sysparam=''
  344.   i_syswait=''
  345.   i_sgtty=''
  346.   i_termio=''
  347. ***************
  348. *** 288,293 ****
  349. --- 303,309 ----
  350.   patchlevel=''
  351.   perlpath=''
  352.   pidtype=''
  353. + prefix=''
  354.   installprivlib=''
  355.   privlib=''
  356.   privlibexp=''
  357. ***************
  358. *** 309,314 ****
  359. --- 325,331 ----
  360.   reg8=''
  361.   reg9=''
  362.   registers=''
  363. + rootid=''
  364.   installscript=''
  365.   scriptdir=''
  366.   scriptdirexp=''
  367. ***************
  368. *** 475,481 ****
  369.           esac
  370.           shift
  371.           ;;
  372. !     -V) echo "$me generated by metaconfig 3.0 PL31." >&2
  373.           exit 0;;
  374.       --) break;;
  375.       -*) echo "$me: unknown option $1" >&2; shift; error=true;;
  376. --- 492,498 ----
  377.           esac
  378.           shift
  379.           ;;
  380. !     -V) echo "$me generated by metaconfig 3.0 PL35." >&2
  381.           exit 0;;
  382.       --) break;;
  383.       -*) echo "$me: unknown option $1" >&2; shift; error=true;;
  384. ***************
  385. *** 631,638 ****
  386.   xlibpth='/usr/lib/386 /lib/386'
  387.   
  388.   : general looking path for locating libraries
  389. ! glibpth="/usr/lib/large /lib /usr/lib $xlibpth /lib/large"
  390. ! glibpth="$glibpth /usr/lib/small /lib/small"
  391.   glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib /usr/shlib"
  392.   
  393.   : Private path used by Configure to find libraries.  Its value
  394. --- 648,655 ----
  395.   xlibpth='/usr/lib/386 /lib/386'
  396.   
  397.   : general looking path for locating libraries
  398. ! glibpth="/lib/pa1.1 /usr/lib/large /lib /usr/lib $xlibpth"
  399. ! glibpth="$glibpth /lib/large /usr/lib/small /lib/small"
  400.   glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib /usr/shlib"
  401.   
  402.   : Private path used by Configure to find libraries.  Its value
  403. ***************
  404. *** 915,921 ****
  405.       spitshell=cat
  406.       echo " "
  407.       echo "Okay, let's see if #! works on this system..."
  408. !     echo "#!/bin/cat" >try
  409.       $eunicefix try
  410.       chmod +x try
  411.       ./try > today
  412. --- 932,940 ----
  413.       spitshell=cat
  414.       echo " "
  415.       echo "Okay, let's see if #! works on this system..."
  416. !     xcat=/bin/cat
  417. !     test -r $xcat || xcat=/usr/bin/cat
  418. !     echo "#!$xcat" >try
  419.       $eunicefix try
  420.       chmod +x try
  421.       ./try > today
  422. ***************
  423. *** 923,929 ****
  424.           echo "It does."
  425.           sharpbang='#!'
  426.       else
  427. !         echo "#! /bin/cat" > try
  428.           $eunicefix try
  429.           chmod +x try
  430.           ./try > today
  431. --- 942,948 ----
  432.           echo "It does."
  433.           sharpbang='#!'
  434.       else
  435. !         echo "#! $xcat" > try
  436.           $eunicefix try
  437.           chmod +x try
  438.           ./try > today
  439. ***************
  440. *** 938,947 ****
  441. --- 957,968 ----
  442.   else
  443.       echo "Your sh doesn't grok # comments--I will strip them later on."
  444.       shsharp=false
  445. +     cd ..
  446.       echo "exec grep -v '^[     ]*#'" >spitshell
  447.       chmod +x spitshell
  448.       $eunicefix spitshell
  449.       spitshell=`pwd`/spitshell
  450. +     cd UU
  451.       echo "I presume that if # doesn't work, #! won't work either!"
  452.       sharpbang=': use '
  453.   fi
  454. ***************
  455. *** 1037,1042 ****
  456. --- 1058,1064 ----
  457.   smail
  458.   test
  459.   uname
  460. + vi
  461.   zcat
  462.   "
  463.   pth=`echo $PATH | sed -e 's/:/ /g'`
  464. ***************
  465. *** 1832,1839 ****
  466.   $cat <<'EOM'
  467.   
  468.   Some systems have incompatible or broken versions of libraries.  Among
  469. ! the directories listed in the question below, please remove the one
  470. ! you know not to be holding relevant libraries.  Say "none" for none.
  471.   
  472.   EOM
  473.   case "$libpth" in
  474. --- 1854,1862 ----
  475.   $cat <<'EOM'
  476.   
  477.   Some systems have incompatible or broken versions of libraries.  Among
  478. ! the directories listed in the question below, please remove any you
  479. ! know not to be holding relevant libraries, and add any that are needed.
  480. ! Say "none" for none.
  481.   
  482.   EOM
  483.   case "$libpth" in
  484. ***************
  485. *** 2154,2160 ****
  486.   $grep fprintf libc.tmp > libc.ptf
  487.   xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
  488.   xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
  489. ! if com="$sed -n -e 's/^.* [ADTS]  *_[_.]*//p' -e 's/^.* [ADTS] //p'";\
  490.       eval $xscan;\
  491.       $contains '^fprintf$' libc.list >/dev/null 2>&1; then
  492.           eval $xrun
  493. --- 2177,2183 ----
  494.   $grep fprintf libc.tmp > libc.ptf
  495.   xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
  496.   xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
  497. ! if com="$sed -n -e 's/^.* [ADTSI]  *_[_.]*//p' -e 's/^.* [ADTSI] //p'";\
  498.       eval $xscan;\
  499.       $contains '^fprintf$' libc.list >/dev/null 2>&1; then
  500.           eval $xrun
  501. ***************
  502. *** 2545,2550 ****
  503. --- 2568,2576 ----
  504.       else
  505.           dflt='none'
  506.       fi
  507. +     case "$ccflags" in
  508. +     *-posix*) dflt="$dflt -posix" ;;
  509. +     esac
  510.       ;;
  511.   *) dflt="$ldflags";;
  512.   esac
  513. ***************
  514. *** 3235,3240 ****
  515. --- 3261,3270 ----
  516.   set setsid d_setsid
  517.   eval $inlibc
  518.   
  519. + : see if strcasecmp exists
  520. + set strcasecmp d_strccmp
  521. + eval $inlibc
  522.   : see if strerror and/or sys_errlist[] exist
  523.   echo " "
  524.   if set strerror val -f d_strerror; eval $csym; $val; then
  525. ***************
  526. *** 3333,3340 ****
  527.   $define)
  528.       echo " "
  529.       case "$usevfork" in
  530. !     true) dflt='y';;
  531. !     *) dflt='n';;
  532.       esac
  533.       rp="Some systems have problems with vfork().  Do you want to use it?"
  534.       . ./myread
  535. --- 3363,3370 ----
  536.   $define)
  537.       echo " "
  538.       case "$usevfork" in
  539. !     false) dflt='n';;
  540. !     *) dflt='y';;
  541.       esac
  542.       rp="Some systems have problems with vfork().  Do you want to use it?"
  543.       . ./myread
  544. ***************
  545. *** 3547,3552 ****
  546. --- 3577,3599 ----
  547.   Id='$Id'
  548.   Log='$Log'
  549.   
  550. + : determine default editor
  551. + echo " "
  552. + case "$defeditor" in
  553. + '')
  554. +     case "$_vi" in
  555. +     */*) dflt="$_vi";;
  556. +     *) dflt=/usr/ucb/vi;;
  557. +     esac
  558. +     ;;
  559. + *)  dflt="$defeditor"
  560. +     ;;
  561. + esac
  562. + fn=f/
  563. + rp="What is the default editor on your system?"
  564. + . ./getfile
  565. + defeditor="$ans"
  566.   : see if flock exists
  567.   set flock d_flock
  568.   eval $inlibc
  569. ***************
  570. *** 3650,3660 ****
  571.       afs=false
  572.   fi
  573.   
  574.   : determine where public executables go
  575.   echo " "
  576.   case "$bin" in
  577.   '')
  578. !     dflt=`./loc . /bin /usr/local/bin /usr/lbin /usr/local /usr/bin`
  579.       ;;
  580.   *)
  581.       dflt="$bin"
  582. --- 3697,3733 ----
  583.       afs=false
  584.   fi
  585.   
  586. + : determine root of directory hierarchy where package will be installed.
  587. + case "$prefix" in
  588. + '')
  589. +     dflt=`./loc . /usr/local /usr/local /local /opt /usr`
  590. +     ;;
  591. + *)
  592. +     dflt="$prefix"
  593. +     ;;
  594. + esac
  595. + $cat <<EOM
  596. + By default, $package will be installed in $dflt/bin, manual
  597. + pages under $dflt/man, etc..., i.e. with $dflt as prefix for
  598. + all installation directories. Typically set to /usr/local, but you
  599. + may choose /usr if you wish to install $package among your system
  600. + binaries. If you wish to have binaries under /bin but manual pages
  601. + under /usr/local/man, that's ok: you will be prompted separately
  602. + for each of the installation directories, the prefix being only used
  603. + to set defaults.
  604. + EOM
  605. + fn=d~
  606. + rp='Installation prefix to use?'
  607. + . ./getfile
  608. + prefix="$ans"
  609.   : determine where public executables go
  610.   echo " "
  611.   case "$bin" in
  612.   '')
  613. !     dflt="$prefix/bin"
  614.       ;;
  615.   *)
  616.       dflt="$bin"
  617. ***************
  618. *** 3700,3710 ****
  619.   echo "If you don't want the manual sources installed, answer 'none'."
  620.   case "$mansrc" in
  621.   '')
  622. !     lookpath='/usr/local/man/man1 /usr/local/man/man1 /usr/man/manl'
  623.       lookpath="$lookpath /usr/man/local/man1 /usr/man/l_man/man1"
  624.       lookpath="$lookpath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
  625.       lookpath="$lookpath /usr/man/man.L"
  626. !     mansrc=`./loc . $lookpath`
  627.       if $test -d "$mansrc"; then
  628.           dflt="$mansrc"
  629.       else
  630. --- 3773,3784 ----
  631.   echo "If you don't want the manual sources installed, answer 'none'."
  632.   case "$mansrc" in
  633.   '')
  634. !     lookpath="$prefix/man/man1 $prefix/man/u_man/man1 $prefix/man/l_man/man1"
  635. !     lookpath="$lookpath /usr/local/man/man1 /usr/local/man/man1 /usr/man/manl"
  636.       lookpath="$lookpath /usr/man/local/man1 /usr/man/l_man/man1"
  637.       lookpath="$lookpath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
  638.       lookpath="$lookpath /usr/man/man.L"
  639. !     mansrc=`./loc . $prefix/man/man1 $lookpath`
  640.       if $test -d "$mansrc"; then
  641.           dflt="$mansrc"
  642.       else
  643. ***************
  644. *** 3756,3764 ****
  645.   : determine where private executables go
  646.   case "$privlib" in
  647.   '')
  648. !     dflt=/usr/lib/$package
  649. !     $test -d /usr/local/lib && dflt=/usr/local/lib/$package
  650. !     $test -d /local/lib && dflt=/local/lib/$package
  651.       ;;
  652.   *)  dflt="$privlib"
  653.       ;;
  654. --- 3830,3836 ----
  655.   : determine where private executables go
  656.   case "$privlib" in
  657.   '')
  658. !     dflt=$prefix/lib/$package
  659.       ;;
  660.   *)  dflt="$privlib"
  661.       ;;
  662. ***************
  663. *** 3794,3800 ****
  664.       installprivlib="$privlibexp"
  665.   fi
  666.   
  667. ! : determine where public executables go
  668.   case "$scriptdir" in
  669.   '')
  670.       dflt="$bin"
  671. --- 3866,3872 ----
  672.       installprivlib="$privlibexp"
  673.   fi
  674.   
  675. ! : determine where public executable scripts go
  676.   case "$scriptdir" in
  677.   '')
  678.       dflt="$bin"
  679. ***************
  680. *** 3802,3807 ****
  681. --- 3874,3880 ----
  682.       $test -d /usr/share/scripts && dflt=/usr/share/scripts
  683.       $test -d /usr/share/bin && dflt=/usr/share/bin
  684.       $test -d /usr/local/script && dflt=/usr/local/script
  685. +     $test -d $prefix/script && dflt=$prefix/script
  686.       ;;
  687.   *)  dflt="$scriptdir"
  688.       ;;
  689. ***************
  690. *** 4200,4216 ****
  691.   . ./getfile
  692.   perlpath="$ans"
  693.   
  694.   : see what type pids are declared as in the kernel
  695. ! case "$pidtype" in
  696. ! '')
  697. !     if $contains 'pid_t;' `./findhdr sys/types.h` >/dev/null 2>&1 ; then
  698. !         dflt='pid_t';
  699. !     else
  700. !         dflt="int"
  701. !     fi
  702. !     ;;
  703. ! *)  dflt="$pidtype";;
  704. ! esac
  705.   echo " "
  706.   rp="What type are process ids on this system declared as?"
  707.   . ./myread
  708. --- 4273,4304 ----
  709.   . ./getfile
  710.   perlpath="$ans"
  711.   
  712. + : define an is-a-typedef? function
  713. + typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
  714. + case "$inclist" in
  715. + "") inclist="sys/types.h";;
  716. + esac;
  717. + eval "val=\$$var";
  718. + case "$val" in
  719. + "")
  720. +     $rm -f temp.c;
  721. +     for inc in $inclist; do
  722. +         echo "#include <$inc>" >>temp.c;
  723. +     done;
  724. +     $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
  725. +     if $contains $type temp.E >/dev/null 2>&1; then
  726. +         eval "$var=$type";
  727. +     else
  728. +         eval "$var=$def";
  729. +     fi;
  730. +     $rm -f temp.?;;
  731. + *) eval "$var=$val";;
  732. + esac'
  733.   : see what type pids are declared as in the kernel
  734. ! set pid_t pidtype int stdio.h sys/types.h
  735. ! eval $typedef
  736. ! dflt="$pidtype"
  737.   echo " "
  738.   rp="What type are process ids on this system declared as?"
  739.   . ./myread
  740. ***************
  741. *** 4272,4277 ****
  742. --- 4360,4373 ----
  743.   . ./.foo
  744.   $rm -f .foo
  745.   
  746. + : determine root id
  747. + echo " "
  748. + rootid=`$sed -e "/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*"'$'"/\1/" -e "q" -e "}" -e "d" </etc/passwd`
  749. + case "$rootid" in
  750. + '') rootid=0 ;;
  751. + *) echo "Root uid = $rootid" >&4 ;;
  752. + esac
  753.   : see if signal is declared as pointer to function returning int or void
  754.   echo " "
  755.   xxx=`./findhdr signal.h`
  756. ***************
  757. *** 4279,4293 ****
  758.   if $contains 'int.*\*[     ]*signal' $$.tmp >/dev/null 2>&1 ; then
  759.       echo "You have int (*signal())() instead of void." >&4
  760.       val="$undef"
  761. -     signal_t="int"
  762.   elif $contains 'void.*\*[     ]*signal' $$.tmp >/dev/null 2>&1 ; then
  763.       echo "You have void (*signal())() instead of int." >&4
  764.       val="$define"
  765. -     signal_t="void"
  766.   elif $contains 'extern[     ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
  767.       echo "You have int (*signal())() instead of void." >&4
  768.       val="$undef"
  769. -     signal_t="int"
  770.   else
  771.       case "$d_voidsig" in
  772.       '')
  773. --- 4375,4386 ----
  774. ***************
  775. *** 4295,4311 ****
  776.           dflt=void
  777.           rp="What type does your signal handler return?"
  778.           . ./myread
  779. !         signal_t="$ans"
  780. !         ;;
  781. !     *) echo "As you already told me, signal handler returns $signal_t." >&4;;
  782. !     esac
  783. !     case "$signal_t" in
  784. !     void) val="$define";;
  785. !     *) val="$undef";;
  786.       esac
  787.   fi
  788.   set d_voidsig
  789.   eval $setvar
  790.   $rm -f $$.tmp
  791.   
  792.   : figure out how to guarantee perl startup
  793. --- 4388,4409 ----
  794.           dflt=void
  795.           rp="What type does your signal handler return?"
  796.           . ./myread
  797. !         case "$ans" in
  798. !         v*) val="$define";;
  799. !         *) val="$undef";;
  800. !         esac;;
  801. !     "$define")
  802. !         echo "As you already told me, signal handler returns void." >&4;;
  803. !     *)
  804. !         echo "As you already told me, signal handler returns int." >&4;;
  805.       esac
  806.   fi
  807.   set d_voidsig
  808.   eval $setvar
  809. + case "$d_voidsig" in
  810. + "$define") signal_t="void";;
  811. + *) signal_t="int";;
  812. + esac
  813.   $rm -f $$.tmp
  814.   
  815.   : figure out how to guarantee perl startup
  816. ***************
  817. *** 4366,4392 ****
  818.   eval $setvar
  819.   
  820.   : see what type uids are declared as in the kernel
  821.   case "$uidtype" in
  822. ! '')
  823. !     if $contains 'uid_t;' `./findhdr sys/types.h` >/dev/null 2>&1 ; then
  824. !         dflt='uid_t';
  825. !     else
  826. !         xxx=`./findhdr sys/user.h`
  827. !         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
  828. !         case $1 in
  829. !         unsigned) dflt="$1 $2" ;;
  830. !         *) dflt="$1" ;;
  831. !         esac
  832. !     fi
  833.       ;;
  834. ! *)  dflt="$uidtype";;
  835.   esac
  836.   echo " "
  837.   rp="What is the type for user ids returned by getuid()?"
  838.   . ./myread
  839. ! val="$ans"
  840. ! set uidtype
  841. ! eval $setvar
  842.   
  843.   : check for void type
  844.   echo " "
  845. --- 4464,4486 ----
  846.   eval $setvar
  847.   
  848.   : see what type uids are declared as in the kernel
  849. + set uid_t uidtype xxx stdio.h sys/types.h
  850. + eval $typedef
  851.   case "$uidtype" in
  852. ! xxx)
  853. !     xxx=`./findhdr sys/user.h`
  854. !     set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
  855. !     case $1 in
  856. !     unsigned) dflt="$1 $2" ;;
  857. !     *) dflt="$1" ;;
  858. !     esac
  859.       ;;
  860. ! *) dflt="$uidtype";;
  861.   esac
  862.   echo " "
  863.   rp="What is the type for user ids returned by getuid()?"
  864.   . ./myread
  865. ! uidtype="$ans"
  866.   
  867.   : check for void type
  868.   echo " "
  869. ***************
  870. *** 4530,4535 ****
  871. --- 4624,4633 ----
  872.   set i_fcntl
  873.   eval $setvar
  874.   
  875. + : see if this is a sys/param system
  876. + set sys/param.h i_sysparam
  877. + eval $inhdr
  878.   : see if we should include time.h, sys/time.h, or both
  879.   echo " "
  880.   echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
  881. ***************
  882. *** 4650,4655 ****
  883. --- 4748,4754 ----
  884.   EOM
  885.       rp='Should I send mail to ram@acri.fr?'
  886.       dflt=y
  887. +     $test -f ../.config/nomail && dflt=n
  888.   fi
  889.   . ./myread
  890.   case "$ans" in
  891. ***************
  892. *** 4725,4736 ****
  893.   
  894.   $atsh package $usermail $package $baserev $patchlevel$opt
  895.   EOM
  896. !     $rm -f ../.config/mailauthor
  897.       cp ../patchlevel.h ../.config/mailauthor
  898.       ;;
  899.   *)
  900.       case "$dflt" in
  901. !     "y") echo "Oh well, maybe next time.";;
  902.       esac
  903.       ;;
  904.   esac
  905. --- 4824,4838 ----
  906.   
  907.   $atsh package $usermail $package $baserev $patchlevel$opt
  908.   EOM
  909. !     $rm -f ../.config/mailauthor ../.config/nomail
  910.       cp ../patchlevel.h ../.config/mailauthor
  911.       ;;
  912.   *)
  913.       case "$dflt" in
  914. !     "y")
  915. !         echo "Oh well, maybe next time."
  916. !         cp /dev/null ../.config/nomail
  917. !         ;;
  918.       esac
  919.       ;;
  920.   esac
  921. ***************
  922. *** 4760,4766 ****
  923.       guest:**paswword**:10:100:Mister Guest User:/usr/users:/bin/sh
  924.                                 ^^^^^^^^^^^^^^^^^
  925.   EOM
  926. ! rp="Berkeley/V7 format for full name in /etc/password?"
  927.   . ./myread
  928.   case "$ans" in
  929.   y*) d_passnames="$define"
  930. --- 4862,4868 ----
  931.       guest:**paswword**:10:100:Mister Guest User:/usr/users:/bin/sh
  932.                                 ^^^^^^^^^^^^^^^^^
  933.   EOM
  934. ! rp="Berkeley/V7 format for full name in /etc/passwd?"
  935.   . ./myread
  936.   case "$ans" in
  937.   y*) d_passnames="$define"
  938. ***************
  939. *** 5084,5089 ****
  940. --- 5186,5192 ----
  941.   d_bsdpgrp='$d_bsdpgrp'
  942.   d_setpgrp='$d_setpgrp'
  943.   d_setsid='$d_setsid'
  944. + d_strccmp='$d_strccmp'
  945.   d_index='$d_index'
  946.   d_strchr='$d_strchr'
  947.   d_strerrm='$d_strerrm'
  948. ***************
  949. *** 5098,5103 ****
  950. --- 5201,5207 ----
  951.   usevfork='$usevfork'
  952.   d_voidsig='$d_voidsig'
  953.   signal_t='$signal_t'
  954. + defeditor='$defeditor'
  955.   h_fcntl='$h_fcntl'
  956.   h_sysfile='$h_sysfile'
  957.   i_fcntl='$i_fcntl'
  958. ***************
  959. *** 5109,5114 ****
  960. --- 5213,5219 ----
  961.   i_sysfilio='$i_sysfilio'
  962.   i_sysioctl='$i_sysioctl'
  963.   i_syssockio='$i_syssockio'
  964. + i_sysparam='$i_sysparam'
  965.   i_syswait='$i_syswait'
  966.   i_sgtty='$i_sgtty'
  967.   i_termio='$i_termio'
  968. ***************
  969. *** 5161,5166 ****
  970. --- 5266,5272 ----
  971.   patchlevel='$patchlevel'
  972.   perlpath='$perlpath'
  973.   pidtype='$pidtype'
  974. + prefix='$prefix'
  975.   installprivlib='$installprivlib'
  976.   privlib='$privlib'
  977.   privlibexp='$privlibexp'
  978. ***************
  979. *** 5182,5187 ****
  980. --- 5288,5294 ----
  981.   reg8='$reg8'
  982.   reg9='$reg9'
  983.   registers='$registers'
  984. + rootid='$rootid'
  985.   installscript='$installscript'
  986.   scriptdir='$scriptdir'
  987.   scriptdirexp='$scriptdirexp'
  988.  
  989. Index: agent/man/package.SH
  990. Prereq: 3.0
  991. *** agent/man/package.SH.old    Thu Sep 22 16:43:00 1994
  992. --- agent/man/package.SH    Thu Sep 22 16:43:00 1994
  993. ***************
  994. *** 20,26 ****
  995.   .TH PACKAGE $manext
  996.   ''' @(#) Manual page for mailagent's package command
  997.   '''
  998. ! ''' $Id: package.SH,v 3.0 1993/11/29 13:48:31 ram Exp $
  999.   '''
  1000.   '''  Copyright (c) 1990-1993, Raphael Manfredi
  1001.   '''  
  1002. --- 20,26 ----
  1003.   .TH PACKAGE $manext
  1004.   ''' @(#) Manual page for mailagent's package command
  1005.   '''
  1006. ! ''' $Id: package.SH,v 3.0.1.1 1994/09/22 13:59:03 ram Exp $
  1007.   '''
  1008.   '''  Copyright (c) 1990-1993, Raphael Manfredi
  1009.   '''  
  1010. ***************
  1011. *** 33,46 ****
  1012.   '''  Original Author: Graham Stoney, 1993
  1013.   '''
  1014.   ''' $Log: package.SH,v $
  1015.   ''' Revision 3.0  1993/11/29  13:48:31  ram
  1016.   ''' Baseline for mailagent 3.0 netwide release.
  1017.   '''
  1018.   ''' 
  1019.   .SH NAME
  1020.   package \- register package user via mailagent
  1021.   .SH SYNOPSIS
  1022. ! package\fR \fIaddress\fR \fIsystem\fR \fIversion\fR \fIpatchlevel\fR
  1023.   [ mailpatches | notifypatches ]
  1024.   .SH DESCRIPTION
  1025.   This command is not intended to be run directly by a user, but may
  1026. --- 33,59 ----
  1027.   '''  Original Author: Graham Stoney, 1993
  1028.   '''
  1029.   ''' $Log: package.SH,v $
  1030. + ''' Revision 3.0.1.1  1994/09/22  13:59:03  ram
  1031. + ''' patch12: documents the edusers script and fuzzy address matching
  1032. + '''
  1033.   ''' Revision 3.0  1993/11/29  13:48:31  ram
  1034.   ''' Baseline for mailagent 3.0 netwide release.
  1035.   '''
  1036.   ''' 
  1037. + .de Ex        \" Start of Example
  1038. + .sp
  1039. + .in +5
  1040. + .nf
  1041. + ..
  1042. + .de Ef        \" End of Example
  1043. + .sp
  1044. + .in -5
  1045. + .fi
  1046. + ..
  1047.   .SH NAME
  1048.   package \- register package user via mailagent
  1049.   .SH SYNOPSIS
  1050. ! \fBpackage\fR \fIaddress\fR \fIsystem\fR \fIversion\fR \fIpatchlevel\fR
  1051.   [ mailpatches | notifypatches ]
  1052.   .SH DESCRIPTION
  1053.   This command is not intended to be run directly by a user, but may
  1054. ***************
  1055. *** 77,82 ****
  1056. --- 90,134 ----
  1057.   and notification request are saved in the file
  1058.   .I users
  1059.   in the package's directory.
  1060. + .PP
  1061. + .I Package
  1062. + performs an approximate address match in order to avoid duplicate entries.
  1063. + Whenever this elimination occurs, a warning message is issued in the logfile.
  1064. + Two addresses will be said equivalent if one of them has an added machine name
  1065. + or if they are really equal. Therefore, the following addresses are equivalent:
  1066. + .Ex
  1067. + ram@acri.fr
  1068. + ram@main.acri.fr
  1069. + .Ef
  1070. + whereas the following two are \fInot\fR equivalent, unfortunately:
  1071. + .Ex
  1072. + ram@acri.acri.fr
  1073. + ram@main.acri.fr
  1074. + .Ef
  1075. + When a user is asking to be left alone, it is important to let him know if
  1076. + the request failed, because he will be annoyed when the next set of patches
  1077. + is issued and he still gets them despite his previous request. Therefore, if
  1078. + no approximate match occurs, a warning message is sent back, with a list
  1079. + of addresses that are \fIclose\fR to his own e-mail address, but not
  1080. + equivalent. Fortunately, the following addresses are considered close:
  1081. + .Ex
  1082. + ram@acri.fr
  1083. + ram@somewhere.com
  1084. + raphael@main.acri.fr
  1085. + manfredi@acri.acri.fr
  1086. + .Ef
  1087. + because they either have the same login (important when someone changes
  1088. + company) or share the same domain or sub-domain part.
  1089. + .PP
  1090. + In order to edit the \fIusers\fR file, the
  1091. + .I edusers
  1092. + script should be used. For one thing, it will let you edit the
  1093. + .I users
  1094. + file from
  1095. + whatever package you name in the command line, but it will also properly lock
  1096. + the file so that the execution of \fIpackage\fR will stall for the duration
  1097. + of the manual edition (provided you have a strict locking policy defined in
  1098. + your \fI~/.mailagent\fR configuration file).
  1099.   .SH FILES
  1100.   .PD 0
  1101.   .TP 20
  1102. ***************
  1103. *** 118,126 ****
  1104.   Log/agentlog
  1105.   mailagent's log file
  1106.   .PD
  1107. ! .SH AUTHOR
  1108.   Graham Stoney <greyham@research.canon.oz.au>
  1109.   .SH "SEE ALSO"
  1110. ! mailagent($manext), metaconfig($manext).
  1111.   !GROK!THIS!
  1112.   chmod 444 package.$manext
  1113. --- 170,180 ----
  1114.   Log/agentlog
  1115.   mailagent's log file
  1116.   .PD
  1117. ! .SH AUTHORS
  1118.   Graham Stoney <greyham@research.canon.oz.au>
  1119. + .br
  1120. + Raphael Manfredi <ram@acri.fr> (minor enhancements)
  1121.   .SH "SEE ALSO"
  1122. ! edusers($manext), mailagent($manext), metaconfig($manext).
  1123.   !GROK!THIS!
  1124.   chmod 444 package.$manext
  1125.  
  1126. Index: agent/package.SH
  1127. Prereq: 3.0
  1128. *** agent/package.SH.old    Thu Sep 22 16:43:01 1994
  1129. --- agent/package.SH    Thu Sep 22 16:43:01 1994
  1130. ***************
  1131. *** 20,26 ****
  1132.       eval "exec perl -S \$0 \$*"
  1133.           if \$running_under_some_shell;
  1134.   
  1135. ! # $Id: package.SH,v 3.0 1993/11/29 13:48:32 ram Exp $
  1136.   #
  1137.   #  Copyright (c) 1990-1993, Raphael Manfredi
  1138.   #  
  1139. --- 20,26 ----
  1140.       eval "exec perl -S \$0 \$*"
  1141.           if \$running_under_some_shell;
  1142.   
  1143. ! # $Id: package.SH,v 3.0.1.1 1994/09/22 14:03:44 ram Exp $
  1144.   #
  1145.   #  Copyright (c) 1990-1993, Raphael Manfredi
  1146.   #  
  1147. ***************
  1148. *** 33,38 ****
  1149. --- 33,46 ----
  1150.   #  Original Author: Graham Stoney, 1993
  1151.   #
  1152.   # $Log: package.SH,v $
  1153. + # Revision 3.0.1.1  1994/09/22  14:03:44  ram
  1154. + # patch12: added fuzzy address matching to avoid duplicates
  1155. + # patch12: detect hostile addresses before it is too late...
  1156. + # patch12: detect strange status-change requests
  1157. + # patch12: now performs locking before changing the users file
  1158. + # patch12: inform user about unrecognized leave-alone requests
  1159. + # patch12: optimize by not re-writing users file if not needed
  1160. + #
  1161.   # Revision 3.0  1993/11/29  13:48:32  ram
  1162.   # Baseline for mailagent 3.0 netwide release.
  1163.   #
  1164. ***************
  1165. *** 48,55 ****
  1166. --- 56,65 ----
  1167.   $userlist = "users";
  1168.   $prog_name = $0;                # Who I am
  1169.   $prog_name =~ s|^.*/(.*)|$1|;    # Keep only base name
  1170. + $lockext = '.lock';                # Locking extension
  1171.   
  1172.   &read_config;        # First, read configuration file (in ~/.mailagent)
  1173. + &catch_signals;        # Protect against signals
  1174.   
  1175.   # take job number and command from environment
  1176.   # (passed by mailagent)
  1177. ***************
  1178. *** 84,89 ****
  1179. --- 94,105 ----
  1180.       @SH maillist $path
  1181.           ^ note the l";
  1182.   
  1183. + # Silently discard hostile addresses
  1184. + unless (&addr'valid($dest)) {
  1185. +     &add_log("FAILED (HOSTILE $dest)") if $loglvl > 1;
  1186. +     exit 0;
  1187. + }
  1188.   if (!$System{$system}) {
  1189.       open(MAILER, "|$cf'sendmail $cf'mailopt $path $cf'user");
  1190.       print MAILER
  1191. ***************
  1192. *** 244,251 ****
  1193.       }
  1194.   }
  1195.   
  1196.   # look for them in the userlist file
  1197. ! if (open(USERLIST,"<$userlist")) {
  1198.       while (<USERLIST>) {
  1199.           next if /^#/;
  1200.           chop if /\n$/;
  1201. --- 260,272 ----
  1202.       }
  1203.   }
  1204.   
  1205. + # Lock users file. That file should only be edited with the edusers script.
  1206. + if (0 != &acs_rqst($userlist)) {
  1207. +     &add_log("WARNING updating $userlist without lock") if $loglvl > 5;
  1208. + }
  1209.   # look for them in the userlist file
  1210. ! if (open(USERLIST, $userlist)) {
  1211.       while (<USERLIST>) {
  1212.           next if /^#/;
  1213.           chop if /\n$/;
  1214. ***************
  1215. *** 258,306 ****
  1216.           }
  1217.   
  1218.           # have we heard from them before?
  1219. !         if ($name eq $dest) {
  1220. !             $found = 1;
  1221.               $status = $letter;
  1222.               $pl = $theirpl if $theirpl ne '-';
  1223.           }
  1224.           push(@status, $status);
  1225.           push(@pl, $pl);
  1226.           push(@name, $name);
  1227.       }
  1228.       close USERLIST;
  1229.   }
  1230.   
  1231.   # add them if they're new.
  1232.   if (!$found) {
  1233. !     push(@name, $dest);
  1234. !     push(@status, $letter);
  1235. !     push(@pl, $theirpl);
  1236.   }
  1237.   
  1238.   # write the file back out.
  1239. ! open(USERLIST,">$userlist.new") || &abort("can't open new $userlist file");
  1240.   
  1241.   for ($i = 0; $i <= $#name; $i++) {
  1242.       print USERLIST $status[$i], "\t", $pl[$i], "\t", $name[$i], "\n"
  1243.           || &abort("error writing new $userlist file");
  1244.   }
  1245.   close(USERLIST) || &abort("error closing new $userlist file");
  1246.   rename("$userlist.new", $userlist);
  1247.   
  1248.   # Emergency exit with clean-up
  1249.   sub abort {
  1250.       local($reason) = shift(@_);        # Why we are exiting
  1251.       &fatal($reason);
  1252.   }
  1253.   
  1254.   !NO!SUBS!
  1255.   $grep -v '^;#' pl/fatal.pl >>package
  1256.   $grep -v '^;#' pl/add_log.pl >>package
  1257.   $grep -v '^;#' pl/read_conf.pl >>package
  1258. - $grep -v '^;#' pl/unpack.pl >>package
  1259. - $grep -v '^;#' pl/rangeargs.pl >>package
  1260. - $grep -v '^;#' pl/sendfile.pl >>package
  1261.   $grep -v '^;#' pl/distribs.pl >>package
  1262.   $grep -v '^;#' pl/secure.pl >>package
  1263.   chmod 755 package
  1264.   $eunicefix package
  1265. --- 279,427 ----
  1266.           }
  1267.   
  1268.           # have we heard from them before?
  1269. !         if (&addr'match($name, $dest)) {
  1270. !             if ($found++) {
  1271. !                 &add_log("WARNING removing duplicate for $dest ($name)")
  1272. !                     if $loglvl > 5;
  1273. !                 &add_log("NOTICE status for $dest was $oldstatus, now $status")
  1274. !                     if $oldstatus ne $status && $loglvl > 6;
  1275. !                 next;
  1276. !             }
  1277. !             $oldstatus = $status;    # Save status
  1278. !             $oldpl = $pl;            # And patchlevel
  1279.               $status = $letter;
  1280.               $pl = $theirpl if $theirpl ne '-';
  1281.           }
  1282. +         # save entry
  1283.           push(@status, $status);
  1284.           push(@pl, $pl);
  1285.           push(@name, $name);
  1286. +         # in case we have to go to &send_closest
  1287. +         push(@registered, $name) if $status =~ /^[MN]/;
  1288.       }
  1289.       close USERLIST;
  1290.   }
  1291.   
  1292. + # optimize a little...
  1293. + if ($found == 1 && $oldstatus eq $letter && $oldpl eq $theirpl) {
  1294. +     &add_log("NOTICE no change for $dest") if $loglvl > 6;
  1295. +     close USERLIST;
  1296. +     &free_file($userlist);
  1297. +     exit 0;
  1298. + }
  1299.   # add them if they're new.
  1300.   if (!$found) {
  1301. !     if ($letter eq 'L') {
  1302. !         &add_log("WARNING unknown $dest wants to be left alone") if $loglvl > 5;
  1303. !         &free_file($userlist);
  1304. !         &send_closest;
  1305. !         &add_log("FAILED (UNREGISTERED $dest)") if $loglvl > 1;
  1306. !         exit 0;
  1307. !     } else {
  1308. !         push(@name, $dest);
  1309. !         push(@status, $letter);
  1310. !         push(@pl, $theirpl);
  1311. !     }
  1312.   }
  1313.   
  1314.   # write the file back out.
  1315. ! open(USERLIST,">$userlist.new") ||
  1316. !     &abort("can't create new $userlist file: $!");
  1317.   
  1318.   for ($i = 0; $i <= $#name; $i++) {
  1319.       print USERLIST $status[$i], "\t", $pl[$i], "\t", $name[$i], "\n"
  1320.           || &abort("error writing new $userlist file");
  1321.   }
  1322.   close(USERLIST) || &abort("error closing new $userlist file");
  1323.   rename("$userlist.new", $userlist);
  1324. + &free_file($userlist);
  1325.   
  1326.   # Emergency exit with clean-up
  1327.   sub abort {
  1328.       local($reason) = shift(@_);        # Why we are exiting
  1329. +     &free_file($userlist);
  1330.       &fatal($reason);
  1331.   }
  1332.   
  1333. + # Send closest matching addresses, among @registered
  1334. + sub send_closest {
  1335. +     open(MAILER, "|$cf'sendmail $cf'mailopt $path $cf'user") ||
  1336. +         do {
  1337. +             &add_log("SYSERR fork: $!") if $loglvl;
  1338. +             &add_log("ERROR cannot launch $cf'sendmail") if $loglvl;
  1339. +         };
  1340. +     print MAILER
  1341. + "To: $path
  1342. + Subject: You were not recorded as a $system $version user
  1343. + X-Mailer: mailagent [version $mversion PL$patchlevel]
  1344. + I can't honour your desire to be left alone for $system version $version
  1345. + updates because you were not found among the registered users.
  1346. + Your command was: $fullcmd
  1347. + For your information, here is the list of the closest addresses to your own
  1348. + e-mail address ($dest) that are registered:
  1349. + ";
  1350. +     local($first) = '';
  1351. +     foreach $addr (@registered) {
  1352. +         if (&addr'close($dest, $addr)) {
  1353. +             print MAILER "\t$addr\n";
  1354. +             $first = $addr if $first eq '';
  1355. +         }
  1356. +     }
  1357. +     print MAILER <<EOM if $first ne '';
  1358. + Assuming you registered using the address $first,
  1359. + you may request to be left alone by sending me the following:
  1360. +     Subject: Command
  1361. +     @SH package $first $system $version
  1362. + This is only an example, of course. You must pick the correct address
  1363. + among the listed set.
  1364. + If none of the addresses listed above are correct, please don't try them.
  1365. + EOM
  1366. +     print MAILER <<EOM if $first eq '';
  1367. +     *** None found ***
  1368. + This probably means you either never registered, or you used an entirely
  1369. + different e-mail address to do so.
  1370. + EOM
  1371. +     print MAILER <<EOM;
  1372. + I suggest you re-run the Configure script from the original $system
  1373. + distribution and ask to be left alone from there. If you kept the generated
  1374. + config.sh and run Configure on the same machine you did the first time, that
  1375. + should un-register you properly.
  1376. + -- $prog_name speaking for $cf'user
  1377. + EOM
  1378. +     close MAILER;
  1379. +     if ($?) {
  1380. +         &add_log("ERROR cannot send closest addr list") if $loglvl;
  1381. +     } else {
  1382. +         &add_log("MSG closest addr list") if $loglvl > 6;
  1383. +     }
  1384. + }
  1385.   !NO!SUBS!
  1386.   $grep -v '^;#' pl/fatal.pl >>package
  1387.   $grep -v '^;#' pl/add_log.pl >>package
  1388.   $grep -v '^;#' pl/read_conf.pl >>package
  1389.   $grep -v '^;#' pl/distribs.pl >>package
  1390.   $grep -v '^;#' pl/secure.pl >>package
  1391. + $grep -v '^;#' pl/addr.pl >>package
  1392. + $grep -v '^;#' pl/acs_rqst.pl >>package
  1393. + $grep -v '^;#' pl/free_file.pl >>package
  1394. + $grep -v '^;#' pl/checklock.pl >>package
  1395. + $grep -v '^;#' pl/signals.pl >>package
  1396.   chmod 755 package
  1397.   $eunicefix package
  1398.  
  1399. Index: Makefile.SH
  1400. *** Makefile.SH.old    Thu Sep 22 16:42:45 1994
  1401. --- Makefile.SH    Thu Sep 22 16:42:45 1994
  1402. ***************
  1403. *** 1,4 ****
  1404. ! : Makefile.SH generated from Jmake.tmpl and Jmakefile [jmake 3.0 PL14]
  1405.   : $X-Id: Jmake.tmpl,v 3.0.1.1 1993/08/20 07:36:36 ram Exp ram $
  1406.   
  1407.   case $CONFIG in
  1408. --- 1,4 ----
  1409. ! : Makefile.SH generated from Jmake.tmpl and Jmakefile [jmake 3.0 PL31]
  1410.   : $X-Id: Jmake.tmpl,v 3.0.1.1 1993/08/20 07:36:36 ram Exp ram $
  1411.   
  1412.   case $CONFIG in
  1413. ***************
  1414. *** 53,59 ****
  1415.   ########################################################################
  1416.   # Start of Jmakefile
  1417.   
  1418. ! # $X-Id: Jmakefile,v 2.9 92/07/14 16:46:57 ram Exp $
  1419.   #
  1420.   #  Copyright (c) 1990-1993, Raphael Manfredi
  1421.   #  
  1422. --- 53,59 ----
  1423.   ########################################################################
  1424.   # Start of Jmakefile
  1425.   
  1426. ! # $X-Id: Jmakefile,v 3.0 1993/11/29 13:47:34 ram Exp ram $
  1427.   #
  1428.   #  Copyright (c) 1990-1993, Raphael Manfredi
  1429.   #  
  1430. ***************
  1431. *** 63,69 ****
  1432.   #  that same Artistic License; a copy of which may be found at the root
  1433.   #  of the source tree for mailagent 3.0.
  1434.   #
  1435. ! # $X-Log$
  1436.   
  1437.   all::
  1438.   
  1439. --- 63,72 ----
  1440.   #  that same Artistic License; a copy of which may be found at the root
  1441.   #  of the source tree for mailagent 3.0.
  1442.   #
  1443. ! # $X-Log: Jmakefile,v $
  1444. ! # Revision 3.0  1993/11/29  13:47:34  ram
  1445. ! # Baseline for mailagent 3.0 netwide release.
  1446. ! #
  1447.   
  1448.   all::
  1449.   
  1450.  
  1451. Index: agent/Makefile.SH
  1452. *** agent/Makefile.SH.old    Thu Sep 22 16:42:46 1994
  1453. --- agent/Makefile.SH    Thu Sep 22 16:42:46 1994
  1454. ***************
  1455. *** 1,4 ****
  1456. ! : Makefile.SH generated from Jmake.tmpl and Jmakefile [jmake 3.0 PL14]
  1457.   : $X-Id: Jmake.tmpl,v 3.0.1.1 1993/08/20 07:36:36 ram Exp ram $
  1458.   
  1459.   case $CONFIG in
  1460. --- 1,4 ----
  1461. ! : Makefile.SH generated from Jmake.tmpl and Jmakefile [jmake 3.0 PL31]
  1462.   : $X-Id: Jmake.tmpl,v 3.0.1.1 1993/08/20 07:36:36 ram Exp ram $
  1463.   
  1464.   case $CONFIG in
  1465. ***************
  1466. *** 68,74 ****
  1467.   ########################################################################
  1468.   # Start of Jmakefile
  1469.   
  1470. ! # $X-Id: Jmakefile,v 2.9.1.2 92/08/26 12:33:22 ram Exp $
  1471.   #
  1472.   #  Copyright (c) 1990-1993, Raphael Manfredi
  1473.   #  
  1474. --- 68,74 ----
  1475.   ########################################################################
  1476.   # Start of Jmakefile
  1477.   
  1478. ! # $X-Id: Jmakefile,v 3.0 1993/11/29 13:47:37 ram Exp ram $
  1479.   #
  1480.   #  Copyright (c) 1990-1993, Raphael Manfredi
  1481.   #  
  1482. ***************
  1483. *** 78,86 ****
  1484.   #  that same Artistic License; a copy of which may be found at the root
  1485.   #  of the source tree for mailagent 3.0.
  1486.   #
  1487. ! # $X-Log$
  1488.   
  1489. ! BIN = mailpatch mailhelp maillist maildist package
  1490.   
  1491.   all:: $(BIN)
  1492.   
  1493. --- 78,89 ----
  1494.   #  that same Artistic License; a copy of which may be found at the root
  1495.   #  of the source tree for mailagent 3.0.
  1496.   #
  1497. ! # $X-Log: Jmakefile,v $
  1498. ! # Revision 3.0  1993/11/29  13:47:37  ram
  1499. ! # Baseline for mailagent 3.0 netwide release.
  1500. ! #
  1501.   
  1502. ! BIN = mailpatch mailhelp maillist maildist package edusers
  1503.   
  1504.   all:: $(BIN)
  1505.   
  1506. ***************
  1507. *** 102,107 ****
  1508. --- 105,113 ----
  1509.   package: package.SH
  1510.       /bin/sh package.SH
  1511.   
  1512. + edusers: edusers.SH
  1513. +     /bin/sh edusers.SH
  1514.   
  1515.   install:: $(SCRIPTS) $(LSCRIPTS)
  1516.       @for file in $(SCRIPTS) $(LSCRIPTS); do \
  1517. ***************
  1518. *** 153,158 ****
  1519. --- 159,165 ----
  1520.       maillist.SH \
  1521.       maildist.SH \
  1522.       package.SH \
  1523. +     edusers.SH \
  1524.       magent.SH 
  1525.   
  1526.   depend::
  1527.  
  1528. Index: agent/files/Makefile.SH
  1529. *** agent/files/Makefile.SH.old    Thu Sep 22 16:42:47 1994
  1530. --- agent/files/Makefile.SH    Thu Sep 22 16:42:47 1994
  1531. ***************
  1532. *** 1,4 ****
  1533. ! : Makefile.SH generated from Jmake.tmpl and Jmakefile [jmake 3.0 PL14]
  1534.   : $X-Id: Jmake.tmpl,v 3.0.1.1 1993/08/20 07:36:36 ram Exp ram $
  1535.   
  1536.   case $CONFIG in
  1537. --- 1,4 ----
  1538. ! : Makefile.SH generated from Jmake.tmpl and Jmakefile [jmake 3.0 PL31]
  1539.   : $X-Id: Jmake.tmpl,v 3.0.1.1 1993/08/20 07:36:36 ram Exp ram $
  1540.   
  1541.   case $CONFIG in
  1542. ***************
  1543. *** 55,61 ****
  1544.   ########################################################################
  1545.   # Start of Jmakefile
  1546.   
  1547. ! # $X-Id: Jmakefile,v 2.9 92/07/14 16:47:32 ram Exp $
  1548.   #
  1549.   #  Copyright (c) 1990-1993, Raphael Manfredi
  1550.   #  
  1551. --- 55,61 ----
  1552.   ########################################################################
  1553.   # Start of Jmakefile
  1554.   
  1555. ! # $X-Id: Jmakefile,v 3.0 1993/11/29 13:47:46 ram Exp ram $
  1556.   #
  1557.   #  Copyright (c) 1990-1993, Raphael Manfredi
  1558.   #  
  1559. ***************
  1560. *** 65,71 ****
  1561.   #  that same Artistic License; a copy of which may be found at the root
  1562.   #  of the source tree for mailagent 3.0.
  1563.   #
  1564. ! # $X-Log$
  1565.   
  1566.   FILES = agenthelp commands distribs filter.sh mailagent.cf proglist \
  1567.       chkagent.sh
  1568. --- 65,74 ----
  1569.   #  that same Artistic License; a copy of which may be found at the root
  1570.   #  of the source tree for mailagent 3.0.
  1571.   #
  1572. ! # $X-Log: Jmakefile,v $
  1573. ! # Revision 3.0  1993/11/29  13:47:46  ram
  1574. ! # Baseline for mailagent 3.0 netwide release.
  1575. ! #
  1576.   
  1577.   FILES = agenthelp commands distribs filter.sh mailagent.cf proglist \
  1578.       chkagent.sh
  1579.  
  1580. Index: agent/files/help/Makefile.SH
  1581. *** agent/files/help/Makefile.SH.old    Thu Sep 22 16:42:49 1994
  1582. --- agent/files/help/Makefile.SH    Thu Sep 22 16:42:49 1994
  1583. ***************
  1584. *** 1,4 ****
  1585. ! : Makefile.SH generated from Jmake.tmpl and Jmakefile [jmake 3.0 PL14]
  1586.   : $X-Id: Jmake.tmpl,v 3.0.1.1 1993/08/20 07:36:36 ram Exp ram $
  1587.   
  1588.   case $CONFIG in
  1589. --- 1,4 ----
  1590. ! : Makefile.SH generated from Jmake.tmpl and Jmakefile [jmake 3.0 PL31]
  1591.   : $X-Id: Jmake.tmpl,v 3.0.1.1 1993/08/20 07:36:36 ram Exp ram $
  1592.   
  1593.   case $CONFIG in
  1594. ***************
  1595. *** 50,56 ****
  1596.   ########################################################################
  1597.   # Start of Jmakefile
  1598.   
  1599. ! # $X-Id: Jmakefile,v 2.9 92/07/14 16:47:32 ram Exp $
  1600.   #
  1601.   #  Copyright (c) 1990-1993, Raphael Manfredi
  1602.   #  
  1603. --- 50,56 ----
  1604.   ########################################################################
  1605.   # Start of Jmakefile
  1606.   
  1607. ! # $X-Id: Jmakefile,v 3.0 1993/11/29 13:47:52 ram Exp ram $
  1608.   #
  1609.   #  Copyright (c) 1990-1993, Raphael Manfredi
  1610.   #  
  1611. ***************
  1612. *** 60,66 ****
  1613.   #  that same Artistic License; a copy of which may be found at the root
  1614.   #  of the source tree for mailagent 3.0.
  1615.   #
  1616. ! # $X-Log$
  1617.   
  1618.   FILES = addauth approve delpower end getauth help newpower \
  1619.       passwd password power release remauth set setauth user
  1620. --- 60,69 ----
  1621.   #  that same Artistic License; a copy of which may be found at the root
  1622.   #  of the source tree for mailagent 3.0.
  1623.   #
  1624. ! # $X-Log: Jmakefile,v $
  1625. ! # Revision 3.0  1993/11/29  13:47:52  ram
  1626. ! # Baseline for mailagent 3.0 netwide release.
  1627. ! #
  1628.   
  1629.   FILES = addauth approve delpower end getauth help newpower \
  1630.       passwd password power release remauth set setauth user
  1631.  
  1632. Index: agent/filter/Makefile.SH
  1633. *** agent/filter/Makefile.SH.old    Thu Sep 22 16:42:50 1994
  1634. --- agent/filter/Makefile.SH    Thu Sep 22 16:42:50 1994
  1635. ***************
  1636. *** 1,4 ****
  1637. ! : Makefile.SH generated from Jmake.tmpl and Jmakefile [jmake 3.0 PL14]
  1638.   : $X-Id: Jmake.tmpl,v 3.0.1.1 1993/08/20 07:36:36 ram Exp ram $
  1639.   
  1640.   case $CONFIG in
  1641. --- 1,4 ----
  1642. ! : Makefile.SH generated from Jmake.tmpl and Jmakefile [jmake 3.0 PL31]
  1643.   : $X-Id: Jmake.tmpl,v 3.0.1.1 1993/08/20 07:36:36 ram Exp ram $
  1644.   
  1645.   case $CONFIG in
  1646. ***************
  1647. *** 75,81 ****
  1648.   ########################################################################
  1649.   # Start of Jmakefile
  1650.   
  1651. ! # $X-Id: Jmakefile,v 2.9 92/07/14 18:41:10 ram Exp $
  1652.   #
  1653.   #  Copyright (c) 1990-1993, Raphael Manfredi
  1654.   #  
  1655. --- 75,81 ----
  1656.   ########################################################################
  1657.   # Start of Jmakefile
  1658.   
  1659. ! # $X-Id: Jmakefile,v 3.0 1993/11/29 13:48:04 ram Exp ram $
  1660.   #
  1661.   #  Copyright (c) 1990-1993, Raphael Manfredi
  1662.   #  
  1663. ***************
  1664. *** 85,91 ****
  1665.   #  that same Artistic License; a copy of which may be found at the root
  1666.   #  of the source tree for mailagent 3.0.
  1667.   #
  1668. ! # $X-Log$
  1669.   
  1670.   # Files used to build the application
  1671.   SRC = environ.c hash.c io.c lock.c logfile.c main.c misc.c msg.c parser.c \
  1672. --- 85,94 ----
  1673.   #  that same Artistic License; a copy of which may be found at the root
  1674.   #  of the source tree for mailagent 3.0.
  1675.   #
  1676. ! # $X-Log: Jmakefile,v $
  1677. ! # Revision 3.0  1993/11/29  13:48:04  ram
  1678. ! # Baseline for mailagent 3.0 netwide release.
  1679. ! #
  1680.   
  1681.   # Files used to build the application
  1682.   SRC = environ.c hash.c io.c lock.c logfile.c main.c misc.c msg.c parser.c \
  1683.  
  1684. Index: agent/man/Makefile.SH
  1685. *** agent/man/Makefile.SH.old    Thu Sep 22 16:42:55 1994
  1686. --- agent/man/Makefile.SH    Thu Sep 22 16:42:55 1994
  1687. ***************
  1688. *** 1,4 ****
  1689. ! : Makefile.SH generated from Jmake.tmpl and Jmakefile [jmake 3.0 PL14]
  1690.   : $X-Id: Jmake.tmpl,v 3.0.1.1 1993/08/20 07:36:36 ram Exp ram $
  1691.   
  1692.   case $CONFIG in
  1693. --- 1,4 ----
  1694. ! : Makefile.SH generated from Jmake.tmpl and Jmakefile [jmake 3.0 PL31]
  1695.   : $X-Id: Jmake.tmpl,v 3.0.1.1 1993/08/20 07:36:36 ram Exp ram $
  1696.   
  1697.   case $CONFIG in
  1698. ***************
  1699. *** 64,70 ****
  1700.   ########################################################################
  1701.   # Start of Jmakefile
  1702.   
  1703. ! # $X-Id: Jmakefile,v 2.9 92/07/14 16:49:04 ram Exp $
  1704.   #
  1705.   #  Copyright (c) 1990-1993, Raphael Manfredi
  1706.   #  
  1707. --- 64,70 ----
  1708.   ########################################################################
  1709.   # Start of Jmakefile
  1710.   
  1711. ! # $X-Id: Jmakefile,v 3.0 1993/11/29 13:48:25 ram Exp ram $
  1712.   #
  1713.   #  Copyright (c) 1990-1993, Raphael Manfredi
  1714.   #  
  1715. ***************
  1716. *** 74,83 ****
  1717.   #  that same Artistic License; a copy of which may be found at the root
  1718.   #  of the source tree for mailagent 3.0.
  1719.   #
  1720. ! # $X-Log$
  1721.   
  1722.   MPAGES = mailagent.$(L) maildist.$(L) maillist.$(L) mailhelp.$(L) \
  1723. !     mailpatch.$(L) package.$(L)
  1724.   
  1725.   all:: $(MPAGES)
  1726.   
  1727. --- 74,86 ----
  1728.   #  that same Artistic License; a copy of which may be found at the root
  1729.   #  of the source tree for mailagent 3.0.
  1730.   #
  1731. ! # $X-Log: Jmakefile,v $
  1732. ! # Revision 3.0  1993/11/29  13:48:25  ram
  1733. ! # Baseline for mailagent 3.0 netwide release.
  1734. ! #
  1735.   
  1736.   MPAGES = mailagent.$(L) maildist.$(L) maillist.$(L) mailhelp.$(L) \
  1737. !     mailpatch.$(L) package.$(L) edusers.$(L)
  1738.   
  1739.   all:: $(MPAGES)
  1740.   
  1741.  
  1742. Index: agent/test/Makefile.SH
  1743. *** agent/test/Makefile.SH.old    Thu Sep 22 16:43:24 1994
  1744. --- agent/test/Makefile.SH    Thu Sep 22 16:43:24 1994
  1745. ***************
  1746. *** 1,4 ****
  1747. ! : Makefile.SH generated from Jmake.tmpl and Jmakefile [jmake 3.0 PL14]
  1748.   : $X-Id: Jmake.tmpl,v 3.0.1.1 1993/08/20 07:36:36 ram Exp ram $
  1749.   
  1750.   case $CONFIG in
  1751. --- 1,4 ----
  1752. ! : Makefile.SH generated from Jmake.tmpl and Jmakefile [jmake 3.0 PL31]
  1753.   : $X-Id: Jmake.tmpl,v 3.0.1.1 1993/08/20 07:36:36 ram Exp ram $
  1754.   
  1755.   case $CONFIG in
  1756. ***************
  1757. *** 48,54 ****
  1758.   ########################################################################
  1759.   # Start of Jmakefile
  1760.   
  1761. ! # $X-Id: Jmakefile,v 2.9.1.1 92/08/02 16:14:36 ram Exp $
  1762.   #
  1763.   #  Copyright (c) 1990-1993, Raphael Manfredi
  1764.   #  
  1765. --- 48,54 ----
  1766.   ########################################################################
  1767.   # Start of Jmakefile
  1768.   
  1769. ! # $X-Id: Jmakefile,v 3.0 1993/11/29 13:49:20 ram Exp ram $
  1770.   #
  1771.   #  Copyright (c) 1990-1993, Raphael Manfredi
  1772.   #  
  1773. ***************
  1774. *** 58,64 ****
  1775.   #  that same Artistic License; a copy of which may be found at the root
  1776.   #  of the source tree for mailagent 3.0.
  1777.   #
  1778. ! # $X-Log$
  1779.   
  1780.   all::
  1781.       @echo "The following may take a while..."
  1782. --- 58,67 ----
  1783.   #  that same Artistic License; a copy of which may be found at the root
  1784.   #  of the source tree for mailagent 3.0.
  1785.   #
  1786. ! # $X-Log: Jmakefile,v $
  1787. ! # Revision 3.0  1993/11/29  13:49:20  ram
  1788. ! # Baseline for mailagent 3.0 netwide release.
  1789. ! #
  1790.   
  1791.   all::
  1792.       @echo "The following may take a while..."
  1793.  
  1794. *** End of Patch 12 ***
  1795.  
  1796. exit 0 # Just in case...
  1797.