# things inside of C comments get copied to the manpage
# things starting with # are ignored

/* .\" -*- nroff -*-
.TH IMAPD.CONF 5 "Project Cyrus" CMU
.\"
.\" Copyright (c) 1994-2008 Carnegie Mellon University.  All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\"
.\" 1. Redistributions of source code must retain the above copyright
.\"    notice, this list of conditions and the following disclaimer.
.\"
.\" 2. Redistributions in binary form must reproduce the above copyright
.\"    notice, this list of conditions and the following disclaimer in
.\"    the documentation and/or other materials provided with the
.\"    distribution.
.\"
.\" 3. The name "Carnegie Mellon University" must not be used to
.\"    endorse or promote products derived from this software without
.\"    prior written permission. For permission or any legal
.\"    details, please contact
.\"      Carnegie Mellon University
.\"      Center for Technology Transfer and Enterprise Creation
.\"      4615 Forbes Avenue
.\"      Suite 302
.\"      Pittsburgh, PA  15213
.\"      (412) 268-7393, fax: (412) 268-7395
.\"      innovation@andrew.cmu.edu
 *
.\" 4. Redistributions of any form whatsoever must retain the following
.\"    acknowledgment:
.\"    "This product includes software developed by Computing Services
.\"     at Carnegie Mellon University (http://www.cmu.edu/computing/)."
.\"
.\" CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO
.\" THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
.\" AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE
.\" FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
.\" AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
.\" OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
.\"
.\" $Id: imapoptions,v 1.78 2010/06/28 12:06:43 brong Exp $

.SH NAME
imapd.conf \- IMAP configuration file
.SH DESCRIPTION
\fB/etc/imapd.conf\fR 
is the configuration file for the Cyrus IMAP server.  It defines
local parameters for IMAP. 
.PP
Each line of the \fB/etc/imapd.conf\fR file has the form
.IP
\fIoption\fR: \fIvalue\fR
.PP
where \fIoption\fR is the name of the configuration option being set
and \fIvalue\fR is the value that the configuration option is being
set to.
.PP
Although there is no limit to the length of a line, a ``\\''
(backslash) character may be used as the last character on a line to
force it to continue on the next one.  No additional whitespace is
inserted before or after the ``\\''.  Note that a line that is split
using ``\\'' character(s) is still considered a single line.
For example
.IP
\fIoption\fR:\\
.br
.in +1
\fIvalue\fR1 \fIvalue\fR2 \\
.br
.in +1
\fIvalue\fR3
.PP
is equivalent to
.IP
\fIoption\fR: \fIvalue\fR1 \fIvalue\fR2   \fIvalue\fR3
.PP
Blank lines and lines beginning with ``#'' are ignored.
.PP
For boolean and enumerated options, the values ``yes'', ``on'', ``t'',
``true'' and ``1'' turn the option on, the values ``no'', ``off'',
``f'', ``false'' and ``0'' turn the option off.
.SH FIELD DESCRIPTIONS
.PP
The sections below detail options that can be placed in the
\fB/etc/imapd.conf\fR file, and show each option's default value.
Some options have no default value, these are listed with
``<no default>''.  Some options default to the empty string, these
are listed with ``<none>''.
*/

# OPTIONS

{ "addressbookprefix", "#addressbooks", STRING }
/* The prefix for the addressbook mailboxes hierarchies.  The hierarchy
   delimiter will be automatically appended.  The public addressbook
   hierarchy will be at the toplevel of the shared namespace.  A
   user's personal calendar hierarchy will be a child of their Inbox. */

{ "admins", "", STRING }
/* The list of userids with administrative rights.  Separate each userid
   with a space.  Sites using Kerberos authentication may use
   separate "admin" instances.
.PP
   Note that accounts used by users should not be administrators.
   Administrative accounts should not receive mail.  That is, if user
   "jbRo" is a user reading mail, he should not also be in the admins line.
   Some problems may occur otherwise, most notably the ability of
   administrators to create top-level mailboxes visible to users,
   but not writable by users. */

{ "afspts_localrealms", NULL, STRING }
/* The list of realms which are to be treated as local, and thus stripped
   during identifier canonicalization (for the AFSPTS ptloader module).
   This is different from loginrealms in that it occurs later in the
   authorization process (as the user id is canonified for PTS lookup) */

{ "afspts_mycell", NULL, STRING }
/* Cell to use for AFS PTS lookups.  Defaults to the local cell. */

{ "allowallsubscribe", 0, SWITCH }
/* Allow subscription to nonexistent mailboxes.  This option is
   typically used on backend servers in a Murder so that users can
   subscribe to mailboxes that don't reside on their "home" server.
   This option can also be used as a workaround for IMAP clients which
   don't play well with nonexistent or unselectable mailboxes (e.g.,
   Microsoft Outlook). */

{ "allowanonymouslogin", 0, SWITCH }
/* Permit logins by the user "anonymous" using any password.  Also
   allows use of the SASL ANONYMOUS mechanism. */

{ "allowapop", 1, SWITCH }
/* Allow use of the POP3 APOP authentication command.
.PP
  Note that this command requires that SASL is compiled with APOP
  support, that the plaintext passwords are available in a SASL auxprop
  backend (e.g., sasldb), and that the system can provide enough entropy
  (e.g., from /dev/urandom) to create a challenge in the banner. */

{ "allownewnews", 0, SWITCH }
/* Allow use of the NNTP NEWNEWS command.
.PP
  Note that this is a very expensive command and should only be
  enabled when absolutely necessary. */

{ "allowplaintext", 0, SWITCH }
/* Allow the use of cleartext passwords on the wire. */
   
{ "allowusermoves", 0, SWITCH }
/* Allow moving user accounts (with associated meta-data) via RENAME
   or XFER.
.PP
  Note that measures should be taken to make sure that the user being
  moved is not logged in, and cannot login during the move.  Failure
  to do so may result in the user's meta-data (seen state,
  subscriptions, etc) being corrupted or out of date. */
   
{ "altnamespace", 0, SWITCH }
/* Use the alternate IMAP namespace, where personal folders reside at the
   same level in the hierarchy as INBOX.
.PP
   This option ONLY applies where interaction takes place with the
   client/user.  Currently this is limited to the IMAP protocol (imapd)
   and Sieve scripts (lmtpd).  This option does NOT apply to admin tools
   such as cyradm (admins ONLY), reconstruct, quota, etc., NOR does it
   affect LMTP delivery of messages directly to mailboxes via
   plus-addressing. */

{ "annotation_db", "skiplist", STRINGLIST("berkeley", "berkeley-hash", "skiplist")}
/* The cyrusdb backend to use for mailbox annotations. */

{ "annotation_db_path", NULL, STRING }
/* The absolute path to the annotations db file.  If not specified,
   will be confdir/annotations.db */

{ "anyoneuseracl", 1, SWITCH }
/* Should non-admin users be allowed to set ACLs for the 'anyone'
   user on their mailboxes?  In a large organization this can cause
   support problems, but it's enabled by default. */

{ "annotation_definitions", NULL, STRING }
/* File containing external (third-party) annotation definitions.
.PP
Each line of the file specifies the properties of an annotation and
has the following form:
.IP
\fIname\fR, \fIscope\fR, \fIattrib-type\fR, \fIproxy-type\fR,
\fIattrib-names\fR, \fIacl\fR
.IP \fIname\fR 5
is the hierarchical name as in the draft standard, typically of the
form /vendor/acme/blurdybloop
.IP \fIscope\fR 5
specifies whether the annotation is for the \fBserver\fR or a
\fBmailbox\fR
.IP \fIattrib-type\fR 5
specifies the attribute data type which is one of: \fBstring\fR,
\fBboolean\fR, \fBint\fR, \fBuint\fR, or \fBcontent-type\fR
.IP \fIproxy-type\fR 5
specifies whether this attribute is for the \fBbackend\fR or
\fBproxy\fR servers or both (\fBproxy_and_backend\fR) 
.IP \fIattrib-names\fR 5
is the space-separated list of available attributes for the
annotation. Possible attribute names are (where the suffixless \fBfoo\fR
permits both \fBfoo.priv\fR and \fBfoo.shared\fR): \fBalue\fR,
\fBvalue.shared\fR, \fBvalue.priv\fR, \fBsize\fR, \fBsize.shared\fR,
\fBsize.priv\fR, \fBmodifiedsince\fR, \fBmodifiedsince.shared\fR,
\fBmodifiedsince.priv\fR, \fBcontent-type\fR,
\fBcontent-type.shared\fR, \fBcontent-type.priv\fR
.IP \fIacl\fR 5
is the extra ACL requirements for setting annotations. This is the
standard IMAP ACL permission bit string format. Particularly useful
is the \fBa\fR right to require admin privileges. Note that some ACL
requirements (read and write on the mailbox) are hard-wired in the
server
.PP
Blank lines and lines beginning with ``#'' are ignored.
*/

{ "auditlog", 0, SWITCH }
/* Should cyrus output log entries for every action taken on a message
   file or mailboxes list entry?  It's noisy so disabled by default, but
   can be very useful for tracking down what happened if things look strange */

{ "auth_mech", "unix", STRINGLIST("unix", "pts", "krb", "krb5")}
/* The authorization mechanism to use. */

{ "autocreatequota", 0, INT }
/* If nonzero, normal users may create their own IMAP accounts by
   creating the mailbox INBOX.  The user's quota is set to the value
   if it is positive, otherwise the user has unlimited quota. */

{ "berkeley_cachesize", 512, INT }
/* Size (in kilobytes) of the shared memory buffer pool (cache) used
   by the berkeley environment.  The minimum allowed value is 20.  The
   maximum allowed value is 4194303 (4GB). */

{ "berkeley_locks_max", 50000, INT }
/* Maximum number of locks to be held or requested in the berkeley
   environment. */

{ "berkeley_txns_max", 100, INT }
/* Maximum number of transactions to be supported in the berkeley
   environment. */

{ "boundary_limit", 1000, INT }
/* messages are parsed recursively and a deep enough MIME structure
   can cause a stack overflow.  Do not parse deeper than this many
   layers of MIME structure.  The default of 1000 is much higher
   than any sane message should have. */

{ "caldav_allowscheduling", "on", ENUM("off", "on", "apple") }
/* Enable calendar scheduling operations. If set to "apple", the
   server will emulate Apple CalendarServer behavior as closely as
   possible. */

{ "caldav_realm", NULL, STRING }
/* The realm to present for HTTP authentication of CalDAV resources.
   If not set (the default), the value of the "servername" option will
   be used.*/

{ "calendarprefix", "#calendars", STRING }
/* The prefix for the calendar mailboxes hierarchies.  The hierarchy
   delimiter will be automatically appended.  The public calendar
   hierarchy will be at the toplevel of the shared namespace.  A
   user's personal calendar hierarchy will be a child of their Inbox. */

{ "calendar_user_address_set", NULL, STRING }
/* Space-separated list of domains corresponding to calendar user
   addresses for which the server is responsible.  If not set (the
   default), the value of the "servername" option will be used. */

{ "carddav_realm", NULL, STRING }
/* The realm to present for HTTP authentication of CardDAV resources.
   If not set (the default), the value of the "servername" option will
   be used.*/

{ "client_timeout", 10, INT }
/* Number of seconds to wait before returning a timeout failure when
   performing a client connection (e.g., in a murder environment) */

{ "commandmintimer", NULL, STRING }
/* Time in seconds. Any imap command that takes longer than this
   time is logged. */

{ "configdirectory", NULL, STRING }
/* The pathname of the IMAP configuration directory.  This field is
   required. */

{ "dav_realm", NULL, STRING }
/* The realm to present for HTTP authentication of generic DAV
   resources (principals).  If not set (the default), the value of the
   "servername" option will be used.*/

{ "debug_command", NULL, STRING }
/* Debug command to be used by processes started with -D option.  The string
   is a C format string that gets 3 options: the first is the name of the
   executable (without path).  The second is the pid (integer) and the third
   is the service ID.  Example: /usr/local/bin/gdb /usr/cyrus/bin/%s %d */

{ "defaultacl", "anyone lrs", STRING }
/* The Access Control List (ACL) placed on a newly-created (non-user)
   mailbox that does not have a parent mailbox. */

{ "defaultdomain", NULL, STRING }
/* The default domain for virtual domain support */

{ "defaultpartition", NULL, STRING }
/* The partition name used by default for new mailboxes.  If not
   specified, the partition with the most free space will be used for new
   mailboxes. */

{ "defaultserver", NULL, STRING }
/* The backend server name used by default for new mailboxes.  If not
   specified, the server with the most free space will be used for new
   mailboxes. */

{ "deletedprefix", "DELETED", STRING }
/* If "delete_mode" set to be "delayed", the prefix for the deleted
   mailboxes hierarchy.  The hierarchy delimiter will be automatically
   appended. */

{ "delete_mode", "immediate", ENUM("immediate", "delayed") }
/*  The manner in which mailboxes are deleted. "immediate" mode is the
    default behavior in which mailboxes are removed immediately.  In
    "delayed" mode, mailboxes are renamed to a special hiearchy defined
    by the "deletedprefix" option to be removed later by cyr_expire.
*/

{ "deleteright", "c", STRING }
/* Deprecated - only used for backwards compatibility with existing
   installations.  Lists the old RFC 2086 right which was used to
   grant the user the ability to delete a mailbox.  If a user has this
   right, they will automatically be given the new 'x' right. */

{ "disable_user_namespace", 0, SWITCH }
/* Preclude list command on user namespace.  If set to 'yes', the 
   LIST response will never include any other user's mailbox.  Admin
   users will always see all mailboxes.  The default is 'no' */

{ "disable_shared_namespace", 0, SWITCH }
/* Preclude list command on user namespace.  If set to 'yes', the 
   LIST response will never include any non-user mailboxes.  Admin
   users will always see all mailboxes.  The default is 'no' */

{ "disconnect_on_vanished_mailbox", 0, SWITCH }
/* If enabled, IMAP/POP3/NNTP clients will be disconnected by the
   server if the currently selected mailbox is (re)moved by another
   session.  Otherwise, the missing mailbox is treated as empty while
   in use by the client.*/

{ "dkim_domain", NULL, STRING }
/* The domain to be reported as doing DKIM signing. */

{ "dkim_selector", NULL, STRING }
/* Name of the selector subdividing the domain namespace.  This
   specifies the actual key used for DKIM signing within the domain. */

{ "duplicate_db", "skiplist", STRINGLIST("berkeley", "berkeley-nosync", "berkeley-hash", "berkeley-hash-nosync", "skiplist", "sql")}
/* The cyrusdb backend to use for the duplicate delivery suppression
   and sieve. */

{ "duplicate_db_path", NULL, STRING }
/* The absolute path to the duplicate db file.  If not specified,
   will be confdir/deliver.db */

{ "duplicatesuppression", 1, SWITCH }
/* If enabled, lmtpd will suppress delivery of a message to a mailbox if
   a message with the same message-id (or resent-message-id) is recorded
   as having already been delivered to the mailbox.  Records the mailbox
   and message-id/resent-message-id of all successful deliveries. */

{ "expunge_mode", "default", ENUM("default", "immediate", "delayed") }
/* The mode in which messages (and their corresponding cache entries)
   are expunged.  "default" mode is the default behavior in which the
   message files are purged at the time of the EXPUNGE, but index
   and cache records are retained to facilitate QRESYNC.  In "delayed"
   mode, the message files are also retained, allowing unexpunge to
   rescue them.  In "immediate" mode, both the message files and the
   index records are removed as soon as possible.  In all cases,
   nothing will be finally purged until all other processes have
   closed the mailbox to ensure they never see data disappear under
   them.  In "default" or "delayed" mode, a later run of "cyr_expire"
   will clean out the retained records (and possibly message files).
   This reduces the amount of I/O that takes place at the time of
   EXPUNGE and should result in greater responsiveness for the client,
   especially when expunging a large number of messages. */

{ "expunge_days", 7, INT }
/* Number of days to retain expunged messages before cleaning up their
   index records.  The default is 7.  This is necessary for QRESYNC
   to work correctly.  If combined with delayed expunge (above) you
   will also be able to unexpunge messages during this time. */

{ "failedloginpause", 3, INT }
/* Number of seconds to pause after a failed login. */

{ "flushseenstate", 0, SWITCH }
/* If enabled, changes to the seen state will be flushed to disk
   immediately, otherwise changes will be cached and flushed when the
   mailbox is closed.  This option may be used to fix the problem of
   previously read messages being marked as unread in Microsoft
   Outlook, at the expense of a loss of performance/scalability. */

{ "foolstupidclients", 0, SWITCH }
/* If enabled, only list the personal namespace when a LIST "*" is performed
   (it changes the request to a LIST "INBOX*"). */

{ "force_sasl_client_mech", NULL, STRING }
/* Force preference of a given SASL mechanism for client side operations
   (e.g., murder environments).  This is separate from (and overridden by)
   the ability to use the <host shortname>_mechs option to set preferred
   mechanisms for a specific host */

{ "fulldirhash", 0, SWITCH }
/* If enabled, uses an improved directory hashing scheme which hashes
   on the entire username instead of using just the first letter as
   the hash.  This changes hash algorithm used for quota and user
   directories and if \fIhashimapspool\fR is enabled, the entire mail
   spool.
.PP
   Note that this option CANNOT be changed on a live system.  The
   server must be quiesced and then the directories moved with the
   \fBrehash\fR utility. */

{ "hashimapspool", 0, SWITCH }
/* If enabled, the partitions will also be hashed, in addition to the
   hashing done on configuration directories.  This is recommended if
   one partition has a very bushy mailbox tree. */

# Commented out - there's no such thing as "hostname_mechs", but we need
# this for the man page
# { "hostname_mechs", NULL, STRING }
/* Force a particular list of SASL mechanisms to be used when authenticating
   to the backend server hostname (where hostname is the short hostname of
   the server in question). If it is not specified it will query the server
   for available mechanisms and pick one to use. - Cyrus Murder */

# Commented out - there's no such thing as "hostname_password", but we need
# this for the man page
# { "hostname_password", NULL, STRING }
/* The password to use for authentication to the backend server hostname
   (where hostname is the short hostname of the server) - Cyrus Murder */

{ "httpallowcompress", 1, SWITCH }
/* If enabled, the server will compress response payloads if the client
   indicates that it can accept them.  Note that the compressed data
   will appear in telemetry logs, leaving only the response headers as
   human-readable.*/

{ "httpallowcors", NULL, STRING }
/* A wildmat pattern specifying a list of origin URIs ( scheme "://"
   host [ ":" port ] ) that are allowed to make Cross-Origin Resource
   Sharing (CORS) requests on the server.  By default, CORS requests
   are disabled.
.PP
   Note that the scheme and host should both be lowercase, the port
   should be omitted if using the default for the scheme (80 for http,
   443 for https), and there should be no trailing '/' (e.g.:
   "http://www.example.com:8080", "https://example.org"). */

{ "httpallowtrace", 0, SWITCH }
/* Allow use of the TRACE method.
.PP
   Note that sensitive data might be disclosed by the response. */

{ "httpallowedurls", NULL, STRING }
/* Space-separated list of relative URLs (paths) rooted at
   "httpdocroot" (see below) to be served by httpd.  If set, this
   option will limit served static content to only those paths specified
   (returning "404 Not Found" to any other client requested URLs).
   Otherwise, httpd will serve any content found in "httpdocroot".
.PP
   Note that any path specified by "rss_feedlist_template" is an
   exception to this rule.*/

{ "httpcontentmd5", 0, SWITCH }
/* If enabled, HTTP responses will include a Content-MD5 header for
   the purpose of providing an end-to-end message integrity check
   (MIC) of the payload body.  Note that enabling this option will
   use additional CPU to generate the MD5 digest, which may be ignored
   by clients anyways. */

{ "httpdocroot", NULL, STRING }
/* If set, http will serve the static content (html/text/jpeg/gif
   files, etc) rooted at this directory.  Otherwise, httpd will not
   serve any static content. */ 

{ "httpkeepalive", 20, INT }
/* Set the length of the HTTP server's keepalive heartbeat in seconds.
   The default is 20.  The minimum value is 0, which will disable the
   keepalive heartbeat.  When enabled, if a request takes longer than
   \fIhttpkeepalive\fR seconds to process, the server will send the client
   provisional responses every \fIhttpkeepalive\fR seconds until the
   final response can be sent */

{ "httpmodules", "", BITFIELD("caldav", "carddav", "domainkey", "ischedule", "rss", "timezone") }
/* Space-separated list of HTTP modules that will be enabled in
   httpd(8).  This option has no effect on modules that are disabled
   at compile time due to missing dependencies (e.g. libical). */

{ "httpprettytelemetry", 0, SWITCH }
/* If enabled, HTTP response payloads including server-generated
   markup languages (HTML, XML) will utilize line breaks and
   indentation to promote better human-readability in telemetry logs.
   Note that enabling this option will increase the amount of data
   sent across the wire. */

{ "httptimeout", 5, INT }
/* Set the length of the HTTP server's inactivity autologout timer,    
   in minutes.  The default is 5.  The minimum value is 0, which will
   disable persistent connections. */

{ "idlesocket", "{configdirectory}/socket/idle", STRING }
/* Unix domain socket that idled listens on. */

{ "ignorereference", 0, SWITCH }
/* For backwards compatibility with Cyrus 1.5.10 and earlier -- ignore
  the reference argument in LIST or LSUB commands. */

{ "imapidlepoll", 60, INT }
/* The interval (in seconds) for polling for mailbox changes and
   ALERTs while running the IDLE command.  This option is used when
   idled is not enabled or cannot be contacted.  The minimum value is
   1.  A value of 0 will disable IDLE. */

{ "imapidresponse", 1, SWITCH }
/* If enabled, the server responds to an ID command with a parameter 
   list containing: version, vendor, support-url, os, os-version,
   command, arguments, environment.  Otherwise the server returns NIL. */

{ "imapmagicplus", 0, SWITCH }
/* Only list a restricted set of mailboxes via IMAP by using
   userid+namespace syntax as the authentication/authorization id.
   Using userid+ (with an empty namespace) will list only subscribed
   mailboxes. */ 

{ "implicit_owner_rights", "lkxa", STRING }
/* The implicit Access Control List (ACL) for the owner of a mailbox. */

# Commented out - there's no such thing as "@include", but we need
# this for the man page
# { "@include", NULL, STRING }
/* Directive which includes the specified file as part of the
   configuration.  If the path to the file is not absolute, CYRUS_PATH
   is prepended. */

{ "improved_mboxlist_sort", 0, SWITCH }
/* If enabled, a special comparator will be used which will correctly
   sort mailbox names that contain characters such as ' ' and '-'.
.PP
   Note that this option SHOULD NOT be changed on a live system.  The
   mailboxes database should be dumped (ctl_mboxlist) before the
   option is changed, removed, and then undumped after changing the
   option.  When not using flat files for the subscriptions databases
   the same has to be done (cyr_dbtool) for each subscription database
   See improved_mboxlist_sort.html.*/

{ "internaldate_heuristic", "standard", ENUM("standard", "receivedheader") }
/* Mechanism to determine email internaldates on delivery/reconstruct.
   "standard" uses time() when delivering a message, mtime on reconstruct.
   "receivedheader" looks at the top most Received header
   or time/mtime otherwise */

{ "ldap_authz", NULL, STRING }
/* SASL authorization ID for the LDAP server */

{ "ldap_base", "", STRING }
/* Contains the LDAP base dn for the LDAP ptloader module */

{ "ldap_bind_dn", NULL, STRING }
/* Bind DN for the connection to the LDAP server (simple bind).
   Do not use for anonymous simple binds */

{ "ldap_deref", "never", STRINGLIST("search", "find", "always", "never") }
/* Specify how aliases dereferencing is handled during search. */

{ "ldap_filter", "(uid=%u)", STRING }
/* Specify a filter that searches user identifiers.  The following tokens can be
   used in the filter string:

   %%   = %
   %u   = user
   %U   = user portion of %u (%U = test when %u = test@domain.tld)
   %d   = domain portion of %u if available (%d = domain.tld when %u =
          %test@domain.tld), otherwise same as %r
   %D   = user dn.  (use when ldap_member_method: filter)
   %1-9 = domain tokens (%1 = tld, %2 = domain when %d = domain.tld)

   ldap_filter is not used when ldap_sasl is enabled. */

{ "ldap_group_base", "", STRING }
/* LDAP base dn for ldap_group_filter. */

{ "ldap_group_filter", "(cn=%u)", STRING }
/* Specify a filter that searches for group identifiers.
   See ldap_filter for more options. */ 

{ "ldap_group_scope", "sub", STRINGLIST("sub", "one", "base") }
/* Specify search scope for ldap_group_filter. */

{ "ldap_id", NULL, STRING }
/* SASL authentication ID for the LDAP server */

{ "ldap_mech", NULL, STRING }
/* SASL mechanism for LDAP authentication */

{ "ldap_member_attribute", NULL, STRING }
/* See ldap_member_method. */

{ "ldap_member_base", "", STRING }
/* LDAP base dn for ldap_member_filter. */

{ "ldap_member_filter", "(member=%D)", STRING }
/* Specify a filter for "ldap_member_method: filter".  
   See ldap_filter for more options. */ 

{ "ldap_member_method", "attribute", STRINGLIST("attribute", "filter") }
/* Specify a group method.  The "attribute" method retrieves groups from 
   a multi-valued attribute specified in ldap_member_attribute.  

   The "filter" method uses a filter, specified by ldap_member_filter, to find
   groups; ldap_member_attribute is a single-value attribute group name. */

{ "ldap_member_scope", "sub", STRINGLIST("sub", "one", "base") }
/* Specify search scope for ldap_member_filter. */

{ "ldap_password", NULL, STRING }
/* Password for the connection to the LDAP server (SASL and simple bind).  
   Do not use for anonymous simple binds */

{ "ldap_realm", NULL, STRING }
/* SASL realm for LDAP authentication */

{ "ldap_referrals", 0, SWITCH }
/* Specify whether or not the client should follow referrals. */

{ "ldap_restart", 1, SWITCH }
/* Specify whether or not LDAP I/O operations are automatically restarted
   if they abort prematurely. */

{ "ldap_sasl", 1, SWITCH }
/* Use SASL for LDAP binds in the LDAP PTS module. */

{ "ldap_sasl_authc", NULL, STRING }
/* Deprecated.  Use ldap_id */

{ "ldap_sasl_authz", NULL, STRING }
/* Deprecated.  Use ldap_authz */

{ "ldap_sasl_mech", NULL, STRING }
/* Deprecated.  Use ldap_mech */

{ "ldap_sasl_password", NULL, STRING }
/* Deprecated.  User ldap_password */

{ "ldap_sasl_realm", NULL, STRING }
/* Deprecated.  Use ldap_realm */

{ "ldap_scope", "sub", STRINGLIST("sub", "one", "base") }
/* Specify search scope. */

{ "ldap_servers", "ldap://localhost/", STRING }
/* Deprecated.  Use ldap_uri */

{ "ldap_size_limit", 1, INT }
/* Specify a number of entries for a search request to return. */

{ "ldap_start_tls", 0, SWITCH }
/* Use StartTLS extended operation.  Do not use ldaps: ldap_uri when
   this option is enabled. */

{ "ldap_time_limit", 5, INT }
/* Specify a number of seconds for a search request to complete. */

{ "ldap_timeout", 5, INT }
/* Specify a number of seconds a search can take before timing out. */

{ "ldap_tls_cacert_dir", NULL, STRING }
/* Path to directory with CA (Certificate Authority) certificates. */

{ "ldap_tls_cacert_file", NULL, STRING }
/* File containing CA (Certificate Authority) certificate(s). */

{ "ldap_tls_cert", NULL, STRING }
/* File containing the client certificate. */

{ "ldap_tls_check_peer", 0, SWITCH }
/* Require and verify server certificate.  If this option is yes,
   you must specify ldap_tls_cacert_file or ldap_tls_cacert_dir. */

{ "ldap_tls_ciphers", NULL, STRING }
/* List of SSL/TLS ciphers to allow.  The format of the string is
   described in ciphers(1). */

{ "ldap_tls_key", NULL, STRING }
/* File containing the private client key. */

{ "ldap_uri", NULL, STRING }
/* Contains a list of the URLs of all the LDAP servers when using the
   LDAP PTS module. */

{ "ldap_version", 3, INT }
/* Specify the LDAP protocol version.  If ldap_start_tls and/or
   ldap_use_sasl are enabled, ldap_version will be automatically
   set to 3. */

{ "lmtp_downcase_rcpt", 0, SWITCH }
/* If enabled, lmtpd will convert the recipient addresses to lowercase
   (up to a '+' character, if present). */

{ "lmtp_fuzzy_mailbox_match", 0, SWITCH }
/* If enabled, and the mailbox specified in the detail part of the
   recipient (everything after the '+') does not exist, lmtpd will try
   to find the closest match (ignoring case, ignoring whitespace,
   falling back to parent) to the specified mailbox name. */

{ "lmtp_over_quota_perm_failure", 0, SWITCH }
/* If enabled, lmtpd returns a permanent failure code when a user's
   mailbox is over quota.  By default, the failure is temporary,
   causing the MTA to queue the message and retry later. */

{ "lmtp_strict_quota", 0, SWITCH }
/* If enabled, lmtpd returns a failure code when the incoming message
   will cause the user's mailbox to exceed its quota.  By default, the
   failure won't occur until the mailbox is already over quota. */

{ "lmtp_strict_rfc2821", 1, SWITCH }
/* By default, lmtpd will be strict (per RFC 2821) with regards to which
   envelope addresses are allowed.  If this option is set to false, 8bit
   characters in the local-part of envelope addresses are changed to 'X'
   instead.  This is useful to avoid generating backscatter with 
   certain MTAs like Postfix or Exim which accept such messages. */

{ "lmtpsocket", "{configdirectory}/socket/lmtp", STRING }
/* Unix domain socket that lmtpd listens on, used by deliver(8). This should
   match the path specified in cyrus.conf(5). */

{ "lmtptxn_timeout", 300, INT }
/* Timeout (in seconds) used during a lmtp transaction to a remote backend
   (e.g. in a murder environment).  Can be used to prevent hung lmtpds
   on proxy hosts when a backend server becomes unresponsive during a
   lmtp transaction.  The default is 300 - change to zero for infinite. */

# xxx how does this tie into virtual domains?
{ "loginrealms", "", STRING }
/* The list of remote realms whose users may authenticate using cross-realm
   authentication identifiers.  Separate each realm name by a space.  (A
   cross-realm identity is considered any identity returned by SASL
   with an "@" in it.). */

{ "loginuseacl", 0, SWITCH }
/* If enabled, any authentication identity which has \fBa\fR rights on a
   user's INBOX may log in as that user. */

{ "logtimestamps", 0, SWITCH }
/* Include notations in the protocol telemetry logs indicating the number of
   seconds since the last command or response. */

{ "mailbox_default_options", 0, INT }
/* Default "options" field for the mailbox on create.  You'll want to know
   what you're doing before setting this, but it can apply some default
   annotations like duplicate supression */

{ "mailnotifier", NULL, STRING }
/* Notifyd(8) method to use for "MAIL" notifications.  If not set, "MAIL"
   notifications are disabled. */

{ "maxheaderlines", 1000, INT }
/* Maximum number of lines of header that will be processed into cache
   records.  Default 1000.  If set to zero, it is unlimited.
   If a message hits the limit, an error will be logged and the rest of
   the lines in the header will be skipped.  This is to avoid malformed
   messages causing giant cache records */

{ "maxmessagesize", 0, INT }
/* Maximum incoming LMTP message size.  If non-zero, lmtpd will reject
   messages larger than \fImaxmessagesize\fR bytes.  If set to 0, this
   will allow messages of any size (the default). */

{ "maxquoted", 131072, INT }
/* Maximum size of a single quoted string for the parser.  Default 128k */

{ "maxword", 131072, INT }
/* Maximum size of a single word for the parser.  Default 128k */

{ "mboxkey_db", "skiplist", STRINGLIST("berkeley", "skiplist") }
/* The cyrusdb backend to use for mailbox keys. */

{ "mboxlist_db", "skiplist", STRINGLIST("flat", "berkeley", "berkeley-hash", "skiplist", "sql")}
/* The cyrusdb backend to use for the mailbox list. */

{ "mboxlist_db_path", NULL, STRING }
/* The absolute path to the mailboxes db file.  If not specified
   will be confdir/mailboxes.db */

{ "mboxname_lockpath", NULL, STRING }
/* Path to mailbox name lock files (default $conf/lock) */

{ "metapartition_files", "", BITFIELD("header", "index", "cache", "expunge", "squat", "lock", "dav") }
/* Space-separated list of metadata files to be stored on a
   \fImetapartition\fR rather than in the mailbox directory on a spool
   partition. */

# Commented out - there's no such thing as "metapartition-name",
# but we need this for the man page
# { "metapartition-name", NULL, STRING }
/* The pathname of the metadata partition \fIname\fR, corresponding to
   spool partition \fBpartition-name\fR.  For any mailbox residing in
   a directory on \fBpartition-name\fR, the metadata files listed in
   \fImetapartition_files\fR will be stored in a corresponding directory on
   \fBmetapartition-name\fR.   Note that not every
   \fBpartition-name\fR option is required to have a corresponding
   \fBmetapartition-name\fR option, so that you can selectively choose
   which spool partitions will have separate metadata partitions. */

{ "mupdate_authname", NULL, STRING }
/* The SASL username (Authentication Name) to use when authenticating to the
   mupdate server (if needed). */

{ "mupdate_config", "standard", ENUM("standard", "unified", "replicated") }
/* The configuration of the mupdate servers in the Cyrus Murder.
   The "standard" config is one in which there are discreet frontend
   (proxy) and backend servers.  The "unified" config is one in which
   a server can be both a frontend and backend.  The "replicated"
   config is one in which multiple backend servers all share the same
   mailspool, but each have their own "replicated" copy of
   mailboxes.db. */

{ "munge8bit", 1, SWITCH }
/* If enabled, lmtpd munges messages with 8-bit characters in the
   headers.  The 8-bit characters are changed to `X'.  If
   \fBreject8bit\fR is enabled, setting \fBmunge8bit\fR has no effect.
   (A proper solution to non-ASCII characters in headers is offered by
   RFC 2047 and its predecessors.) */ 

# xxx badly worded
{ "mupdate_connections_max", 128, INT }
/* The max number of connections that a mupdate process will allow, this
   is related to the number of file descriptors in the mupdate process.
   Beyond this number connections will be immediately issued a BYE response. */

{ "mupdate_password", NULL, STRING }
/* The SASL password (if needed) to use when authenticating to the
   mupdate server. */

{ "mupdate_port", 3905, INT }
/* The port of the mupdate server for the Cyrus Murder */

{ "mupdate_realm", NULL, STRING }
/* The SASL realm (if needed) to use when authenticating to the mupdate
   server. */

{ "mupdate_retry_delay", 20, INT }
/* The base time to wait between connection retries to the mupdate server. */

{ "mupdate_server", NULL, STRING }
/* The mupdate server for the Cyrus Murder */

{ "mupdate_username", "", STRING }
/* The SASL username (Authorization Name) to use when authenticating to
   the mupdate server */

{ "mupdate_workers_max", 50, INT }
/* The maximum number of mupdate worker threads (overall) */

{ "mupdate_workers_maxspare", 10, INT }
/* The maximum number of idle mupdate worker threads */

{ "mupdate_workers_minspare", 2, INT }
/* The minimum number of idle mupdate worker threads */

{ "mupdate_workers_start", 5, INT }
/* The number of mupdate worker threads to start */

{ "netscapeurl", NULL, STRING }
/* If enabled at compile time, this specifies a URL to reply when
   Netscape asks the server where the mail administration HTTP server
   is.  Administrators should set this to a local resource. */

{ "newsaddheaders", "to", BITFIELD("to", "replyto") }
/* Space-separated list of headers to be added to incoming usenet
   articles.  Added \fITo:\fR headers will contain email
   delivery addresses corresponding to each newsgroup in the
   \fINewsgroups:\fR header.  Added \fIReply-To:\fR headers will
   contain email delivery addresses corresponding to each newsgroup in
   the \fIFollowup-To:\fR or \fINewsgroups:\fR header.  If the
   specified header(s) already exist in an article, the email
   delivery addresses will be appended to the original header body(s).
.br
.sp
   This option applies if and only if the \fBnewspostuser\fR option is
   set. */

{ "newsgroups", "*", STRING }
/* A wildmat pattern specifying which mailbox hierarchies should be
   treated as newsgroups.  Only mailboxes matching the wildmat will
   accept and/or serve articles via NNTP.  If not set, a default
   wildmat of "*" (ALL shared mailboxes) will be used.  If the
   \fInewsprefix\fR option is also set, the default wildmat will be
   translated to "<newsprefix>.*" */

{ "newsmaster", "news", STRING }
/* Userid that is used for checking access controls when executing
   Usenet control messages.  For instance, to allow articles to be
   automatically deleted by cancel messages, give the "news" user
   the 'd' right on the desired mailboxes.  To allow newsgroups to be 
   automatically created, deleted and renamed by the corresponding
   control messages, give the "news" user the 'c' right on the desired
   mailbox hierarchies. */

{ "newspeer", NULL, STRING }
/* A list of whitespace-separated news server specifications to which
   articles should be fed.  Each server specification is a string of
   the form [user[:pass]@]host[:port][/wildmat] where 'host' is the fully
   qualified hostname of the server, 'port' is the port on which the
   server is listening, 'user' and 'pass' are the authentication
   credentials and 'wildmat' is a pattern that specifies which groups
   should be fed.  If no 'port' is specified, port 119 is used.  If
   no 'wildmat' is specified, all groups are fed.  If 'user' is specified
   (even if empty), then the NNTP POST command will be used to feed
   the article to the server, otherwise the IHAVE command will be
   used.
.br
.sp
   A '@' may be used in place of '!' in the wildmat to prevent feeding
   articles cross-posted to the given group, otherwise cross-posted
   articles are fed if any part of the wildmat matches.  For example,
   the string "peer.example.com:*,!control.*,@local.*" would feed all
   groups except control messages and local groups to
   peer.example.com.  In the case of cross-posting to local groups,
   these articles would not be fed. */

{ "newspostuser", NULL, STRING }
/* Userid used to deliver usenet articles to newsgroup folders
   (usually via lmtp2nntp).  For example, if set to "post", email sent
   to "post+comp.mail.imap" would be delivered to the "comp.mail.imap"
   folder.
.br
.sp
   When set, the Cyrus NNTP server will add the header(s) specified in
   the \fBnewsaddheaders\fR option to each incoming usenet article.
   The added header(s) will contain email delivery addresses
   corresponding to each relevent newsgroup.  If not set, no headers
   are added to usenet articles. */

{ "newsprefix", NULL, STRING }
/* Prefix to be prepended to newsgroup names to make the corresponding
   IMAP mailbox names. */

{ "newsrc_db_path", NULL, STRING }
/* The absolute path to the newsrc db file.  If not specified,
   will be confdir/fetchnews.db */

{ "nntptimeout", 3, INT }
/* Set the length of the NNTP server's inactivity autologout timer,    
   in minutes.  The minimum value is 3, the default. */

{ "notifysocket", "{configdirectory}/socket/notify", STRING }
/* Unix domain socket that the mail notification daemon listens on. */

{ "notify_external", NULL, STRING }
/* Path to the external program that notifyd(8) will call to send mail
   notifications.
.PP
The external program will be called with the following
command line options:
.TP
.BI \-c " class"
.TP
.BI \-p " priority"
.TP
.BI \-u " user"
.TP
.BI \-m " mailbox"
.PP
And the notification message will be available on \fIstdin\fR.
*/

# Commented out - there's no such thing as "partition-name", but we need
# this for the man page
# { "partition-name", NULL, STRING }
/* The pathname of the partition \fIname\fR.  At least one partition
   pathname MUST be specified.  If the \fBdefaultpartition\fR option is
   used, then its pathname MUST be specified.  For example, if the
   value of the \fBdefaultpartion\fR option is \fBdefault\fR, then the
   \fBpartition-default\fR field is required. */ 

{ "plaintextloginpause", 0, INT }
/* Number of seconds to pause after a successful plaintext login.  For
   systems that support strong authentication, this permits users to  
   perceive a cost of using plaintext passwords.  (This does not
   affect the use of PLAIN in SASL authentications.) */

{ "plaintextloginalert", NULL, STRING }
/* Message to send to client after a successful plaintext login. */

{ "popexpiretime", -1, INT }
/* The number of days advertised as being the minimum a message may be
   left on the POP server before it is deleted (via the CAPA command,
   defined in the POP3 Extension Mechanism, which some clients may
   support).  "NEVER", the default, may be specified with a negative
   number.  The Cyrus POP3 server never deletes mail, no matter what  
   the value of this parameter is.  However, if a site implements a 
   less liberal policy, it needs to change this parameter
   accordingly. */

{ "popminpoll", 0, INT }
/* Set the minimum amount of time the server forces users to wait
   between successive POP logins, in minutes. */ 

{ "popsubfolders", 0, SWITCH }
/* Allow access to subfolders of INBOX via POP3 by using
   userid+subfolder syntax as the authentication/authorization id. */

{ "poppollpadding", 1, INT }
/* Create a softer minimum poll restriction.  Allows \fIpoppollpadding\fR
   connections before the minpoll restriction is triggered.  Additionally,
   one padding entry is recovered every \fIpopminpoll\fR minutes.
   This allows for the occasional polling rate faster than popminpoll, 
   (i.e., for clients that require a send/receive to send mail) but still 
   enforces the rate long-term.  Default is 1 (disabled).
.br
.sp
   The easiest way to think of it is a queue of past connections, with one
   slot being filled for every connection, and one slot being cleared 
   every \fIpopminpoll\fR minutes. When the queue is full, the user
   will not be able to check mail again until a slot is cleared.  If the 
   user waits a sufficient amount of time, they will get back many or all
   of the slots. */

{ "poptimeout", 10, INT }
/* Set the length of the POP server's inactivity autologout timer,    
   in minutes.  The minimum value is 10, the default. */

{ "popuseacl", 0, SWITCH }
/* Enforce IMAP ACLs in the pop server.  Due to the nature of the POP3
   protocol, the only rights which are used by the pop server are 'r',
   't', and 's' for the owner of the mailbox.  The 'r' right allows the
   user to open the mailbox and list/retrieve messages.  The 't' right
   allows the user to delete messages.  The 's' right allows messages
   retrieved by the user to have the \\Seen flag set (only if
   \fIpopuseimapflags\fR is also enabled). */

{ "popuseimapflags", 0, SWITCH }
/* If enabled, the pop server will set and obey IMAP flags.  Messages
   having the \\Deleted flag are ignored as if they do not exist.
   Messages that are retrieved by the client will have the \\Seen flag
   set.  All messages will have the \\Recent flag unset. */

{ "postmaster", "postmaster", STRING }
/* Username that is used as the 'From' address in rejection MDNs produced
   by sieve. */
   
{ "postspec", NULL, STRING }

{ "postuser", "", STRING }
/* Userid used to deliver messages to shared folders.  For example, if
   set to "bb", email sent to "bb+shared.blah" would be delivered to
   the "shared.blah" folder.  By default, an email address of
   "+shared.blah" would be used. */ 

{ "proc_path", NULL, STRING }
/* Path to proc directory.  Default is NULL - must be an absolute path
   if specified.  If not specified, the path $confdir/proc/ will be 
   used. */

{ "proxy_authname", "proxy", STRING }
/* The authentication name to use when authenticating to a backend server
   in the Cyrus Murder. */

{ "proxy_compress", 0, SWITCH }
/* Try to enable protocol-specific compression when performing a client
   connection to a backend server in the Cyrus Murder.
.PP
  Note that this should only be necessary over slow network
  connections.  Also note that currently only IMAP and MUPDATE support
  compression. */

{ "proxy_password", NULL, STRING }
/* The default password to use when authenticating to a backend server
   in the Cyrus Murder.  May be overridden on a host-specific basis using
   the hostname_password option. */

{ "proxy_realm", NULL, STRING }
/* The authentication realm to use when authenticating to a backend server
   in the Cyrus Murder */

{ "proxyd_allow_status_referral", 0, SWITCH }
/* Set to true to allow proxyd to issue referrals to clients that support it
   when answering the STATUS command.  This is disabled by default since
   some clients issue many STATUS commands in a row, and do not cache the
   connections that these referrals would cause, thus resulting in a higher
   authentication load on the respective backend server. */

{ "proxyd_disable_mailbox_referrals", 0, SWITCH }
/* Set to true to disable the use of mailbox-referrals on the
   proxy servers. */

{ "proxyservers", NULL, STRING }
/* A list of users and groups that are allowed to proxy for other
   users, separated by spaces.  Any user listed in this will be
   allowed to login for any other user: use with caution. */ 

{ "pts_module", "afskrb", STRINGLIST("afskrb", "ldap") }
/* The PTS module to use. */

{ "ptloader_sock", NULL, STRING }
/* Unix domain socket that ptloader listens on.
   (defaults to configdir/ptclient/ptsock) */

{ "ptscache_db", "skiplist", STRINGLIST("berkeley", "berkeley-hash", "skiplist")}
/* The cyrusdb backend to use for the pts cache. */

{ "ptscache_db_path", NULL, STRING }
/* The absolute path to the ptscache db file.  If not specified,
   will be confdir/ptscache.db */

{ "ptscache_timeout", 10800, INT }
/* The timeout (in seconds) for the PTS cache database when using the
   auth_krb_pts authorization method (default: 3 hours). */

{ "ptskrb5_convert524", 1, SWITCH }
/* When using the AFSKRB ptloader module with Kerberos 5 canonicalization,
   do the final 524 conversion to get a n AFS style name (using '.' instead
   of '/', and using short names */

{ "ptskrb5_strip_default_realm", 1, SWITCH }
/* When using the AFSKRB ptloader module with Kerberos 5 canonicalization,
   strip the default realm from the userid (this does not affect the stripping
   of realms specified by the afspts_localrealms option) */

{ "qosmarking", "cs0", ENUM("cs0", "cs1", "cs2", "cs3", "cs4", "cs5", "cs6", "cs7", "af11", "af12", "af13", "af21", "af22", "af23", "af31", "af32", "af33", "af41", "af42", "af43", "ef") }
/* This specifies the Class Selector or Differentiated Services Code Point
   designation on IP headers (in the ToS field). */

{ "quota_db", "quotalegacy", STRINGLIST("flat", "berkeley", "berkeley-hash", "skiplist", "sql", "quotalegacy")}
/* The cyrusdb backend to use for quotas. */

{ "quota_db_path", NULL, STRING }
/* The absolute path for the quota database (if you choose a single-file
   quota DB type - or the base path if you choose quotalegacy).  If
   not specified will be confdir/quota.db or confdir/quota/ */

{ "quotawarn", 90, INT }
/* The percent of quota utilization over which the server generates
   warnings. */

{ "quotawarnkb", 0, INT }
/* The maximum amount of free space (in kB) at which to give a quota
   warning (if this value is 0, or if the quota is smaller than this
   amount, than warnings are always given). */

{ "reject8bit", 0, SWITCH }
/* If enabled, lmtpd rejects messages with 8-bit characters in the
   headers. */

{ "rfc2046_strict", 0, SWITCH }
/* If enabled, imapd will be strict (per RFC 2046) when matching MIME
   boundary strings.  This means that boundaries containing other
   boundaries as substrings will be treated as identical.  Since
   enabling this option will break some messages created by Eudora 5.1
   (and earlier), it is recommended that it be left disabled unless
   there is good reason to do otherwise. */

{ "rfc3028_strict", 1, SWITCH }
/* If enabled, Sieve will be strict (per RFC 3028) with regards to
   which headers are allowed to be used in address and envelope tests.
   This means that only those headers which are defined to contain addresses
   will be allowed in address tests and only "to" and "from" will be
   allowed in envelope tests.  When disabled, ANY grammatically correct header
   will be allowed. */

{ "rss_feedlist_template", NULL, STRING }
/* File containing HTML that will be used as a template for displaying
   the list of available RSS feeds.  A single instance of the variable
   %RSS_FEEDLIST% should appear in the file, which will be replaced by
   a nested unordered list of feeds.  The toplevel unordered list will
   be tagged with an id of "feed" (<ul id='feed'>) which can be used
   by stylesheet(s) in your template.  The dynamically created list of
   feeds based on the HTML template will be accessible at the "/rss"
   URL on the server. */

{ "rss_feeds", "*", STRING }
/* A wildmat pattern specifying which mailbox hierarchies should be
   treated as RSS feeds.  Only mailboxes matching the wildmat will
   have their messages available via RSS.  If not set, a default
   wildmat of "*" (ALL mailboxes) will be used. */

{ "rss_maxage", 0, INT }
/* Maximum age (in days) of items to display in an RSS channel.  If
   non-zero, httpd will only display items received within the last
   \fIrss_maxage\fR days.  If set to 0, all available items will be
   displayed (the default). */

{ "rss_maxitems", 0, INT }
/* Maximum number of items to display in an RSS channel.  If non-zero,
   httpd will display no more than the \fIrss_maxitems\fR most recent
   items.  If set to 0, all available items will be displayed (the
   default). */

{ "rss_maxsynopsis", 0, INT }
/* Maximum RSS item synopsis length.  If non-zero, httpd will display
   no more than the first \fIrss_maxsynopsis\fR characters of an
   item's synopsis.  If set to 0, the entire synopsis will be
   displayed (the default). */

{ "rss_realm", NULL, STRING }
/* The realm to present for HTTP authentication of RSS feeds.  If not
   set (the default), the value of the "servername" option will be
   used.*/

# Commented out - used by libsasl
# { "sasl_auto_transition", 0, SWITCH }
/* If enabled, the SASL library will automatically create authentication
   secrets when given a plaintext password.  See the SASL documentation. */

{ "sasl_maximum_layer", 256, INT }
/* Maximum SSF (security strength factor) that the server will allow a
   client to negotiate. */

{ "sasl_minimum_layer", 0, INT }
/* The minimum SSF that the server will allow a client to negotiate.
   A value of 1 requires integrity protection; any higher value  
   requires some amount of encryption. */

# Commented out - used by libsasl
# { "sasl_option", 0, STRING }
/* Any SASL option can be set by preceding it with "sasl_".  This
   file overrides the SASL configuration file. */

# Commented out - used by libsasl
# { "sasl_pwcheck_method", NULL, STRING }
/* The mechanism used by the server to verify plaintext passwords. 
   Possible values include "auxprop", "saslauthd", and "pwcheck". */

{ "seenstate_db", "skiplist", STRINGLIST("flat", "berkeley", "berkeley-hash", "skiplist")}
/* The cyrusdb backend to use for the seen state. */

{ "sendmail", "/usr/lib/sendmail", STRING }
/* The pathname of the sendmail executable.  Sieve invokes sendmail
   for sending rejections, redirects and vacation responses. */

{ "serverlist", NULL, STRING }
/* Whitespace separated list of backend server names.  Used for
   finding server with the most available free space for proxying
   CREATE. */

{ "servername", NULL, STRING }
/* This is the hostname visible in the greeting messages of the POP,
   IMAP and LMTP daemons. If it is unset, then the result returned
   from gethostname(2) is used.  This is also the value used by murder
   clusters to identify the host name.  It should be resolvable by
   DNS to the correct host, and unique within an active cluster.  If
   you are using low level replication (e.g. drbd) then it should be
   the same on each copy and the DNS name should also be moved to
   the new master on failover. */

{ "serverinfo", "on", ENUM("off", "min", "on") }
/* The server information to display in the greeting and capability
   responses. Information is displayed as follows:
.IP
   "off" = no server information in the greeting or capabilities
.br
   "min" = \fIservername\fR in the greeting; no server information in the capabilities
.br
   "on" = \fIservername\fR and product version in the greeting;
product version in the capabilities */

{ "sharedprefix", "Shared Folders", STRING }
/* If using the alternate IMAP namespace, the prefix for the shared
   namespace.  The hierarchy delimiter will be automatically appended. */

{ "sieve_allowreferrals", 1, SWITCH }
/* If enabled, timsieved will issue referrals to clients when the
   user's scripts reside on a remote server (in a Murder).
   Otherwise, timsieved will proxy traffic to the remote server. */

{ "sieve_extensions", "fileinto reject vacation imapflags notify envelope relational regex subaddress copy", BITFIELD("fileinto", "reject", "vacation", "imapflags", "notify", "include", "envelope", "body", "relational", "regex", "subaddress", "copy") }
/* Space-separated list of Sieve extensions allowed to be used in
   sieve scripts, enforced at submission by timsieved(8).  Any
   previously installed script will be unaffected by this option and
   will continue to execute regardless of the extensions used.  This
   option has no effect on options that are disabled at compile time
   (e.g., "regex"). */

{ "sieve_maxscriptsize", 32, INT }
/* Maximum size (in kilobytes) any sieve script can be, enforced at
   submission by timsieved(8). */

{ "sieve_maxscripts", 5, INT }
/* Maximum number of sieve scripts any user may have, enforced at
   submission by timsieved(8). */
   
{ "sieve_utf8fileinto", 0, SWITCH }
/* If enabled, the sieve engine expects folder names for the
   \fIfileinto\fR action in scripts to use UTF8 encoding.  Otherwise,
   modified UTF7 encoding should be used. */ 

{ "sieve_sasl_send_unsolicited_capability", 0, SWITCH }
/* If enabled, timsieved will emit a capability response after a successful
   SASL authentication, per draft-martin-managesieve-12.txt . */

{ "sievedir", "/usr/sieve", STRING }
/* If sieveusehomedir is false, this directory is searched for Sieve
   scripts. */

{ "sievenotifier", NULL, STRING }
/* Notifyd(8) method to use for "SIEVE" notifications.  If not set, "SIEVE"
   notifications are disabled.
.PP
   This method is only used when no method is specified in the script. */

{ "sieveusehomedir", 0, SWITCH }
/* If enabled, lmtpd will look for Sieve scripts in user's home
   directories: ~user/.sieve. */

{ "singleinstancestore", 1, SWITCH }
/* If enabled, imapd, lmtpd and nntpd attempt to only write one copy
   of a message per partition and create hard links, resulting in a
   potentially large disk savings. */

{ "skiplist_always_checkpoint", 1, SWITCH }
/* If enabled, this option forces the skiplist cyrusdb backend to
   always checkpoint when doing a recovery.  This causes slightly
   more IO, but on the other hand leads to more efficient databases,
   and the entire file is already "hot". */

{ "skiplist_unsafe", 0, SWITCH }
/* If enabled, this option forces the skiplist cyrusdb backend to
   not sync writes to the disk.  Enabling this option is NOT RECOMMENDED. */

{ "soft_noauth", 1, SWITCH }
/* If enabled, lmtpd returns temporary failures if the client does not
   successfully authenticate.  Otherwise lmtpd returns permanent failures
   (causing the mail to bounce immediately). */

{ "specialusealways", 0, SWITCH }
/* If enabled, this option causes LIST and LSUB output to always include
   the XLIST "special-use" flags. See "xlist-*'"*/

{ "sql_database", NULL, STRING }
/* Name of the database which contains the cyrusdb table(s). */

{ "sql_engine", NULL, STRINGLIST("mysql", "pgsql", "sqlite") }
/* Name of the SQL engine to use. */

{ "sql_hostnames", "", STRING }
/* Comma separated list of SQL servers (in host[:port] format). */

{ "sql_passwd", NULL, STRING }
/* Password to use for authentication to the SQL server. */

{ "sql_user", NULL, STRING }
/* Username to use for authentication to the SQL server. */

{ "sql_usessl", 0, SWITCH }
/* If enabled, a secure connection will be made to the SQL server. */

{ "srvtab", "", STRING }
/* The pathname of \fIsrvtab\fR file containing the server's private
   key.  This option is passed to the SASL library and overrides its
   default setting. */

{ "submitservers", NULL, STRING }
/* A list of users and groups that are allowed to resolve "urlauth=submit+"
   IMAP URLs, separated by spaces.  Any user listed in this will be
   allowed to fetch the contents of any valid "urlauth=submit+" IMAP URL:
   use with caution. */ 

{ "subscription_db", "flat", STRINGLIST("flat", "berkeley", "berkeley-hash", "skiplist")}
/* The cyrusdb backend to use for the subscriptions list. */

{ "suppress_capabilities", NULL, STRING }
/* Suppress the named capabilities from any capability response.  Use the
   exact case as it appears in the response, e.g. 
   "suppress_capabilities: ESEARCH QRESYNC WITHIN XLIST LIST-EXTENDED"
   if you have a murder with 2.3.x backends and don't want clients being
   confused by new capabilities that some backends don't support. */

{ "statuscache", 0, SWITCH }
/* Enable/disable the imap status cache. */

{ "statuscache_db", "skiplist", STRINGLIST("berkeley", "berkeley-nosync", "berkeley-hash", "berkeley-hash-nosync", "skiplist", "sql") }
/* The cyrusdb backend to use for the imap status cache. */

{ "statuscache_db_path", NULL, STRING }
/* The absolute path to the statuscache db file.  If not specified,
   will be confdir/statuscache.db */

{ "sync_authname", NULL, STRING }
/* The authentication name to use when authenticating to a sync server.
   Prefix with a channel name to only apply for that channel */

{ "sync_compress", 0, SWITCH }
/* Enable compression on replication traffic.
   Prefix with a channel name to only apply for that channel */

{ "sync_host", NULL, STRING }
/* Name of the host (replica running sync_server(8)) to which
   replication actions will be sent by sync_client(8).
   Prefix with a channel name to only apply for that channel */

{ "sync_log", 0, SWITCH }
/* Enable replication action logging by lmtpd(8), imapd(8), pop3d(8),
   and nntpd(8).  The log {configdirectory}/sync/log is used by
   sync_client(8) for "rolling" replication. */

{ "sync_log_chain", 0, SWITCH }
/* Enable replication action logging by sync_server as well, allowing
   chaining of replicas.  Use this on 'B' for A => B => C replication layout */

{ "sync_log_channels", NULL, STRING }
/* If specified, log all events to multiple log files in directories
   specified by each "channel".  To run these log files, you need to pass
   the -n option to sync_client -r with the channel name.  Use this for
   a mesh style replication layout - every machine replicating to every
   other machine. */

{ "sync_password", NULL, STRING }
/* The default password to use when authenticating to a sync server.
   Prefix with a channel name to only apply for that channel */

{ "sync_port", NULL, STRING }
/* Name of the service (or port number) of the replication service on
   replica host.  Prefix with a channel name to only apply for that
   channel.  If not specified, the replication client will first
   try "imap" (port 143) to check if imapd supports replication,
   otherwise it will default to "csync" (usually port 2005).  */

{ "sync_realm", NULL, STRING }
/* The authentication realm to use when authenticating to a sync server.
   Prefix with a channel name to only apply for that channel */

{ "sync_repeat_interval", 1, INT }
/* Minimum interval (in seconds) between replication runs in rolling
   replication mode. If a replication run takes longer than this
   time, we repeat immediately.
   Prefix with a channel name to only apply for that channel */

{ "sync_shutdown_file", NULL, STRING }
/* Simple latch used to tell sync_client(8) that it should shut down at the
   next opportunity. Safer than sending signals to running processes.
   Prefix with a channel name to only apply for that channel */

{ "syslog_prefix", NULL, STRING }
/* String to be prepended to the process name in syslog entries. */

{ "tcp_keepalive", 0, SWITCH }
/* Enable keepalive on TCP connections */

{ "tcp_keepalive_cnt", 0, INT }
/* Number of TCP keepalive probes to send before declaring the 
   connection dead (0 == system default) */

{ "tcp_keepalive_idle", 0, INT }
/* Number of seconds a connection must be idle before keepalive
   probes are sent (0 == system default) */

{ "tcp_keepalive_intvl", 0, INT }
/* Number of seconds between keepalive probes (0 == system default) */

{ "temp_path", "/tmp", STRING }
/* The pathname to store temporary files in */

{ "timeout", 30, INT }   
/* The length of the IMAP server's inactivity autologout timer,       
   in minutes.  The minimum value is 30, the default. */

{ "tls_ca_file", NULL, STRING }
/* File containing one or more Certificate Authority (CA) certificates. */

{ "tls_ca_path", NULL, STRING }
/* Path to directory with certificates of CAs.  This directory must
   have filenames with the hashed value of the certificates (see
   openssl(XXX)). */

{ "tlscache_db", "skiplist", STRINGLIST("berkeley", "berkeley-nosync", "berkeley-hash", "berkeley-hash-nosync", "skiplist", "sql")}
/* The cyrusdb backend to use for the TLS cache. */

{ "tlscache_db_path", NULL, STRING }
/* The absolute path to the tlscache db file.  If not specified,
   will be confdir/tls_sessions.db */

{ "tls_cert_file", NULL, STRING }
/* File containing the certificate presented for server authentication
   during STARTTLS.  A value of "disabled" will disable SSL/TLS. */

{ "tls_cipher_list", "DEFAULT", STRING }
/* The list of SSL/TLS ciphers to allow.  The format of the string is
   described in ciphers(1). */

{ "tls_key_file", NULL, STRING }
/* File containing the private key belonging to the server
   certificate.  A value of "disabled" will disable SSL/TLS. */

{ "tls_require_cert", 0, SWITCH }
/* Require a client certificate for ALL services (imap, pop3, lmtp, sieve). */

{ "tls_session_timeout", 1440, INT }
/* The length of time (in minutes) that a TLS session will be cached
   for later reuse.  The maximum value is 1440 (24 hours), the
   default.  A value of 0 will disable session caching. */

{ "umask", "077", STRING }
/* The umask value used by various Cyrus IMAP programs. */

{ "userdeny_db", "flat", STRINGLIST("flat", "berkeley", "berkeley-hash", "skiplist", "sql")}
/* The cyrusdb backend to use for the user access list. */

{ "userdeny_db_path", NULL, STRING }
/* The absolute path to the userdeny db file.  If not specified,
   will be confdir/user_deny.db */

{ "user_folder_limit", 0, INT }
/* Limit the number of folders a user can create in their INBOX.  
   Set to 0 (default) for no limit.  Only affects folders in user. */

{ "username_tolower", 1, SWITCH }
/* Convert usernames to all lowercase before login/authentication.  This
   is useful with authentication backends which ignore case during
   username lookups (such as LDAP).  */

{ "userprefix", "Other Users", STRING }
/* If using the alternate IMAP namespace, the prefix for the other users
   namespace.  The hierarchy delimiter will be automatically appended. */

# xxx badly worded
{ "unix_group_enable", 1, SWITCH }
/* Should we look up groups when using auth_unix (disable this if you are
   not using groups in ACLs for your IMAP server, and you are using auth_unix
   with a backend (such as LDAP) that can make getgrent() calls very
   slow) */

{ "unixhierarchysep", 0, SWITCH }
/* Use the UNIX separator character '/' for delimiting levels of
   mailbox hierarchy.  The default is to use the netnews separator
   character '.'. */

{ "virtdomains", "off", ENUM("off", "userid", "on") }
/* Enable virtual domain support.  If enabled, the user's domain will
   be determined by splitting a fully qualified userid at the last '@'
   or '%' symbol.  If the userid is unqualified, and the virtdomains
   option is set to "on", then the domain will be determined by doing
   a reverse lookup on the IP address of the incoming network
   interface, otherwise the user is assumed to be in the default
   domain (if set). */

# {"xlist-*", NULL, STRING }
/* Cyrus 2.4 ONLY - enable special use flags.  The valid names
   can be taken from GMail's XLIST documents or RFC 6154.
   Attribute name in the configuration key should be defined in
   lowercase. The attribute value is case sensitive, may contain
   whitespace and must be valid UTF7-IMAP string.  It must
   exactly match the name of the subfolder of a user's INBOX.

   Example: xlist-drafts: My Drafts

   Every user on your server with a 'INBOX.My Drafts' folder will get 
   the special use flag "\Drafts" added.  Later versions of Cyrus
   have a much more flexible RFC 6154 compatible system.  */

{ "zoneinfo_db", "skiplist", STRINGLIST("flat", "berkeley", "berkeley-hash", "skiplist")}
/* The cyrusdb backend to use for zoneinfo. */

{ "zoneinfo_db_path", NULL, STRING }
/* The absolute path to the zoneinfo db file.  If not specified,
   will be confdir/zoneinfo.db */

/*
.SH SEE ALSO
.PP
\fBimapd(8)\fR, \fBpop3d(8)\fR, \fBnntpd(8)\fR, \fBlmtpd(8)\fR,
\fBhttpd(8)\fR, \fBtimsieved(8)\fR, \fBidled(8)\fR, \fBnotifyd(8)\fR,
\fBdeliver(8)\fR, \fBmaster(8)\fR, \fBciphers(1)\fR
*/
