]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
Moved process title init to lib-master. With Linux-hack enabled it now preserves...
authorTimo Sirainen <tss@iki.fi>
Wed, 21 Oct 2009 00:19:05 +0000 (20:19 -0400)
committerTimo Sirainen <tss@iki.fi>
Wed, 21 Oct 2009 00:19:05 +0000 (20:19 -0400)
--HG--
branch : HEAD

23 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-login/client.c
src/imap/main.c
src/lda/main.c
src/lib-master/master-service.c
src/lib-master/master-service.h
src/lib/process-title.c
src/lib/process-title.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
src/util/rawlog.c

index 726158d61a47778bb44d77a137d922d64a9fa077..31bebb1a04e478f644fafd429f01e8f7ec7eb68b 100644 (file)
@@ -19,7 +19,7 @@ static void client_connected(const struct master_service_connection *conn)
 
 int main(int argc, char *argv[])
 {
-       master_service = master_service_init("anvil", 0, argc, argv, NULL);
+       master_service = master_service_init("anvil", 0, &argc, &argv, NULL);
        if (master_getopt(master_service) > 0)
                return FATAL_DEFAULT;
 
index 198b62c25deaa4485f9ebafc7b44fb030538847d..4ff873ec127098f30a5a392f4c245bac6645d92c 100644 (file)
@@ -159,7 +159,7 @@ int main(int argc, char *argv[])
 {
        int c;
 
-       master_service = master_service_init("auth", 0, argc, argv, "w");
+       master_service = master_service_init("auth", 0, &argc, &argv, "w");
        master_service_init_log(master_service, "auth: ");
 
        while ((c = master_getopt(master_service)) > 0) {
index df1c83dbb2c206b30d20d9eb148d210b827c0775..113316a23a76363d3c7fe0f71e5f533357117374 100644 (file)
@@ -233,7 +233,7 @@ int main(int argc, char *argv[])
        memset(&filter, 0, sizeof(filter));
        master_service = master_service_init("config",
                                             MASTER_SERVICE_FLAG_STANDALONE,
-                                            argc, argv, "af:m:nNe");
+                                            &argc, &argv, "af:m:nNe");
        i_set_failure_prefix("doveconf: ");
        while ((c = master_getopt(master_service)) > 0) {
                if (c == 'e')
index ddb6a0995851abfa49675640b5a86939e991c61b..5cf61e28bed8e85414079fca2122ad5d8963a7ce 100644 (file)
@@ -17,7 +17,7 @@ int main(int argc, char *argv[])
 {
        const char *path, *error;
 
-       master_service = master_service_init("config", 0, argc, argv, NULL);
+       master_service = master_service_init("config", 0, &argc, &argv, NULL);
        if (master_getopt(master_service) > 0)
                return FATAL_DEFAULT;
 
index 92c010b7ee2449719eb353b4a58cdf699adb08b6..5f79c93bdd490495b08032e441fd450de69313fa 100644 (file)
@@ -75,7 +75,7 @@ int main(int argc, char *argv[])
        };
        const char *error;
 
-       master_service = master_service_init("dict", 0, argc, argv, NULL);
+       master_service = master_service_init("dict", 0, &argc, &argv, NULL);
        if (master_getopt(master_service) > 0)
                return FATAL_DEFAULT;
 
index 6a6a1527a3af925d1674a51ab2348bcf2b9a6deb..60f830a37ff49d65ce53f5d1a253ecaee276b8fe 100644 (file)
@@ -74,7 +74,7 @@ int main(int argc, char *argv[])
 
        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);
index e6cdc6e8ae413f66b8a30a2a14d9f2fe296a9943..abad33b697ff607ae46a3f8c74ef87f13bbc27b8 100644 (file)
@@ -79,7 +79,7 @@ int main(int argc, char *argv[])
        master_service = master_service_init("dsync",
                                             MASTER_SERVICE_FLAG_STANDALONE |
                                             MASTER_SERVICE_FLAG_STD_CLIENT,
-                                            argc, argv, "b:e:fu:v");
+                                            &argc, &argv, "b:e:fu:v");
 
        username = getenv("USER");
        while ((c = master_getopt(master_service)) > 0) {
index 3bcbc2d4442bac32f4d1c1578a46db85819565a3..a7f620230a91fa415c035d8afebe7615cb00ebeb 100644 (file)
@@ -5,7 +5,6 @@
 #include "ioloop.h"
 #include "istream.h"
 #include "ostream.h"
-#include "process-title.h"
 #include "safe-memset.h"
 #include "str.h"
 #include "strescape.h"
index 2587c1de1c12c38c00fbf4996c94369456d74cdb..aedb0ebe3c64467293c98c6b54443135b515bde6 100644 (file)
@@ -8,7 +8,6 @@
 #include "base64.h"
 #include "restrict-access.h"
 #include "fd-close-on-exec.h"
-#include "process-title.h"
 #include "master-interface.h"
 #include "master-service.h"
 #include "master-login.h"
@@ -198,7 +197,7 @@ static void client_connected(const struct master_service_connection *conn)
        }
 }
 
-int main(int argc, char *argv[], char *envp[])
+int main(int argc, char *argv[])
 {
        enum master_service_flags service_flags = 0;
 
@@ -218,10 +217,9 @@ int main(int argc, char *argv[], char *envp[])
        }
 
        master_service = master_service_init("imap", service_flags,
-                                            argc, argv, NULL);
+                                            &argc, &argv, NULL);
        if (master_getopt(master_service) > 0)
                exit(FATAL_DEFAULT);
-        process_title_init(argv, envp);
        master_service_init_finish(master_service);
 
        /* plugins may want to add commands, so this needs to be called early */
index 55d5b490ad3b94312e4baf50fc7ec5648cb7b8c5..a17f7d902948f4f04c378c9b824e3bcf4550de09 100644 (file)
@@ -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, "a:d:p:ekm:nsf:");
+               &argc, &argv, "a:d:p:ekm:nsf:");
 
        memset(&ctx, 0, sizeof(ctx));
        ctx.pool = pool_alloconly_create("mail deliver context", 256);
index 9eed3a1799502fc4bf2721921a5448a480438445..c160a2bbb791efaf816d2e546aa297e08887eaea 100644 (file)
@@ -6,6 +6,7 @@
 #include "array.h"
 #include "env-util.h"
 #include "home-expand.h"
+#include "process-title.h"
 #include "restrict-access.h"
 #include "fd-close-on-exec.h"
 #include "settings-parser.h"
@@ -78,8 +79,9 @@ 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[], const char *getopt_str)
+                   int *argc, char **argv[], const char *getopt_str)
 {
+       extern char **environ;
        struct master_service *service;
        const char *str;
 
@@ -106,9 +108,11 @@ master_service_init(const char *name, enum master_service_flags flags,
        if (getenv(MASTER_UID_ENV) == NULL)
                flags |= MASTER_SERVICE_FLAG_STANDALONE;
 
+       process_title_init(argv, environ);
+
        service = i_new(struct master_service, 1);
-       service->argc = argc;
-       service->argv = argv;
+       service->argc = *argc;
+       service->argv = *argv;
        service->name = i_strdup(name);
        service->getopt_str =
                i_strconcat(master_service_getopt_string(), getopt_str, NULL);
index 3250f051058626932aef3830937512b567954b0e..824030bfb38bed11879d3567a428ba8c653f1111 100644 (file)
@@ -43,7 +43,7 @@ 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[], const char *getopt_str);
+                   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);
index 2be1f059d3f71d03a451fda8689f3239e8f9db39..69f7d56680e9783c2f6a3faf19c1f0eb4b194563 100644 (file)
@@ -48,6 +48,23 @@ static void linux_proctitle_init(char *argv[], char *envp[])
        process_title_len = (size_t) (envp[i-1] - argv[0]) + strlen(envp[i-1]);
 }
 
+static char **argv_dup(char *old_argv[])
+{
+       char **new_argv;
+       unsigned int i, count;
+
+       for (count = 0; old_argv[count] != NULL; count++) ;
+
+       new_argv = malloc(sizeof(char *) * (count + 1));
+       for (i = 0; i < count; i++) {
+               new_argv[i] = strdup(old_argv[i]);
+               if (new_argv[i] == NULL)
+                       i_fatal_status(FATAL_OUTOFMEM, "strdup() failed: %m");
+       }
+       new_argv[i] = NULL;
+       return new_argv;
+}
+
 static void linux_proctitle_set(const char *title)
 {
        i_strocpy(process_title, title, process_title_len);
@@ -55,12 +72,13 @@ static void linux_proctitle_set(const char *title)
 
 #endif
 
-void process_title_init(char *argv[], char *envp[] ATTR_UNUSED)
+void process_title_init(char **argv[], char *envp[] ATTR_UNUSED)
 {
 #ifdef LINUX_PROCTITLE_HACK
-       linux_proctitle_init(argv, envp);
+       *argv = argv_dup(*argv);
+       linux_proctitle_init(*argv, envp);
 #endif
-       process_name = argv[0];
+       process_name = (*argv)[0];
 }
 
 void process_title_set(const char *title ATTR_UNUSED)
@@ -76,4 +94,3 @@ void process_title_set(const char *title ATTR_UNUSED)
        linux_proctitle_set(t_strconcat(process_name, " ", title, NULL));
 #endif
 }
-
index 84c1b25c95e3aa2e9e41d985211fdd8e072053c0..ef1110e8df8673253d46d9878ab0dba9d4924cec 100644 (file)
@@ -2,7 +2,7 @@
 #define PROCESS_TITLE_H
 
 /* Initialize title changing. */
-void process_title_init(char *argv[], char *envp[]);
+void process_title_init(char **argv[], char *envp[]);
 
 /* Change the process title if possible. */
 void process_title_set(const char *title);
index 4a2329d04647cdb9ed7d702d9f5fac76fc67a8ac..bbf322fda2deb5689c6f8ea8e7d26106ad3ec85f 100644 (file)
@@ -5,7 +5,6 @@
 #include "ioloop.h"
 #include "restrict-access.h"
 #include "fd-close-on-exec.h"
-#include "process-title.h"
 #include "master-service.h"
 #include "master-service-settings.h"
 #include "master-interface.h"
@@ -52,7 +51,7 @@ static void main_deinit(void)
        clients_destroy();
 }
 
-int main(int argc, char *argv[], char *envp[])
+int main(int argc, char *argv[])
 {
        const struct setting_parser_info *set_roots[] = {
                &lda_setting_parser_info,
@@ -70,7 +69,7 @@ int main(int argc, char *argv[], char *envp[])
        }
 
        master_service = master_service_init("lmtp", service_flags,
-                                            argc, argv, NULL);
+                                            &argc, &argv, NULL);
        if (master_getopt(master_service) > 0)
                return FATAL_DEFAULT;
 
@@ -79,8 +78,6 @@ int main(int argc, char *argv[], char *envp[])
                                                        storage_service_flags);
        restrict_access_allow_coredumps(TRUE);
 
-        process_title_init(argv, envp);
-
        main_init();
        master_service_run(master_service, client_connected);
 
index bcf7ac3b651f2d2644f2777e3f4c45c0acb43408..2c8aaecfc058338569c12805406512b7ff3fe0d5 100644 (file)
@@ -39,7 +39,7 @@ int main(int argc, char *argv[])
 {
        const char *error;
 
-       master_service = master_service_init("log", 0, argc, argv, NULL);
+       master_service = master_service_init("log", 0, &argc, &argv, NULL);
 
        /* use log prefix and log to stderr until we've configured the real
           logging */
index ec49daf76b070f323f19bbcf8988ff82269f13ec..b757d755c0a53b896dd4490f0e5c75a08ba4897a 100644 (file)
@@ -5,7 +5,6 @@
 #include "randgen.h"
 #include "restrict-access.h"
 #include "restrict-process-size.h"
-#include "process-title.h"
 #include "master-auth.h"
 #include "master-service.h"
 #include "master-interface.h"
@@ -166,7 +165,7 @@ static void main_deinit(void)
        }
 }
 
-int main(int argc, char *argv[], char *envp[])
+int main(int argc, char *argv[])
 {
        enum master_service_flags service_flags =
                MASTER_SERVICE_FLAG_KEEP_CONFIG_OPEN |
@@ -176,7 +175,7 @@ int main(int argc, char *argv[], char *envp[])
        int c;
 
        master_service = master_service_init(login_process_name, service_flags,
-                                            argc, argv, "DS");
+                                            &argc, &argv, "DS");
        master_service_init_log(master_service, t_strconcat(
                login_process_name, ": ", NULL));
 
@@ -195,7 +194,6 @@ int main(int argc, char *argv[], char *envp[])
 
        login_process_preinit();
 
-       process_title_init(argv, envp);
        set_pool = pool_alloconly_create("global login settings", 4096);
        global_login_settings =
                login_settings_read(master_service, set_pool, NULL, NULL,
index ca59268b44742ffd6adae7903aa88cd25417d1bd..229b00790626a8de9afb99ca4acba118c5e67714 100644 (file)
@@ -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, "Fanp-");
+                               &argc, &argv, "Fanp-");
        i_set_failure_prefix("");
 
        io_loop_set_time_moved_callback(current_ioloop, master_time_moved);
index ae430f523a4c766aceaa820b33f71dca2fe61c4b..bd8c99b65869812a7090e4713ac3cbbeb1fc8021 100644 (file)
@@ -27,7 +27,7 @@ int main(int argc, char *argv[])
 
        master_service = master_service_init("convert-tool",
                                             MASTER_SERVICE_FLAG_STANDALONE,
-                                            argc, argv, NULL);
+                                            &argc, &argv, NULL);
 
        if (master_getopt(master_service) > 0)
                i_fatal(USAGE_STRING);
index 6951b470c2c08676cd831be93e71434f4179286c..b8044dbc96f826bcc672b3d84fb34761c4b97dde 100644 (file)
@@ -317,7 +317,7 @@ int main(int argc, char *argv[])
 
        master_service = master_service_init("expire-tool",
                                             MASTER_SERVICE_FLAG_STANDALONE,
-                                            argc, argv, "t");
+                                            &argc, &argv, "t");
 
        while ((c = master_getopt(master_service)) > 0) {
                switch (c) {
index b7e2efc609fdb68344ad5f660a69620bc89df5d7..9446bbc674df13a3e8773492bb92833a253660aa 100644 (file)
@@ -7,7 +7,6 @@
 #include "ostream.h"
 #include "base64.h"
 #include "restrict-access.h"
-#include "process-title.h"
 #include "master-service.h"
 #include "master-login.h"
 #include "master-interface.h"
@@ -161,7 +160,7 @@ static void client_connected(const struct master_service_connection *conn)
        }
 }
 
-int main(int argc, char *argv[], char *envp[])
+int main(int argc, char *argv[])
 {
        enum master_service_flags service_flags = 0;
 
@@ -181,10 +180,9 @@ int main(int argc, char *argv[], char *envp[])
        }
 
        master_service = master_service_init("pop3", service_flags,
-                                            argc, argv, NULL);
+                                            &argc, &argv, NULL);
        if (master_getopt(master_service) > 0)
                return FATAL_DEFAULT;
-        process_title_init(argv, envp);
        master_service_init_finish(master_service);
 
        if (IS_STANDALONE()) {
index aaa340aef11c4f8a1e7b8dd4fe5d98845d6af756..ffa8bdd56868d4daa42ab0c4f9347436d8a48abb 100644 (file)
@@ -116,7 +116,8 @@ int main(int argc, char *argv[])
 {
        const struct ssl_params_settings *set;
 
-       master_service = master_service_init("ssl-params", 0, argc, argv, NULL);
+       master_service = master_service_init("ssl-params", 0,
+                                            &argc, &argv, NULL);
        master_service_init_log(master_service, "ssl-params: ");
 
        if (master_getopt(master_service) > 0)
index 21c550448aebaa28df412d6b54182a008972992e..ed080194d3a88337ab1d947593d71bd913455fa9 100644 (file)
@@ -348,7 +348,7 @@ int main(int argc, char *argv[], char *envp[])
 
        lib_init();
        i_set_failure_internal();
-       process_title_init(argv, envp);
+       process_title_init(&argv, envp);
 
        argc--;
        argv++;