annotate src/imap/main.c @ 1498:5a247fb1673c HEAD

Minor speedup
author Timo Sirainen <tss@iki.fi>
date Fri, 23 May 2003 17:39:45 +0300
parents 03dd87873a81
children 898a95426118
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
1 /* Copyright (C) 2002 Timo Sirainen */
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
2
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
3 #include "common.h"
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
4 #include "ioloop.h"
1498
5a247fb1673c Minor speedup
Timo Sirainen <tss@iki.fi>
parents: 1465
diff changeset
5 #include "ostream.h"
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
6 #include "lib-signals.h"
550
3a83b05a0be3 --with-rawlog: Build support for logging traffic of user sessions. If
Timo Sirainen <tss@iki.fi>
parents: 410
diff changeset
7 #include "rawlog.h"
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
8 #include "restrict-access.h"
727
8dd8ebe6bcac We use close-on-exec flag now to make sure that master process closes the
Timo Sirainen <tss@iki.fi>
parents: 621
diff changeset
9 #include "fd-close-on-exec.h"
746
ad4292a30b1d Set process title for rawlog process.
Timo Sirainen <tss@iki.fi>
parents: 738
diff changeset
10 #include "process-title.h"
1465
03dd87873a81 Added support for dynamically loadable imap/pop3 modules.
Timo Sirainen <tss@iki.fi>
parents: 1464
diff changeset
11 #include "module-dir.h"
1041
47ecd950a702 some header file cleanups
Timo Sirainen <tss@iki.fi>
parents: 1035
diff changeset
12 #include "mail-storage.h"
1464
bd489d13479e Added command_register() and related functions so we can dynamically
Timo Sirainen <tss@iki.fi>
parents: 1351
diff changeset
13 #include "commands.h"
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
14
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
15 #include <stdlib.h>
1193
206190c8c66f Use getlogin() alternatively if USER environment isn't found.
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
16 #include <unistd.h>
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
17 #include <syslog.h>
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
18
801
86224ff16bf6 Drop root privileges earlier. Close syslog more later in imap-master when
Timo Sirainen <tss@iki.fi>
parents: 765
diff changeset
19 #define IS_STANDALONE() \
1316
02dc0b35af64 Support for mailfront.
Timo Sirainen <tss@iki.fi>
parents: 1194
diff changeset
20 (getenv("LOGGED_IN") == NULL && getenv("IMAPLOGINTAG") == NULL)
801
86224ff16bf6 Drop root privileges earlier. Close syslog more later in imap-master when
Timo Sirainen <tss@iki.fi>
parents: 765
diff changeset
21
903
fd8888f6f037 Naming style changes, finally got tired of most of the typedefs. Also the
Timo Sirainen <tss@iki.fi>
parents: 811
diff changeset
22 struct ioloop *ioloop;
1172
f7c273202dc3 Support for IDLE extension.
Timo Sirainen <tss@iki.fi>
parents: 1168
diff changeset
23 unsigned int max_custom_flag_length, mailbox_check_interval;
1168
03f1455664d7 Added setting to limit length of custom flag names.
Timo Sirainen <tss@iki.fi>
parents: 1138
diff changeset
24
1465
03dd87873a81 Added support for dynamically loadable imap/pop3 modules.
Timo Sirainen <tss@iki.fi>
parents: 1464
diff changeset
25 static struct module *modules;
801
86224ff16bf6 Drop root privileges earlier. Close syslog more later in imap-master when
Timo Sirainen <tss@iki.fi>
parents: 765
diff changeset
26 static char log_prefix[128]; /* syslog() needs this to be permanent */
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
27
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
28 static void sig_quit(int signo __attr_unused__)
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
29 {
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
30 io_loop_stop(ioloop);
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
31 }
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
32
801
86224ff16bf6 Drop root privileges earlier. Close syslog more later in imap-master when
Timo Sirainen <tss@iki.fi>
parents: 765
diff changeset
33 static void open_logfile(void)
86224ff16bf6 Drop root privileges earlier. Close syslog more later in imap-master when
Timo Sirainen <tss@iki.fi>
parents: 765
diff changeset
34 {
86224ff16bf6 Drop root privileges earlier. Close syslog more later in imap-master when
Timo Sirainen <tss@iki.fi>
parents: 765
diff changeset
35 const char *user;
86224ff16bf6 Drop root privileges earlier. Close syslog more later in imap-master when
Timo Sirainen <tss@iki.fi>
parents: 765
diff changeset
36
86224ff16bf6 Drop root privileges earlier. Close syslog more later in imap-master when
Timo Sirainen <tss@iki.fi>
parents: 765
diff changeset
37 user = getenv("USER");
1193
206190c8c66f Use getlogin() alternatively if USER environment isn't found.
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
38 if (user == NULL) {
1194
Timo Sirainen <tss@iki.fi>
parents: 1193
diff changeset
39 if (IS_STANDALONE())
1193
206190c8c66f Use getlogin() alternatively if USER environment isn't found.
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
40 user = getlogin();
206190c8c66f Use getlogin() alternatively if USER environment isn't found.
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
41 if (user == NULL)
206190c8c66f Use getlogin() alternatively if USER environment isn't found.
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
42 user = "??";
206190c8c66f Use getlogin() alternatively if USER environment isn't found.
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
43 }
801
86224ff16bf6 Drop root privileges earlier. Close syslog more later in imap-master when
Timo Sirainen <tss@iki.fi>
parents: 765
diff changeset
44 if (strlen(user) >= sizeof(log_prefix)-6) {
86224ff16bf6 Drop root privileges earlier. Close syslog more later in imap-master when
Timo Sirainen <tss@iki.fi>
parents: 765
diff changeset
45 /* quite a long user name, cut it */
86224ff16bf6 Drop root privileges earlier. Close syslog more later in imap-master when
Timo Sirainen <tss@iki.fi>
parents: 765
diff changeset
46 user = t_strndup(user, sizeof(log_prefix)-6-2);
86224ff16bf6 Drop root privileges earlier. Close syslog more later in imap-master when
Timo Sirainen <tss@iki.fi>
parents: 765
diff changeset
47 user = t_strconcat(user, "..", NULL);
86224ff16bf6 Drop root privileges earlier. Close syslog more later in imap-master when
Timo Sirainen <tss@iki.fi>
parents: 765
diff changeset
48 }
86224ff16bf6 Drop root privileges earlier. Close syslog more later in imap-master when
Timo Sirainen <tss@iki.fi>
parents: 765
diff changeset
49 i_snprintf(log_prefix, sizeof(log_prefix), "imap(%s)", user);
86224ff16bf6 Drop root privileges earlier. Close syslog more later in imap-master when
Timo Sirainen <tss@iki.fi>
parents: 765
diff changeset
50
1055
a72bba3f8a55 Rewrote setting handling. Changed some existing settings also since POP3
Timo Sirainen <tss@iki.fi>
parents: 1041
diff changeset
51 if (getenv("USE_SYSLOG") != NULL)
801
86224ff16bf6 Drop root privileges earlier. Close syslog more later in imap-master when
Timo Sirainen <tss@iki.fi>
parents: 765
diff changeset
52 i_set_failure_syslog(log_prefix, LOG_NDELAY, LOG_MAIL);
86224ff16bf6 Drop root privileges earlier. Close syslog more later in imap-master when
Timo Sirainen <tss@iki.fi>
parents: 765
diff changeset
53 else {
86224ff16bf6 Drop root privileges earlier. Close syslog more later in imap-master when
Timo Sirainen <tss@iki.fi>
parents: 765
diff changeset
54 /* log to file or stderr */
1055
a72bba3f8a55 Rewrote setting handling. Changed some existing settings also since POP3
Timo Sirainen <tss@iki.fi>
parents: 1041
diff changeset
55 i_set_failure_file(getenv("LOGFILE"), log_prefix);
801
86224ff16bf6 Drop root privileges earlier. Close syslog more later in imap-master when
Timo Sirainen <tss@iki.fi>
parents: 765
diff changeset
56 }
811
664de3231e33 Added info_log_file setting and i_info() function to write to it. Default is
Timo Sirainen <tss@iki.fi>
parents: 801
diff changeset
57
1055
a72bba3f8a55 Rewrote setting handling. Changed some existing settings also since POP3
Timo Sirainen <tss@iki.fi>
parents: 1041
diff changeset
58 if (getenv("INFOLOGFILE") != NULL)
a72bba3f8a55 Rewrote setting handling. Changed some existing settings also since POP3
Timo Sirainen <tss@iki.fi>
parents: 1041
diff changeset
59 i_set_info_file(getenv("INFOLOGFILE"));
811
664de3231e33 Added info_log_file setting and i_info() function to write to it. Default is
Timo Sirainen <tss@iki.fi>
parents: 801
diff changeset
60
1055
a72bba3f8a55 Rewrote setting handling. Changed some existing settings also since POP3
Timo Sirainen <tss@iki.fi>
parents: 1041
diff changeset
61 i_set_failure_timestamp_format(getenv("LOGSTAMP"));
801
86224ff16bf6 Drop root privileges earlier. Close syslog more later in imap-master when
Timo Sirainen <tss@iki.fi>
parents: 765
diff changeset
62 }
86224ff16bf6 Drop root privileges earlier. Close syslog more later in imap-master when
Timo Sirainen <tss@iki.fi>
parents: 765
diff changeset
63
86224ff16bf6 Drop root privileges earlier. Close syslog more later in imap-master when
Timo Sirainen <tss@iki.fi>
parents: 765
diff changeset
64 static void drop_privileges(void)
86224ff16bf6 Drop root privileges earlier. Close syslog more later in imap-master when
Timo Sirainen <tss@iki.fi>
parents: 765
diff changeset
65 {
86224ff16bf6 Drop root privileges earlier. Close syslog more later in imap-master when
Timo Sirainen <tss@iki.fi>
parents: 765
diff changeset
66 /* Log file or syslog opening probably requires roots */
86224ff16bf6 Drop root privileges earlier. Close syslog more later in imap-master when
Timo Sirainen <tss@iki.fi>
parents: 765
diff changeset
67 open_logfile();
86224ff16bf6 Drop root privileges earlier. Close syslog more later in imap-master when
Timo Sirainen <tss@iki.fi>
parents: 765
diff changeset
68
86224ff16bf6 Drop root privileges earlier. Close syslog more later in imap-master when
Timo Sirainen <tss@iki.fi>
parents: 765
diff changeset
69 restrict_access_by_env(!IS_STANDALONE());
86224ff16bf6 Drop root privileges earlier. Close syslog more later in imap-master when
Timo Sirainen <tss@iki.fi>
parents: 765
diff changeset
70 }
86224ff16bf6 Drop root privileges earlier. Close syslog more later in imap-master when
Timo Sirainen <tss@iki.fi>
parents: 765
diff changeset
71
86224ff16bf6 Drop root privileges earlier. Close syslog more later in imap-master when
Timo Sirainen <tss@iki.fi>
parents: 765
diff changeset
72 static void main_init(void)
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
73 {
903
fd8888f6f037 Naming style changes, finally got tired of most of the typedefs. Also the
Timo Sirainen <tss@iki.fi>
parents: 811
diff changeset
74 struct client *client;
fd8888f6f037 Naming style changes, finally got tired of most of the typedefs. Also the
Timo Sirainen <tss@iki.fi>
parents: 811
diff changeset
75 struct mail_storage *storage;
1193
206190c8c66f Use getlogin() alternatively if USER environment isn't found.
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
76 const char *user, *mail, *str;
550
3a83b05a0be3 --with-rawlog: Build support for logging traffic of user sessions. If
Timo Sirainen <tss@iki.fi>
parents: 410
diff changeset
77 int hin, hout;
3a83b05a0be3 --with-rawlog: Build support for logging traffic of user sessions. If
Timo Sirainen <tss@iki.fi>
parents: 410
diff changeset
78
801
86224ff16bf6 Drop root privileges earlier. Close syslog more later in imap-master when
Timo Sirainen <tss@iki.fi>
parents: 765
diff changeset
79 lib_init_signals(sig_quit);
86224ff16bf6 Drop root privileges earlier. Close syslog more later in imap-master when
Timo Sirainen <tss@iki.fi>
parents: 765
diff changeset
80
1193
206190c8c66f Use getlogin() alternatively if USER environment isn't found.
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
81 user = getenv("USER");
206190c8c66f Use getlogin() alternatively if USER environment isn't found.
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
82 if (user == NULL) {
1194
Timo Sirainen <tss@iki.fi>
parents: 1193
diff changeset
83 if (IS_STANDALONE())
1193
206190c8c66f Use getlogin() alternatively if USER environment isn't found.
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
84 user = getlogin();
206190c8c66f Use getlogin() alternatively if USER environment isn't found.
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
85 if (user == NULL)
206190c8c66f Use getlogin() alternatively if USER environment isn't found.
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
86 i_fatal("USER environment missing");
206190c8c66f Use getlogin() alternatively if USER environment isn't found.
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
87 }
748
474319868e82 Sanity check to make sure USER environment exists.
Timo Sirainen <tss@iki.fi>
parents: 746
diff changeset
88
550
3a83b05a0be3 --with-rawlog: Build support for logging traffic of user sessions. If
Timo Sirainen <tss@iki.fi>
parents: 410
diff changeset
89 hin = 0; hout = 1;
597
99c7e303c92a Drop root privileges before handling rawlog opening.
Timo Sirainen <tss@iki.fi>
parents: 596
diff changeset
90 rawlog_open(&hin, &hout);
99c7e303c92a Drop root privileges before handling rawlog opening.
Timo Sirainen <tss@iki.fi>
parents: 596
diff changeset
91
1138
340dea0150bf Added client_workarounds setting, with currently one workaround for OE6.
Timo Sirainen <tss@iki.fi>
parents: 1087
diff changeset
92 mail_storage_init();
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
93 mail_storage_register_all();
1465
03dd87873a81 Added support for dynamically loadable imap/pop3 modules.
Timo Sirainen <tss@iki.fi>
parents: 1464
diff changeset
94 clients_init();
1464
bd489d13479e Added command_register() and related functions so we can dynamically
Timo Sirainen <tss@iki.fi>
parents: 1351
diff changeset
95 commands_init();
1465
03dd87873a81 Added support for dynamically loadable imap/pop3 modules.
Timo Sirainen <tss@iki.fi>
parents: 1464
diff changeset
96
03dd87873a81 Added support for dynamically loadable imap/pop3 modules.
Timo Sirainen <tss@iki.fi>
parents: 1464
diff changeset
97 modules = getenv("MODULE_DIR") == NULL ? NULL :
03dd87873a81 Added support for dynamically loadable imap/pop3 modules.
Timo Sirainen <tss@iki.fi>
parents: 1464
diff changeset
98 module_dir_load(getenv("MODULE_DIR"));
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
99
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
100 mail = getenv("MAIL");
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
101 if (mail == NULL) {
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
102 /* support also maildir-specific environment */
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
103 mail = getenv("MAILDIR");
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
104 if (mail != NULL)
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
105 mail = t_strconcat("maildir:", mail, NULL);
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
106 }
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
107
1193
206190c8c66f Use getlogin() alternatively if USER environment isn't found.
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
108 storage = mail_storage_create_with_data(mail, user);
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
109 if (storage == NULL) {
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
110 /* failed */
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
111 if (mail != NULL && *mail != '\0')
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
112 i_fatal("Failed to create storage with data: %s", mail);
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
113 else {
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
114 const char *home;
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
115
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
116 home = getenv("HOME");
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
117 if (home == NULL) home = "not set";
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
118
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
119 i_fatal("MAIL environment missing and "
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
120 "autodetection failed (home %s)", home);
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
121 }
620
d34ee528aa68 Send PREAUTH if we were started without LOGIN_TAG environment (ie. not
Timo Sirainen <tss@iki.fi>
parents: 597
diff changeset
122 }
d34ee528aa68 Send PREAUTH if we were started without LOGIN_TAG environment (ie. not
Timo Sirainen <tss@iki.fi>
parents: 597
diff changeset
123
1168
03f1455664d7 Added setting to limit length of custom flag names.
Timo Sirainen <tss@iki.fi>
parents: 1138
diff changeset
124 str = getenv("MAIL_MAX_FLAG_LENGTH");
03f1455664d7 Added setting to limit length of custom flag names.
Timo Sirainen <tss@iki.fi>
parents: 1138
diff changeset
125 max_custom_flag_length = str != NULL ?
03f1455664d7 Added setting to limit length of custom flag names.
Timo Sirainen <tss@iki.fi>
parents: 1138
diff changeset
126 (unsigned int)strtoul(str, NULL, 10) :
03f1455664d7 Added setting to limit length of custom flag names.
Timo Sirainen <tss@iki.fi>
parents: 1138
diff changeset
127 DEFAULT_MAX_CUSTOM_FLAG_LENGTH;
03f1455664d7 Added setting to limit length of custom flag names.
Timo Sirainen <tss@iki.fi>
parents: 1138
diff changeset
128
1172
f7c273202dc3 Support for IDLE extension.
Timo Sirainen <tss@iki.fi>
parents: 1168
diff changeset
129 str = getenv("MAILBOX_CHECK_INTERVAL");
f7c273202dc3 Support for IDLE extension.
Timo Sirainen <tss@iki.fi>
parents: 1168
diff changeset
130 mailbox_check_interval = str == NULL ? 0 :
f7c273202dc3 Support for IDLE extension.
Timo Sirainen <tss@iki.fi>
parents: 1168
diff changeset
131 (unsigned int)strtoul(str, NULL, 10);
f7c273202dc3 Support for IDLE extension.
Timo Sirainen <tss@iki.fi>
parents: 1168
diff changeset
132
620
d34ee528aa68 Send PREAUTH if we were started without LOGIN_TAG environment (ie. not
Timo Sirainen <tss@iki.fi>
parents: 597
diff changeset
133 client = client_create(hin, hout, storage);
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
134
1498
5a247fb1673c Minor speedup
Timo Sirainen <tss@iki.fi>
parents: 1465
diff changeset
135 o_stream_cork(client->output);
801
86224ff16bf6 Drop root privileges earlier. Close syslog more later in imap-master when
Timo Sirainen <tss@iki.fi>
parents: 765
diff changeset
136 if (IS_STANDALONE()) {
620
d34ee528aa68 Send PREAUTH if we were started without LOGIN_TAG environment (ie. not
Timo Sirainen <tss@iki.fi>
parents: 597
diff changeset
137 client_send_line(client, t_strconcat(
621
5690ce7151c9 No space before "* PREAUTH" ..
Timo Sirainen <tss@iki.fi>
parents: 620
diff changeset
138 "* PREAUTH [CAPABILITY "CAPABILITY_STRING"] "
1193
206190c8c66f Use getlogin() alternatively if USER environment isn't found.
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
139 "Logged in as ", user, NULL));
1316
02dc0b35af64 Support for mailfront.
Timo Sirainen <tss@iki.fi>
parents: 1194
diff changeset
140 } else if (getenv("IMAPLOGINTAG") != NULL) {
02dc0b35af64 Support for mailfront.
Timo Sirainen <tss@iki.fi>
parents: 1194
diff changeset
141 /* Support for mailfront */
02dc0b35af64 Support for mailfront.
Timo Sirainen <tss@iki.fi>
parents: 1194
diff changeset
142 client_send_line(client, t_strconcat(getenv("IMAPLOGINTAG"),
02dc0b35af64 Support for mailfront.
Timo Sirainen <tss@iki.fi>
parents: 1194
diff changeset
143 " OK Logged in.", NULL));
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
144 }
1498
5a247fb1673c Minor speedup
Timo Sirainen <tss@iki.fi>
parents: 1465
diff changeset
145 o_stream_flush(client->output);
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
146 }
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
147
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
148 static void main_deinit(void)
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
149 {
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
150 /* warn about being killed because of some signal, except SIGINT (^C)
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
151 which is too common at least while testing :) */
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
152 if (lib_signal_kill != 0 && lib_signal_kill != 2)
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
153 i_warning("Killed with signal %d", lib_signal_kill);
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
154
1465
03dd87873a81 Added support for dynamically loadable imap/pop3 modules.
Timo Sirainen <tss@iki.fi>
parents: 1464
diff changeset
155 module_dir_unload(modules);
03dd87873a81 Added support for dynamically loadable imap/pop3 modules.
Timo Sirainen <tss@iki.fi>
parents: 1464
diff changeset
156
03dd87873a81 Added support for dynamically loadable imap/pop3 modules.
Timo Sirainen <tss@iki.fi>
parents: 1464
diff changeset
157 commands_deinit();
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
158 clients_deinit();
1351
6709d9330885 minor memory leak/cleanup fixes
Timo Sirainen <tss@iki.fi>
parents: 1316
diff changeset
159 mail_storage_deinit();
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
160
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
161 closelog();
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
162 }
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
163
801
86224ff16bf6 Drop root privileges earlier. Close syslog more later in imap-master when
Timo Sirainen <tss@iki.fi>
parents: 765
diff changeset
164 int main(int argc __attr_unused__, char *argv[], char *envp[])
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
165 {
727
8dd8ebe6bcac We use close-on-exec flag now to make sure that master process closes the
Timo Sirainen <tss@iki.fi>
parents: 621
diff changeset
166 #ifdef DEBUG
1067
800810173989 wrong debug check
Timo Sirainen <tss@iki.fi>
parents: 1055
diff changeset
167 if (getenv("LOGGED_IN") != NULL)
738
1b0205fc4153 DEBUG: We shouldn't verify the fds when running in pre-auth mode (breaks
Timo Sirainen <tss@iki.fi>
parents: 727
diff changeset
168 fd_debug_verify_leaks(3, 1024);
727
8dd8ebe6bcac We use close-on-exec flag now to make sure that master process closes the
Timo Sirainen <tss@iki.fi>
parents: 621
diff changeset
169 #endif
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
170 /* NOTE: we start rooted, so keep the code minimal until
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
171 restrict_access_by_env() is called */
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
172 lib_init();
801
86224ff16bf6 Drop root privileges earlier. Close syslog more later in imap-master when
Timo Sirainen <tss@iki.fi>
parents: 765
diff changeset
173 drop_privileges();
86224ff16bf6 Drop root privileges earlier. Close syslog more later in imap-master when
Timo Sirainen <tss@iki.fi>
parents: 765
diff changeset
174
746
ad4292a30b1d Set process title for rawlog process.
Timo Sirainen <tss@iki.fi>
parents: 738
diff changeset
175 process_title_init(argv, envp);
389
60040a9d243f ioloop_create() takes now pool-parameter. io_buffer_create_mmaped() takes
Timo Sirainen <tss@iki.fi>
parents: 35
diff changeset
176 ioloop = io_loop_create(system_pool);
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
177
801
86224ff16bf6 Drop root privileges earlier. Close syslog more later in imap-master when
Timo Sirainen <tss@iki.fi>
parents: 765
diff changeset
178 main_init();
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
179 io_loop_run(ioloop);
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
180 main_deinit();
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
181
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
182 io_loop_destroy(ioloop);
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
183 lib_deinit();
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
184
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
185 return 0;
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
186 }