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
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"
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
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
7 #include "config-connection.h"
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
8 #include "config-parser.h"
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
9
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
10 #include <stdlib.h>
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
11 #include <unistd.h>
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
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
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
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
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
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
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
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
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
30 }
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
31
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
32 int main(int argc, char *argv[])
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
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
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
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
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
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
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
59 }
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
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
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
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
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
81 return 0;
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
82 }