From: Timo Sirainen Date: Thu, 6 Sep 2012 13:50:00 +0000 (+0300) Subject: doveadm: Added exec command to easily execute commands from libexec_dir. X-Git-Tag: 2.1.10~21 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f2a1955d993f67982bc40ad7bbae9a036dabfd64;p=thirdparty%2Fdovecot%2Fcore.git doveadm: Added exec command to easily execute commands from libexec_dir. For example: doveadm exec imap -u user@domain --- diff --git a/src/doveadm/Makefile.am b/src/doveadm/Makefile.am index 7e8a31cb9e..cef2db8789 100644 --- a/src/doveadm/Makefile.am +++ b/src/doveadm/Makefile.am @@ -22,6 +22,7 @@ AM_CPPFLAGS = \ -DDOVEADM_MODULEDIR=\""$(doveadm_moduledir)"\" \ -DPKG_RUNDIR=\""$(rundir)"\" \ -DPKG_STATEDIR=\""$(statedir)"\" \ + -DPKG_LIBEXECDIR=\""$(pkglibexecdir)"\" \ -DBINDIR=\""$(bindir)"\" \ -DMANDIR=\""$(mandir)"\" diff --git a/src/doveadm/doveadm-settings.c b/src/doveadm/doveadm-settings.c index 8f94688ace..e59e1ce9cd 100644 --- a/src/doveadm/doveadm-settings.c +++ b/src/doveadm/doveadm-settings.c @@ -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", diff --git a/src/doveadm/doveadm-settings.h b/src/doveadm/doveadm-settings.h index 4c5d5dd67c..d88616dd87 100644 --- a/src/doveadm/doveadm-settings.h +++ b/src/doveadm/doveadm-settings.h @@ -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; diff --git a/src/doveadm/doveadm.c b/src/doveadm/doveadm.c index 785cf499d2..7eaabbb3e2 100644 --- a/src/doveadm/doveadm.c +++ b/src/doveadm/doveadm.c @@ -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 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,