]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
Moved most of getopt() handling to lib-master.
authorTimo Sirainen <tss@iki.fi>
Wed, 21 Oct 2009 00:07:45 +0000 (20:07 -0400)
committerTimo Sirainen <tss@iki.fi>
Wed, 21 Oct 2009 00:07:45 +0000 (20:07 -0400)
--HG--
branch : HEAD

20 files changed:
src/anvil/main.c
src/auth/main.c
src/config/doveconf.c
src/config/main.c
src/dict/main.c
src/doveadm/doveadm.c
src/dsync/dsync.c
src/imap/main.c
src/lda/main.c
src/lib-master/master-service-private.h
src/lib-master/master-service.c
src/lib-master/master-service.h
src/lmtp/main.c
src/log/main.c
src/login-common/main.c
src/master/main.c
src/plugins/convert/convert-tool.c
src/plugins/expire/expire-tool.c
src/pop3/main.c
src/ssl-params/main.c

index 57e2de41c54ed1b7d025e52a272653d6e93adfce..726158d61a47778bb44d77a137d922d64a9fa077 100644 (file)
@@ -8,9 +8,6 @@
 #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)
@@ -22,13 +19,9 @@ 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: ");
index 27b89de2c1c11c822a522afd7134607e3f124c90..198b62c25deaa4485f9ebafc7b44fb030538847d 100644 (file)
 #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,
@@ -161,23 +157,18 @@ static void client_connected(const struct master_service_connection *conn)
 
 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;
                }
        }
 
index fff0005caef20bc7fcc6c6e0d480e0306fb5e12f..df1c83dbb2c206b30d20d9eb148d210b827c0775 100644 (file)
@@ -13,7 +13,6 @@
 #include "config-request.h"
 
 #include <stdio.h>
-#include <stdlib.h>
 #include <unistd.h>
 
 struct config_request_get_string_ctx {
@@ -225,7 +224,7 @@ static void filter_parse_arg(struct config_filter *filter, const char *arg)
 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;
@@ -234,11 +233,9 @@ int main(int argc, char *argv[])
        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) {
@@ -257,9 +254,7 @@ int main(int argc, char *argv[])
                        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);
index 25cda4a1ef5266ce987aaf6bb749999623bee724..ddb6a0995851abfa49675640b5a86939e991c61b 100644 (file)
@@ -8,9 +8,6 @@
 #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);
@@ -19,13 +16,10 @@ static void client_connected(const struct master_service_connection *conn)
 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);
index 8ca3ba0cdc6193e9b9af47319dd09c703d59e4dc..92c010b7ee2449719eb353b4a58cdf699adb08b6 100644 (file)
@@ -13,9 +13,6 @@
 #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)
@@ -77,13 +74,10 @@ int main(int argc, char *argv[])
                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)
index b0ce1ac15d2a15bb7d101fab6ca3a7a8e27b5f5b..6a6a1527a3af925d1674a51ab2348bcf2b9a6deb 100644 (file)
@@ -70,12 +70,11 @@ static bool doveadm_try_run(const char *cmd_name, int argc, char *argv[])
 
 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);
@@ -86,11 +85,8 @@ int main(int argc, char *argv[])
 
        /* "+" 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();
 
index c8887035f2a46272a872eaead6be0af43b8e0083..e6cdc6e8ae413f66b8a30a2a14d9f2fe296a9943 100644 (file)
@@ -72,19 +72,17 @@ int main(int argc, char *argv[])
        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) {
@@ -105,9 +103,7 @@ int main(int argc, char *argv[])
                        brain_flags |= DSYNC_BRAIN_FLAG_VERBOSE;
                        break;
                default:
-                       if (!master_service_parse_option(master_service,
-                                                        c, optarg))
-                               usage();
+                       usage();
                }
        }
        if (optind != argc)
index ce48d48c04232d69f7a8350f005893cc285ad5d8..2587c1de1c12c38c00fbf4996c94369456d74cdb 100644 (file)
@@ -201,7 +201,6 @@ static void client_connected(const struct master_service_connection *conn)
 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) {
@@ -218,11 +217,10 @@ int main(int argc, char *argv[], char *envp[])
                        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);
 
index ec0b9d55549a9876743e294254433d07abf90fb0..55d5b490ad3b94312e4baf50fc7ec5648cb7b8c5 100644 (file)
@@ -244,7 +244,7 @@ int main(int argc, char *argv[])
        };
        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;
@@ -287,7 +287,7 @@ int main(int argc, char *argv[])
        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);
@@ -295,9 +295,7 @@ int main(int argc, char *argv[])
        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 */
@@ -341,12 +339,8 @@ int main(int argc, char *argv[])
                                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) {
index 996b3adc0a8a613a463368955b92cd7792fd7a7f..0e3c04828d5b9000643b942182517c6b46e3480d 100644 (file)
@@ -15,7 +15,8 @@ struct master_service {
        struct ioloop *ioloop;
 
        char *name;
-        enum master_service_flags flags;
+       char *getopt_str;
+       enum master_service_flags flags;
 
        int argc;
        char **argv;
index 0f425ec5ea41dece7d4c2118ac97f4a35597c24d..9eed3a1799502fc4bf2721921a5448a480438445 100644 (file)
@@ -78,7 +78,7 @@ static void master_service_verify_version(struct master_service *service)
 
 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;
@@ -110,6 +110,8 @@ master_service_init(const char *name, enum master_service_flags flags,
        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;
@@ -147,6 +149,18 @@ master_service_init(const char *name, enum master_service_flags flags,
        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)
 {
@@ -569,6 +583,7 @@ void master_service_deinit(struct master_service **_service)
        io_loop_destroy(&service->ioloop);
 
        i_free(service->listeners);
+       i_free(service->getopt_str);
        i_free(service->name);
        i_free(service);
 
index f4cd86752279c258259bda9ce5fedb772331d195..3250f051058626932aef3830937512b567954b0e 100644 (file)
@@ -43,7 +43,10 @@ const char *master_service_getopt_string(void);
 /* 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);
index 0e14f6b733a50ff2c83083b0c4cf76c124fc0e6c..4a2329d04647cdb9ed7d702d9f5fac76fc67a8ac 100644 (file)
@@ -63,18 +63,16 @@ int main(int argc, char *argv[], char *envp[])
        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,
index d1abb609bcb23bf47a574162b9c15067279beb3e..bcf7ac3b651f2d2644f2777e3f4c45c0acb43408 100644 (file)
@@ -7,7 +7,6 @@
 #include "master-service-settings.h"
 #include "log-connection.h"
 
-#include <stdlib.h>
 #include <unistd.h>
 
 pid_t master_pid;
@@ -39,18 +38,15 @@ static void client_connected(const struct master_service_connection *conn)
 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)
index e30d50f23ae3d6cecd18f0ecf8d53c303bb1f957..ec49daf76b070f323f19bbcf8988ff82269f13ec 100644 (file)
@@ -171,18 +171,16 @@ int main(int argc, char *argv[], char *envp[])
        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;
@@ -191,10 +189,7 @@ int main(int argc, char *argv[], char *envp[])
                        ssl_connections = TRUE;
                        break;
                default:
-                       if (!master_service_parse_option(master_service,
-                                                        c, optarg))
-                               exit(FATAL_DEFAULT);
-                       break;
+                       return FATAL_DEFAULT;
                }
        }
 
index 43f9a721b53ccdaf7045601cc9ce33166a41023f..ca59268b44742ffd6adae7903aa88cd25417d1bd 100644 (file)
@@ -591,7 +591,7 @@ int main(int argc, char *argv[])
 {
        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;
@@ -606,7 +606,7 @@ int main(int argc, char *argv[])
        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);
@@ -614,8 +614,7 @@ int main(int argc, char *argv[])
        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) {
index c8ae5548fce271a350391d23c4d3a25077756222..ae430f523a4c766aceaa820b33f71dca2fe61c4b 100644 (file)
@@ -23,16 +23,14 @@ int main(int argc, char *argv[])
        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);
 
index 90d47d851a85321b9d31ce955338fc865f945dff..6951b470c2c08676cd831be93e71434f4179286c 100644 (file)
@@ -312,25 +312,20 @@ static void expire_run(struct master_service *service, bool testrun)
 
 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)
index d6f909ae7c3e896fa16814b0de431673c13cd434..b7e2efc609fdb68344ad5f660a69620bc89df5d7 100644 (file)
@@ -164,7 +164,6 @@ static void client_connected(const struct master_service_connection *conn)
 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) {
@@ -181,11 +180,10 @@ int main(int argc, char *argv[], char *envp[])
                        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);
 
index dbbeafa33fc9a27933cce10052d51f71a95061f8..aaa340aef11c4f8a1e7b8dd4fe5d98845d6af756 100644 (file)
@@ -8,8 +8,6 @@
 #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"
@@ -117,15 +115,12 @@ static void main_deinit(void)
 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);