So, taking [email protected] URL:
https://exim.org/exim-html-current/doc/html/spec_html/ch-the_appendfile_transport.html

I see the text:  (I've added **highlights**)



...Before appending to a file, a number of security checks are made, and the file
is locked. A detailed description is given below, after the list of private
options.

...  The file option specifies a single file, to which the message is
 appended. One or more of use_fcntl_lock, use_flock_lock, or use_lockfile must
 be set with file

...

use_fcntl_lock     Use: appendfile     Type: boolean Default: see below

This option controls the use of the fcntl() function to lock a file for
exclusive use when a message is being appended. **It is set by default unless
use_flock_lock is set.**

So this is set by default UNLESS ...one of the other locking options is chosen:

If I do:

root@ybox:/var/lib/exim4# grep -i use_ /var/lib/exim4/config.autogenerated
root@ybox:/var/lib/exim4# grep -i lock /var/lib/exim4/config.autogenerated
<no output>
And I note, I have in that same file:

mail_spool:
  debug_print = "T: appendfile for $local_part@$domain"
  driver = appendfile
  file = /var/mail/$local_part_data
  delivery_date_add
  envelope_to_add
  return_path_add
  group = mail
  mode = 0660
  mode_fail_narrower = false

So I take these together to mean:

   exim will use "apendfile" to append mail to /var/mail/<myuserid>
   and it will use fcntl(2) (I'm assuming advisory locking?)

So I (may need to) just ensure maildrop(1) also uses fcntl(2) locking

FYI, my concern is the end of one of my maildrop configs, which ends:

if ("$ADDRLIST" ne "")
   {
   log "@ in maildrop.manual $NOW, will send (using /etc/maildroprc.manual) copies like this: $ADDRLIST [SENDMAIL=$SENDMAIL]"

# Spaces at the start really mess it up
    ADDRLIST=substr($ADDRLIST,1)
   to '!'"$ADDRLIST"
   }
else
   {
    log "@ in maildrop.manual $NOW, no routing found, will drop through to DEFAULT=$DEFAULT"
   }

So if it uses [ to '!'"$ADDRLIST" ] then it will pass the message to SMTP (aka
exim4) and exim4 will write to e.g. /var/mail/myuserid ... or if it drops
through, then maildrop will write to (the file) $DEFAULT, which could well be /var/mail/myuserid. Now I can't actually work out a case where 2 instances of this could be running simultaneously, but I'm just nervous of two different bits of code writing to the same file. I'm reasonably confident exim4 would protect
itself from another exim4 instance and likewise maildrop.

I think I'll go back to maildrop and see why I saw flock(2) getting used an if
it can use fcntl(2) instead.

From maildrop:


--enable-use-flock=flag - if this option is set to 1, maildrop will use either   the flock(), the lockf(), or the fcntl() system call to lock a mailbox file   when delivering a message. **On most systems, all three use compatible locking   mechanisms.** In some very isolated cases, flock(), lockf(), and fcntl(), are
  different, incompatible, locking mechanisms. maildrop must use the same
  locking mechanism as any mail reading programs. The configuration script will   run some tests to determine what locking function calls are available, and   will choose one by itself. The --with-locking-method can be used to manually
  choose the locking function call to use.

--with-locking-method=name - manually select a locking function call. name is   either "fcntl", "flock", or "lockf". Otherwise the configuration script will
  pick one by itself.

The comment there is somewhat at odds, to the flock(2) man page:

NOTES
       Since kernel 2.0, flock() is implemented as a system call  in  its  own        right  rather than being emulated in the GNU C library as a call to fc‐        ntl(2).  With this implementation, **there is no interaction between  the        types  of lock placed by flock() and fcntl(2),** and flock() does not de‐
       tect deadlock.


... I'm probably worrying about nothing, this is a standard Debian install and this same issue exists for Thunderbird, pine, mutt etc

so I suspect it was "sorted out" during the packaging.




--
## subscription configuration (requires account):
##   https://lists.exim.org/mailman3/postorius/lists/exim-users.lists.exim.org/
## unsubscribe (doesn't require an account):
##   [email protected]
## Exim details at http://www.exim.org/
## Please use the Wiki with this list - http://wiki.exim.org/

Reply via email to