]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
Merged changes from v2.1 tree.
authorTimo Sirainen <tss@iki.fi>
Thu, 4 Apr 2013 21:13:16 +0000 (00:13 +0300)
committerTimo Sirainen <tss@iki.fi>
Thu, 4 Apr 2013 21:13:16 +0000 (00:13 +0300)
23 files changed:
1  2 
.hgsigs
.hgtags
configure.ac
src/auth/auth-request.c
src/doveadm/Makefile.am
src/doveadm/doveadm-mail-batch.c
src/doveadm/doveadm-mail.c
src/doveadm/doveadm-mail.h
src/lib-index/mail-index-transaction-update.c
src/lib-master/mountpoint-list.c
src/lib-storage/index/cydir/cydir-storage.c
src/lib-storage/index/dbox-common/dbox-storage.c
src/lib-storage/index/maildir/maildir-storage.c
src/lib-storage/index/mbox/mbox-storage.c
src/lib-storage/index/pop3c/pop3c-storage.c
src/lib-storage/index/raw/raw-storage.c
src/lib-storage/list/mailbox-list-delete.c
src/lib-storage/list/mailbox-list-fs.c
src/lib-storage/list/mailbox-list-maildir.c
src/lib-storage/mailbox-list-private.h
src/lib/macros.h
src/plugins/acl/acl-mailbox.c
src/plugins/virtual/virtual-config.c

diff --cc .hgsigs
index 6f608c53d135ac28a16720bdeabb84ea785954d4,8b9b66a04ec8acf39874b8ef4ed5f253e9ef666e..d3eefbf800f3cb2950af99fb93d4998b31c92a82
+++ b/.hgsigs
@@@ -57,7 -55,4 +57,8 @@@ f5941f3ac7622361634b6cba464da79cc883d1b
  cf9d62fd0b143efa8e49fac998eb78a648cdd8a9 0 iEYEABECAAYFAlDqjXUACgkQyUhSUUBViskUEwCfYTWHeDmPr8HfxSBQN17SD5IwDygAnROhb3IVTm9niDun4gxPxbHLo/Pe
  b314c97d4bbffd01b20f8492592aa422c13e3d55 0 iEYEABECAAYFAlEJlGMACgkQyUhSUUBVismNdQCgggPP/dt1duU1CMYfkpE4Kyc9Ju0An0kphokRqrtppkeqg7pF1JR01Mgq
  fc75811f3c08d80ed339cbb4d37c66f549542ba7 0 iEYEABECAAYFAlEU+CEACgkQyUhSUUBViskh9QCgnqPHUkNvtOioWxo4W7fXjCFLVAwAnR9Z26jgBpoejXDkgwT07wdfYiL3
 +018de2aa893a040256cb8cd92b1fc9f3f2bbd09f 0 iEYEABECAAYFAlEmOJEACgkQyUhSUUBVismawgCfbfY6KuH+/AauPkRZs4ish20YeV8Ani5DMLh02DUyJvDIpVPJMmTn2Mu/
+ 582108c190f88597c5215279cb66f74673144c9b 0 iEUEABECAAYFAlFd69UACgkQyUhSUUBVisk/aQCYyYU9JcDM3SrTZu1oJuS26IAnZACeM400zLRROTaM6QYBVKTqTnfpuBY=
 +508d46f858153c85ae777e87e1c5143a534a51fe 0 iEYEABECAAYFAlErhDkACgkQyUhSUUBViskRdwCeJ61F0qLZ/3xxIQruTujzo0AEWK0An3PH7nkTY7ouyBdUr0QCra5KLXEZ
 +e62fa121f4a2db3348fd79bb176dd363cc1224bf 0 iEYEABECAAYFAlErsAwACgkQyUhSUUBVismarACbBffm3XY21sfkTsbmF8o8udtRZk4An0ofYy2VminZ3S8EFApHymk/UpNv
 +11bd79bf4866b0d728b25717134a6ba972505746 0 iEYEABECAAYFAlFKFqsACgkQyUhSUUBVismbSwCdHgMYWjcwcTM7fD4v6wTd/8/8ZEsAn2THId1zYspMTEMtDg0rlrvjlht4
diff --cc .hgtags
index b25e545ff9577032d8da4c86729e5ae10e64e788,23385ac8337d0763e0f3118da986f5b74a699d1d..1f490050aed85e743ff1198b1b81557e73d5ad19
+++ b/.hgtags
@@@ -91,10 -90,6 +91,11 @@@ f5941f3ac7622361634b6cba464da79cc883d1b
  741d800a192fa23572bb14196df2a8917cf20614 2.1.11
  75bfda4a7c6c9aa04b6a6ef233fc527356171a06 2.1.12
  cf9d62fd0b143efa8e49fac998eb78a648cdd8a9 2.1.13
 +86bccdf46d172524ca19a1a8a16a50ac30a6743c 2.2.beta1
  b314c97d4bbffd01b20f8492592aa422c13e3d55 2.1.14
  fc75811f3c08d80ed339cbb4d37c66f549542ba7 2.1.15
 +018de2aa893a040256cb8cd92b1fc9f3f2bbd09f 2.2.beta2
+ 582108c190f88597c5215279cb66f74673144c9b 2.1.16
 +508d46f858153c85ae777e87e1c5143a534a51fe 2.2.rc1
 +e62fa121f4a2db3348fd79bb176dd363cc1224bf 2.2.rc2
 +11bd79bf4866b0d728b25717134a6ba972505746 2.2.rc3
diff --cc configure.ac
index c2819ec01a68dd262214a41ea4476b5e442e7ad1,7a04cb2925bd9ad642e96eec3e644c01ca154808..1cd63a0ab57f19caefc203e628757799c4c3bc77
@@@ -297,13 -287,15 +297,16 @@@ AC_DEFINE_UNQUOTED(DOVECOT_NAME, "$PACK
  AC_DEFINE_UNQUOTED(DOVECOT_STRING, "$PACKAGE_STRING", Dovecot string)
  AC_DEFINE_UNQUOTED(DOVECOT_VERSION, "$PACKAGE_VERSION", Dovecot version)
  
+ AC_DEFINE([DOVECOT_VERSION_MAJOR], regexp(AC_PACKAGE_VERSION, [^\([0-9]+\)\.\([0-9]+\)], [\1]), [Dovecot major version])
+ AC_DEFINE([DOVECOT_VERSION_MINOR], regexp(AC_PACKAGE_VERSION, [^\([0-9]+\)\.\([0-9]+\)], [\2]), [Dovecot minor version])
  AC_CHECK_HEADERS(strings.h stdint.h unistd.h dirent.h malloc.h inttypes.h \
    sys/uio.h sys/sysmacros.h sys/resource.h sys/select.h libgen.h \
 -  sys/quota.h sys/fs/ufs_quota.h ufs/ufs/quota.h jfs/quota.h sys/fs/quota_common.h \
 +  sys/quota.h sys/fs/ufs_quota.h ufs/ufs/quota.h jfs/quota.h \
 +  quota.h sys/fs/quota_common.h \
    mntent.h sys/mnttab.h sys/event.h sys/time.h sys/mkdev.h linux/dqblk_xfs.h \
    xfs/xqm.h execinfo.h ucontext.h malloc_np.h sys/utsname.h sys/vmount.h \
 -  sys/utsname.h glob.h linux/falloc.h ucred.h)
 +  sys/utsname.h glob.h linux/falloc.h ucred.h sys/ucred.h)
  
  dnl * clang check
  have_clang=no
index 45ce5c7f005fc6ed7e781335ef0e24ceb3dad8c5,6bd364c4b9aca4b7488d02129dac95fb61ba8995..27f884b10424d1d05ecf4e8ff9f8bddbd6ef1a1f
@@@ -1347,12 -1293,29 +1359,23 @@@ void auth_request_set_field(struct auth
                                return;
                        }
                }
 -              request->no_password = TRUE;
                request->passdb_password = NULL;
 -      } else if (strcmp(name, "allow_nets") == 0) {
 -              auth_request_validate_networks(request, value);
 +              auth_fields_add(request->extra_fields, name, value, 0);
 +              return;
+       } else if (strcmp(name, "passdb_import") == 0) {
+               auth_request_passdb_import(request, value, "", default_scheme);
+               return;
 -      } else if (strncmp(name, "userdb_", 7) == 0) {
 -              /* for prefetch userdb */
+               if (strcmp(name, "userdb_userdb_import") == 0) {
+                       /* we need can't put the whole userdb_userdb_import
+                          value to extra_cache_fields or it doesn't work
+                          properly. so handle this explicitly. */
+                       auth_request_passdb_import(request, value,
+                                                  "userdb_", default_scheme);
+                       return;
+               }
 -              if (request->userdb_reply == NULL)
 -                      auth_request_init_userdb_reply(request);
 -              auth_request_set_userdb_field(request, name + 7, value);
        } else {
                /* these fields are returned to client */
 -              auth_request_set_reply_field(request, name, value);
 +              auth_fields_add(request->extra_fields, name, value, 0);
                return;
        }
  
Simple merge
index 0000000000000000000000000000000000000000,c1da8cf7eeb4a14584f3df8bbdf154eb69cc3bf4..df50aeeb3f92a87f5eff463ccee8bd44c2ef1209
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,162 +1,162 @@@
 -      ARRAY_DEFINE(commands, struct doveadm_mail_cmd_context *);
+ /* Copyright (c) 2012 Dovecot authors, see the included COPYING file */
+ #include "lib.h"
+ #include "array.h"
+ #include "doveadm-mail.h"
+ #include <unistd.h>
+ struct batch_cmd_context {
+       struct doveadm_mail_cmd_context ctx;
++      ARRAY(struct doveadm_mail_cmd_context *) commands;
+ };
+ static int cmd_batch_prerun(struct doveadm_mail_cmd_context *_ctx,
+                           struct mail_storage_service_user *service_user,
+                           const char **error_r)
+ {
+       struct batch_cmd_context *ctx = (struct batch_cmd_context *)_ctx;
+       struct doveadm_mail_cmd_context *const *cmdp;
+       int ret = 0;
+       array_foreach(&ctx->commands, cmdp) {
+               if ((*cmdp)->v.prerun != NULL &&
+                   (*cmdp)->v.prerun(*cmdp, service_user, error_r) < 0) {
+                       ret = -1;
+                       break;
+               }
+       }
+       return ret;
+ }
+ static int cmd_batch_run(struct doveadm_mail_cmd_context *_ctx,
+                        struct mail_user *user)
+ {
+       struct batch_cmd_context *ctx = (struct batch_cmd_context *)_ctx;
+       struct doveadm_mail_cmd_context *const *cmdp;
+       int ret = 0;
+       array_foreach(&ctx->commands, cmdp) {
+               if ((*cmdp)->v.run(*cmdp, user) < 0) {
+                       ret = -1;
+                       break;
+               }
+       }
+       return ret;
+ }
+ static void
+ cmd_batch_add(struct batch_cmd_context *batchctx,
+             int argc, const char *const *argv)
+ {
+       struct doveadm_mail_cmd_context *subctx;
+       const struct doveadm_mail_cmd *cmd;
+       const char *getopt_args;
+       int c;
+       cmd = doveadm_mail_cmd_find_from_argv(argv[0], &argc, &argv);
+       if (cmd == NULL) {
+               i_fatal_status(EX_USAGE, "doveadm batch: Unknown subcommand %s",
+                              argv[1]);
+       }
+       subctx = doveadm_mail_cmd_init(cmd, doveadm_settings);
+       subctx->full_args = argv + 1;
+       subctx->service_flags |= batchctx->ctx.service_flags;
+       optind = 1;
+       getopt_args = subctx->getopt_args != NULL ? subctx->getopt_args : "";
+       while ((c = getopt(argc, (void *)argv, getopt_args)) > 0) {
+               if (subctx->v.parse_arg == NULL ||
+                   !subctx->v.parse_arg(subctx, c))
+                       doveadm_mail_help(cmd);
+       }
+       argv += optind;
+       if (argv[0] != NULL && cmd->usage_args == NULL) {
+               i_fatal_status(EX_USAGE, "doveadm %s: Unknown parameter: %s",
+                              cmd->name, argv[0]);
+       }
+       subctx->args = argv;
+       if (subctx->v.preinit != NULL)
+               subctx->v.preinit(subctx);
+       array_append(&batchctx->commands, &subctx, 1);
+ }
+ static void
+ cmd_batch_preinit(struct doveadm_mail_cmd_context *_ctx)
+ {
+       const char *const *args = _ctx->args;
+       struct batch_cmd_context *ctx = (struct batch_cmd_context *)_ctx;
+       ARRAY_TYPE(const_string) sep_args;
+       const char *sep = args[0];
+       unsigned int i, start;
+       int argc;
+       const char *const *argv;
+       if (sep == NULL || args[1] == NULL)
+               doveadm_mail_help_name("batch");
+       args++;
+       p_array_init(&ctx->commands, _ctx->pool, 8);
+       p_array_init(&sep_args, _ctx->pool, 16);
+       for (i = start = 0;; i++) {
+               if (args[i] != NULL && strcmp(args[i], sep) != 0) {
+                       array_append(&sep_args, &args[i], 1);
+                       continue;
+               }
+               if (i > start) {
+                       (void)array_append_space(&sep_args);
+                       argc = i - start;
+                       argv = array_idx(&sep_args, start);
+                       cmd_batch_add(ctx, argc, argv);
+                       start = i+1;
+               }
+               if (args[i] == NULL)
+                       break;
+       }
+       (void)array_append_space(&sep_args);
+ }
+ static void
+ cmd_batch_init(struct doveadm_mail_cmd_context *_ctx,
+              const char *const args[] ATTR_UNUSED)
+ {
+       struct batch_cmd_context *ctx = (struct batch_cmd_context *)_ctx;
+       struct doveadm_mail_cmd_context *const *cmdp;
+       struct batch_cmd_context *subctx;
+       array_foreach(&ctx->commands, cmdp) {
+               subctx = (struct batch_cmd_context *)*cmdp;
+               subctx->ctx.storage_service = _ctx->storage_service;
+               if (subctx->ctx.v.init != NULL)
+                       subctx->ctx.v.init(&subctx->ctx, subctx->ctx.args);
+       }
+ }
+ static void cmd_batch_deinit(struct doveadm_mail_cmd_context *_ctx)
+ {
+       struct batch_cmd_context *ctx = (struct batch_cmd_context *)_ctx;
+       struct doveadm_mail_cmd_context *const *cmdp;
+       array_foreach(&ctx->commands, cmdp) {
+               if ((*cmdp)->v.deinit != NULL)
+                       (*cmdp)->v.deinit(*cmdp);
+       }
+ }
+ static struct doveadm_mail_cmd_context *cmd_batch_alloc(void)
+ {
+       struct batch_cmd_context *ctx;
+       ctx = doveadm_mail_cmd_alloc(struct batch_cmd_context);
+       ctx->ctx.v.preinit = cmd_batch_preinit;
+       ctx->ctx.v.init = cmd_batch_init;
+       ctx->ctx.v.prerun = cmd_batch_prerun;
+       ctx->ctx.v.run = cmd_batch_run;
+       ctx->ctx.v.deinit = cmd_batch_deinit;
+       return &ctx->ctx;
+ }
+ struct doveadm_mail_cmd cmd_batch = {
+       cmd_batch_alloc, "batch", "<sep> <cmd1> [<sep> <cmd2> [..]]"
+ };
Simple merge
index a5c3e54d51bc83705096babe3b08d7d71ded86ba,b526c654a54e38eaa533977740a6abbaf62bbc51..01b2b36ef0a90f81f1be7f5ec029d41a2234a953
@@@ -132,20 -133,21 +135,21 @@@ void doveadm_mail_failed_storage(struc
  void doveadm_mail_failed_mailbox(struct doveadm_mail_cmd_context *ctx,
                                 struct mailbox *box);
  
 -struct doveadm_mail_cmd cmd_expunge;
 -struct doveadm_mail_cmd cmd_search;
 -struct doveadm_mail_cmd cmd_fetch;
 -struct doveadm_mail_cmd cmd_import;
 -struct doveadm_mail_cmd cmd_index;
 -struct doveadm_mail_cmd cmd_altmove;
 -struct doveadm_mail_cmd cmd_copy;
 -struct doveadm_mail_cmd cmd_move;
 -struct doveadm_mail_cmd cmd_mailbox_list;
 -struct doveadm_mail_cmd cmd_mailbox_create;
 -struct doveadm_mail_cmd cmd_mailbox_delete;
 -struct doveadm_mail_cmd cmd_mailbox_rename;
 -struct doveadm_mail_cmd cmd_mailbox_subscribe;
 -struct doveadm_mail_cmd cmd_mailbox_unsubscribe;
 -struct doveadm_mail_cmd cmd_mailbox_status;
 +extern struct doveadm_mail_cmd cmd_expunge;
 +extern struct doveadm_mail_cmd cmd_search;
 +extern struct doveadm_mail_cmd cmd_fetch;
 +extern struct doveadm_mail_cmd cmd_import;
 +extern struct doveadm_mail_cmd cmd_index;
 +extern struct doveadm_mail_cmd cmd_altmove;
 +extern struct doveadm_mail_cmd cmd_copy;
 +extern struct doveadm_mail_cmd cmd_move;
 +extern struct doveadm_mail_cmd cmd_mailbox_list;
 +extern struct doveadm_mail_cmd cmd_mailbox_create;
 +extern struct doveadm_mail_cmd cmd_mailbox_delete;
 +extern struct doveadm_mail_cmd cmd_mailbox_rename;
 +extern struct doveadm_mail_cmd cmd_mailbox_subscribe;
 +extern struct doveadm_mail_cmd cmd_mailbox_unsubscribe;
 +extern struct doveadm_mail_cmd cmd_mailbox_status;
+ struct doveadm_mail_cmd cmd_batch;
  
  #endif
Simple merge
index 606ae9a0d7d8c1a7852275355af6748304794b7d,30d3eb53e22d0d191d6bc9404f1378f6b8a7bb1d..bb3703623a9e98ce5f0235e8fc145324bb0cfb99
  
  #define MAILBOX_LOG_FILE_NAME "dovecot.mailbox.log"
  
 -enum mailbox_log_record_type;
+ #define T_MAILBOX_LIST_ERR_NOT_FOUND(list, name) \
+       t_strdup_printf(MAIL_ERRSTR_MAILBOX_NOT_FOUND, \
+                       mailbox_list_get_vname(list, name))
  struct stat;
  struct dirent;
  struct imap_match_glob;
Simple merge
Simple merge
Simple merge