annotate src/lmtp/main.c @ 17130:add8c00fb3cc

Updated copyright notices to include year 2014.
author Timo Sirainen <tss@iki.fi>
date Tue, 04 Feb 2014 16:23:22 -0500
parents 754d244b8249
children 297192cfbd37
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
17130
add8c00fb3cc Updated copyright notices to include year 2014.
Timo Sirainen <tss@iki.fi>
parents: 16508
diff changeset
1 /* Copyright (c) 2002-2014 Dovecot authors, see the included COPYING file */
9121
a957a6be4af5 Initial implementation of LMTP server. Master process doesn't yet execute it though.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
2
a957a6be4af5 Initial implementation of LMTP server. Master process doesn't yet execute it though.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
3 #include "lib.h"
a957a6be4af5 Initial implementation of LMTP server. Master process doesn't yet execute it though.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
4 #include "array.h"
a957a6be4af5 Initial implementation of LMTP server. Master process doesn't yet execute it though.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
5 #include "ioloop.h"
10257
597f969a9870 lmtp: Improved logging.
Timo Sirainen <tss@iki.fi>
parents: 10134
diff changeset
6 #include "hostpid.h"
10825
cc3f6adc1e0b lmtp proxy: Added support for DNS lookups.
Timo Sirainen <tss@iki.fi>
parents: 10582
diff changeset
7 #include "abspath.h"
9121
a957a6be4af5 Initial implementation of LMTP server. Master process doesn't yet execute it though.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
8 #include "restrict-access.h"
a957a6be4af5 Initial implementation of LMTP server. Master process doesn't yet execute it though.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
9 #include "fd-close-on-exec.h"
a957a6be4af5 Initial implementation of LMTP server. Master process doesn't yet execute it though.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
10 #include "master-service.h"
10039
ddcc3391adf9 lmtp: Added lmtp_proxy setting (it's no longer hardcoded to yes).
Timo Sirainen <tss@iki.fi>
parents: 9832
diff changeset
11 #include "master-service-settings.h"
9350
7df8fddbc7a5 Fixed LMTP server to actualy work.
Timo Sirainen <tss@iki.fi>
parents: 9348
diff changeset
12 #include "master-interface.h"
9121
a957a6be4af5 Initial implementation of LMTP server. Master process doesn't yet execute it though.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
13 #include "mail-storage-service.h"
a957a6be4af5 Initial implementation of LMTP server. Master process doesn't yet execute it though.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
14 #include "lda-settings.h"
10039
ddcc3391adf9 lmtp: Added lmtp_proxy setting (it's no longer hardcoded to yes).
Timo Sirainen <tss@iki.fi>
parents: 9832
diff changeset
15 #include "lmtp-settings.h"
9121
a957a6be4af5 Initial implementation of LMTP server. Master process doesn't yet execute it though.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
16 #include "client.h"
a957a6be4af5 Initial implementation of LMTP server. Master process doesn't yet execute it though.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
17 #include "main.h"
a957a6be4af5 Initial implementation of LMTP server. Master process doesn't yet execute it though.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
18
a957a6be4af5 Initial implementation of LMTP server. Master process doesn't yet execute it though.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
19 #include <stdlib.h>
a957a6be4af5 Initial implementation of LMTP server. Master process doesn't yet execute it though.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
20 #include <unistd.h>
a957a6be4af5 Initial implementation of LMTP server. Master process doesn't yet execute it though.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
21
10825
cc3f6adc1e0b lmtp proxy: Added support for DNS lookups.
Timo Sirainen <tss@iki.fi>
parents: 10582
diff changeset
22 #define DNS_CLIENT_SOCKET_PATH "dns-client"
9121
a957a6be4af5 Initial implementation of LMTP server. Master process doesn't yet execute it though.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
23 #define LMTP_MASTER_FIRST_LISTEN_FD 3
a957a6be4af5 Initial implementation of LMTP server. Master process doesn't yet execute it though.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
24
a957a6be4af5 Initial implementation of LMTP server. Master process doesn't yet execute it though.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
25 #define IS_STANDALONE() \
12425
10c163bb5e22 "Running standalone?" check now uses a new DOVECOT_CHILD_PROCESS environment rather than GENERATION.
Timo Sirainen <tss@iki.fi>
parents: 12091
diff changeset
26 (getenv(MASTER_IS_PARENT_ENV) == NULL)
9121
a957a6be4af5 Initial implementation of LMTP server. Master process doesn't yet execute it though.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
27
13977
d5ba2d63ed6d lmtp: Make core dumping work also after the first mail delivery.
Timo Sirainen <tss@iki.fi>
parents: 12782
diff changeset
28 const char *dns_client_socket_path, *base_dir;
10130
d1384c2b08e5 Merged single and multi mail_storage_service_*() functions.
Timo Sirainen <tss@iki.fi>
parents: 10127
diff changeset
29 struct mail_storage_service_ctx *storage_service;
9121
a957a6be4af5 Initial implementation of LMTP server. Master process doesn't yet execute it though.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
30
11388
b8d3c96e61a7 lib-master API changed to avoid accidentally leaking client connections.
Timo Sirainen <tss@iki.fi>
parents: 11282
diff changeset
31 static void client_connected(struct master_service_connection *conn)
9121
a957a6be4af5 Initial implementation of LMTP server. Master process doesn't yet execute it though.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
32 {
11388
b8d3c96e61a7 lib-master API changed to avoid accidentally leaking client connections.
Timo Sirainen <tss@iki.fi>
parents: 11282
diff changeset
33 master_service_client_connection_accept(conn);
10134
545bdb7670d2 lib-storage: Changed APIs to fix reading settings for multiple users.
Timo Sirainen <tss@iki.fi>
parents: 10130
diff changeset
34 (void)client_create(conn->fd, conn->fd, conn);
9121
a957a6be4af5 Initial implementation of LMTP server. Master process doesn't yet execute it though.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
35 }
a957a6be4af5 Initial implementation of LMTP server. Master process doesn't yet execute it though.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
36
11282
70cfc89a3936 lmtp: Set user/group at startup as specified in service block.
Timo Sirainen <tss@iki.fi>
parents: 10825
diff changeset
37 static void drop_privileges(void)
70cfc89a3936 lmtp: Set user/group at startup as specified in service block.
Timo Sirainen <tss@iki.fi>
parents: 10825
diff changeset
38 {
70cfc89a3936 lmtp: Set user/group at startup as specified in service block.
Timo Sirainen <tss@iki.fi>
parents: 10825
diff changeset
39 struct restrict_access_settings set;
70cfc89a3936 lmtp: Set user/group at startup as specified in service block.
Timo Sirainen <tss@iki.fi>
parents: 10825
diff changeset
40 const char *error;
70cfc89a3936 lmtp: Set user/group at startup as specified in service block.
Timo Sirainen <tss@iki.fi>
parents: 10825
diff changeset
41
70cfc89a3936 lmtp: Set user/group at startup as specified in service block.
Timo Sirainen <tss@iki.fi>
parents: 10825
diff changeset
42 /* by default we don't drop any privileges, but keep running as root. */
70cfc89a3936 lmtp: Set user/group at startup as specified in service block.
Timo Sirainen <tss@iki.fi>
parents: 10825
diff changeset
43 restrict_access_get_env(&set);
70cfc89a3936 lmtp: Set user/group at startup as specified in service block.
Timo Sirainen <tss@iki.fi>
parents: 10825
diff changeset
44 if (set.uid != 0) {
70cfc89a3936 lmtp: Set user/group at startup as specified in service block.
Timo Sirainen <tss@iki.fi>
parents: 10825
diff changeset
45 /* open config connection before dropping privileges */
12091
7fef89fea00e lmtp: Read initial settings with service=lmtp
Timo Sirainen <tss@iki.fi>
parents: 11388
diff changeset
46 struct master_service_settings_input input;
7fef89fea00e lmtp: Read initial settings with service=lmtp
Timo Sirainen <tss@iki.fi>
parents: 11388
diff changeset
47 struct master_service_settings_output output;
7fef89fea00e lmtp: Read initial settings with service=lmtp
Timo Sirainen <tss@iki.fi>
parents: 11388
diff changeset
48
7fef89fea00e lmtp: Read initial settings with service=lmtp
Timo Sirainen <tss@iki.fi>
parents: 11388
diff changeset
49 memset(&input, 0, sizeof(input));
7fef89fea00e lmtp: Read initial settings with service=lmtp
Timo Sirainen <tss@iki.fi>
parents: 11388
diff changeset
50 input.module = "lmtp";
7fef89fea00e lmtp: Read initial settings with service=lmtp
Timo Sirainen <tss@iki.fi>
parents: 11388
diff changeset
51 input.service = "lmtp";
7fef89fea00e lmtp: Read initial settings with service=lmtp
Timo Sirainen <tss@iki.fi>
parents: 11388
diff changeset
52 (void)master_service_settings_read(master_service,
7fef89fea00e lmtp: Read initial settings with service=lmtp
Timo Sirainen <tss@iki.fi>
parents: 11388
diff changeset
53 &input, &output, &error);
11282
70cfc89a3936 lmtp: Set user/group at startup as specified in service block.
Timo Sirainen <tss@iki.fi>
parents: 10825
diff changeset
54 }
70cfc89a3936 lmtp: Set user/group at startup as specified in service block.
Timo Sirainen <tss@iki.fi>
parents: 10825
diff changeset
55 restrict_access_by_env(NULL, FALSE);
70cfc89a3936 lmtp: Set user/group at startup as specified in service block.
Timo Sirainen <tss@iki.fi>
parents: 10825
diff changeset
56 }
70cfc89a3936 lmtp: Set user/group at startup as specified in service block.
Timo Sirainen <tss@iki.fi>
parents: 10825
diff changeset
57
9121
a957a6be4af5 Initial implementation of LMTP server. Master process doesn't yet execute it though.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
58 static void main_init(void)
a957a6be4af5 Initial implementation of LMTP server. Master process doesn't yet execute it though.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
59 {
10134
545bdb7670d2 lib-storage: Changed APIs to fix reading settings for multiple users.
Timo Sirainen <tss@iki.fi>
parents: 10130
diff changeset
60 struct master_service_connection conn;
545bdb7670d2 lib-storage: Changed APIs to fix reading settings for multiple users.
Timo Sirainen <tss@iki.fi>
parents: 10130
diff changeset
61
545bdb7670d2 lib-storage: Changed APIs to fix reading settings for multiple users.
Timo Sirainen <tss@iki.fi>
parents: 10130
diff changeset
62 if (IS_STANDALONE()) {
545bdb7670d2 lib-storage: Changed APIs to fix reading settings for multiple users.
Timo Sirainen <tss@iki.fi>
parents: 10130
diff changeset
63 memset(&conn, 0, sizeof(conn));
545bdb7670d2 lib-storage: Changed APIs to fix reading settings for multiple users.
Timo Sirainen <tss@iki.fi>
parents: 10130
diff changeset
64 (void)client_create(STDIN_FILENO, STDOUT_FILENO, &conn);
545bdb7670d2 lib-storage: Changed APIs to fix reading settings for multiple users.
Timo Sirainen <tss@iki.fi>
parents: 10130
diff changeset
65 }
10825
cc3f6adc1e0b lmtp proxy: Added support for DNS lookups.
Timo Sirainen <tss@iki.fi>
parents: 10582
diff changeset
66 dns_client_socket_path = t_abspath(DNS_CLIENT_SOCKET_PATH);
9121
a957a6be4af5 Initial implementation of LMTP server. Master process doesn't yet execute it though.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
67 }
a957a6be4af5 Initial implementation of LMTP server. Master process doesn't yet execute it though.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
68
a957a6be4af5 Initial implementation of LMTP server. Master process doesn't yet execute it though.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
69 static void main_deinit(void)
a957a6be4af5 Initial implementation of LMTP server. Master process doesn't yet execute it though.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
70 {
a957a6be4af5 Initial implementation of LMTP server. Master process doesn't yet execute it though.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
71 clients_destroy();
a957a6be4af5 Initial implementation of LMTP server. Master process doesn't yet execute it though.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
72 }
a957a6be4af5 Initial implementation of LMTP server. Master process doesn't yet execute it though.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
73
10120
b584904d3bc7 Moved process title init to lib-master. With Linux-hack enabled it now preserves command args.
Timo Sirainen <tss@iki.fi>
parents: 10119
diff changeset
74 int main(int argc, char *argv[])
9121
a957a6be4af5 Initial implementation of LMTP server. Master process doesn't yet execute it though.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
75 {
a957a6be4af5 Initial implementation of LMTP server. Master process doesn't yet execute it though.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
76 const struct setting_parser_info *set_roots[] = {
a957a6be4af5 Initial implementation of LMTP server. Master process doesn't yet execute it though.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
77 &lda_setting_parser_info,
10039
ddcc3391adf9 lmtp: Added lmtp_proxy setting (it's no longer hardcoded to yes).
Timo Sirainen <tss@iki.fi>
parents: 9832
diff changeset
78 &lmtp_setting_parser_info,
9121
a957a6be4af5 Initial implementation of LMTP server. Master process doesn't yet execute it though.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
79 NULL
a957a6be4af5 Initial implementation of LMTP server. Master process doesn't yet execute it though.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
80 };
a957a6be4af5 Initial implementation of LMTP server. Master process doesn't yet execute it though.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
81 enum master_service_flags service_flags = 0;
a957a6be4af5 Initial implementation of LMTP server. Master process doesn't yet execute it though.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
82 enum mail_storage_service_flags storage_service_flags =
a957a6be4af5 Initial implementation of LMTP server. Master process doesn't yet execute it though.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
83 MAIL_STORAGE_SERVICE_FLAG_DISALLOW_ROOT |
10134
545bdb7670d2 lib-storage: Changed APIs to fix reading settings for multiple users.
Timo Sirainen <tss@iki.fi>
parents: 10130
diff changeset
84 MAIL_STORAGE_SERVICE_FLAG_USERDB_LOOKUP |
10257
597f969a9870 lmtp: Improved logging.
Timo Sirainen <tss@iki.fi>
parents: 10134
diff changeset
85 MAIL_STORAGE_SERVICE_FLAG_TEMP_PRIV_DROP |
10498
569206178c09 mail storage service: Some flag enums were missing FLAG_ in the middle.
Timo Sirainen <tss@iki.fi>
parents: 10497
diff changeset
86 MAIL_STORAGE_SERVICE_FLAG_NO_LOG_INIT |
10497
3907cc4ecc4b Idle-disconnecting auth master connections is now optional. LMTP no longer does it.
Timo Sirainen <tss@iki.fi>
parents: 10364
diff changeset
87 MAIL_STORAGE_SERVICE_FLAG_NO_IDLE_TIMEOUT;
10364
4183f16e6f60 lmtp: If -D parameter is given, enable core dumps.
Timo Sirainen <tss@iki.fi>
parents: 10259
diff changeset
88 int c;
9121
a957a6be4af5 Initial implementation of LMTP server. Master process doesn't yet execute it though.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
89
9159
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents: 9121
diff changeset
90 if (IS_STANDALONE()) {
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents: 9121
diff changeset
91 service_flags |= MASTER_SERVICE_FLAG_STANDALONE |
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents: 9121
diff changeset
92 MASTER_SERVICE_FLAG_STD_CLIENT;
10259
e0db66c8b9a9 lmtp: Keep connection to config process open.
Timo Sirainen <tss@iki.fi>
parents: 10257
diff changeset
93 } else {
e0db66c8b9a9 lmtp: Keep connection to config process open.
Timo Sirainen <tss@iki.fi>
parents: 10257
diff changeset
94 service_flags |= MASTER_SERVICE_FLAG_KEEP_CONFIG_OPEN;
9159
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents: 9121
diff changeset
95 }
9121
a957a6be4af5 Initial implementation of LMTP server. Master process doesn't yet execute it though.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
96
10119
1e63221f5c83 Moved most of getopt() handling to lib-master.
Timo Sirainen <tss@iki.fi>
parents: 10039
diff changeset
97 master_service = master_service_init("lmtp", service_flags,
10364
4183f16e6f60 lmtp: If -D parameter is given, enable core dumps.
Timo Sirainen <tss@iki.fi>
parents: 10259
diff changeset
98 &argc, &argv, "D");
4183f16e6f60 lmtp: If -D parameter is given, enable core dumps.
Timo Sirainen <tss@iki.fi>
parents: 10259
diff changeset
99 while ((c = master_getopt(master_service)) > 0) {
4183f16e6f60 lmtp: If -D parameter is given, enable core dumps.
Timo Sirainen <tss@iki.fi>
parents: 10259
diff changeset
100 switch (c) {
4183f16e6f60 lmtp: If -D parameter is given, enable core dumps.
Timo Sirainen <tss@iki.fi>
parents: 10259
diff changeset
101 case 'D':
4183f16e6f60 lmtp: If -D parameter is given, enable core dumps.
Timo Sirainen <tss@iki.fi>
parents: 10259
diff changeset
102 storage_service_flags |=
4183f16e6f60 lmtp: If -D parameter is given, enable core dumps.
Timo Sirainen <tss@iki.fi>
parents: 10259
diff changeset
103 MAIL_STORAGE_SERVICE_FLAG_ENABLE_CORE_DUMPS;
4183f16e6f60 lmtp: If -D parameter is given, enable core dumps.
Timo Sirainen <tss@iki.fi>
parents: 10259
diff changeset
104 break;
4183f16e6f60 lmtp: If -D parameter is given, enable core dumps.
Timo Sirainen <tss@iki.fi>
parents: 10259
diff changeset
105 default:
4183f16e6f60 lmtp: If -D parameter is given, enable core dumps.
Timo Sirainen <tss@iki.fi>
parents: 10259
diff changeset
106 return FATAL_DEFAULT;
4183f16e6f60 lmtp: If -D parameter is given, enable core dumps.
Timo Sirainen <tss@iki.fi>
parents: 10259
diff changeset
107 }
4183f16e6f60 lmtp: If -D parameter is given, enable core dumps.
Timo Sirainen <tss@iki.fi>
parents: 10259
diff changeset
108 }
11282
70cfc89a3936 lmtp: Set user/group at startup as specified in service block.
Timo Sirainen <tss@iki.fi>
parents: 10825
diff changeset
109
13977
d5ba2d63ed6d lmtp: Make core dumping work also after the first mail delivery.
Timo Sirainen <tss@iki.fi>
parents: 12782
diff changeset
110 if (t_get_current_dir(&base_dir) < 0)
d5ba2d63ed6d lmtp: Make core dumping work also after the first mail delivery.
Timo Sirainen <tss@iki.fi>
parents: 12782
diff changeset
111 i_fatal("getcwd() failed: %m");
11282
70cfc89a3936 lmtp: Set user/group at startup as specified in service block.
Timo Sirainen <tss@iki.fi>
parents: 10825
diff changeset
112 drop_privileges();
10257
597f969a9870 lmtp: Improved logging.
Timo Sirainen <tss@iki.fi>
parents: 10134
diff changeset
113 master_service_init_log(master_service,
597f969a9870 lmtp: Improved logging.
Timo Sirainen <tss@iki.fi>
parents: 10134
diff changeset
114 t_strdup_printf("lmtp(%s): ", my_pid));
9121
a957a6be4af5 Initial implementation of LMTP server. Master process doesn't yet execute it though.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
115
10130
d1384c2b08e5 Merged single and multi mail_storage_service_*() functions.
Timo Sirainen <tss@iki.fi>
parents: 10127
diff changeset
116 storage_service = mail_storage_service_init(master_service, set_roots,
d1384c2b08e5 Merged single and multi mail_storage_service_*() functions.
Timo Sirainen <tss@iki.fi>
parents: 10127
diff changeset
117 storage_service_flags);
9121
a957a6be4af5 Initial implementation of LMTP server. Master process doesn't yet execute it though.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
118 restrict_access_allow_coredumps(TRUE);
a957a6be4af5 Initial implementation of LMTP server. Master process doesn't yet execute it though.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
119
a957a6be4af5 Initial implementation of LMTP server. Master process doesn't yet execute it though.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
120 main_init();
16508
754d244b8249 Call master_service_init_finish() only after all of the initialization is done.
Timo Sirainen <tss@iki.fi>
parents: 15715
diff changeset
121 master_service_init_finish(master_service);
9348
0c587f108916 lib-master has now a global master_service variable that all binaries use.
Timo Sirainen <tss@iki.fi>
parents: 9159
diff changeset
122 master_service_run(master_service, client_connected);
9121
a957a6be4af5 Initial implementation of LMTP server. Master process doesn't yet execute it though.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
123
a957a6be4af5 Initial implementation of LMTP server. Master process doesn't yet execute it though.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
124 main_deinit();
10130
d1384c2b08e5 Merged single and multi mail_storage_service_*() functions.
Timo Sirainen <tss@iki.fi>
parents: 10127
diff changeset
125 mail_storage_service_deinit(&storage_service);
9348
0c587f108916 lib-master has now a global master_service variable that all binaries use.
Timo Sirainen <tss@iki.fi>
parents: 9159
diff changeset
126 master_service_deinit(&master_service);
9121
a957a6be4af5 Initial implementation of LMTP server. Master process doesn't yet execute it though.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
127 return 0;
a957a6be4af5 Initial implementation of LMTP server. Master process doesn't yet execute it though.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
128 }