doveadm.c revision 2670cd577aa57eb9f915a4f4220ae48c9b4fc5fb
e59faf65ce864fe95dc00f5d52b8323cdbd0608aTimo Sirainen/* Copyright (c) 2009-2010 Dovecot authors, see the included COPYING file */
5296198635718c9bf5b2f972c9d5be52092d3d58Timo Sirainenbool doveadm_verbose = FALSE, doveadm_debug = FALSE;
acc039dfc0b0f4588cf2feec04727b61e1c672a1Timo Sirainenstatic ARRAY_DEFINE(doveadm_cmds, struct doveadm_cmd);
acc039dfc0b0f4588cf2feec04727b61e1c672a1Timo Sirainenvoid doveadm_register_cmd(const struct doveadm_cmd *cmd)
04a2d9680d1c5b647204ed8a8888f40c1cdb09deTimo Sirainen fprintf(stderr, "usage: doveadm [-Dv] <command> [<args>]\n");
acc039dfc0b0f4588cf2feec04727b61e1c672a1Timo Sirainen fprintf(stderr, "doveadm %s %s\n", cmd->name, cmd->short_usage);
068357123aba2906c17a4e3bbe57417570be1958Timo Sirainen strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S", tm);
542a32ee5f4ca72626ec93b6313f909811c01534Timo Sirainendoveadm_try_run_multi_word(const struct doveadm_cmd *cmd,
542a32ee5f4ca72626ec93b6313f909811c01534Timo Sirainen unsigned int len;
542a32ee5f4ca72626ec93b6313f909811c01534Timo Sirainen /* more args */
542a32ee5f4ca72626ec93b6313f909811c01534Timo Sirainen return doveadm_try_run_multi_word(cmd, cmdname + len + 1,
acc039dfc0b0f4588cf2feec04727b61e1c672a1Timo Sirainenstatic bool doveadm_try_run(const char *cmd_name, int argc, char *argv[])
542a32ee5f4ca72626ec93b6313f909811c01534Timo Sirainen /* see if it matches a multi-word command */
542a32ee5f4ca72626ec93b6313f909811c01534Timo Sirainen if (strncmp(cmd->name, cmd_name, cmd_name_len) == 0 &&
542a32ee5f4ca72626ec93b6313f909811c01534Timo Sirainen const char *subcmd = cmd->name + cmd_name_len + 1;
4909421ac41e143fe07a235c0d11e9f0452d716bTimo Sirainen /* some doveadm plugins have dependencies to mail plugins. we can load
4909421ac41e143fe07a235c0d11e9f0452d716bTimo Sirainen only those whose dependencies have been loaded earlier, the rest are
4909421ac41e143fe07a235c0d11e9f0452d716bTimo Sirainen mod_set.version = master_service_get_version_string(master_service);
78ab753927acf4466f38e4a50694be3f4c4cc9abTimo Sirainen mod_set.ignore_dlopen_errors = !doveadm_debug;
4909421ac41e143fe07a235c0d11e9f0452d716bTimo Sirainen modules = module_dir_load_missing(modules, DOVEADM_MODULEDIR,
ff3337516aad9843599905aeeb29812ea67c09d1Timo Sirainenstatic struct doveadm_cmd *doveadm_commands[] = {
4909421ac41e143fe07a235c0d11e9f0452d716bTimo Sirainen const struct setting_parser_info *set_roots[] = {
ff3337516aad9843599905aeeb29812ea67c09d1Timo Sirainen unsigned int i;
5296198635718c9bf5b2f972c9d5be52092d3d58Timo Sirainen /* "+" is GNU extension to stop at the first non-option.
5296198635718c9bf5b2f972c9d5be52092d3d58Timo Sirainen others just accept -+ option. */
a672f99363d5f37060c1331d00d2ee3c4626310fTimo Sirainen master_service = master_service_init("doveadm", service_flags,
5296198635718c9bf5b2f972c9d5be52092d3d58Timo Sirainen while ((c = master_getopt(master_service)) > 0) {
4909421ac41e143fe07a235c0d11e9f0452d716bTimo Sirainen if (master_service_settings_read_simple(master_service, set_roots,
4909421ac41e143fe07a235c0d11e9f0452d716bTimo Sirainen i_fatal("Error reading configuration: %s", error);
4909421ac41e143fe07a235c0d11e9f0452d716bTimo Sirainen doveadm_settings = master_service_settings_get_others(master_service)[0];
ff3337516aad9843599905aeeb29812ea67c09d1Timo Sirainen for (i = 0; i < N_ELEMENTS(doveadm_commands); i++)
aee3e2f7ab2b27572a90b9e7fd8fe60f13c6637eTimo Sirainen /* disable debugging unless -D is given */