-DDOVEADM_MODULEDIR=\""$(doveadm_moduledir)"\" \
-DPKG_RUNDIR=\""$(rundir)"\" \
-DPKG_STATEDIR=\""$(statedir)"\" \
+ -DPKG_LIBEXECDIR=\""$(pkglibexecdir)"\" \
-DBINDIR=\""$(bindir)"\" \
-DMANDIR=\""$(mandir)"\"
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),
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",
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;
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[])
static struct doveadm_cmd *doveadm_commands[] = {
&doveadm_cmd_help,
&doveadm_cmd_config,
+ &doveadm_cmd_exec,
&doveadm_cmd_stop,
&doveadm_cmd_reload,
&doveadm_cmd_dump,