1/*	$NetBSD$	*/
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  */
72static 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
85int     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
92ARGV   *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