[exim-cvs] cvs commit: exim/exim-doc/doc-txt ChangeLog NewSt…

Top Page
Delete this message
Reply to this message
Author: Philip Hazel
Date:  
To: exim-cvs
Subject: [exim-cvs] cvs commit: exim/exim-doc/doc-txt ChangeLog NewStuff OptionLists.txt exim/exim-src/src/transports appendfile.c appendfile.h tf_maildir.c tf_maildir.h exim/exim-test/confs 5009 exim/exim-
ph10 2006/04/27 09:53:25 BST

  Modified files:
    exim-doc/doc-txt     ChangeLog NewStuff OptionLists.txt 
    exim-src/src/transports appendfile.c appendfile.h tf_maildir.c 
                            tf_maildir.h 
    exim-test/confs      5009 
    exim-test/scripts/5000-maildir 5009 
  Log:
  Add maildirfolder_create_regex to appendfile.


  Revision  Changes    Path
  1.349     +2 -0      exim/exim-doc/doc-txt/ChangeLog
  1.102     +5 -0      exim/exim-doc/doc-txt/NewStuff
  1.20      +2 -1      exim/exim-doc/doc-txt/OptionLists.txt
  1.18      +8 -2      exim/exim-src/src/transports/appendfile.c
  1.5       +1 -0      exim/exim-src/src/transports/appendfile.h
  1.9       +55 -4     exim/exim-src/src/transports/tf_maildir.c
  1.5       +2 -1      exim/exim-src/src/transports/tf_maildir.h
  1.2       +1 -0      exim/exim-test/confs/5009
  1.2       +4 -4      exim/exim-test/scripts/5000-maildir/5009


  Index: ChangeLog
  ===================================================================
  RCS file: /home/cvs/exim/exim-doc/doc-txt/ChangeLog,v
  retrieving revision 1.348
  retrieving revision 1.349
  diff -u -r1.348 -r1.349
  --- ChangeLog    25 Apr 2006 14:02:29 -0000    1.348
  +++ ChangeLog    27 Apr 2006 08:53:24 -0000    1.349
  @@ -1,4 +1,4 @@
  -$Cambridge: exim/exim-doc/doc-txt/ChangeLog,v 1.348 2006/04/25 14:02:29 ph10 Exp $
  +$Cambridge: exim/exim-doc/doc-txt/ChangeLog,v 1.349 2006/04/27 08:53:24 ph10 Exp $


   Change log file for Exim from version 4.21
   -------------------------------------------
  @@ -49,6 +49,8 @@
         was calculated. There was no check that a delivery was happening into an
         excluded directory. This bug has been fixed by ignoring all quota
         processing for deliveries into excluded directories.
  +
  +PH/10 Added the maildirfolder_create_regex option to appendfile.



Exim version 4.61

  Index: NewStuff
  ===================================================================
  RCS file: /home/cvs/exim/exim-doc/doc-txt/NewStuff,v
  retrieving revision 1.101
  retrieving revision 1.102
  diff -u -r1.101 -r1.102
  --- NewStuff    20 Apr 2006 14:11:29 -0000    1.101
  +++ NewStuff    27 Apr 2006 08:53:24 -0000    1.102
  @@ -1,4 +1,4 @@
  -$Cambridge: exim/exim-doc/doc-txt/NewStuff,v 1.101 2006/04/20 14:11:29 ph10 Exp $
  +$Cambridge: exim/exim-doc/doc-txt/NewStuff,v 1.102 2006/04/27 08:53:24 ph10 Exp $


   New Features in Exim
   --------------------
  @@ -28,6 +28,11 @@
   2. If a redirect router sets up file or pipe deliveries for more than one
      incoming address, and the relevant transport has batch_max set greater than
      one, a batch delivery now occurs.
  +
  +3. The appendfile transport has a new option called maildirfolder_create_regex.
  +   Its value is a regular expression. For a maildir delivery, this is matched
  +   against the maildir directory; if it matches, Exim ensures that a
  +   maildirfolder file is created alongside the new, cur, and tmp directories.



Version 4.61

  Index: OptionLists.txt
  ===================================================================
  RCS file: /home/cvs/exim/exim-doc/doc-txt/OptionLists.txt,v
  retrieving revision 1.19
  retrieving revision 1.20
  diff -u -r1.19 -r1.20
  --- OptionLists.txt    28 Feb 2006 12:42:47 -0000    1.19
  +++ OptionLists.txt    27 Apr 2006 08:53:24 -0000    1.20
  @@ -1,4 +1,4 @@
  -$Cambridge: exim/exim-doc/doc-txt/OptionLists.txt,v 1.19 2006/02/28 12:42:47 ph10 Exp $
  +$Cambridge: exim/exim-doc/doc-txt/OptionLists.txt,v 1.20 2006/04/27 08:53:24 ph10 Exp $


   LISTS OF EXIM OPTIONS
   ---------------------
  @@ -11,7 +11,7 @@
     4. Those that can appear in the build time configuration for the Exim monitor
        (Local/eximon.conf).


-This file was last updated for Exim release 4.61.
+This file was last updated for Exim release 4.62.


   1. RUN TIME OPTIONS
  @@ -314,6 +314,7 @@
   maildir_retries                      integer         10            appendfile        1.70
   maildir_tag                          string*         unset         appendfile        1.92
   maildir_use_size_file                boolean         false         appendfile        4.30
  +maildirfolder_create_regex           string          unset         appendfile        4.62
   mailstore_format                     boolean         false         appendfile        2.00
   mailstore_prefix                     string*         unset         appendfile        2.00
   mailstore_suffix                     string*         unset         appendfile        2.00


  Index: appendfile.c
  ===================================================================
  RCS file: /home/cvs/exim/exim-src/src/transports/appendfile.c,v
  retrieving revision 1.17
  retrieving revision 1.18
  diff -u -r1.17 -r1.18
  --- appendfile.c    25 Apr 2006 14:02:30 -0000    1.17
  +++ appendfile.c    27 Apr 2006 08:53:24 -0000    1.18
  @@ -1,4 +1,4 @@
  -/* $Cambridge: exim/exim-src/src/transports/appendfile.c,v 1.17 2006/04/25 14:02:30 ph10 Exp $ */
  +/* $Cambridge: exim/exim-src/src/transports/appendfile.c,v 1.18 2006/04/27 08:53:24 ph10 Exp $ */


   /*************************************************
   *     Exim - an Internet mail transport agent    *
  @@ -107,6 +107,8 @@
         (void *)offsetof(appendfile_transport_options_block, maildir_tag) },
     { "maildir_use_size_file", opt_bool,
         (void *)offsetof(appendfile_transport_options_block, maildir_use_size_file ) } ,
  +  { "maildirfolder_create_regex", opt_stringptr,
  +      (void *)offsetof(appendfile_transport_options_block, maildirfolder_create_regex ) },
   #endif  /* SUPPORT_MAILDIR */
   #ifdef SUPPORT_MAILSTORE
     { "mailstore_format",  opt_bool,
  @@ -184,6 +186,7 @@
     NULL,           /* mailbox_filecount_string */
     US"^(?:cur|new|\\..*)$",  /* maildir_dir_regex */
     NULL,           /* maildir_tag */
  +  NULL,           /* maildirfolder_create_regex */
     NULL,           /* mailstore_prefix */
     NULL,           /* mailstore_suffix */
     NULL,           /* check_string (default changed for non-bsmtp file)*/
  @@ -2152,10 +2155,11 @@
       }


     #ifdef SUPPORT_MAILDIR
  -  /* For a maildir delivery, ensure that all the relevant directories exist */
  +  /* For a maildir delivery, ensure that all the relevant directories exist,
  +  and a maildirfolder file if necessary. */


     if (mbformat == mbf_maildir && !maildir_ensure_directories(path, addr,
  -    ob->create_directory, ob->dirmode))
  +    ob->create_directory, ob->dirmode, ob->maildirfolder_create_regex))
         return FALSE;
     #endif  /* SUPPORT_MAILDIR */


  @@ -2236,6 +2240,8 @@
               {
               *slash = 0;
               check_path = new_check_path;
  +            DEBUG(D_transport) debug_printf("maildirfolder file exists: "
  +              "quota check directory changed to %s\n", check_path);
               }
             }
           }


  Index: appendfile.h
  ===================================================================
  RCS file: /home/cvs/exim/exim-src/src/transports/appendfile.h,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- appendfile.h    7 Feb 2006 11:19:03 -0000    1.4
  +++ appendfile.h    27 Apr 2006 08:53:24 -0000    1.5
  @@ -1,4 +1,4 @@
  -/* $Cambridge: exim/exim-src/src/transports/appendfile.h,v 1.4 2006/02/07 11:19:03 ph10 Exp $ */
  +/* $Cambridge: exim/exim-src/src/transports/appendfile.h,v 1.5 2006/04/27 08:53:24 ph10 Exp $ */


   /*************************************************
   *     Exim - an Internet mail transport agent    *
  @@ -25,6 +25,7 @@
     uschar *mailbox_filecount_string;
     uschar *maildir_dir_regex;
     uschar *maildir_tag;
  +  uschar *maildirfolder_create_regex;
     uschar *mailstore_prefix;
     uschar *mailstore_suffix;
     uschar *check_string;


  Index: tf_maildir.c
  ===================================================================
  RCS file: /home/cvs/exim/exim-src/src/transports/tf_maildir.c,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- tf_maildir.c    7 Feb 2006 11:19:03 -0000    1.8
  +++ tf_maildir.c    27 Apr 2006 08:53:24 -0000    1.9
  @@ -1,4 +1,4 @@
  -/* $Cambridge: exim/exim-src/src/transports/tf_maildir.c,v 1.8 2006/02/07 11:19:03 ph10 Exp $ */
  +/* $Cambridge: exim/exim-src/src/transports/tf_maildir.c,v 1.9 2006/04/27 08:53:24 ph10 Exp $ */


   /*************************************************
   *     Exim - an Internet mail transport agent    *
  @@ -29,19 +29,22 @@
   *************************************************/


/* This function is called at the start of a maildir delivery, to ensure that
-all the relevant directories exist.
+all the relevant directories exist. It also creates a maildirfolder file if the
+base directory matches a given pattern.

   Argument:
     path              the base directory name
     addr              the address item (for setting an error message)
     create_directory  true if we are allowed to create missing directories
     dirmode           the mode for created directories
  +  maildirfolder_create_regex
  +                    the pattern to match for maildirfolder creation


   Returns:            TRUE on success; FALSE on failure
   */


BOOL maildir_ensure_directories(uschar *path, address_item *addr,
- BOOL create_directory, int dirmode)
+ BOOL create_directory, int dirmode, uschar *maildirfolder_create_regex)
{
int i;
struct stat statbuf;
@@ -52,7 +55,7 @@

/* First ensure that the path we have is a directory; if it does not exist,
create it. Then make sure the tmp, new & cur subdirs of the maildir are
-there. If not, fail which aborts the delivery (even though the cur subdir is
+there. If not, fail. This aborts the delivery (even though the cur subdir is
not actually needed for delivery). Handle all 4 directory tests/creates in a
loop so that code can be shared. */

  @@ -135,7 +138,55 @@
       }
     }


  -return TRUE;   /* All directories exist */
  +/* If the basic path matches maildirfolder_create_regex, we are dealing with
  +a subfolder, and should ensure that a maildirfolder file exists. */
  +
  +if (maildirfolder_create_regex != NULL)
  +  {
  +  const uschar *error;
  +  int offset;
  +  const pcre *regex;
  +
  +  DEBUG(D_transport) debug_printf("checking for maildirfolder requirement\n");
  +
  +  regex = pcre_compile(CS maildirfolder_create_regex, PCRE_COPT,
  +    (const char **)&error, &offset, NULL);
  +
  +  if (regex == NULL)
  +    {
  +    addr->message = string_sprintf("appendfile: regular expression "
  +      "error: %s at offset %d while compiling %s", error, offset,
  +      maildirfolder_create_regex);
  +    return FALSE;
  +    }
  +
  +  if (pcre_exec(regex, NULL, CS path, Ustrlen(path), 0, 0, NULL, 0) >= 0)
  +    {
  +    uschar *fname = string_sprintf("%s/maildirfolder", path);
  +    if (Ustat(fname, &statbuf) == 0)
  +      {
  +      DEBUG(D_transport) debug_printf("maildirfolder already exists\n");
  +      }
  +    else
  +      {
  +      int fd = Uopen(fname, O_WRONLY|O_APPEND|O_CREAT, 0);
  +      if (fd < 0)
  +        {
  +        addr->message = string_sprintf("appendfile: failed to create "
  +          "maildirfolder file in %s directory: %s", path, strerror(errno));
  +        return FALSE;
  +        }
  +      (void)close(fd);
  +      DEBUG(D_transport) debug_printf("created maildirfolder file\n");
  +      }
  +    }
  +  else
  +    {
  +    DEBUG(D_transport) debug_printf("maildirfolder file not required\n");
  +    }
  +  }
  +
  +return TRUE;   /* Everything exists that should exist */
   }




  Index: tf_maildir.h
  ===================================================================
  RCS file: /home/cvs/exim/exim-src/src/transports/tf_maildir.h,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- tf_maildir.h    7 Feb 2006 11:19:03 -0000    1.4
  +++ tf_maildir.h    27 Apr 2006 08:53:24 -0000    1.5
  @@ -1,4 +1,4 @@
  -/* $Cambridge: exim/exim-src/src/transports/tf_maildir.h,v 1.4 2006/02/07 11:19:03 ph10 Exp $ */
  +/* $Cambridge: exim/exim-src/src/transports/tf_maildir.h,v 1.5 2006/04/27 08:53:24 ph10 Exp $ */


   /*************************************************
   *     Exim - an Internet mail transport agent    *
  @@ -12,7 +12,8 @@


   extern off_t  maildir_compute_size(uschar *, int *, time_t *, const pcre *,
                   const pcre *, BOOL);
  -extern BOOL   maildir_ensure_directories(uschar *, address_item *, BOOL, int);
  +extern BOOL   maildir_ensure_directories(uschar *, address_item *, BOOL, int,
  +                uschar *);
   extern int    maildir_ensure_sizefile(uschar *,
                   appendfile_transport_options_block *, const pcre *,
                   const pcre *, off_t *, int *);


  Index: 5009
  ===================================================================
  RCS file: /home/cvs/exim/exim-test/confs/5009,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- 5009    25 Apr 2006 14:02:30 -0000    1.1
  +++ 5009    27 Apr 2006 08:53:24 -0000    1.2
  @@ -36,6 +36,7 @@
     maildir_format
     maildir_use_size_file
     maildir_quota_directory_regex = ^(?:cur|new|\.(?!Trash).*)$
  +  maildirfolder_create_regex = /\.[^/]+$
     quota = 1M




  Index: 5009
  ===================================================================
  RCS file: /home/cvs/exim/exim-test/scripts/5000-maildir/5009,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- 5009    25 Apr 2006 14:02:30 -0000    1.1
  +++ 5009    27 Apr 2006 08:53:25 -0000    1.2
  @@ -4,14 +4,14 @@
   Test message
   ****
   cat DIR/test-mail/maildirsize >>test-stdout
  -mkdir test-mail/.Sub
  -touch test-mail/.Sub/maildirfolder
  +#mkdir test-mail/.Sub
  +#touch test-mail/.Sub/maildirfolder
   exim -DSUB=.Sub -odi userx@???
   Test message
   ****
   cat DIR/test-mail/maildirsize >>test-stdout
  -mkdir test-mail/.Trash
  -touch test-mail/.Trash/maildirfolder
  +#mkdir test-mail/.Trash
  +#touch test-mail/.Trash/maildirfolder
   exim -DSUB=.Trash -odi userx@???
   Test message
   ****