Mercurial > dovecot > original-hg > dovecot-1.2
view src/imap/main.c @ 410:1f0e7229ee58 HEAD
Split IOBuffer into mmaped IBuffer, file IBuffer, memory data IBuffer and
file OBuffer.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Mon, 14 Oct 2002 02:49:11 +0300 |
parents | 60040a9d243f |
children | 3a83b05a0be3 |
line wrap: on
line source
/* Copyright (C) 2002 Timo Sirainen */ #include "common.h" #include "ioloop.h" #include "lib-signals.h" #include "restrict-access.h" #include <stdlib.h> #include <syslog.h> IOLoop ioloop; static char log_prefix[64]; static void sig_quit(int signo __attr_unused__) { io_loop_stop(ioloop); } static void main_init(int use_syslog) { Client *client; MailStorage *storage; const char *logfile, *mail, *tag; lib_init_signals(sig_quit); i_snprintf(log_prefix, sizeof(log_prefix), "imap(%s)", getenv("USER")); logfile = getenv("IMAP_LOGFILE"); if (logfile != NULL) { /* log failures into specified log file */ i_set_failure_file(logfile, log_prefix); i_set_failure_timestamp_format(getenv("IMAP_LOGSTAMP")); } else if (use_syslog) { /* prefix with imapd(user) */ openlog(log_prefix, 0, LOG_MAIL); i_set_panic_handler(i_syslog_panic_handler); i_set_fatal_handler(i_syslog_fatal_handler); i_set_error_handler(i_syslog_error_handler); i_set_warning_handler(i_syslog_warning_handler); } /* do the chrooting etc. */ restrict_access_by_env(); mail_storage_register_all(); clients_init(); mail = getenv("MAIL"); if (mail == NULL) { /* support also maildir-specific environment */ mail = getenv("MAILDIR"); if (mail != NULL) mail = t_strconcat("maildir:", mail, NULL); } storage = mail_storage_create_with_data(mail, getenv("USER")); if (storage == NULL) { /* failed */ if (mail != NULL && *mail != '\0') i_fatal("Failed to create storage with data: %s", mail); else { const char *home; home = getenv("HOME"); if (home == NULL) home = "not set"; i_fatal("MAIL environment missing and " "autodetection failed (home %s)", home); } } else { client = client_create(0, 1, storage); tag = getenv("LOGIN_TAG"); if (tag == NULL || *tag == '\0') tag = "*"; client_send_line(client, t_strconcat(tag, " OK Logged in.", NULL)); } } static void main_deinit(void) { /* warn about being killed because of some signal, except SIGINT (^C) which is too common at least while testing :) */ if (lib_signal_kill != 0 && lib_signal_kill != 2) i_warning("Killed with signal %d", lib_signal_kill); clients_deinit(); closelog(); } int main(int argc, char *argv[]) { /* NOTE: we start rooted, so keep the code minimal until restrict_access_by_env() is called */ lib_init(); ioloop = io_loop_create(system_pool); main_init(argc == 2 && strcmp(argv[1], "-s") == 0); io_loop_run(ioloop); main_deinit(); io_loop_destroy(ioloop); lib_deinit(); return 0; }