master-settings.h revision 97d4906cf332727cdea5b49cbcbc7638ff600d55
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde#ifndef MASTER_SETTINGS_H
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde#define MASTER_SETTINGS_H
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde#include "network.h"
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde
fc71e94957d0c2959a609450a2f303640d681858Sascha Wildeenum mail_protocol {
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde MAIL_PROTOCOL_ANY,
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde MAIL_PROTOCOL_IMAP,
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde MAIL_PROTOCOL_POP3,
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde MAIL_PROTOCOL_LDA
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde};
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde
fc71e94957d0c2959a609450a2f303640d681858Sascha Wildestruct listener {
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde struct ip_addr ip;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde unsigned int port;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde int fd;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde bool wanted;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde};
fc71e94957d0c2959a609450a2f303640d681858Sascha WildeARRAY_DEFINE_TYPE(listener, struct listener);
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde
fc71e94957d0c2959a609450a2f303640d681858Sascha Wildestruct settings {
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde struct server_settings *server;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde enum mail_protocol protocol;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde /* common */
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *base_dir;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *log_path;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *info_log_path;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *log_timestamp;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *syslog_facility;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde /* general */
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *protocols;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *listen;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *ssl_listen;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *ssl;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *ssl_ca_file;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *ssl_cert_file;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *ssl_key_file;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *ssl_key_password;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde unsigned int ssl_parameters_regenerate;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *ssl_cipher_list;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *ssl_cert_username_field;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde bool ssl_verify_client_cert;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde bool disable_plaintext_auth;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde bool verbose_ssl;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde bool shutdown_clients;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde bool nfs_check;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde bool version_ignore;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde /* login */
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *login_dir;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *login_executable;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *login_user;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *login_greeting;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *login_log_format_elements;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *login_log_format;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde bool login_process_per_connection;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde bool login_chroot;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *login_trusted_networks;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde unsigned int login_process_size;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde unsigned int login_processes_count;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde unsigned int login_max_processes_count;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde unsigned int login_max_connections;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde /* mail */
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *valid_chroot_dirs;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *mail_chroot;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde unsigned int max_mail_processes;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde unsigned int mail_max_userip_connections;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde bool verbose_proctitle;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde unsigned int first_valid_uid, last_valid_uid;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde unsigned int first_valid_gid, last_valid_gid;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *mail_extra_groups;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *mail_access_groups;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *mail_privileged_group;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *mail_uid;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *mail_gid;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *mail_location;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *mail_cache_fields;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *mail_never_cache_fields;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde unsigned int mail_cache_min_mail_count;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde unsigned int mailbox_idle_check_interval;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde bool mail_debug;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde bool mail_full_filesystem_access;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde unsigned int mail_max_keyword_length;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde bool mail_save_crlf;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde bool mmap_disable;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde bool dotlock_use_excl;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde bool fsync_disable;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde bool mail_nfs_storage;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde bool mail_nfs_index;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde bool mailbox_list_index_disable;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *lock_method;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde bool maildir_stat_dirs;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde bool maildir_copy_with_hardlinks;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde bool maildir_copy_preserve_filename;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *mbox_read_locks;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *mbox_write_locks;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde unsigned int mbox_lock_timeout;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde unsigned int mbox_dotlock_change_timeout;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde unsigned int mbox_min_index_size;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde bool mbox_dirty_syncs;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde bool mbox_very_dirty_syncs;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde bool mbox_lazy_writes;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde unsigned int dbox_rotate_size;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde unsigned int dbox_rotate_min_size;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde unsigned int dbox_rotate_days;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde unsigned int umask;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde bool mail_drop_priv_before_exec;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *mail_executable;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde unsigned int mail_process_size;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *mail_plugins;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *mail_plugin_dir;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *mail_log_prefix;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde unsigned int mail_log_max_lines_per_sec;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde /* imap */
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde unsigned int imap_max_line_length;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *imap_capability;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *imap_client_workarounds;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *imap_logout_format;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *imap_id_send;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *imap_id_log;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde /* pop3 */
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde bool pop3_no_flag_updates;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde bool pop3_enable_last;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde bool pop3_reuse_xuidl;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde bool pop3_lock_session;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *pop3_uidl_format;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *pop3_client_workarounds;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *pop3_logout_format;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde /* dict */
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *dict_db_config;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde unsigned int dict_process_count;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde /* .. */
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde ARRAY_TYPE(listener) listens;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde ARRAY_TYPE(listener) ssl_listens;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde uid_t login_uid, mail_uid_t;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde gid_t mail_gid_t, mail_priv_gid_t;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *imap_generated_capability;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde ARRAY_DEFINE(plugin_envs, const char *);
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde};
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde
fc71e94957d0c2959a609450a2f303640d681858Sascha Wildestruct socket_settings {
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *path;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde unsigned int mode;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *user;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *group;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde unsigned int used:1;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde};
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde
fc71e94957d0c2959a609450a2f303640d681858Sascha Wildestruct auth_socket_settings {
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde struct auth_settings *parent;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde struct auth_socket_settings *next;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *type;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde struct socket_settings master;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde struct socket_settings client;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde};
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde
fc71e94957d0c2959a609450a2f303640d681858Sascha Wildestruct auth_passdb_settings {
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde struct auth_settings *parent;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde struct auth_passdb_settings *next;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *driver;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *args;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde bool deny;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde bool pass;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde bool master;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde};
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde
fc71e94957d0c2959a609450a2f303640d681858Sascha Wildestruct auth_userdb_settings {
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde struct auth_settings *parent;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde struct auth_userdb_settings *next;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *driver;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *args;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde};
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde
fc71e94957d0c2959a609450a2f303640d681858Sascha Wildestruct auth_settings {
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde struct server_settings *parent;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde struct auth_settings *next;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *name;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *mechanisms;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *realms;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *default_realm;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde unsigned int cache_size;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde unsigned int cache_ttl;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde unsigned int cache_negative_ttl;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *executable;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *user;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *chroot;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *username_chars;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *username_translation;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *username_format;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *master_user_separator;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *anonymous_username;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *krb5_keytab;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *gssapi_hostname;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const char *winbind_helper_path;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde unsigned int failure_delay;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde bool verbose, debug, debug_passwords;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde bool ssl_require_client_cert;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde bool ssl_username_from_cert;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde bool use_winbind;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde unsigned int count;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde unsigned int worker_max_count;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde unsigned int process_size;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde /* .. */
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde uid_t uid;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde gid_t gid;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde struct auth_passdb_settings *passdbs;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde struct auth_userdb_settings *userdbs;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde struct auth_socket_settings *sockets;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde};
struct namespace_settings {
struct server_settings *parent;
struct namespace_settings *next;
const char *type;
const char *separator;
const char *prefix;
const char *location;
const char *alias_for;
bool inbox;
bool hidden;
const char *list;
bool subscriptions;
};
struct server_settings {
struct server_settings *next;
const char *name;
struct settings *defaults;
struct settings *imap;
struct settings *pop3;
struct auth_settings *auths;
struct auth_settings auth_defaults;
struct namespace_settings *namespaces;
ARRAY_DEFINE(dicts, const char *);
gid_t login_gid;
unsigned int warned_mail_extra_groups:1;
};
extern struct server_settings *settings_root;
bool master_settings_read(const char *path, bool nochecks, bool nofixes);
void master_settings_dump(struct server_settings *set, bool nondefaults);
void master_settings_init(void);
void master_settings_deinit(void);
#endif