main.c revision 174a54c74848b8668acd72ddf36d9b4745e1ad5e
548f87789cf9865572b7b86f7be5a9bbfa132f3fTimo Sirainen/* Copyright (C) 2002-2003 Timo Sirainen */
548f87789cf9865572b7b86f7be5a9bbfa132f3fTimo Sirainenstruct client_workaround_list client_workaround_list[] = {
548f87789cf9865572b7b86f7be5a9bbfa132f3fTimo Sirainen { "outlook-no-nuls", WORKAROUND_OUTLOOK_NO_NULS },
548f87789cf9865572b7b86f7be5a9bbfa132f3fTimo Sirainenvoid (*hook_client_created)(struct client **client) = NULL;
548f87789cf9865572b7b86f7be5a9bbfa132f3fTimo Sirainenstatic char log_prefix[128]; /* syslog() needs this to be permanent */
548f87789cf9865572b7b86f7be5a9bbfa132f3fTimo Sirainenenum client_workarounds client_workarounds = 0;
548f87789cf9865572b7b86f7be5a9bbfa132f3fTimo Sirainenstatic void sig_die(int signo, void *context __attr_unused__)
548f87789cf9865572b7b86f7be5a9bbfa132f3fTimo Sirainen /* warn about being killed because of some signal, except SIGINT (^C)
548f87789cf9865572b7b86f7be5a9bbfa132f3fTimo Sirainen which is too common at least while testing :) */
548f87789cf9865572b7b86f7be5a9bbfa132f3fTimo Sirainenstatic void log_error_callback(void *context __attr_unused__)
aa78a2506ee69a6bd58cc706210ee79b62ec0954Timo Sirainenstatic void parse_workarounds(void)
548f87789cf9865572b7b86f7be5a9bbfa132f3fTimo Sirainen for (str = t_strsplit_spaces(env, " ,"); *str != NULL; str++) {
9e708a17f984ef7690ff2468ec19ad62c95b1ac2Timo Sirainen i_fatal("Unknown client workaround: %s", *str);
548f87789cf9865572b7b86f7be5a9bbfa132f3fTimo Sirainenstatic enum uidl_keys parse_uidl_keymask(const char *format)
8f1d14e3ada93a6d6ee64f73c6e6ae2364d8eba1Timo Sirainenstatic void open_logfile(void)
548f87789cf9865572b7b86f7be5a9bbfa132f3fTimo Sirainen strocpy(log_prefix, getenv("LOG_PREFIX"), sizeof(log_prefix));
aa78a2506ee69a6bd58cc706210ee79b62ec0954Timo Sirainen /* quite a long user name, cut it */
548f87789cf9865572b7b86f7be5a9bbfa132f3fTimo Sirainen user = t_strndup(user, sizeof(log_prefix)-6-2);
548f87789cf9865572b7b86f7be5a9bbfa132f3fTimo Sirainen i_snprintf(log_prefix, sizeof(log_prefix), "pop3(%s): ", user);
548f87789cf9865572b7b86f7be5a9bbfa132f3fTimo Sirainen /* log to file or stderr */
548f87789cf9865572b7b86f7be5a9bbfa132f3fTimo Sirainen i_set_failure_file(getenv("LOGFILE"), log_prefix);
67b785ce2485243c490f0a8b0753ac4a5d347265Timo Sirainen i_set_failure_timestamp_format(getenv("LOGSTAMP"));
548f87789cf9865572b7b86f7be5a9bbfa132f3fTimo Sirainenstatic void drop_privileges(void)
548f87789cf9865572b7b86f7be5a9bbfa132f3fTimo Sirainen if (version != NULL && strcmp(version, PACKAGE_VERSION) != 0) {
open_logfile();
random_init();
static int main_init(void)
const char *mail;
clients_init();
if (uidl_keymask == 0)
const char *home;
static void main_deinit(void)
closelog();
#ifdef DEBUG
lib_init();
if (main_init())
main_deinit();
lib_deinit();