Home | History | Annotate | Line # | Download | only in global
      1 /*	$NetBSD: mbox_conf.c,v 1.1.1.1 2009/06/23 10:08:47 tron Exp $	*/
      2 
      3 /*++
      4 /* NAME
      5 /*	mbox_conf 3
      6 /* SUMMARY
      7 /*	mailbox lock configuration
      8 /* SYNOPSIS
      9 /*	#include <mbox_conf.h>
     10 /*
     11 /*	int	mbox_lock_mask(string)
     12 /*	const char *string;
     13 /*
     14 /*	ARGV	*mbox_lock_names()
     15 /* DESCRIPTION
     16 /*	The functions in this module translate between external
     17 /*	mailbox locking method names and internal representations.
     18 /*
     19 /*	mbox_lock_mask() translates a string with locking method names
     20 /*	into a bit mask. Names are separated by comma or whitespace.
     21 /*	The following gives the method names and corresponding bit
     22 /*	mask value:
     23 /* .IP "flock (MBOX_FLOCK_LOCK)"
     24 /*	Use flock() style lock after opening the file. This is the mailbox
     25 /*	locking method traditionally used on BSD-ish systems (including
     26 /*	Ultrix and SunOS). It is not suitable for remote file systems.
     27 /* .IP "fcntl (MBOX_FCNTL_LOCK)"
     28 /*	Use fcntl() style lock after opening the file. This is the mailbox
     29 /*	locking method on System-V-ish systems (Solaris, AIX, IRIX, HP-UX).
     30 /*	This method is supposed to work for remote systems, but often
     31 /*	has problems.
     32 /* .IP "dotlock (MBOX_DOT_LOCK)"
     33 /*	Create a lock file with the name \fIfilename\fB.lock\fR. This
     34 /*	method pre-dates kernel locks. This works with remote file systems,
     35 /*	modulo cache coherency problems.
     36 /* .PP
     37 /*	mbox_lock_names() returns an array with the names of available
     38 /*	mailbox locking methods. The result should be given to argv_free().
     39 /* DIAGNOSTICS
     40 /*	Fatal errors: undefined locking method name.
     41 /* LICENSE
     42 /* .ad
     43 /* .fi
     44 /*	The Secure Mailer license must be distributed with this software.
     45 /* AUTHOR(S)
     46 /*	Wietse Venema
     47 /*	IBM T.J. Watson Research
     48 /*	P.O. Box 704
     49 /*	Yorktown Heights, NY 10598, USA
     50 /*--*/
     51 
     52 /* System library. */
     53 
     54 #include <sys_defs.h>
     55 
     56 /* Utility library. */
     57 
     58 #include <name_mask.h>
     59 #include <argv.h>
     60 
     61 /* Global library. */
     62 
     63 #include <mail_params.h>
     64 #include <mbox_conf.h>
     65 
     66  /*
     67   * The table with available mailbox locking methods. Some systems have
     68   * flock() locks; all POSIX-compatible systems have fcntl() locks. Even
     69   * though some systems do not use dotlock files by default (4.4BSD), such
     70   * locks can be necessary when accessing mailbox files over NFS.
     71   */
     72 static const NAME_MASK mbox_mask[] = {
     73 #ifdef HAS_FLOCK_LOCK
     74     "flock", MBOX_FLOCK_LOCK,
     75 #endif
     76 #ifdef HAS_FCNTL_LOCK
     77     "fcntl", MBOX_FCNTL_LOCK,
     78 #endif
     79     "dotlock", MBOX_DOT_LOCK,
     80     0,
     81 };
     82 
     83 /* mbox_lock_mask - translate mailbox lock names to bit mask */
     84 
     85 int     mbox_lock_mask(const char *string)
     86 {
     87     return (name_mask(VAR_MAILBOX_LOCK, mbox_mask, string));
     88 }
     89 
     90 /* mbox_lock_names - return available mailbox lock method names */
     91 
     92 ARGV   *mbox_lock_names(void)
     93 {
     94     const NAME_MASK *np;
     95     ARGV   *argv;
     96 
     97     argv = argv_alloc(2);
     98     for (np = mbox_mask; np->name != 0; np++)
     99 	argv_add(argv, np->name, ARGV_END);
    100     argv_terminate(argv);
    101     return (argv);
    102 }
    103