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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
2
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
3 #include "common.h"
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
4 #include "lib-signals.h"
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
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
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
8 #include "str.h"
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
9 #include "config-connection.h"
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
10 #include "config-parser.h"
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
11
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
12 #include <stdlib.h>
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
13 #include <unistd.h>
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
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
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
16
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
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
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
19
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
20 static void main_init(const char *service)
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
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
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
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
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
28 }
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
29
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
30 int main(int argc, char *argv[])
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
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
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
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
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
37
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
38 lib_init();
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
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
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
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
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
64 }
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
65 }
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
66
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
67 main_init(service);
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
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
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
78 io_loop_destroy(&ioloop);
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
79 lib_deinit();
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
80 return 0;
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
81 }