int main(int argc, char *argv[]) { const struct setting_parser_info *set_roots[] = { &aggregator_setting_parser_info, NULL }; const char *error; master_service = master_service_init("aggregator", 0, &argc, &argv, ""); if (master_getopt(master_service) > 0) return FATAL_DEFAULT; if (master_service_settings_read_simple(master_service, set_roots, &error) < 0) i_fatal("Error reading configuration: %s", error); master_service_init_log(master_service, "aggregator: "); main_preinit(); restrict_access_by_env(NULL, FALSE); restrict_access_allow_coredumps(TRUE); master_service_init_finish(master_service); master_service_run(master_service, client_connected); notify_connections_destroy_all(); replicator_connection_destroy(&replicator); master_service_deinit(&master_service); return 0; }
int main(int argc, char *argv[]) { const enum master_service_flags service_flags = MASTER_SERVICE_FLAG_UPDATE_PROCTITLE; const char *error; master_service = master_service_init("ipc", service_flags, &argc, &argv, ""); if (master_getopt(master_service) > 0) return FATAL_DEFAULT; if (master_service_settings_read_simple(master_service, NULL, &error) < 0) i_fatal("Error reading configuration: %s", error); master_service_init_log(master_service, "ipc: "); restrict_access_by_env(NULL, FALSE); restrict_access_allow_coredumps(TRUE); ipc_groups_init(); master_service_init_finish(master_service); master_service_run(master_service, client_connected); clients_destroy_all(); ipc_groups_deinit(); master_service_deinit(&master_service); return 0; }
int main(int argc, char *argv[]) { const struct setting_parser_info *set_roots[] = { &doveadm_setting_parser_info, NULL }; enum master_service_flags service_flags = MASTER_SERVICE_FLAG_KEEP_CONFIG_OPEN; const char *error; master_service = master_service_init("doveadm", service_flags, &argc, &argv, ""); if (master_getopt(master_service) > 0) return FATAL_DEFAULT; if (master_service_settings_read_simple(master_service, set_roots, &error) < 0) i_fatal("Error reading configuration: %s", error); master_service_init_log(master_service, "doveadm: "); main_preinit(); master_service_set_die_callback(master_service, doveadm_die); main_init(); master_service_init_finish(master_service); master_service_run(master_service, client_connected); main_deinit(); master_service_deinit(&master_service); return 0; }
int main(int argc, char *argv[]) { const char *path, *error; master_service = master_service_init("config", 0, &argc, &argv, NULL); if (master_getopt(master_service) > 0) return FATAL_DEFAULT; master_service_init_log(master_service, "config: "); restrict_access_by_env(NULL, FALSE); restrict_access_allow_coredumps(TRUE); master_service_init_finish(master_service); config_parse_load_modules(); path = master_service_get_config_path(master_service); if (config_parse_file(path, TRUE, "", &error) <= 0) i_fatal("%s", error); master_service_run(master_service, client_connected); config_connections_destroy_all(); config_filter_deinit(&config_filter); module_dir_unload(&modules); master_service_deinit(&master_service); return 0; }
int main(int argc, char *argv[]) { const char *error; master_service = master_service_init("indexer", 0, &argc, &argv, ""); if (master_getopt(master_service) > 0) return FATAL_DEFAULT; if (master_service_settings_read_simple(master_service, NULL, &error) < 0) i_fatal("Error reading configuration: %s", error); set = master_service_settings_get(master_service); master_service_init_log(master_service, "indexer: "); restrict_access_by_env(NULL, FALSE); restrict_access_allow_coredumps(TRUE); master_service_set_idle_die_callback(master_service, idle_die); queue = indexer_queue_init(indexer_client_status_callback); indexer_queue_set_listen_callback(queue, queue_listen_callback); worker_pool = worker_pool_init("indexer-worker", worker_status_callback); master_service_init_finish(master_service); master_service_run(master_service, client_connected); indexer_queue_cancel_all(queue); indexer_clients_destroy_all(); worker_pool_deinit(&worker_pool); indexer_queue_deinit(&queue); master_service_deinit(&master_service); return 0; }
int main(int argc, char *argv[]) { const struct setting_parser_info *set_roots[] = { &dict_setting_parser_info, NULL }; const char *error; master_service = master_service_init("dict", 0, &argc, &argv, NULL); if (master_getopt(master_service) > 0) return FATAL_DEFAULT; if (master_service_settings_read_simple(master_service, set_roots, &error) < 0) i_fatal("Error reading configuration: %s", error); master_service_init_log(master_service, "dict: "); main_preinit(); master_service_init_finish(master_service); master_service_set_die_callback(master_service, dict_die); main_init(); master_service_run(master_service, client_connected); main_deinit(); master_service_deinit(&master_service); return 0; }
int main(int argc, char *argv[]) { const char *path, *error; master_service = master_service_init("config", 0, &argc, &argv, ""); if (master_getopt(master_service) > 0) return FATAL_DEFAULT; master_service_init_log(master_service, "config: "); restrict_access_by_env(NULL, FALSE); restrict_access_allow_coredumps(TRUE); config_parse_load_modules(); path = master_service_get_config_path(master_service); if (config_parse_file(path, TRUE, NULL, &error) <= 0) i_fatal("%s", error); /* notify about our success only after successfully parsing the config file, so if the parsing fails, master won't immediately just recreate this process (and fail again and so on). */ master_service_init_finish(master_service); master_service_run(master_service, client_connected); config_connections_destroy_all(); config_filter_deinit(&config_filter); module_dir_unload(&modules); master_service_deinit(&master_service); return 0; }
int main(int argc, char *argv[]) { ARRAY_TYPE(const_string) aenvs; const char *binary; const char *const *envs; int c, i; master_service = master_service_init("script", 0, &argc, &argv, "+e:"); t_array_init(&aenvs, 16); while ((c = master_getopt(master_service)) > 0) { switch (c) { case 'e': envs = t_strsplit_spaces(optarg,", \t"); while (*envs != NULL) { array_append(&aenvs, envs, 1); envs++; } break; default: return FATAL_DEFAULT; } } argc -= optind; argv += optind; array_append_zero(&aenvs); accepted_envs = p_strarray_dup(default_pool, array_idx(&aenvs, 0)); master_service_init_log(master_service, "script: "); if (argv[0] == NULL) i_fatal("Missing script path"); restrict_access_by_env(RESTRICT_ACCESS_FLAG_ALLOW_ROOT, NULL); restrict_access_allow_coredumps(TRUE); master_service_init_finish(master_service); master_service_set_service_count(master_service, 1); if (argv[0][0] == '/') binary = argv[0]; else binary = t_strconcat(PKG_LIBEXECDIR"/", argv[0], NULL); i_array_init(&exec_args, argc + 16); array_append(&exec_args, &binary, 1); for (i = 1; i < argc; i++) { const char *arg = argv[i]; array_append(&exec_args, &arg, 1); } master_service_run(master_service, client_connected); array_free(&exec_args); i_free(accepted_envs); master_service_deinit(&master_service); return 0; }
int main(int argc, char *argv[]) { const struct setting_parser_info *set_roots[] = { &lda_setting_parser_info, &lmtp_setting_parser_info, NULL }; enum master_service_flags service_flags = MASTER_SERVICE_FLAG_USE_SSL_SETTINGS; enum mail_storage_service_flags storage_service_flags = MAIL_STORAGE_SERVICE_FLAG_DISALLOW_ROOT | MAIL_STORAGE_SERVICE_FLAG_USERDB_LOOKUP | MAIL_STORAGE_SERVICE_FLAG_TEMP_PRIV_DROP | MAIL_STORAGE_SERVICE_FLAG_NO_LOG_INIT | MAIL_STORAGE_SERVICE_FLAG_NO_IDLE_TIMEOUT | MAIL_STORAGE_SERVICE_FLAG_AUTOEXPUNGE; int c; if (IS_STANDALONE()) { service_flags |= MASTER_SERVICE_FLAG_STANDALONE | MASTER_SERVICE_FLAG_STD_CLIENT; } else { service_flags |= MASTER_SERVICE_FLAG_KEEP_CONFIG_OPEN ; } master_service = master_service_init("lmtp", service_flags, &argc, &argv, "D"); while ((c = master_getopt(master_service)) > 0) { switch (c) { case 'D': storage_service_flags |= MAIL_STORAGE_SERVICE_FLAG_ENABLE_CORE_DUMPS; break; default: return FATAL_DEFAULT; } } if (t_get_current_dir(&base_dir) < 0) i_fatal("getcwd() failed: %m"); drop_privileges(); master_service_init_log(master_service, t_strdup_printf("lmtp(%s): ", my_pid)); storage_service = mail_storage_service_init(master_service, set_roots, storage_service_flags); restrict_access_allow_coredumps(TRUE); main_init(); master_service_init_finish(master_service); master_service_run(master_service, client_connected); main_deinit(); mail_storage_service_deinit(&storage_service); master_service_deinit(&master_service); return 0; }
int main(int argc, char *argv[]) { enum master_service_flags flags = 0; int i, c; if (getenv(MASTER_IS_PARENT_ENV) == NULL) flags |= MASTER_SERVICE_FLAG_STANDALONE; master_service = master_service_init("script-login", flags, &argc, &argv, "+d"); while ((c = master_getopt(master_service)) > 0) { switch (c) { case 'd': drop_to_userdb_privileges = TRUE; break; default: return FATAL_DEFAULT; } } argc -= optind; argv += optind; master_service_init_log(master_service, "script-login: "******"Missing script path"); exec_args = i_new(const char *, argc + 2); for (i = 0; i < argc; i++) exec_args[i] = argv[i]; exec_args[i] = PKG_LIBEXECDIR"/script-login"; exec_args[i+1] = NULL; if (exec_args[0][0] != '/') { exec_args[0] = t_strconcat(PKG_LIBEXECDIR"/", exec_args[0], NULL); } master_service_run(master_service, client_connected); } master_service_deinit(&master_service); return 0; }
int main(int argc, char *argv[]) { const struct setting_parser_info *set_roots[] = { &stats_setting_parser_info, NULL }; const enum master_service_flags service_flags = MASTER_SERVICE_FLAG_NO_IDLE_DIE | MASTER_SERVICE_FLAG_UPDATE_PROCTITLE; const char *error; void **sets; master_service = master_service_init("stats", service_flags, &argc, &argv, ""); if (master_getopt(master_service) > 0) return FATAL_DEFAULT; if (master_service_settings_read_simple(master_service, set_roots, &error) < 0) i_fatal("Error reading configuration: %s", error); master_service_init_log(master_service, "stats: "); main_preinit(); sets = master_service_settings_get_others(master_service); stats_settings = sets[0]; mail_commands_init(); mail_sessions_init(); mail_users_init(); mail_domains_init(); mail_ips_init(); mail_global_init(); master_service_init_finish(master_service); master_service_run(master_service, client_connected); clients_destroy_all(); mail_commands_deinit(); mail_sessions_deinit(); mail_users_deinit(); mail_domains_deinit(); mail_ips_deinit(); mail_global_deinit(); if (mail_server_conn != NULL) mail_server_connection_destroy(&mail_server_conn); module_dir_unload(&modules); i_assert(global_used_memory == 0); master_service_deinit(&master_service); return 0; }
void sieve_tool_deinit(struct sieve_tool **_tool) { struct sieve_tool *tool = *_tool; *_tool = NULL; /* Deinitialize Sieve engine */ sieve_deinit(&tool->svinst); /* Free options */ if ( tool->username != NULL ) i_free(tool->username); if ( tool->homedir != NULL ) i_free(tool->homedir); if ( tool->sieve_extensions != NULL ) i_free(tool->sieve_extensions); array_free(&tool->sieve_plugins); /* Free raw mail */ if ( tool->mail_raw != NULL ) mail_raw_close(&tool->mail_raw); if ( tool->mail_raw_user != NULL ) mail_user_unref(&tool->mail_raw_user); /* Free mail service */ if ( tool->mail_user != NULL ) mail_user_unref(&tool->mail_user); if ( tool->mail_user_dovecot != NULL ) mail_user_unref(&tool->mail_user_dovecot); mail_storage_service_user_free(&tool->service_user); mail_storage_service_deinit(&tool->storage_service); /* Free sieve tool object */ i_free(tool->name); i_free(tool); /* Deinitialize service */ master_service_deinit(&master_service); }
int main(int argc, char *argv[]) { master_service = master_service_init("dns-client", 0, &argc, &argv, ""); if (master_getopt(master_service) > 0) return FATAL_DEFAULT; master_service_init_log(master_service, "dns-client: "); restrict_access_by_env(NULL, FALSE); restrict_access_allow_coredumps(TRUE); master_service_init_finish(master_service); master_service_run(master_service, client_connected); if (dns_client != NULL) dns_client_destroy(&dns_client); master_service_deinit(&master_service); return 0; }
int main(int argc, char *argv[]) { enum master_service_flags service_flags = MASTER_SERVICE_FLAG_KEEP_CONFIG_OPEN; enum mail_storage_service_flags storage_service_flags = MAIL_STORAGE_SERVICE_FLAG_DISALLOW_ROOT | MAIL_STORAGE_SERVICE_FLAG_USERDB_LOOKUP | MAIL_STORAGE_SERVICE_FLAG_TEMP_PRIV_DROP | MAIL_STORAGE_SERVICE_FLAG_NO_IDLE_TIMEOUT; int c; master_service = master_service_init("indexer-worker", service_flags, &argc, &argv, "D"); while ((c = master_getopt(master_service)) > 0) { switch (c) { case 'D': storage_service_flags |= MAIL_STORAGE_SERVICE_FLAG_ENABLE_CORE_DUMPS; break; default: return FATAL_DEFAULT; } } drop_privileges(); master_service_init_log(master_service, "indexer-worker: "); storage_service = mail_storage_service_init(master_service, NULL, storage_service_flags); restrict_access_allow_coredumps(TRUE); master_service_init_finish(master_service); master_service_run(master_service, client_connected); if (master_conn != NULL) master_connection_destroy(&master_conn); mail_storage_service_deinit(&storage_service); master_service_deinit(&master_service); return 0; }
int main(int argc, char *argv[]) { const char *binary; int i; master_service = master_service_init("script", 0, &argc, &argv, "+"); if (master_getopt(master_service) > 0) return FATAL_DEFAULT; argc -= optind; argv += optind; master_service_init_log(master_service, "script: "); if (argv[0] == NULL) i_fatal("Missing script path"); restrict_access_by_env(NULL, FALSE); restrict_access_allow_coredumps(TRUE); master_service_init_finish(master_service); master_service_set_service_count(master_service, 1); if (argv[0][0] == '/') binary = argv[0]; else binary = t_strconcat(PKG_LIBEXECDIR"/", argv[0], NULL); i_array_init(&exec_args, argc + 16); array_append(&exec_args, &binary, 1); for (i = 1; i < argc; i++) { const char *arg = argv[i]; array_append(&exec_args, &arg, 1); } master_service_run(master_service, client_connected); master_service_deinit(&master_service); return 0; }