diff options
Diffstat (limited to '')
-rw-r--r-- | src/lib-master/master-interface.h | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/src/lib-master/master-interface.h b/src/lib-master/master-interface.h new file mode 100644 index 0000000..e5db7ce --- /dev/null +++ b/src/lib-master/master-interface.h @@ -0,0 +1,117 @@ +#ifndef MASTER_INTERFACE_H +#define MASTER_INTERFACE_H + +/* We are attempting semi-compatibility with Postfix's master process here. + Whether this is useful or not remains to be seen. */ + +/* Child processes should send status updates whenever they accept a new + connection (decrease available_count) and when they close existing + connection (increase available_count). */ +struct master_status { + pid_t pid; + /* uid is used to check for old/invalid status messages */ + unsigned int uid; + /* number of new connections process is currently accepting */ + unsigned int available_count; +}; + +/* When connecting to log service, send this handshake first */ +struct log_service_handshake { + /* If magic is invalid, assume the data is already what we want + to log */ +#define MASTER_LOG_MAGIC 0x02ff03fe + unsigned int log_magic; + + /* Add this prefix to each logged line */ +#define MASTER_LOG_PREFIX_NAME "MASTER" + unsigned int prefix_len; + /* unsigned char prefix[]; */ +}; + +enum master_login_state { + MASTER_LOGIN_STATE_NONFULL = 0, + MASTER_LOGIN_STATE_FULL +}; + +/* getenv(MASTER_IS_PARENT_ENV) != NULL if process was started by + Dovecot master */ +#define MASTER_IS_PARENT_ENV "DOVECOT_CHILD_PROCESS" + +/* getenv(MASTER_UID_ENV) provides master_status.uid value */ +#define MASTER_UID_ENV "GENERATION" + +/* getenv(MASTER_SERVICE_NAME) provides the service's name */ +#define MASTER_SERVICE_ENV "SERVICE_NAME" + +/* getenv(MASTER_CLIENT_LIMIT_ENV) provides maximum + master_status.available_count as specified in configuration file */ +#define MASTER_CLIENT_LIMIT_ENV "CLIENT_LIMIT" + +/* getenv(MASTER_PROCESS_LIMIT_ENV) specifies how many processes of this type + can be created before reaching the limit */ +#define MASTER_PROCESS_LIMIT_ENV "PROCESS_LIMIT" + +/* getenv(MASTER_PROCESS_MIN_AVAIL_ENV) specifies how many processes of this + type are created at startup and are kept running all the time */ +#define MASTER_PROCESS_MIN_AVAIL_ENV "PROCESS_MIN_AVAIL" + +/* getenv(MASTER_SERVICE_COUNT_ENV) specifies how many client connections the + process can finish handling before it should kill itself. */ +#define MASTER_SERVICE_COUNT_ENV "SERVICE_COUNT" + +/* getenv(MASTER_SERVICE_IDLE_KILL_ENV) specifies service's idle_kill timeout + in seconds. */ +#define MASTER_SERVICE_IDLE_KILL_ENV "IDLE_KILL" + +/* getenv(MASTER_CONFIG_FILE_ENV) provides path to configuration file/socket */ +#define MASTER_CONFIG_FILE_ENV "CONFIG_FILE" + +/* getenv(MASTER_DOVECOT_VERSION_ENV) provides master's version number + (unset if version_ignore=yes) */ +#define MASTER_DOVECOT_VERSION_ENV "DOVECOT_VERSION" + +/* getenv(MASTER_SSL_KEY_PASSWORD_ENV) returns manually typed SSL key password, + if dovecot was started with -p parameter. */ +#define MASTER_SSL_KEY_PASSWORD_ENV "SSL_KEY_PASSWORD" + +/* getenv(DOVECOT_PRESERVE_ENVS_ENV) returns a space separated list of + environments that should be preserved. */ +#define DOVECOT_PRESERVE_ENVS_ENV "DOVECOT_PRESERVE_ENVS" + +/* getenv(DOVECOT_LOG_DEBUG_ENV) returns the global log_debug setting. This can + be used to initialize debug logging immediately at startup. */ +#define DOVECOT_LOG_DEBUG_ENV "LOG_DEBUG" + +/* getenv(DOVECOT_STATS_WRITER_SOCKET_PATH) returns path to the stats-writer + socket. */ +#define DOVECOT_STATS_WRITER_SOCKET_PATH "STATS_WRITER_SOCKET_PATH" + +/* Write pipe to anvil. */ +#define MASTER_ANVIL_FD 3 +/* Anvil reads new log fds from this fd */ +#define MASTER_ANVIL_LOG_FDPASS_FD 4 +/* Master's "all processes full" notification fd for login processes */ +#define MASTER_LOGIN_NOTIFY_FD 4 + +/* Shared pipe to master, used to send master_status reports */ +#define MASTER_STATUS_FD 5 +/* Pipe to master, used to detect when it dies. (MASTER_STATUS_FD would have + been fine for this, except it's inefficient in Linux) */ +#define MASTER_DEAD_FD 6 +/* First file descriptor where process is expected to be listening. + The file descriptor count is given in -s parameter, defaulting to 1. + + master_status.available_count reports how many accept()s we're still + accepting. Once no children are listening, master will do it and create + new child processes when needed. */ +#define MASTER_LISTEN_FD_FIRST 7 + +/* Timeouts: base everything on how long we can wait for login clients. */ +#define MASTER_LOGIN_TIMEOUT_SECS (3*60) +/* auth server should abort auth requests before that happens */ +#define MASTER_AUTH_SERVER_TIMEOUT_SECS (MASTER_LOGIN_TIMEOUT_SECS - 30) +/* auth clients should abort auth lookups after server was supposed to have + done that */ +#define MASTER_AUTH_LOOKUP_TIMEOUT_SECS (MASTER_AUTH_SERVER_TIMEOUT_SECS + 5) + +#endif |