Mercurial > dovecot > core-2.2
annotate src/config/main.c @ 9159:6324a79d3ee1 HEAD
Initial commit for v2.0 master rewrite. Several features are still missing.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Thu, 23 Apr 2009 19:53:44 -0400 |
parents | 81ff88345441 |
children | f8460b27db00 |
rev | line source |
---|---|
9013
8b616cc6d848
Added dovecof --exec and made deliver use it instead of forking.
Timo Sirainen <tss@iki.fi>
parents:
9002
diff
changeset
|
1 /* Copyright (C) 2005-2009 Dovecot authors, see the included COPYING file */ |
9002 | 2 |
3 #include "common.h" | |
9087
81ff88345441
Some cleanups to the config parsing code.
Timo Sirainen <tss@iki.fi>
parents:
9014
diff
changeset
|
4 #include "array.h" |
9013
8b616cc6d848
Added dovecof --exec and made deliver use it instead of forking.
Timo Sirainen <tss@iki.fi>
parents:
9002
diff
changeset
|
5 #include "env-util.h" |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9087
diff
changeset
|
6 #include "master-service.h" |
9002 | 7 #include "config-connection.h" |
8 #include "config-parser.h" | |
9 | |
10 #include <stdlib.h> | |
11 #include <unistd.h> | |
12 | |
9087
81ff88345441
Some cleanups to the config parsing code.
Timo Sirainen <tss@iki.fi>
parents:
9014
diff
changeset
|
13 ARRAY_TYPE(const_string) config_strings; |
9002 | 14 |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9087
diff
changeset
|
15 static struct master_service *service; |
9087
81ff88345441
Some cleanups to the config parsing code.
Timo Sirainen <tss@iki.fi>
parents:
9014
diff
changeset
|
16 static pool_t config_pool; |
9002 | 17 |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9087
diff
changeset
|
18 static void main_init(const char *service_name) |
9002 | 19 { |
9087
81ff88345441
Some cleanups to the config parsing code.
Timo Sirainen <tss@iki.fi>
parents:
9014
diff
changeset
|
20 config_pool = pool_alloconly_create("config parser", 10240); |
81ff88345441
Some cleanups to the config parsing code.
Timo Sirainen <tss@iki.fi>
parents:
9014
diff
changeset
|
21 p_array_init(&config_strings, config_pool, 256); |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9087
diff
changeset
|
22 config_parse_file(config_pool, &config_strings, |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9087
diff
changeset
|
23 master_service_get_config_path(service), |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9087
diff
changeset
|
24 service_name); |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9087
diff
changeset
|
25 } |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9087
diff
changeset
|
26 |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9087
diff
changeset
|
27 static void client_connected(const struct master_service_connection *conn) |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9087
diff
changeset
|
28 { |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9087
diff
changeset
|
29 config_connection_create(conn->fd); |
9002 | 30 } |
31 | |
32 int main(int argc, char *argv[]) | |
33 { | |
9087
81ff88345441
Some cleanups to the config parsing code.
Timo Sirainen <tss@iki.fi>
parents:
9014
diff
changeset
|
34 enum config_dump_flags flags = 0; |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9087
diff
changeset
|
35 const char *getopt_str, *service_name = ""; |
9013
8b616cc6d848
Added dovecof --exec and made deliver use it instead of forking.
Timo Sirainen <tss@iki.fi>
parents:
9002
diff
changeset
|
36 char **exec_args = NULL; |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9087
diff
changeset
|
37 int c; |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9087
diff
changeset
|
38 |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9087
diff
changeset
|
39 service = master_service_init("config", 0, argc, argv); |
9002 | 40 |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9087
diff
changeset
|
41 getopt_str = t_strconcat("anp:e", master_service_getopt_string(), NULL); |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9087
diff
changeset
|
42 while ((c = getopt(argc, argv, getopt_str)) > 0) { |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9087
diff
changeset
|
43 if (c == 'e') |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9087
diff
changeset
|
44 break; |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9087
diff
changeset
|
45 switch (c) { |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9087
diff
changeset
|
46 case 'a': |
9087
81ff88345441
Some cleanups to the config parsing code.
Timo Sirainen <tss@iki.fi>
parents:
9014
diff
changeset
|
47 flags |= CONFIG_DUMP_FLAG_HUMAN | |
81ff88345441
Some cleanups to the config parsing code.
Timo Sirainen <tss@iki.fi>
parents:
9014
diff
changeset
|
48 CONFIG_DUMP_FLAG_DEFAULTS; |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9087
diff
changeset
|
49 break; |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9087
diff
changeset
|
50 case 'n': |
9087
81ff88345441
Some cleanups to the config parsing code.
Timo Sirainen <tss@iki.fi>
parents:
9014
diff
changeset
|
51 flags |= CONFIG_DUMP_FLAG_HUMAN; |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9087
diff
changeset
|
52 break; |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9087
diff
changeset
|
53 case 'p': |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9087
diff
changeset
|
54 service_name = optarg; |
9002 | 55 break; |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9087
diff
changeset
|
56 default: |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9087
diff
changeset
|
57 if (!master_service_parse_option(service, c, optarg)) |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9087
diff
changeset
|
58 exit(FATAL_DEFAULT); |
9002 | 59 } |
60 } | |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9087
diff
changeset
|
61 if (argv[optind] != NULL) |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9087
diff
changeset
|
62 exec_args = &argv[optind]; |
9002 | 63 |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9087
diff
changeset
|
64 master_service_init_log(service, "doveconf: ", 0); |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9087
diff
changeset
|
65 master_service_init_finish(service); |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9087
diff
changeset
|
66 main_init(service_name); |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9087
diff
changeset
|
67 |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9087
diff
changeset
|
68 if (master_service_get_socket_count(service) > 0) |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9087
diff
changeset
|
69 master_service_run(service, client_connected); |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9087
diff
changeset
|
70 else if (exec_args == NULL) |
9087
81ff88345441
Some cleanups to the config parsing code.
Timo Sirainen <tss@iki.fi>
parents:
9014
diff
changeset
|
71 config_connection_dump_request(STDOUT_FILENO, "master", flags); |
9013
8b616cc6d848
Added dovecof --exec and made deliver use it instead of forking.
Timo Sirainen <tss@iki.fi>
parents:
9002
diff
changeset
|
72 else { |
8b616cc6d848
Added dovecof --exec and made deliver use it instead of forking.
Timo Sirainen <tss@iki.fi>
parents:
9002
diff
changeset
|
73 config_connection_putenv(); |
8b616cc6d848
Added dovecof --exec and made deliver use it instead of forking.
Timo Sirainen <tss@iki.fi>
parents:
9002
diff
changeset
|
74 env_put("DOVECONF_ENV=1"); |
8b616cc6d848
Added dovecof --exec and made deliver use it instead of forking.
Timo Sirainen <tss@iki.fi>
parents:
9002
diff
changeset
|
75 execvp(exec_args[0], exec_args); |
8b616cc6d848
Added dovecof --exec and made deliver use it instead of forking.
Timo Sirainen <tss@iki.fi>
parents:
9002
diff
changeset
|
76 i_fatal("execvp(%s) failed: %m", exec_args[0]); |
8b616cc6d848
Added dovecof --exec and made deliver use it instead of forking.
Timo Sirainen <tss@iki.fi>
parents:
9002
diff
changeset
|
77 } |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9087
diff
changeset
|
78 config_connections_destroy_all(); |
9087
81ff88345441
Some cleanups to the config parsing code.
Timo Sirainen <tss@iki.fi>
parents:
9014
diff
changeset
|
79 pool_unref(&config_pool); |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9087
diff
changeset
|
80 master_service_deinit(&service); |
9002 | 81 return 0; |
82 } |