]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
dovecot: Forward dovecot -a, -n to doveconf.
authorTimo Sirainen <tss@iki.fi>
Wed, 6 May 2009 18:20:14 +0000 (14:20 -0400)
committerTimo Sirainen <tss@iki.fi>
Wed, 6 May 2009 18:20:14 +0000 (14:20 -0400)
--HG--
branch : HEAD

src/master/main.c

index ed939318d0237a674a711d7c0e4101b9ba657865..9b8804550aa158f33e621d12ae1b88749e1d2d4f 100644 (file)
@@ -24,6 +24,8 @@
 #include <pwd.h>
 #include <grp.h>
 
+#define DOVECOT_CONFIG_BIN_PATH BINDIR"/doveconf"
+
 #define FATAL_FILENAME "master-fatal.lastlog"
 #define MASTER_PID_FILE_NAME "master.pid"
 
@@ -525,7 +527,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;
+       const char *getopt_str, *error, *env_tz, *doveconf_arg = NULL;
        failure_callback_t *error_callback;
        void **sets;
        bool foreground = FALSE, ask_key_pass = FALSE, log_error = FALSE;
@@ -542,12 +544,18 @@ int main(int argc, char *argv[])
        master_uid = geteuid();
        master_gid = getegid();
 
-       getopt_str = t_strconcat("Fp", master_service_getopt_string(), NULL);
+       getopt_str = t_strconcat("Fanp", master_service_getopt_string(), NULL);
        while ((c = getopt(argc, argv, getopt_str)) > 0) {
                switch (c) {
                case 'F':
                        foreground = TRUE;
                        break;
+               case 'a':
+                       doveconf_arg = "-a";
+                       break;
+               case 'n':
+                       doveconf_arg = "-n";
+                       break;
                case 'p':
                        /* Ask SSL private key password */
                        ask_key_pass = TRUE;
@@ -562,6 +570,19 @@ int main(int argc, char *argv[])
                }
        }
 
+       if (doveconf_arg != NULL) {
+               const char **args;
+
+               args = t_new(const char *, 5);
+               args[0] = DOVECOT_CONFIG_BIN_PATH;
+               args[1] = doveconf_arg;
+               args[2] = "-c";
+               args[3] = master_service_get_config_path(master_service);
+               args[4] = NULL;
+               execv(args[0], (char **)args);
+               i_fatal("execv(%s) failed: %m", args[0]);
+       }
+
        if (optind < argc) {
                if (strcmp(argv[optind], "--version") == 0) {
                        printf("%s\n", VERSION);