Mercurial > dovecot > original-hg > dovecot-1.2
annotate src/imap/main.c @ 1641:6498f3cb9d2c HEAD
Added hook_client_created and hook_mail_storage_created for modules.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Sat, 26 Jul 2003 19:54:29 +0300 |
parents | d22e03714d36 |
children | ca1c2972b78f |
rev | line source |
---|---|
0 | 1 /* Copyright (C) 2002 Timo Sirainen */ |
2 | |
3 #include "common.h" | |
4 #include "ioloop.h" | |
1498 | 5 #include "ostream.h" |
1586
898a95426118
Keep capability in string_t so plugins can modify it.
Timo Sirainen <tss@iki.fi>
parents:
1498
diff
changeset
|
6 #include "str.h" |
0 | 7 #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
|
8 #include "rawlog.h" |
0 | 9 #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
|
10 #include "fd-close-on-exec.h" |
746
ad4292a30b1d
Set process title for rawlog process.
Timo Sirainen <tss@iki.fi>
parents:
738
diff
changeset
|
11 #include "process-title.h" |
1597
9f503b7851ab
Moved all dotlocking code to lib/. Also we now use temp file + link() rather
Timo Sirainen <tss@iki.fi>
parents:
1591
diff
changeset
|
12 #include "randgen.h" |
1465
03dd87873a81
Added support for dynamically loadable imap/pop3 modules.
Timo Sirainen <tss@iki.fi>
parents:
1464
diff
changeset
|
13 #include "module-dir.h" |
1041 | 14 #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
|
15 #include "commands.h" |
0 | 16 |
17 #include <stdlib.h> | |
1193
206190c8c66f
Use getlogin() alternatively if USER environment isn't found.
Timo Sirainen <tss@iki.fi>
parents:
1172
diff
changeset
|
18 #include <unistd.h> |
0 | 19 #include <syslog.h> |
20 | |
801
86224ff16bf6
Drop root privileges earlier. Close syslog more later in imap-master when
Timo Sirainen <tss@iki.fi>
parents:
765
diff
changeset
|
21 #define IS_STANDALONE() \ |
1316 | 22 (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
|
23 |
903
fd8888f6f037
Naming style changes, finally got tired of most of the typedefs. Also the
Timo Sirainen <tss@iki.fi>
parents:
811
diff
changeset
|
24 struct ioloop *ioloop; |
1172 | 25 unsigned int max_custom_flag_length, mailbox_check_interval; |
1591
6eca99b727a0
IMAP parser memory limits are now enforced by bytes per line rather than
Timo Sirainen <tss@iki.fi>
parents:
1586
diff
changeset
|
26 unsigned int imap_max_line_length; |
1622
d22e03714d36
index_mmap_invalidate = yes now invalidate memory maps before accessing
Timo Sirainen <tss@iki.fi>
parents:
1597
diff
changeset
|
27 enum mailbox_open_flags mailbox_open_flags; |
1168
03f1455664d7
Added setting to limit length of custom flag names.
Timo Sirainen <tss@iki.fi>
parents:
1138
diff
changeset
|
28 |
1465
03dd87873a81
Added support for dynamically loadable imap/pop3 modules.
Timo Sirainen <tss@iki.fi>
parents:
1464
diff
changeset
|
29 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
|
30 static char log_prefix[128]; /* syslog() needs this to be permanent */ |
0 | 31 |
1641
6498f3cb9d2c
Added hook_client_created and hook_mail_storage_created for modules.
Timo Sirainen <tss@iki.fi>
parents:
1622
diff
changeset
|
32 void (*hook_mail_storage_created)(struct mail_storage *storage) = NULL; |
6498f3cb9d2c
Added hook_client_created and hook_mail_storage_created for modules.
Timo Sirainen <tss@iki.fi>
parents:
1622
diff
changeset
|
33 void (*hook_client_created)(struct client *client) = NULL; |
6498f3cb9d2c
Added hook_client_created and hook_mail_storage_created for modules.
Timo Sirainen <tss@iki.fi>
parents:
1622
diff
changeset
|
34 |
1586
898a95426118
Keep capability in string_t so plugins can modify it.
Timo Sirainen <tss@iki.fi>
parents:
1498
diff
changeset
|
35 string_t *capability_string; |
898a95426118
Keep capability in string_t so plugins can modify it.
Timo Sirainen <tss@iki.fi>
parents:
1498
diff
changeset
|
36 |
0 | 37 static void sig_quit(int signo __attr_unused__) |
38 { | |
39 io_loop_stop(ioloop); | |
40 } | |
41 | |
801
86224ff16bf6
Drop root privileges earlier. Close syslog more later in imap-master when
Timo Sirainen <tss@iki.fi>
parents:
765
diff
changeset
|
42 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
|
43 { |
86224ff16bf6
Drop root privileges earlier. Close syslog more later in imap-master when
Timo Sirainen <tss@iki.fi>
parents:
765
diff
changeset
|
44 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
|
45 |
86224ff16bf6
Drop root privileges earlier. Close syslog more later in imap-master when
Timo Sirainen <tss@iki.fi>
parents:
765
diff
changeset
|
46 user = getenv("USER"); |
1193
206190c8c66f
Use getlogin() alternatively if USER environment isn't found.
Timo Sirainen <tss@iki.fi>
parents:
1172
diff
changeset
|
47 if (user == NULL) { |
1194 | 48 if (IS_STANDALONE()) |
1193
206190c8c66f
Use getlogin() alternatively if USER environment isn't found.
Timo Sirainen <tss@iki.fi>
parents:
1172
diff
changeset
|
49 user = getlogin(); |
206190c8c66f
Use getlogin() alternatively if USER environment isn't found.
Timo Sirainen <tss@iki.fi>
parents:
1172
diff
changeset
|
50 if (user == NULL) |
206190c8c66f
Use getlogin() alternatively if USER environment isn't found.
Timo Sirainen <tss@iki.fi>
parents:
1172
diff
changeset
|
51 user = "??"; |
206190c8c66f
Use getlogin() alternatively if USER environment isn't found.
Timo Sirainen <tss@iki.fi>
parents:
1172
diff
changeset
|
52 } |
801
86224ff16bf6
Drop root privileges earlier. Close syslog more later in imap-master when
Timo Sirainen <tss@iki.fi>
parents:
765
diff
changeset
|
53 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
|
54 /* 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
|
55 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
|
56 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
|
57 } |
86224ff16bf6
Drop root privileges earlier. Close syslog more later in imap-master when
Timo Sirainen <tss@iki.fi>
parents:
765
diff
changeset
|
58 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
|
59 |
1055
a72bba3f8a55
Rewrote setting handling. Changed some existing settings also since POP3
Timo Sirainen <tss@iki.fi>
parents:
1041
diff
changeset
|
60 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
|
61 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
|
62 else { |
86224ff16bf6
Drop root privileges earlier. Close syslog more later in imap-master when
Timo Sirainen <tss@iki.fi>
parents:
765
diff
changeset
|
63 /* 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
|
64 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
|
65 } |
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
|
66 |
1055
a72bba3f8a55
Rewrote setting handling. Changed some existing settings also since POP3
Timo Sirainen <tss@iki.fi>
parents:
1041
diff
changeset
|
67 if (getenv("INFOLOGFILE") != NULL) |
a72bba3f8a55
Rewrote setting handling. Changed some existing settings also since POP3
Timo Sirainen <tss@iki.fi>
parents:
1041
diff
changeset
|
68 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
|
69 |
1055
a72bba3f8a55
Rewrote setting handling. Changed some existing settings also since POP3
Timo Sirainen <tss@iki.fi>
parents:
1041
diff
changeset
|
70 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
|
71 } |
86224ff16bf6
Drop root privileges earlier. Close syslog more later in imap-master when
Timo Sirainen <tss@iki.fi>
parents:
765
diff
changeset
|
72 |
86224ff16bf6
Drop root privileges earlier. Close syslog more later in imap-master when
Timo Sirainen <tss@iki.fi>
parents:
765
diff
changeset
|
73 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
|
74 { |
86224ff16bf6
Drop root privileges earlier. Close syslog more later in imap-master when
Timo Sirainen <tss@iki.fi>
parents:
765
diff
changeset
|
75 /* 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
|
76 open_logfile(); |
86224ff16bf6
Drop root privileges earlier. Close syslog more later in imap-master when
Timo Sirainen <tss@iki.fi>
parents:
765
diff
changeset
|
77 |
1597
9f503b7851ab
Moved all dotlocking code to lib/. Also we now use temp file + link() rather
Timo Sirainen <tss@iki.fi>
parents:
1591
diff
changeset
|
78 /* Most likely needed. Have to open /dev/urandom before possible |
9f503b7851ab
Moved all dotlocking code to lib/. Also we now use temp file + link() rather
Timo Sirainen <tss@iki.fi>
parents:
1591
diff
changeset
|
79 chrooting. */ |
9f503b7851ab
Moved all dotlocking code to lib/. Also we now use temp file + link() rather
Timo Sirainen <tss@iki.fi>
parents:
1591
diff
changeset
|
80 random_init(); |
9f503b7851ab
Moved all dotlocking code to lib/. Also we now use temp file + link() rather
Timo Sirainen <tss@iki.fi>
parents:
1591
diff
changeset
|
81 |
801
86224ff16bf6
Drop root privileges earlier. Close syslog more later in imap-master when
Timo Sirainen <tss@iki.fi>
parents:
765
diff
changeset
|
82 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
|
83 } |
86224ff16bf6
Drop root privileges earlier. Close syslog more later in imap-master when
Timo Sirainen <tss@iki.fi>
parents:
765
diff
changeset
|
84 |
86224ff16bf6
Drop root privileges earlier. Close syslog more later in imap-master when
Timo Sirainen <tss@iki.fi>
parents:
765
diff
changeset
|
85 static void main_init(void) |
0 | 86 { |
903
fd8888f6f037
Naming style changes, finally got tired of most of the typedefs. Also the
Timo Sirainen <tss@iki.fi>
parents:
811
diff
changeset
|
87 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
|
88 struct mail_storage *storage; |
1193
206190c8c66f
Use getlogin() alternatively if USER environment isn't found.
Timo Sirainen <tss@iki.fi>
parents:
1172
diff
changeset
|
89 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
|
90 int hin, hout; |
3a83b05a0be3
--with-rawlog: Build support for logging traffic of user sessions. If
Timo Sirainen <tss@iki.fi>
parents:
410
diff
changeset
|
91 |
801
86224ff16bf6
Drop root privileges earlier. Close syslog more later in imap-master when
Timo Sirainen <tss@iki.fi>
parents:
765
diff
changeset
|
92 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
|
93 |
1193
206190c8c66f
Use getlogin() alternatively if USER environment isn't found.
Timo Sirainen <tss@iki.fi>
parents:
1172
diff
changeset
|
94 user = getenv("USER"); |
206190c8c66f
Use getlogin() alternatively if USER environment isn't found.
Timo Sirainen <tss@iki.fi>
parents:
1172
diff
changeset
|
95 if (user == NULL) { |
1194 | 96 if (IS_STANDALONE()) |
1193
206190c8c66f
Use getlogin() alternatively if USER environment isn't found.
Timo Sirainen <tss@iki.fi>
parents:
1172
diff
changeset
|
97 user = getlogin(); |
206190c8c66f
Use getlogin() alternatively if USER environment isn't found.
Timo Sirainen <tss@iki.fi>
parents:
1172
diff
changeset
|
98 if (user == NULL) |
206190c8c66f
Use getlogin() alternatively if USER environment isn't found.
Timo Sirainen <tss@iki.fi>
parents:
1172
diff
changeset
|
99 i_fatal("USER environment missing"); |
206190c8c66f
Use getlogin() alternatively if USER environment isn't found.
Timo Sirainen <tss@iki.fi>
parents:
1172
diff
changeset
|
100 } |
748
474319868e82
Sanity check to make sure USER environment exists.
Timo Sirainen <tss@iki.fi>
parents:
746
diff
changeset
|
101 |
1586
898a95426118
Keep capability in string_t so plugins can modify it.
Timo Sirainen <tss@iki.fi>
parents:
1498
diff
changeset
|
102 capability_string = str_new(default_pool, sizeof(CAPABILITY_STRING)+32); |
898a95426118
Keep capability in string_t so plugins can modify it.
Timo Sirainen <tss@iki.fi>
parents:
1498
diff
changeset
|
103 str_append(capability_string, CAPABILITY_STRING); |
898a95426118
Keep capability in string_t so plugins can modify it.
Timo Sirainen <tss@iki.fi>
parents:
1498
diff
changeset
|
104 |
550
3a83b05a0be3
--with-rawlog: Build support for logging traffic of user sessions. If
Timo Sirainen <tss@iki.fi>
parents:
410
diff
changeset
|
105 hin = 0; hout = 1; |
597
99c7e303c92a
Drop root privileges before handling rawlog opening.
Timo Sirainen <tss@iki.fi>
parents:
596
diff
changeset
|
106 rawlog_open(&hin, &hout); |
99c7e303c92a
Drop root privileges before handling rawlog opening.
Timo Sirainen <tss@iki.fi>
parents:
596
diff
changeset
|
107 |
1138
340dea0150bf
Added client_workarounds setting, with currently one workaround for OE6.
Timo Sirainen <tss@iki.fi>
parents:
1087
diff
changeset
|
108 mail_storage_init(); |
0 | 109 mail_storage_register_all(); |
1465
03dd87873a81
Added support for dynamically loadable imap/pop3 modules.
Timo Sirainen <tss@iki.fi>
parents:
1464
diff
changeset
|
110 clients_init(); |
1464
bd489d13479e
Added command_register() and related functions so we can dynamically
Timo Sirainen <tss@iki.fi>
parents:
1351
diff
changeset
|
111 commands_init(); |
1465
03dd87873a81
Added support for dynamically loadable imap/pop3 modules.
Timo Sirainen <tss@iki.fi>
parents:
1464
diff
changeset
|
112 |
03dd87873a81
Added support for dynamically loadable imap/pop3 modules.
Timo Sirainen <tss@iki.fi>
parents:
1464
diff
changeset
|
113 modules = getenv("MODULE_DIR") == NULL ? NULL : |
03dd87873a81
Added support for dynamically loadable imap/pop3 modules.
Timo Sirainen <tss@iki.fi>
parents:
1464
diff
changeset
|
114 module_dir_load(getenv("MODULE_DIR")); |
0 | 115 |
116 mail = getenv("MAIL"); | |
117 if (mail == NULL) { | |
118 /* support also maildir-specific environment */ | |
119 mail = getenv("MAILDIR"); | |
120 if (mail != NULL) | |
121 mail = t_strconcat("maildir:", mail, NULL); | |
122 } | |
123 | |
1193
206190c8c66f
Use getlogin() alternatively if USER environment isn't found.
Timo Sirainen <tss@iki.fi>
parents:
1172
diff
changeset
|
124 storage = mail_storage_create_with_data(mail, user); |
0 | 125 if (storage == NULL) { |
126 /* failed */ | |
127 if (mail != NULL && *mail != '\0') | |
128 i_fatal("Failed to create storage with data: %s", mail); | |
129 else { | |
130 const char *home; | |
131 | |
132 home = getenv("HOME"); | |
133 if (home == NULL) home = "not set"; | |
134 | |
135 i_fatal("MAIL environment missing and " | |
136 "autodetection failed (home %s)", home); | |
137 } | |
620
d34ee528aa68
Send PREAUTH if we were started without LOGIN_TAG environment (ie. not
Timo Sirainen <tss@iki.fi>
parents:
597
diff
changeset
|
138 } |
d34ee528aa68
Send PREAUTH if we were started without LOGIN_TAG environment (ie. not
Timo Sirainen <tss@iki.fi>
parents:
597
diff
changeset
|
139 |
1641
6498f3cb9d2c
Added hook_client_created and hook_mail_storage_created for modules.
Timo Sirainen <tss@iki.fi>
parents:
1622
diff
changeset
|
140 if (hook_mail_storage_created != NULL) |
6498f3cb9d2c
Added hook_client_created and hook_mail_storage_created for modules.
Timo Sirainen <tss@iki.fi>
parents:
1622
diff
changeset
|
141 hook_mail_storage_created(storage); |
6498f3cb9d2c
Added hook_client_created and hook_mail_storage_created for modules.
Timo Sirainen <tss@iki.fi>
parents:
1622
diff
changeset
|
142 |
1591
6eca99b727a0
IMAP parser memory limits are now enforced by bytes per line rather than
Timo Sirainen <tss@iki.fi>
parents:
1586
diff
changeset
|
143 str = getenv("IMAP_MAX_LINE_LENGTH"); |
6eca99b727a0
IMAP parser memory limits are now enforced by bytes per line rather than
Timo Sirainen <tss@iki.fi>
parents:
1586
diff
changeset
|
144 imap_max_line_length = str != NULL ? |
6eca99b727a0
IMAP parser memory limits are now enforced by bytes per line rather than
Timo Sirainen <tss@iki.fi>
parents:
1586
diff
changeset
|
145 (unsigned int)strtoul(str, NULL, 10) : |
6eca99b727a0
IMAP parser memory limits are now enforced by bytes per line rather than
Timo Sirainen <tss@iki.fi>
parents:
1586
diff
changeset
|
146 DEFAULT_IMAP_MAX_LINE_LENGTH; |
6eca99b727a0
IMAP parser memory limits are now enforced by bytes per line rather than
Timo Sirainen <tss@iki.fi>
parents:
1586
diff
changeset
|
147 |
1168
03f1455664d7
Added setting to limit length of custom flag names.
Timo Sirainen <tss@iki.fi>
parents:
1138
diff
changeset
|
148 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
|
149 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
|
150 (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
|
151 DEFAULT_MAX_CUSTOM_FLAG_LENGTH; |
03f1455664d7
Added setting to limit length of custom flag names.
Timo Sirainen <tss@iki.fi>
parents:
1138
diff
changeset
|
152 |
1172 | 153 str = getenv("MAILBOX_CHECK_INTERVAL"); |
154 mailbox_check_interval = str == NULL ? 0 : | |
155 (unsigned int)strtoul(str, NULL, 10); | |
156 | |
1622
d22e03714d36
index_mmap_invalidate = yes now invalidate memory maps before accessing
Timo Sirainen <tss@iki.fi>
parents:
1597
diff
changeset
|
157 mailbox_open_flags = getenv("MMAP_INVALIDATE") != NULL ? |
d22e03714d36
index_mmap_invalidate = yes now invalidate memory maps before accessing
Timo Sirainen <tss@iki.fi>
parents:
1597
diff
changeset
|
158 MAILBOX_OPEN_MMAP_INVALIDATE : 0; |
d22e03714d36
index_mmap_invalidate = yes now invalidate memory maps before accessing
Timo Sirainen <tss@iki.fi>
parents:
1597
diff
changeset
|
159 |
620
d34ee528aa68
Send PREAUTH if we were started without LOGIN_TAG environment (ie. not
Timo Sirainen <tss@iki.fi>
parents:
597
diff
changeset
|
160 client = client_create(hin, hout, storage); |
0 | 161 |
1498 | 162 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
|
163 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
|
164 client_send_line(client, t_strconcat( |
621 | 165 "* PREAUTH [CAPABILITY "CAPABILITY_STRING"] " |
1193
206190c8c66f
Use getlogin() alternatively if USER environment isn't found.
Timo Sirainen <tss@iki.fi>
parents:
1172
diff
changeset
|
166 "Logged in as ", user, NULL)); |
1316 | 167 } else if (getenv("IMAPLOGINTAG") != NULL) { |
168 /* Support for mailfront */ | |
169 client_send_line(client, t_strconcat(getenv("IMAPLOGINTAG"), | |
170 " OK Logged in.", NULL)); | |
0 | 171 } |
1498 | 172 o_stream_flush(client->output); |
0 | 173 } |
174 | |
175 static void main_deinit(void) | |
176 { | |
177 /* warn about being killed because of some signal, except SIGINT (^C) | |
178 which is too common at least while testing :) */ | |
179 if (lib_signal_kill != 0 && lib_signal_kill != 2) | |
180 i_warning("Killed with signal %d", lib_signal_kill); | |
181 | |
1465
03dd87873a81
Added support for dynamically loadable imap/pop3 modules.
Timo Sirainen <tss@iki.fi>
parents:
1464
diff
changeset
|
182 module_dir_unload(modules); |
03dd87873a81
Added support for dynamically loadable imap/pop3 modules.
Timo Sirainen <tss@iki.fi>
parents:
1464
diff
changeset
|
183 |
03dd87873a81
Added support for dynamically loadable imap/pop3 modules.
Timo Sirainen <tss@iki.fi>
parents:
1464
diff
changeset
|
184 commands_deinit(); |
0 | 185 clients_deinit(); |
1351
6709d9330885
minor memory leak/cleanup fixes
Timo Sirainen <tss@iki.fi>
parents:
1316
diff
changeset
|
186 mail_storage_deinit(); |
1597
9f503b7851ab
Moved all dotlocking code to lib/. Also we now use temp file + link() rather
Timo Sirainen <tss@iki.fi>
parents:
1591
diff
changeset
|
187 random_deinit(); |
0 | 188 |
189 closelog(); | |
190 } | |
191 | |
801
86224ff16bf6
Drop root privileges earlier. Close syslog more later in imap-master when
Timo Sirainen <tss@iki.fi>
parents:
765
diff
changeset
|
192 int main(int argc __attr_unused__, char *argv[], char *envp[]) |
0 | 193 { |
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
|
194 #ifdef DEBUG |
1067 | 195 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
|
196 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
|
197 #endif |
0 | 198 /* NOTE: we start rooted, so keep the code minimal until |
199 restrict_access_by_env() is called */ | |
200 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
|
201 drop_privileges(); |
86224ff16bf6
Drop root privileges earlier. Close syslog more later in imap-master when
Timo Sirainen <tss@iki.fi>
parents:
765
diff
changeset
|
202 |
746
ad4292a30b1d
Set process title for rawlog process.
Timo Sirainen <tss@iki.fi>
parents:
738
diff
changeset
|
203 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
|
204 ioloop = io_loop_create(system_pool); |
0 | 205 |
801
86224ff16bf6
Drop root privileges earlier. Close syslog more later in imap-master when
Timo Sirainen <tss@iki.fi>
parents:
765
diff
changeset
|
206 main_init(); |
0 | 207 io_loop_run(ioloop); |
208 main_deinit(); | |
209 | |
210 io_loop_destroy(ioloop); | |
211 lib_deinit(); | |
212 | |
213 return 0; | |
214 } |