I'm playing with Cyrus Murder in replicated mode. All operations are working really fine, except quota informacion replication. The scenario is described in: http://lists.andrew.cmu.edu/pipermail/info-cyrus/2007-November/027829.html After read the code quickly I saw it's not supported. My solution is a little patch that adds quota_directory option in imapd.conf. Using quota db type legacy, we can put the quotadb in the shared storage. I didn't try with other db types. diff -Nur cyrus-imapd-2.3.10/imap/quota_db.c cyrus-ws/imap/quota_db.c --- cyrus-imapd-2.3.10/imap/quota_db.c 2007-08-15 14:20:57.000000000 -0300 +++ cyrus-ws/imap/quota_db.c 2007-11-30 14:05:14.993312000 -0300 @@ -242,12 +242,12 @@ /* create db file name */ if (!fname) { - size_t fname_len = strlen(config_dir)+strlen(FNAME_QUOTADB)+1; + size_t fname_len = strlen(quota_dir)+strlen(FNAME_QUOTADB)+1; fname = xmalloc(fname_len); tofree = fname; - strlcpy(fname, config_dir, fname_len); + strlcpy(fname, quota_dir, fname_len); strlcat(fname, FNAME_QUOTADB, fname_len); } diff -Nur cyrus-imapd-2.3.10/lib/imapoptions cyrus-ws/lib/imapoptions --- cyrus-imapd-2.3.10/lib/imapoptions 2007-10-18 15:14:48.000000000 -0300 +++ cyrus-ws/lib/imapoptions 2007-11-30 14:44:06.367646834 -0300 @@ -826,6 +826,9 @@ allowed in envelope tests. When disabled, ANY grammatically correct header will be allowed. */ +{ "quotadirectory", NULL, STRING } +/* The pathname of the quota database directory. Default is config directory. */ + # Commented out - used by libsasl # { "sasl_auto_transition", 0, SWITCH } /* If enabled, the SASL library will automatically create authentication diff -Nur cyrus-imapd-2.3.10/lib/libconfig.c cyrus-ws/lib/libconfig.c --- cyrus-imapd-2.3.10/lib/libconfig.c 2007-07-18 15:56:11.000000000 -0300 +++ cyrus-ws/lib/libconfig.c 2007-11-30 14:09:09.031608000 -0300 @@ -69,6 +69,7 @@ /* cached configuration variables accessible to the external world */ const char *config_filename= NULL; /* filename of configuration file */ const char *config_dir = NULL; /* ie /var/imap */ +const char *quota_dir = NULL; /* ie /var/imap */ const char *config_defpartition = NULL; /* /var/spool/imap */ const char *config_servername= NULL; /* gethostname() */ const char *config_mupdate_server = NULL;/* NULL */ @@ -219,6 +220,8 @@ fatal("configdirectory option not specified in configuration file", EC_CONFIG); } + if (!quota_dir) + quota_dir = config_dir; /* Scan options to see if we need to replace {configdirectory} */ /* xxx need to scan overflow options as well! */ @@ -449,6 +452,8 @@ if(opt == IMAPOPT_CONFIGDIRECTORY) config_dir = imapopts[opt].val.s; + if(opt == IMAPOPT_QUOTADIRECTORY) + quota_dir = imapopts[opt].val.s; break; } diff -Nur cyrus-imapd-2.3.10/lib/libconfig.h cyrus-ws/lib/libconfig.h --- cyrus-imapd-2.3.10/lib/libconfig.h 2007-07-18 15:56:11.000000000 -0300 +++ cyrus-ws/lib/libconfig.h 2007-11-30 14:53:35.863766630 -0300 @@ -66,6 +66,7 @@ /* cached configuration variables accessable to external world */ extern const char *config_filename; extern const char *config_dir; +extern const char *quota_dir; extern const char *config_defpartition; extern const char *config_servername; extern const char *config_mupdate_server; -- -------------- Diego Woitasen ---- Cyrus Home Page: http://cyrusimap.web.cmu.edu/ Cyrus Wiki/FAQ: http://cyrusimap.web.cmu.edu/twiki List Archives/Info: http://asg.web.cmu.edu/cyrus/mailing-list.html