Mercurial > dovecot > core-2.2
annotate src/config/main.c @ 9087:81ff88345441 HEAD
Some cleanups to the config parsing code.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Mon, 13 Apr 2009 13:36:05 -0400 |
parents | fb8f4adc61c4 |
children | 6324a79d3ee1 |
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" | |
4 #include "lib-signals.h" | |
5 #include "ioloop.h" | |
9087
81ff88345441
Some cleanups to the config parsing code.
Timo Sirainen <tss@iki.fi>
parents:
9014
diff
changeset
|
6 #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
|
7 #include "env-util.h" |
9002 | 8 #include "str.h" |
9 #include "config-connection.h" | |
10 #include "config-parser.h" | |
11 | |
12 #include <stdlib.h> | |
13 #include <unistd.h> | |
14 | |
9087
81ff88345441
Some cleanups to the config parsing code.
Timo Sirainen <tss@iki.fi>
parents:
9014
diff
changeset
|
15 ARRAY_TYPE(const_string) config_strings; |
9002 | 16 |
17 static const char *config_path = SYSCONFDIR "/" PACKAGE ".conf"; | |
9087
81ff88345441
Some cleanups to the config parsing code.
Timo Sirainen <tss@iki.fi>
parents:
9014
diff
changeset
|
18 static pool_t config_pool; |
9002 | 19 |
20 static void main_init(const char *service) | |
21 { | |
9013
8b616cc6d848
Added dovecof --exec and made deliver use it instead of forking.
Timo Sirainen <tss@iki.fi>
parents:
9002
diff
changeset
|
22 if (getenv("LOG_TO_MASTER") != NULL) |
8b616cc6d848
Added dovecof --exec and made deliver use it instead of forking.
Timo Sirainen <tss@iki.fi>
parents:
9002
diff
changeset
|
23 i_set_failure_internal(); |
9002 | 24 |
9087
81ff88345441
Some cleanups to the config parsing code.
Timo Sirainen <tss@iki.fi>
parents:
9014
diff
changeset
|
25 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
|
26 p_array_init(&config_strings, config_pool, 256); |
81ff88345441
Some cleanups to the config parsing code.
Timo Sirainen <tss@iki.fi>
parents:
9014
diff
changeset
|
27 config_parse_file(config_pool, &config_strings, config_path, service); |
9002 | 28 } |
29 | |
30 int main(int argc, char *argv[]) | |
31 { | |
9087
81ff88345441
Some cleanups to the config parsing code.
Timo Sirainen <tss@iki.fi>
parents:
9014
diff
changeset
|
32 enum config_dump_flags flags = 0; |
9002 | 33 struct ioloop *ioloop; |
9013
8b616cc6d848
Added dovecof --exec and made deliver use it instead of forking.
Timo Sirainen <tss@iki.fi>
parents:
9002
diff
changeset
|
34 const char *service = ""; |
8b616cc6d848
Added dovecof --exec and made deliver use it instead of forking.
Timo Sirainen <tss@iki.fi>
parents:
9002
diff
changeset
|
35 char **exec_args = NULL; |
8b616cc6d848
Added dovecof --exec and made deliver use it instead of forking.
Timo Sirainen <tss@iki.fi>
parents:
9002
diff
changeset
|
36 int i; |
9002 | 37 |
38 lib_init(); | |
39 | |
9013
8b616cc6d848
Added dovecof --exec and made deliver use it instead of forking.
Timo Sirainen <tss@iki.fi>
parents:
9002
diff
changeset
|
40 for (i = 1; i < argc; i++) { |
8b616cc6d848
Added dovecof --exec and made deliver use it instead of forking.
Timo Sirainen <tss@iki.fi>
parents:
9002
diff
changeset
|
41 if (strcmp(argv[i], "-a") == 0) { |
9087
81ff88345441
Some cleanups to the config parsing code.
Timo Sirainen <tss@iki.fi>
parents:
9014
diff
changeset
|
42 flags |= CONFIG_DUMP_FLAG_HUMAN | |
81ff88345441
Some cleanups to the config parsing code.
Timo Sirainen <tss@iki.fi>
parents:
9014
diff
changeset
|
43 CONFIG_DUMP_FLAG_DEFAULTS; |
9013
8b616cc6d848
Added dovecof --exec and made deliver use it instead of forking.
Timo Sirainen <tss@iki.fi>
parents:
9002
diff
changeset
|
44 } else if (strcmp(argv[i], "-c") == 0) { |
8b616cc6d848
Added dovecof --exec and made deliver use it instead of forking.
Timo Sirainen <tss@iki.fi>
parents:
9002
diff
changeset
|
45 /* config file */ |
8b616cc6d848
Added dovecof --exec and made deliver use it instead of forking.
Timo Sirainen <tss@iki.fi>
parents:
9002
diff
changeset
|
46 i++; |
8b616cc6d848
Added dovecof --exec and made deliver use it instead of forking.
Timo Sirainen <tss@iki.fi>
parents:
9002
diff
changeset
|
47 if (i == argc) i_fatal("Missing config file argument"); |
8b616cc6d848
Added dovecof --exec and made deliver use it instead of forking.
Timo Sirainen <tss@iki.fi>
parents:
9002
diff
changeset
|
48 config_path = argv[i]; |
8b616cc6d848
Added dovecof --exec and made deliver use it instead of forking.
Timo Sirainen <tss@iki.fi>
parents:
9002
diff
changeset
|
49 } else if (strcmp(argv[i], "-n") == 0) { |
9087
81ff88345441
Some cleanups to the config parsing code.
Timo Sirainen <tss@iki.fi>
parents:
9014
diff
changeset
|
50 flags |= CONFIG_DUMP_FLAG_HUMAN; |
9013
8b616cc6d848
Added dovecof --exec and made deliver use it instead of forking.
Timo Sirainen <tss@iki.fi>
parents:
9002
diff
changeset
|
51 } else if (strcmp(argv[i], "-s") == 0) { |
8b616cc6d848
Added dovecof --exec and made deliver use it instead of forking.
Timo Sirainen <tss@iki.fi>
parents:
9002
diff
changeset
|
52 /* service */ |
8b616cc6d848
Added dovecof --exec and made deliver use it instead of forking.
Timo Sirainen <tss@iki.fi>
parents:
9002
diff
changeset
|
53 i++; |
8b616cc6d848
Added dovecof --exec and made deliver use it instead of forking.
Timo Sirainen <tss@iki.fi>
parents:
9002
diff
changeset
|
54 if (i == argc) i_fatal("Missing service argument"); |
8b616cc6d848
Added dovecof --exec and made deliver use it instead of forking.
Timo Sirainen <tss@iki.fi>
parents:
9002
diff
changeset
|
55 service = argv[i]; |
8b616cc6d848
Added dovecof --exec and made deliver use it instead of forking.
Timo Sirainen <tss@iki.fi>
parents:
9002
diff
changeset
|
56 } else if (strcmp(argv[i], "--exec") == 0) { |
8b616cc6d848
Added dovecof --exec and made deliver use it instead of forking.
Timo Sirainen <tss@iki.fi>
parents:
9002
diff
changeset
|
57 /* <command> [<args>] */ |
8b616cc6d848
Added dovecof --exec and made deliver use it instead of forking.
Timo Sirainen <tss@iki.fi>
parents:
9002
diff
changeset
|
58 i++; |
8b616cc6d848
Added dovecof --exec and made deliver use it instead of forking.
Timo Sirainen <tss@iki.fi>
parents:
9002
diff
changeset
|
59 if (i == argc) i_fatal("Missing exec binary argument"); |
8b616cc6d848
Added dovecof --exec and made deliver use it instead of forking.
Timo Sirainen <tss@iki.fi>
parents:
9002
diff
changeset
|
60 exec_args = &argv[i]; |
9002 | 61 break; |
9013
8b616cc6d848
Added dovecof --exec and made deliver use it instead of forking.
Timo Sirainen <tss@iki.fi>
parents:
9002
diff
changeset
|
62 } else { |
8b616cc6d848
Added dovecof --exec and made deliver use it instead of forking.
Timo Sirainen <tss@iki.fi>
parents:
9002
diff
changeset
|
63 i_fatal("Unknown parameter: %s", argv[i]); |
9002 | 64 } |
65 } | |
66 | |
67 main_init(service); | |
68 ioloop = io_loop_create(); | |
9013
8b616cc6d848
Added dovecof --exec and made deliver use it instead of forking.
Timo Sirainen <tss@iki.fi>
parents:
9002
diff
changeset
|
69 if (exec_args == NULL) |
9087
81ff88345441
Some cleanups to the config parsing code.
Timo Sirainen <tss@iki.fi>
parents:
9014
diff
changeset
|
70 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
|
71 else { |
8b616cc6d848
Added dovecof --exec and made deliver use it instead of forking.
Timo Sirainen <tss@iki.fi>
parents:
9002
diff
changeset
|
72 config_connection_putenv(); |
8b616cc6d848
Added dovecof --exec and made deliver use it instead of forking.
Timo Sirainen <tss@iki.fi>
parents:
9002
diff
changeset
|
73 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
|
74 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
|
75 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
|
76 } |
9087
81ff88345441
Some cleanups to the config parsing code.
Timo Sirainen <tss@iki.fi>
parents:
9014
diff
changeset
|
77 pool_unref(&config_pool); |
9002 | 78 io_loop_destroy(&ioloop); |
79 lib_deinit(); | |
80 return 0; | |
81 } |