]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
doveadm: Added -s parameter to execute mail command via given doveadm socket.
authorTimo Sirainen <tss@iki.fi>
Tue, 23 Nov 2010 15:30:06 +0000 (15:30 +0000)
committerTimo Sirainen <tss@iki.fi>
Tue, 23 Nov 2010 15:30:06 +0000 (15:30 +0000)
src/doveadm/doveadm.c

index 6da650cbf1f3d8104573dbef5e3a06cce2f1e244..a359123a08bfd916a40b07a65917ca64686dfc60 100644 (file)
@@ -220,7 +220,7 @@ static bool doveadm_has_subcommands(const char *cmd_name)
        return doveadm_mail_has_subcommands(cmd_name);
 }
 
-static void doveadm_read_settings(void)
+static void doveadm_read_settings(const char *socket_path)
 {
        static const struct setting_parser_info *set_roots[] = {
                &doveadm_setting_parser_info,
@@ -239,6 +239,21 @@ static void doveadm_read_settings(void)
                i_fatal("Error reading configuration: %s", error);
 
        doveadm_settings = master_service_settings_get_others(master_service)[0];
+       if (socket_path != NULL) {
+               struct setting_parser_context *set_parser =
+                       master_service_get_settings_parser(master_service);
+               const char *set_line =
+                       t_strconcat("doveadm_socket_path=", socket_path, NULL);
+
+               if (settings_parse_line(set_parser, set_line) < 0)
+                       i_unreached();
+               if (doveadm_settings->doveadm_worker_count == 0) {
+                       if (settings_parse_line(set_parser,
+                                               "doveadm_worker_count=1") < 0)
+                               i_unreached();
+               }
+       }
+
        doveadm_settings = settings_dup(&doveadm_setting_parser_info,
                                        doveadm_settings,
                                        pool_datastack_create());
@@ -266,7 +281,7 @@ int main(int argc, char *argv[])
        enum master_service_flags service_flags =
                MASTER_SERVICE_FLAG_STANDALONE |
                MASTER_SERVICE_FLAG_KEEP_CONFIG_OPEN;
-       const char *cmd_name;
+       const char *cmd_name, *socket_path = NULL;
        unsigned int i;
        bool quick_init = FALSE;
        int c;
@@ -274,7 +289,7 @@ int main(int argc, char *argv[])
        /* "+" is GNU extension to stop at the first non-option.
           others just accept -+ option. */
        master_service = master_service_init("doveadm", service_flags,
-                                            &argc, &argv, "+Df:v");
+                                            &argc, &argv, "+Df:s:v");
        while ((c = master_getopt(master_service)) > 0) {
                switch (c) {
                case 'D':
@@ -284,6 +299,9 @@ int main(int argc, char *argv[])
                case 'f':
                        doveadm_print_init(optarg);
                        break;
+               case 's':
+                       socket_path = optarg;
+                       break;
                case 'v':
                        doveadm_verbose = TRUE;
                        break;
@@ -298,7 +316,7 @@ int main(int argc, char *argv[])
                /* "help cmd" doesn't need any configuration */
                quick_init = TRUE;
        } else {
-               doveadm_read_settings();
+               doveadm_read_settings(socket_path);
        }
 
        i_array_init(&doveadm_cmds, 32);