home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #30 / NN_1992_30.iso / spool / comp / sources / misc / 4166 < prev    next >
Encoding:
Text File  |  1992-12-12  |  17.5 KB  |  606 lines

  1. Newsgroups: comp.sources.misc
  2. Path: sparky!kent
  3. From: ram@eiffel.com (Raphael Manfredi)
  4. Subject:  v34i026:  mailagent - Rule Based Mail Filtering, Patch14
  5. Message-ID: <1992Dec13.022430.243@sparky.imd.sterling.com>
  6. Followup-To: comp.sources.d
  7. X-Md4-Signature: df91a91cac0f46022c035ec461e17658
  8. Sender: kent@sparky.imd.sterling.com (Kent Landfield)
  9. Organization: Interactive Software Engineering, Santa Barbara CA
  10. References: <1992Dec13.022249.29882@sparky.imd.sterling.com>
  11. Date: Sun, 13 Dec 1992 02:24:30 GMT
  12. Approved: kent@sparky.imd.sterling.com
  13. Lines: 591
  14.  
  15. Submitted-by: ram@eiffel.com (Raphael Manfredi)
  16. Posting-number: Volume 34, Issue 26
  17. Archive-name: mailagent/patch14
  18. Environment: Perl, Sendmail, UNIX
  19. Patch-To: mailagent: Volume 33, Issue 93-109
  20.  
  21. [The latest patch for mailagent version 2.9 is #14.]
  22.  
  23. System: mailagent version 2.9
  24. Patch #: 14
  25. Priority: MEDIUM
  26. Subject: patch #13, continued
  27. Date: Tue Dec  1 10:14:37 PST 1992
  28. From: Raphael Manfredi <ram@eiffel.com>
  29.  
  30. Description:
  31.     See patch #13.
  32.  
  33.  
  34. Fix:    From rn, say "| patch -p -N -d DIR", where DIR is your mailagent source
  35.     directory.  Outside of rn, say "cd DIR; patch -p -N <thisarticle".
  36.     If you don't have the patch program, apply the following by hand,
  37.     or get patch (version 2.0, latest patchlevel).
  38.  
  39.     After patching:
  40.         Configure -d
  41.         make
  42.         make install
  43.         make install.man
  44.  
  45.     If patch indicates that patchlevel is the wrong version, you may need
  46.     to apply one or more previous patches, or the patch may already
  47.     have been applied.  See the patchlevel.h file to find out what has or
  48.     has not been applied.  In any event, don't continue with the patch.
  49.  
  50.     If you are missing previous patches they can be obtained from me:
  51.  
  52.         Raphael Manfredi <ram@eiffel.com>
  53.  
  54.     If you send a mail message of the following form it will greatly speed
  55.     processing:
  56.  
  57.         Subject: Command
  58.         @SH mailpatch PATH mailagent 2.9 LIST
  59.                ^ note the c
  60.  
  61.     where PATH is a return path FROM ME TO YOU either in Internet notation,
  62.     or in bang notation from some well-known host, and LIST is the number
  63.     of one or more patches you need, separated by spaces, commas, and/or
  64.     hyphens.  Saying 35- says everything from 35 to the end.
  65.  
  66.     To get some more detailed instructions, send me the following mail:
  67.  
  68.         Subject: Command
  69.         @SH mailhelp PATH
  70.  
  71.  
  72. Index: patchlevel.h
  73. Prereq: 13
  74. 4c4
  75. < #define PATCHLEVEL 13
  76. ---
  77. > #define PATCHLEVEL 14
  78.  
  79. Index: agent/test/cmd/strip.t
  80. *** agent/test/cmd/strip.t.old    Tue Dec  1 09:48:39 1992
  81. --- agent/test/cmd/strip.t    Tue Dec  1 09:48:40 1992
  82. ***************
  83. *** 2,7 ****
  84. --- 2,14 ----
  85.   do '../pl/cmd.pl';
  86.   unlink 'ok', 'no_resync';
  87.   
  88. + open(LIST, '>header-list') || print "17\n";
  89. + print LIST <<EOL;
  90. + Unusual-Header
  91. + X-Long*
  92. + EOL
  93. + close LIST;
  94.   &add_header('X-Tag: strip');
  95.   &add_header('X-Long-Line: this is a long line and has a continuation');
  96.   &add_header('  right below it with a MARK token');
  97. ***************
  98. *** 9,14 ****
  99. --- 16,22 ----
  100.   &add_header('X-Kept-Line: this is a long line and has a continuation');
  101.   &add_header('  right below it with another mark TOKEN');
  102.   &add_header('  and another with the mark TOKEN');
  103. + &add_header('unusual-header: None');
  104.   `$cmd`;
  105.   $? == 0 || print "1\n";
  106.   -f "$user" && print "2\n";        # Mail saved...
  107. ***************
  108. *** 20,29 ****
  109.   &check_log('^Subject:', 8);
  110.   ¬_log('^X-None:', 9);
  111.   ¬_log('MARK', 10);            # Continuation line must have been stripped too
  112. ! ¬_log('X-Long-Line:', 11);    # As well as its parent
  113.   &check_log('TOKEN', 12) == 2 || print "13\n";        # This one has been kept
  114. ! &check_log('X-Kept-Line:', 14);
  115.   -f 'no_resync' || print "15\n";    # Ensure header not disturbed
  116.   
  117. ! unlink 'ok', 'no_resync', 'mail';
  118.   print "0\n";
  119. --- 28,39 ----
  120.   &check_log('^Subject:', 8);
  121.   ¬_log('^X-None:', 9);
  122.   ¬_log('MARK', 10);            # Continuation line must have been stripped too
  123. ! ¬_log('^X-Long-Line:', 11);    # As well as its parent
  124.   &check_log('TOKEN', 12) == 2 || print "13\n";        # This one has been kept
  125. ! &check_log('^X-Kept-Line:', 14);
  126. ! ¬_log('^unusual-header:', 16);
  127.   -f 'no_resync' || print "15\n";    # Ensure header not disturbed
  128.   
  129. ! # Last: 17
  130. ! unlink 'ok', 'no_resync', 'mail', 'header-list';
  131.   print "0\n";
  132.  
  133. Index: agent/test/cmd/keep.t
  134. *** agent/test/cmd/keep.t.old    Tue Dec  1 09:48:37 1992
  135. --- agent/test/cmd/keep.t    Tue Dec  1 09:48:38 1992
  136. ***************
  137. *** 2,7 ****
  138. --- 2,16 ----
  139.   do '../pl/cmd.pl';
  140.   unlink 'ok', 'no_resync';
  141.   
  142. + open(LIST, '>header-list') || print "17\n";
  143. + print LIST <<EOL;
  144. + To
  145. + Subject
  146. + U*
  147. + X*
  148. + EOL
  149. + close LIST;
  150.   &add_header('X-Tag: keep');
  151.   &add_header('X-Long-Line: this is a long line and has a continuation');
  152.   &add_header('  right below it with a MARK token');
  153. ***************
  154. *** 9,14 ****
  155. --- 18,24 ----
  156.   &add_header('X-Removed-Line: this is a long line and has a continuation');
  157.   &add_header('  right below it with another mark TOKEN');
  158.   &add_header('  and another with the mark TOKEN');
  159. + &add_header('unusual-header: None');
  160.   `$cmd`;
  161.   $? == 0 || print "1\n";
  162.   -f "$user" && print "2\n";        # Mail saved...
  163. ***************
  164. *** 20,29 ****
  165.   &check_log('^Subject:', 8);
  166.   ¬_log('^X-None:', 9);
  167.   &check_log('MARK', 10) == 2 || print "11\n";        # Continuation line kept
  168. ! &check_log('X-Long-Line:', 12);    # So is the parent field
  169. ! ¬_log('X-Removed-Line:', 13);
  170.   ¬_log('TOKEN', 14);            # This continuation was removed
  171.   -f 'no_resync' || print "15\n";    # Ensure header not disturbed
  172.   
  173. ! unlink 'ok', 'no_resync', 'mail';
  174.   print "0\n";
  175. --- 30,41 ----
  176.   &check_log('^Subject:', 8);
  177.   ¬_log('^X-None:', 9);
  178.   &check_log('MARK', 10) == 2 || print "11\n";        # Continuation line kept
  179. ! &check_log('^X-Long-Line:', 12);    # So is the parent field
  180. ! ¬_log('^X-Removed-Line:', 13);
  181.   ¬_log('TOKEN', 14);            # This continuation was removed
  182. + &check_log('^unusual-header:', 16);
  183.   -f 'no_resync' || print "15\n";    # Ensure header not disturbed
  184.   
  185. ! # Last: 17
  186. ! unlink 'ok', 'no_resync', 'mail', 'header-list';
  187.   print "0\n";
  188.  
  189. Index: agent/pl/stats.pl
  190. Prereq: 2.9.1.1
  191. *** agent/pl/stats.pl.old    Tue Dec  1 09:48:31 1992
  192. --- agent/pl/stats.pl    Tue Dec  1 09:48:32 1992
  193. ***************
  194. *** 1,4 ****
  195. ! ;# $Id: stats.pl,v 2.9.1.1 92/08/26 13:18:36 ram Exp $
  196.   ;#
  197.   ;#  Copyright (c) 1992, Raphael Manfredi
  198.   ;#
  199. --- 1,4 ----
  200. ! ;# $Id: stats.pl,v 2.9.1.2 92/12/01 09:43:32 ram Exp $
  201.   ;#
  202.   ;#  Copyright (c) 1992, Raphael Manfredi
  203.   ;#
  204. ***************
  205. *** 6,11 ****
  206. --- 6,14 ----
  207.   ;#  Licence as specified in the README file that comes with dist.
  208.   ;#
  209.   ;# $Log:    stats.pl,v $
  210. + ;# Revision 2.9.1.2  92/12/01  09:43:32  ram
  211. + ;# patch13: read statistics lines one at a time to limit memory usage
  212. + ;# 
  213.   ;# Revision 2.9.1.1  92/08/26  13:18:36  ram
  214.   ;# patch8: added statistics suppression code
  215.   ;# 
  216. ***************
  217. *** 211,217 ****
  218.       # not enough space on the device, we won't be able to append the whole
  219.       # backup file, but then we have to discard previously saved statistics
  220.       # anyway...
  221. !     local($status) = print STATS <OLD>;
  222.       close OLD;
  223.       close STATS;
  224.       if ($status) {                        # Print ran ok
  225. --- 214,225 ----
  226.       # not enough space on the device, we won't be able to append the whole
  227.       # backup file, but then we have to discard previously saved statistics
  228.       # anyway...
  229. !     # Note: 'print STATS <OLD>' would cause an excessive memory consumption
  230. !     # given that a statistics file can be several hundred Kbytes long.
  231. !     local($status) = 1;                    # Printing status
  232. !     while (<OLD>) {
  233. !         $status &= (print STATS);        # Status remains to 1 while successful
  234. !     }
  235.       close OLD;
  236.       close STATS;
  237.       if ($status) {                        # Print ran ok
  238.  
  239. Index: agent/pl/analyze.pl
  240. Prereq: 2.9.1.4
  241. *** agent/pl/analyze.pl.old    Tue Dec  1 09:48:04 1992
  242. --- agent/pl/analyze.pl    Tue Dec  1 09:48:04 1992
  243. ***************
  244. *** 1,4 ****
  245. ! ;# $Id: analyze.pl,v 2.9.1.4 92/11/01 15:45:26 ram Exp $
  246.   ;#
  247.   ;#  Copyright (c) 1992, Raphael Manfredi
  248.   ;#
  249. --- 1,4 ----
  250. ! ;# $Id: analyze.pl,v 2.9.1.5 92/12/01 09:18:49 ram Exp $
  251.   ;#
  252.   ;#  Copyright (c) 1992, Raphael Manfredi
  253.   ;#
  254. ***************
  255. *** 6,11 ****
  256. --- 6,14 ----
  257.   ;#  Licence as specified in the README file that comes with dist.
  258.   ;#
  259.   ;# $Log:    analyze.pl,v $
  260. + ;# Revision 2.9.1.5  92/12/01  09:18:49  ram
  261. + ;# patch13: fixed mode selection pattern (no brace allowed)
  262. + ;# 
  263.   ;# Revision 2.9.1.4  92/11/01  15:45:26  ram
  264.   ;# patch11: added some blank lines for easier reading
  265.   ;# 
  266. ***************
  267. *** 141,147 ****
  268.           undef %Matched;                            # Reset matching patterns
  269.           undef %Inverted;                        # Reset negated patterns
  270.           $rules = $_;                            # Work on a copy
  271. !         $rules =~ s/^(.*){// && ($mode = $1);        # First word is the mode
  272.           $rules =~ s/\s*(.*)}// && ($action = $1);    # Followed by action
  273.           $mode =~ s/\s*$//;                            # Remove trailing spaces
  274.           $rules =~ s/^\s+//;                        # Remove leading spaces
  275. --- 144,150 ----
  276.           undef %Matched;                            # Reset matching patterns
  277.           undef %Inverted;                        # Reset negated patterns
  278.           $rules = $_;                            # Work on a copy
  279. !         $rules =~ s/^([^{]*){// && ($mode = $1);    # First word is the mode
  280.           $rules =~ s/\s*(.*)}// && ($action = $1);    # Followed by action
  281.           $mode =~ s/\s*$//;                            # Remove trailing spaces
  282.           $rules =~ s/^\s+//;                        # Remove leading spaces
  283.  
  284. Index: agent/filter/main.c
  285. Prereq: 2.9.1.1
  286. *** agent/filter/main.c.old    Tue Dec  1 09:47:43 1992
  287. --- agent/filter/main.c    Tue Dec  1 09:47:43 1992
  288. ***************
  289. *** 11,17 ****
  290.   */
  291.   
  292.   /*
  293. !  * $Id: main.c,v 2.9.1.1 92/08/12 21:30:38 ram Exp $
  294.    *
  295.    *  Copyright (c) 1992, Raphael Manfredi
  296.    *
  297. --- 11,17 ----
  298.   */
  299.   
  300.   /*
  301. !  * $Id: main.c,v 2.9.1.2 92/12/01 09:12:53 ram Exp $
  302.    *
  303.    *  Copyright (c) 1992, Raphael Manfredi
  304.    *
  305. ***************
  306. *** 19,24 ****
  307. --- 19,27 ----
  308.    *  Licence as specified in the README file that comes with dist.
  309.    *
  310.    * $Log:    main.c,v $
  311. +  * Revision 2.9.1.2  92/12/01  09:12:53  ram
  312. +  * patch13: filter now also complains when using -t in setgid mode
  313. +  * 
  314.    * Revision 2.9.1.1  92/08/12  21:30:38  ram
  315.    * patch6: option -t disallowed when running setuid (security hole)
  316.    * 
  317. ***************
  318. *** 85,92 ****
  319.        * filter program.
  320.        */
  321.       if (argc > 1 && 0 == strcmp(argv[1], "-t")) {
  322. !         if (uid != euid) {
  323. !             fprintf(stderr, "filter: no option allowed when setuid\n");
  324.               exit(1);
  325.           }
  326.           env_home();                        /* Get HOME form environment */
  327. --- 88,96 ----
  328.        * filter program.
  329.        */
  330.       if (argc > 1 && 0 == strcmp(argv[1], "-t")) {
  331. !         if (uid != euid || gid != egid) {
  332. !             fprintf(stderr, "filter: no option allowed when set%s\n",
  333. !                 uid != euid ? "uid" : "gid");
  334.               exit(1);
  335.           }
  336.           env_home();                        /* Get HOME form environment */
  337.  
  338. Index: Configure
  339. Prereq: 2.9
  340. *** Configure.old    Tue Dec  1 09:47:35 1992
  341. --- Configure    Tue Dec  1 09:47:36 1992
  342. ***************
  343. *** 16,22 ****
  344.   # Write to ram@eiffel.com (Raphael Manfredi) and I will send you the
  345.   # latest revision of the dist package, which includes metaconfig.)
  346.   
  347. ! # $Id: Configure,v 2.9 92/07/14 16:46:52 ram Exp $
  348.   #
  349.   # Generated on Tue Jul 14 19:38:33 PDT 1992 [metaconfig 2.8 PL13]
  350.   
  351. --- 16,22 ----
  352.   # Write to ram@eiffel.com (Raphael Manfredi) and I will send you the
  353.   # latest revision of the dist package, which includes metaconfig.)
  354.   
  355. ! # $Id: Configure,v 2.9.1.1 92/12/01 09:09:08 ram Exp $
  356.   #
  357.   # Generated on Tue Jul 14 19:38:33 PDT 1992 [metaconfig 2.8 PL13]
  358.   
  359. ***************
  360. *** 2004,2010 ****
  361.   
  362.   : see if union wait is available
  363.   echo " "
  364. ! if $contains 'int.*w_status;' $usrinc/sys/wait.h >/dev/null 2>&1 ; then
  365.       echo "Looks like we have to use 'union wait' pointer for wait()."
  366.       val="$define"
  367.   else
  368. --- 2004,2010 ----
  369.   
  370.   : see if union wait is available
  371.   echo " "
  372. ! if $contains 'union.*wait.*{' $usrinc/sys/wait.h >/dev/null 2>&1 ; then
  373.       echo "Looks like we have to use 'union wait' pointer for wait()."
  374.       val="$define"
  375.   else
  376.  
  377. Index: MANIFEST
  378. *** MANIFEST.old    Tue Dec  1 09:48:42 1992
  379. --- MANIFEST    Tue Dec  1 09:48:43 1992
  380. ***************
  381. *** 86,91 ****
  382. --- 86,93 ----
  383.   agent/pl/header.pl         Header-related routines
  384.   agent/pl/history.pl        Perl library to implement history mechanism
  385.   agent/pl/hook.pl           Mail hook wrapping functions
  386. + agent/pl/hostname.pl       Perl library to compute hostname
  387. + agent/pl/include.pl        Processing of "include file" requests
  388.   agent/pl/interface.pl      Perl interface with filter commands
  389.   agent/pl/jobnum.pl         Perl library to compute a job number
  390.   agent/pl/lexical.pl        Perl library for lexical analysis
  391. ***************
  392. *** 100,105 ****
  393. --- 102,108 ----
  394.   agent/pl/parse.pl          Perl library to parse a mail message
  395.   agent/pl/period.pl         Perl library to compute periods
  396.   agent/pl/plsave.pl         Perl library to handle the plsave cache file
  397. + agent/pl/plural.pl         Perl library to pluralize words
  398.   agent/pl/pqueue.pl         Processing the queued mails
  399.   agent/pl/queue_mail.pl     Queuing mails
  400.   agent/pl/rangeargs.pl      Perl library to expand a list of patches
  401.  
  402. Index: agent/pl/context.pl
  403. Prereq: 2.9
  404. *** agent/pl/context.pl.old    Tue Dec  1 09:48:06 1992
  405. --- agent/pl/context.pl    Tue Dec  1 09:48:07 1992
  406. ***************
  407. *** 1,4 ****
  408. ! ;# $Id: context.pl,v 2.9 92/07/14 16:49:43 ram Exp $
  409.   ;#
  410.   ;#  Copyright (c) 1992, Raphael Manfredi
  411.   ;#
  412. --- 1,4 ----
  413. ! ;# $Id: context.pl,v 2.9.1.1 92/12/01 09:19:38 ram Exp $
  414.   ;#
  415.   ;#  Copyright (c) 1992, Raphael Manfredi
  416.   ;#
  417. ***************
  418. *** 6,11 ****
  419. --- 6,14 ----
  420.   ;#  Licence as specified in the README file that comes with dist.
  421.   ;#
  422.   ;# $Log:    context.pl,v $
  423. + ;# Revision 2.9.1.1  92/12/01  09:19:38  ram
  424. + ;# patch13: remove context file lock when excessively old
  425. + ;# 
  426.   ;# Revision 2.9  92/07/14  16:49:43  ram
  427.   ;# 3.0 beta baseline.
  428.   ;# 
  429. ***************
  430. *** 63,68 ****
  431. --- 66,72 ----
  432.   sub save {
  433.       require 'ctime.pl';
  434.       local($existed) = -f $cf'context;
  435. +     &'checklock($cf'context);                # Ensure no eternal locking
  436.       &'acs_rqst($cf'context) if $existed;    # Lock existing file
  437.       unless (open(CONTEXT, ">$cf'context")) {
  438.           &'add_log("ERROR cannot overwrite context file: $!") if $'loglvl > 1;
  439.  
  440. Index: agent/pl/plural.pl
  441. *** agent/pl/plural.pl.old    Tue Dec  1 09:48:23 1992
  442. --- agent/pl/plural.pl    Tue Dec  1 09:48:24 1992
  443. ***************
  444. *** 0 ****
  445. --- 1,28 ----
  446. + ;# $Id: plural.pl,v 2.9.1.1 92/12/01 09:26:44 ram Exp $
  447. + ;#
  448. + ;#  Copyright (c) 1992, Raphael Manfredi
  449. + ;#
  450. + ;#  You may redistribute only under the terms of the GNU General Public
  451. + ;#  Licence as specified in the README file that comes with dist.
  452. + ;#
  453. + ;# $Log:    plural.pl,v $
  454. + ;# Revision 2.9.1.1  92/12/01  09:26:44  ram
  455. + ;# patch13: created
  456. + ;# 
  457. + ;# 
  458. + # Pluralize names -- Adapted from a routine posted by Tom Christiansen in
  459. + # comp.lang.perl on June 20th, 1992.
  460. + sub plural {
  461. +     local($_, $n) = @_;        # Word and amount (plural if not specified)
  462. +     $n = 2 if $n eq '';        # Pluralize word by default
  463. +     if ($n != 1) {            # 0 something is plural
  464. +         if ($_ eq 'was') {
  465. +             $_ = 'were';
  466. +         } else {
  467. +             s/y$/ies/   || s/s$/ses/  || s/([cs]h)$/$1es/ ||
  468. +             s/sis$/ses/ || s/ium$/ia/ || s/$/s/;
  469. +         }
  470. +     }
  471. +     "$_";            # How to write $n times the original $_
  472. + }
  473.  
  474. Index: agent/pl/hostname.pl
  475. *** agent/pl/hostname.pl.old    Tue Dec  1 09:48:09 1992
  476. --- agent/pl/hostname.pl    Tue Dec  1 09:48:09 1992
  477. ***************
  478. *** 0 ****
  479. --- 1,29 ----
  480. + ;# $Id: hostname.pl,v 2.9.1.1 92/12/01 09:20:23 ram Exp $
  481. + ;#
  482. + ;#  Copyright (c) 1992, Raphael Manfredi
  483. + ;#
  484. + ;#  You may redistribute only under the terms of the GNU General Public
  485. + ;#  Licence as specified in the README file that comes with dist.
  486. + ;#
  487. + ;# $Log:    hostname.pl,v $
  488. + ;# Revision 2.9.1.1  92/12/01  09:20:23  ram
  489. + ;# patch13: created
  490. + ;# 
  491. + ;# 
  492. + # Return only the hostname portion of the host name (no domain name)
  493. + sub myhostname {
  494. +     local($_) = &hostname;
  495. +     s/^([^.]*)\..*/$1/;            # Trim down domain name
  496. +     $_;
  497. + }
  498. + # Compute hostname once and for all and cache its value (since we have to fork
  499. + # to get it).
  500. + sub hostname {
  501. +     unless ($cache'hostname) {
  502. +         chop($cache'hostname = `$phostname`);
  503. +         $cache'hostname =~ tr/A-Z/a-z/;            # Cannonicalize to lower case
  504. +     }
  505. +     $cache'hostname;
  506. + }
  507.  
  508. Index: agent/filter/parser.c
  509. Prereq: 2.9.1.2
  510. *** agent/filter/parser.c.old    Tue Dec  1 09:47:45 1992
  511. --- agent/filter/parser.c    Tue Dec  1 09:47:46 1992
  512. ***************
  513. *** 11,17 ****
  514.   */
  515.   
  516.   /*
  517. !  * $Id: parser.c,v 2.9.1.2 92/11/01 15:42:10 ram Exp $
  518.    *
  519.    *  Copyright (c) 1992, Raphael Manfredi
  520.    *
  521. --- 11,17 ----
  522.   */
  523.   
  524.   /*
  525. !  * $Id: parser.c,v 2.9.1.3 92/12/01 09:13:21 ram Exp $
  526.    *
  527.    *  Copyright (c) 1992, Raphael Manfredi
  528.    *
  529. ***************
  530. *** 19,24 ****
  531. --- 19,27 ----
  532.    *  Licence as specified in the README file that comes with dist.
  533.    *
  534.    * $Log:    parser.c,v $
  535. +  * Revision 2.9.1.3  92/12/01  09:13:21  ram
  536. +  * patch13: removed spurious inclusion of <sys/types.h>
  537. +  * 
  538.    * Revision 2.9.1.2  92/11/01  15:42:10  ram
  539.    * patch11: forgot inclusion of <sys/types.h> for possible pid_t
  540.    * 
  541. ***************
  542. *** 41,47 ****
  543.   #include <stdio.h>
  544.   #include <ctype.h>
  545.   #include <pwd.h>
  546. - #include <sys/types.h>
  547.   #include <sys/stat.h>
  548.   
  549.   #ifdef I_STRING
  550. --- 44,49 ----
  551.  
  552. Index: agent/test/actions
  553. *** agent/test/actions.old    Tue Dec  1 09:48:34 1992
  554. --- agent/test/actions    Tue Dec  1 09:48:35 1992
  555. ***************
  556. *** 66,74 ****
  557.   
  558.   X-Tag: /keep/
  559.   {
  560. !     KEEP From: To Subject X-None X-Long-Line;
  561. !     KEEP To Subject X-Long-Line From X-None;
  562. !     KEEP X-Long-Line: X-None: To: Subject: From:;
  563.       SAVE ok;
  564.       REJECT;
  565.   }
  566. --- 66,75 ----
  567.   
  568.   X-Tag: /keep/
  569.   {
  570. !     KEEP From: To Subject X-None X-Long-* U*;
  571. !     KEEP To Subject X-Long-* From X-None U*;
  572. !     KEEP X-Long-*: Unu*-Head* X-None: To: Subject: From:;
  573. !     KEEP "header-list" From;
  574.       SAVE ok;
  575.       REJECT;
  576.   }
  577. ***************
  578. *** 165,172 ****
  579.   
  580.   X-Tag: /strip/
  581.   {
  582. !     STRIP X-Long-Line: X-None: Received:;
  583. !     STRIP Received X-Long-Line;
  584.       SAVE ok;
  585.       REJECT;
  586.   }
  587. --- 166,174 ----
  588.   
  589.   X-Tag: /strip/
  590.   {
  591. !     STRIP X-N* Received:;
  592. !     STRIP Received;
  593. !     STRIP X-N* "header-list";
  594.       SAVE ok;
  595.       REJECT;
  596.   }
  597.  
  598. *** End of Patch 14 ***
  599.  
  600. exit 0 # Just in case...
  601.