#include "lib-signals.h"
#include "ioloop.h"
#include "module-dir.h"
+#include "wildcard-match.h"
#include "master-service.h"
#include "mail-user.h"
#include "mail-namespace.h"
static void
doveadm_mail_all_users(struct doveadm_mail_cmd_context *ctx,
+ const char *wildcard_user,
enum mail_storage_service_flags service_flags)
{
struct mail_storage_service_input input;
user_idx = 0;
while ((ret = ctx->v.get_next_user(ctx, &user)) > 0) {
+ if (wildcard_user != NULL) {
+ if (!wildcard_match_icase(user, wildcard_user))
+ continue;
+ }
input.username = user;
T_BEGIN {
ret = doveadm_mail_next_user(ctx, &input, &error);
enum mail_storage_service_flags service_flags =
MAIL_STORAGE_SERVICE_FLAG_NO_LOG_INIT;
struct doveadm_mail_cmd_context *ctx;
- const char *getopt_args, *username;
+ const char *getopt_args, *username, *wildcard_user;
bool all_users = FALSE;
int c;
getopt_args = t_strconcat("Au:", ctx->getopt_args, NULL);
username = getenv("USER");
+ wildcard_user = NULL;
while ((c = getopt(argc, argv, getopt_args)) > 0) {
switch (c) {
case 'A':
service_flags |=
MAIL_STORAGE_SERVICE_FLAG_USERDB_LOOKUP;
username = optarg;
+ if (strchr(username, '*') != NULL)
+ wildcard_user = username;
break;
default:
if (ctx->v.parse_arg == NULL ||
ctx->v.init(ctx, (const void *)argv);
- if (!all_users) {
+ if (!all_users && wildcard_user == NULL) {
doveadm_mail_single_user(ctx, username, service_flags);
} else {
service_flags |= MAIL_STORAGE_SERVICE_FLAG_TEMP_PRIV_DROP;
- doveadm_mail_all_users(ctx, service_flags);
+ doveadm_mail_all_users(ctx, wildcard_user, service_flags);
}
ctx->v.deinit(ctx);
}