#include "connect-limit.h"
#include "anvil-connection.h"
-#include <stdlib.h>
-#include <unistd.h>
-
struct connect_limit *connect_limit;
static void client_connected(const struct master_service_connection *conn)
int main(int argc, char *argv[])
{
- int c;
-
- master_service = master_service_init("anvil", 0, argc, argv);
- while ((c = getopt(argc, argv, master_service_getopt_string())) > 0) {
- if (!master_service_parse_option(master_service, c, optarg))
- exit(FATAL_DEFAULT);
- }
+ master_service = master_service_init("anvil", 0, argc, argv, NULL);
+ if (master_getopt(master_service) > 0)
+ return FATAL_DEFAULT;
master_service_set_die_with_master(master_service, TRUE);
master_service_init_log(master_service, "anvil: ");
#include "auth-master-connection.h"
#include "auth-client-connection.h"
-#include <stdlib.h>
-#include <unistd.h>
-#include <sys/un.h>
-
enum auth_socket_type {
AUTH_SOCKET_UNKNOWN = 0,
AUTH_SOCKET_CLIENT,
int main(int argc, char *argv[])
{
- const char *getopt_str;
int c;
- master_service = master_service_init("auth", 0, argc, argv);
+ master_service = master_service_init("auth", 0, argc, argv, "w");
master_service_init_log(master_service, "auth: ");
- getopt_str = t_strconcat("w", master_service_getopt_string(), NULL);
- while ((c = getopt(argc, argv, getopt_str)) > 0) {
+ while ((c = master_getopt(master_service)) > 0) {
switch (c) {
case 'w':
worker = TRUE;
break;
default:
- if (!master_service_parse_option(master_service,
- c, optarg))
- exit(FATAL_DEFAULT);
- break;
+ return FATAL_DEFAULT;
}
}
#include "config-request.h"
#include <stdio.h>
-#include <stdlib.h>
#include <unistd.h>
struct config_request_get_string_ctx {
int main(int argc, char *argv[])
{
enum config_dump_scope scope = CONFIG_DUMP_SCOPE_ALL;
- const char *getopt_str, *config_path, *module = "";
+ const char *config_path, *module = "";
struct config_filter filter;
const char *error;
char **exec_args = NULL;
memset(&filter, 0, sizeof(filter));
master_service = master_service_init("config",
MASTER_SERVICE_FLAG_STANDALONE,
- argc, argv);
+ argc, argv, "af:m:nNe");
i_set_failure_prefix("doveconf: ");
- getopt_str = t_strconcat("af:m:nNe",
- master_service_getopt_string(), NULL);
- while ((c = getopt(argc, argv, getopt_str)) > 0) {
+ while ((c = master_getopt(master_service)) > 0) {
if (c == 'e')
break;
switch (c) {
scope = CONFIG_DUMP_SCOPE_SET;
break;
default:
- if (!master_service_parse_option(master_service,
- c, optarg))
- exit(FATAL_DEFAULT);
+ return FATAL_DEFAULT;
}
}
config_path = master_service_get_config_path(master_service);
#include "config-parser.h"
#include "config-request.h"
-#include <stdlib.h>
-#include <unistd.h>
-
static void client_connected(const struct master_service_connection *conn)
{
config_connection_create(conn->fd);
int main(int argc, char *argv[])
{
const char *path, *error;
- int c;
- master_service = master_service_init("config", 0, argc, argv);
- while ((c = getopt(argc, argv, master_service_getopt_string())) > 0) {
- if (!master_service_parse_option(master_service, c, optarg))
- exit(FATAL_DEFAULT);
- }
+ 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: ");
master_service_init_finish(master_service);
#include "dict-connection.h"
#include "dict-settings.h"
-#include <stdlib.h>
-#include <unistd.h>
-
static struct module *modules;
static void client_connected(const struct master_service_connection *conn)
NULL
};
const char *error;
- int c;
- master_service = master_service_init("dict", 0, argc, argv);
- while ((c = getopt(argc, argv, master_service_getopt_string())) > 0) {
- if (!master_service_parse_option(master_service, c, optarg))
- exit(FATAL_DEFAULT);
- }
+ 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)
int main(int argc, char *argv[])
{
- const char *cmd_name, *getopt_str;
- int c;
+ const char *cmd_name;
master_service = master_service_init("doveadm",
MASTER_SERVICE_FLAG_STANDALONE,
- argc, argv);
+ argc, argv, "+");
i_array_init(&doveadm_cmds, 32);
doveadm_mail_init();
doveadm_register_cmd(&doveadm_cmd_help);
/* "+" is GNU extension to stop at the first non-option.
others just accept -+ option. */
- getopt_str = t_strconcat("+", master_service_getopt_string(), NULL);
- while ((c = getopt(argc, argv, getopt_str)) > 0) {
- if (!master_service_parse_option(master_service, c, optarg))
- usage();
- }
+ if (master_getopt(master_service) > 0)
+ usage();
if (optind == argc)
usage();
struct mail_storage_service_input input;
struct mail_user *mail_user;
struct dsync_worker *worker1, *worker2;
- const char *getopt_str, *username, *mailbox = NULL, *cmd = NULL;
+ const char *username, *mailbox = NULL, *cmd = NULL;
bool dest = TRUE;
int c, ret, fd_in = STDIN_FILENO, fd_out = STDOUT_FILENO;
master_service = master_service_init("dsync",
MASTER_SERVICE_FLAG_STANDALONE |
MASTER_SERVICE_FLAG_STD_CLIENT,
- argc, argv);
+ argc, argv, "b:e:fu:v");
username = getenv("USER");
- getopt_str = t_strconcat("b:e:fu:v",
- master_service_getopt_string(), NULL);
- while ((c = getopt(argc, argv, getopt_str)) > 0) {
+ while ((c = master_getopt(master_service)) > 0) {
if (c == '-')
break;
switch (c) {
brain_flags |= DSYNC_BRAIN_FLAG_VERBOSE;
break;
default:
- if (!master_service_parse_option(master_service,
- c, optarg))
- usage();
+ usage();
}
}
if (optind != argc)
int main(int argc, char *argv[], char *envp[])
{
enum master_service_flags service_flags = 0;
- int c;
if (IS_STANDALONE() && getuid() == 0 &&
net_getpeername(1, NULL, NULL) == 0) {
MAIL_STORAGE_SERVICE_FLAG_DISALLOW_ROOT;
}
- master_service = master_service_init("imap", service_flags, argc, argv);
- while ((c = getopt(argc, argv, master_service_getopt_string())) > 0) {
- if (!master_service_parse_option(master_service, c, optarg))
- exit(FATAL_DEFAULT);
- }
+ master_service = master_service_init("imap", service_flags,
+ argc, argv, NULL);
+ if (master_getopt(master_service) > 0)
+ exit(FATAL_DEFAULT);
process_title_init(argv, envp);
master_service_init_finish(master_service);
};
struct mail_deliver_context ctx;
enum mail_storage_service_flags service_flags = 0;
- const char *user, *errstr, *path, *getopt_str;
+ const char *user, *errstr, *path;
struct mail_storage_service_input service_input;
struct mail_user *raw_mail_user;
struct mail_namespace *raw_ns;
master_service = master_service_init("lda",
MASTER_SERVICE_FLAG_STANDALONE |
MASTER_SERVICE_FLAG_DONT_LOG_TO_STDERR,
- argc, argv);
+ argc, argv, "a:d:p:ekm:nsf:");
memset(&ctx, 0, sizeof(ctx));
ctx.pool = pool_alloconly_create("mail deliver context", 256);
path = NULL;
user = getenv("USER");
- getopt_str = t_strconcat("a:d:p:ekm:nsf:",
- master_service_getopt_string(), NULL);
- while ((c = getopt(argc, argv, getopt_str)) > 0) {
+ while ((c = master_getopt(master_service)) > 0) {
switch (c) {
case 'a':
/* destination address */
p_strdup(ctx.pool, address_sanitize(optarg));
break;
default:
- if (!master_service_parse_option(master_service,
- c, optarg)) {
- print_help();
- exit(EX_USAGE);
- }
- break;
+ print_help();
+ return EX_USAGE;
}
}
if (optind != argc) {
struct ioloop *ioloop;
char *name;
- enum master_service_flags flags;
+ char *getopt_str;
+ enum master_service_flags flags;
int argc;
char **argv;
struct master_service *
master_service_init(const char *name, enum master_service_flags flags,
- int argc, char *argv[])
+ int argc, char *argv[], const char *getopt_str)
{
struct master_service *service;
const char *str;
service->argc = argc;
service->argv = argv;
service->name = i_strdup(name);
+ service->getopt_str =
+ i_strconcat(master_service_getopt_string(), getopt_str, NULL);
service->flags = flags;
service->ioloop = io_loop_create();
service->service_count_left = (unsigned int)-1;
return service;
}
+int master_getopt(struct master_service *service)
+{
+ int c;
+
+ while ((c = getopt(service->argc, service->argv,
+ service->getopt_str)) > 0) {
+ if (!master_service_parse_option(service, c, optarg))
+ break;
+ }
+ return c;
+}
+
void master_service_init_log(struct master_service *service,
const char *prefix)
{
io_loop_destroy(&service->ioloop);
i_free(service->listeners);
+ i_free(service->getopt_str);
i_free(service->name);
i_free(service);
/* Start service initialization. */
struct master_service *
master_service_init(const char *name, enum master_service_flags flags,
- int argc, char *argv[]);
+ int argc, char *argv[], const char *getopt_str);
+/* Call getopt() and handle internal parameters. Return values are the same as
+ getopt()'s. */
+int master_getopt(struct master_service *service);
/* Parser command line option. Returns TRUE if processed. */
bool master_service_parse_option(struct master_service *service,
int opt, const char *arg);
enum mail_storage_service_flags storage_service_flags =
MAIL_STORAGE_SERVICE_FLAG_DISALLOW_ROOT |
MAIL_STORAGE_SERVICE_FLAG_USERDB_LOOKUP;
- int c;
if (IS_STANDALONE()) {
service_flags |= MASTER_SERVICE_FLAG_STANDALONE |
MASTER_SERVICE_FLAG_STD_CLIENT;
}
- master_service = master_service_init("lmtp", service_flags, argc, argv);
- while ((c = getopt(argc, argv, master_service_getopt_string())) > 0) {
- if (!master_service_parse_option(master_service, c, optarg))
- exit(FATAL_DEFAULT);
- }
+ master_service = master_service_init("lmtp", service_flags,
+ argc, argv, NULL);
+ if (master_getopt(master_service) > 0)
+ return FATAL_DEFAULT;
multi_service = mail_storage_service_multi_init(master_service,
set_roots,
#include "master-service-settings.h"
#include "log-connection.h"
-#include <stdlib.h>
#include <unistd.h>
pid_t master_pid;
int main(int argc, char *argv[])
{
const char *error;
- int c;
- master_service = master_service_init("log", 0, argc, argv);
+ master_service = master_service_init("log", 0, argc, argv, NULL);
/* use log prefix and log to stderr until we've configured the real
logging */
i_set_failure_file("/dev/stderr", "log: ");
- while ((c = getopt(argc, argv, master_service_getopt_string())) > 0) {
- if (!master_service_parse_option(master_service, c, optarg))
- exit(FATAL_DEFAULT);
- }
+ if (master_getopt(master_service) > 0)
+ return FATAL_DEFAULT;
if (master_service_settings_read_simple(master_service,
NULL, &error) < 0)
enum master_service_flags service_flags =
MASTER_SERVICE_FLAG_KEEP_CONFIG_OPEN |
MASTER_SERVICE_FLAG_TRACK_LOGIN_STATE;
- const char *getopt_str;
pool_t set_pool;
bool allow_core_dumps = FALSE;
int c;
master_service = master_service_init(login_process_name, service_flags,
- argc, argv);
+ argc, argv, "DS");
master_service_init_log(master_service, t_strconcat(
login_process_name, ": ", NULL));
- getopt_str = t_strconcat("DS", master_service_getopt_string(), NULL);
- while ((c = getopt(argc, argv, getopt_str)) > 0) {
+ while ((c = master_getopt(master_service)) > 0) {
switch (c) {
case 'D':
allow_core_dumps = TRUE;
ssl_connections = TRUE;
break;
default:
- if (!master_service_parse_option(master_service,
- c, optarg))
- exit(FATAL_DEFAULT);
- break;
+ return FATAL_DEFAULT;
}
}
{
struct master_settings *set;
unsigned int child_process_env_idx = 0;
- const char *getopt_str, *error, *env_tz, *doveconf_arg = NULL;
+ const char *error, *env_tz, *doveconf_arg = NULL;
failure_callback_t *orig_info_callback, *orig_debug_callback;
void **sets;
bool foreground = FALSE, ask_key_pass = FALSE, log_error = FALSE;
master_service = master_service_init(MASTER_SERVICE_NAME,
MASTER_SERVICE_FLAG_STANDALONE |
MASTER_SERVICE_FLAG_DONT_LOG_TO_STDERR,
- argc, argv);
+ argc, argv, "Fanp-");
i_set_failure_prefix("");
io_loop_set_time_moved_callback(current_ioloop, master_time_moved);
master_uid = geteuid();
master_gid = getegid();
- getopt_str = t_strconcat("Fanp-", master_service_getopt_string(), NULL);
- while ((c = getopt(argc, argv, getopt_str)) > 0) {
+ while ((c = master_getopt(master_service)) > 0) {
if (c == '-')
break;
switch (c) {
struct mail_namespace *dest_ns;
struct mail_namespace_settings ns_set;
const char *error;
- int i, c, ret = 0;
+ int i, ret = 0;
master_service = master_service_init("convert-tool",
MASTER_SERVICE_FLAG_STANDALONE,
- argc, argv);
+ argc, argv, NULL);
- while ((c = getopt(argc, argv, master_service_getopt_string())) > 0) {
- if (!master_service_parse_option(master_service, c, optarg))
- i_fatal(USAGE_STRING);
- }
+ if (master_getopt(master_service) > 0)
+ i_fatal(USAGE_STRING);
if (argc - optind < 4)
i_fatal(USAGE_STRING);
int main(int argc, char *argv[])
{
- const char *getopt_str;
bool test = FALSE;
int c;
master_service = master_service_init("expire-tool",
MASTER_SERVICE_FLAG_STANDALONE,
- argc, argv);
+ argc, argv, "t");
- getopt_str = t_strconcat("t", master_service_getopt_string(), NULL);
- while ((c = getopt(argc, argv, getopt_str)) > 0) {
+ while ((c = master_getopt(master_service)) > 0) {
switch (c) {
case 't':
test = TRUE;
break;
default:
- if (!master_service_parse_option(master_service,
- c, optarg))
- i_fatal("Unknown parameter: -%c", c);
- break;
+ return FATAL_DEFAULT;
}
}
if (optind != argc)
int main(int argc, char *argv[], char *envp[])
{
enum master_service_flags service_flags = 0;
- int c;
if (IS_STANDALONE() && getuid() == 0 &&
net_getpeername(1, NULL, NULL) == 0) {
MAIL_STORAGE_SERVICE_FLAG_DISALLOW_ROOT;
}
- master_service = master_service_init("pop3", service_flags, argc, argv);
- while ((c = getopt(argc, argv, master_service_getopt_string())) > 0) {
- if (!master_service_parse_option(master_service, c, optarg))
- exit(FATAL_DEFAULT);
- }
+ master_service = master_service_init("pop3", service_flags,
+ argc, argv, NULL);
+ if (master_getopt(master_service) > 0)
+ return FATAL_DEFAULT;
process_title_init(argv, envp);
master_service_init_finish(master_service);
#include "ssl-params-settings.h"
#include "ssl-params.h"
-#include <stdlib.h>
-#include <unistd.h>
#include <sys/wait.h>
#define SSL_BUILD_PARAM_FNAME "ssl-parameters.dat"
int main(int argc, char *argv[])
{
const struct ssl_params_settings *set;
- int c;
- master_service = master_service_init("ssl-params", 0, argc, argv);
+ master_service = master_service_init("ssl-params", 0, argc, argv, NULL);
master_service_init_log(master_service, "ssl-params: ");
- while ((c = getopt(argc, argv, master_service_getopt_string())) > 0) {
- if (!master_service_parse_option(master_service, c, optarg))
- exit(FATAL_DEFAULT);
- }
+ if (master_getopt(master_service) > 0)
+ return FATAL_DEFAULT;
set = ssl_params_settings_read(master_service);
master_service_init_finish(master_service);