home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1994 March / Source_Code_CD-ROM_Walnut_Creek_March_1994.iso / compsrcs / misc / volume34 / mailagnt / patch14 < prev    next >
Encoding:
Text File  |  1992-12-11  |  17.3 KB  |  600 lines

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