Philip Hazel wrote:

> Unless prevented by the create_directory option, Exim will always create
> all the directories it needs.
> 
> Delivery will be deferred if anything Exim is trying to
> create cannot be created.

Exim would create lots of directories when in some errorneous setup a 
string expansion (or whatever) unexpectedly yields a subdirectory that 
is maybe a thousand or a twentythousand levels deep. It could end up in 
running into some file system limit (like no more free inodes though 
space left on the device) after creating 199999 directories, fail the 
delivery and leave a mess of a useless directory tree around. That might 
also block deliveries to other users.

The sieve filtering of Cyrus just falls back to delivering into the 
inbox for deliveries into non-existing subfolders. Maybe there's 
something to giving admins control of what Exim will do, with options like:


directory_fallback_create = YES or NO
directory_fallback = "some maildir"
create_directory_maxdepth = maximum depth to create directories


The following logic could apply:


if(create_directory) {
   if(create_directory_maxdepth > would_create) {
     if(directory_fallback) {
       if( !exists(directory_fallback) ) {
         if(directory_fallback_create) {
           if( !create_directory_fallback) {
             log_errormessage;
             defer_delivery;
           }
           if( !deliver_to(directory_fallback) ) {
             defer_delivery;
           }
         }
       }
       else {
         if( !deliver_to(directory_fallback) ) {
           defer_delivery;
         }
       }
     }
     else {
       log_errormessage;
       defer_delivery;
     }
   }
   else {
     if( !create_directories) {
       log_errormessage;
       defer_delivery;
     }
     else {
       if( !deliver_to(directory_fallback) ) {
         defer_delivery;
       }
     }
   }
}
else {
   if( !deliver_to(directory_fallback) ) {
     log_errormessage;
     defer_delivery;
   }
}


The content of directory_fallback should preferably not be subjected to 
too much string expansion and must never be created by Exim unless 
explicitly allowed. It would require the admin to pre-create only one 
(preferably the top level one!) maildir which could be done by using 
/etc/skel.


GH

-- 
## List details at http://www.exim.org/mailman/listinfo/exim-users 
## Exim details at http://www.exim.org/
## Please use the Wiki with this list - http://www.exim.org/eximwiki/

Reply via email to