]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
doveadm: Added exec command to easily execute commands from libexec_dir.
authorTimo Sirainen <tss@iki.fi>
Thu, 6 Sep 2012 13:50:00 +0000 (16:50 +0300)
committerTimo Sirainen <tss@iki.fi>
Thu, 6 Sep 2012 13:50:00 +0000 (16:50 +0300)
For example: doveadm exec imap -u user@domain

src/doveadm/Makefile.am
src/doveadm/doveadm-settings.c
src/doveadm/doveadm-settings.h
src/doveadm/doveadm.c

index 7e8a31cb9e34ee19489df5f12f325f1331513d20..cef2db878972ee4e7274ae3977b4a342b05c3806 100644 (file)
@@ -22,6 +22,7 @@ AM_CPPFLAGS = \
        -DDOVEADM_MODULEDIR=\""$(doveadm_moduledir)"\" \
        -DPKG_RUNDIR=\""$(rundir)"\" \
        -DPKG_STATEDIR=\""$(statedir)"\" \
+       -DPKG_LIBEXECDIR=\""$(pkglibexecdir)"\" \
        -DBINDIR=\""$(bindir)"\" \
        -DMANDIR=\""$(mandir)"\"
 
index 8f94688ace70d7db04396971177e3255e40eb3d3..e59e1ce9cd14a18382a53d084fae597efb3ad628 100644 (file)
@@ -53,6 +53,7 @@ struct service_settings doveadm_service_settings = {
 
 static const struct setting_define doveadm_setting_defines[] = {
        DEF(SET_STR, base_dir),
+       DEF(SET_STR, libexec_dir),
        DEF(SET_STR, mail_plugins),
        DEF(SET_STR, mail_plugin_dir),
        DEF(SET_STR, doveadm_socket_path),
@@ -70,6 +71,7 @@ static const struct setting_define doveadm_setting_defines[] = {
 
 const struct doveadm_settings doveadm_default_settings = {
        .base_dir = PKG_RUNDIR,
+       .libexec_dir = PKG_LIBEXECDIR,
        .mail_plugins = "",
        .mail_plugin_dir = MODULEDIR,
        .doveadm_socket_path = "doveadm-server",
index 4c5d5dd67c086b1ad9dc6799b767d48b7fc54237..d88616dd877dd85bfa0b4cac801f650b2eabf2ef 100644 (file)
@@ -3,6 +3,7 @@
 
 struct doveadm_settings {
        const char *base_dir;
+       const char *libexec_dir;
        const char *mail_plugins;
        const char *mail_plugin_dir;
        const char *doveadm_socket_path;
index 785cf499d2f3313d8e3ee430e1b9863100409287..7eaabbb3e2d926d5a795b35493bc6882ea2f61b2 100644 (file)
@@ -174,6 +174,21 @@ static struct doveadm_cmd doveadm_cmd_config = {
        cmd_config, "config", "[doveconf parameters]"
 };
 
+static void cmd_exec(int argc ATTR_UNUSED, char *argv[])
+{
+       const char *path, *binary = argv[1];
+
+       path = t_strdup_printf("%s/%s", doveadm_settings->libexec_dir, binary);
+       argv++;
+       argv[0] = t_strdup_noconst(path);
+       (void)execv(argv[0], argv);
+       i_fatal("execv(%s) failed: %m", argv[0]);
+}
+
+static struct doveadm_cmd doveadm_cmd_exec = {
+       cmd_exec, "exec", "<binary> [binary parameters]"
+};
+
 static bool
 doveadm_try_run_multi_word(const struct doveadm_cmd *cmd,
                           const char *cmdname, int argc, char *argv[])
@@ -269,6 +284,7 @@ static void doveadm_read_settings(void)
 static struct doveadm_cmd *doveadm_commands[] = {
        &doveadm_cmd_help,
        &doveadm_cmd_config,
+       &doveadm_cmd_exec,
        &doveadm_cmd_stop,
        &doveadm_cmd_reload,
        &doveadm_cmd_dump,