[packaging] 25 commits - cyr_systemd_helper cyrus-imapd-2.1.3-flock.patch cyrus-imapd-2.3.12p2-current-db.patch cyrus-imapd-2.3.16-autocreate-0.10-0.diff cyrus-imapd-2.3.16-autosieve-0.6.0.diff cyrus-imapd-2.3.1-make_md5_defaults.patch cyrus-imapd-2.4.12-debugopt.patch cyrus-imapd.imap-2.3.x-conf cyrus-imapd.init cyrus-imapd-perl5.14.patch cyrus-imapd.service cyrus-imapd.spec .gitignore sources

Jeroen van Meeuwen vanmeeuwen at kolabsys.com
Mon Jan 23 21:19:05 CET 2012


 .gitignore                                |    7 
 cyr_systemd_helper                        |   38 
 cyrus-imapd-2.1.3-flock.patch             |   15 
 cyrus-imapd-2.3.1-make_md5_defaults.patch |   30 
 cyrus-imapd-2.3.12p2-current-db.patch     |   24 
 cyrus-imapd-2.3.16-autocreate-0.10-0.diff | 2401 ------------------------------
 cyrus-imapd-2.3.16-autosieve-0.6.0.diff   |  181 --
 cyrus-imapd-2.4.12-debugopt.patch         |  109 +
 cyrus-imapd-perl5.14.patch                |   96 +
 cyrus-imapd.imap-2.3.x-conf               |    4 
 cyrus-imapd.init                          |  159 -
 cyrus-imapd.service                       |   13 
 cyrus-imapd.spec                          |  166 +-
 sources                                   |    3 
 14 files changed, 414 insertions(+), 2832 deletions(-)

New commits:
commit 172ef52ccac4ec3610006dd6b18bf839ef86dbf3
Author: Dennis Gilmore <dennis at ausil.us>
Date:   Thu Jan 12 18:13:53 2012 -0600

    - Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild

diff --git a/cyrus-imapd.spec b/cyrus-imapd.spec
index b0ed7f0..d011484 100644
--- a/cyrus-imapd.spec
+++ b/cyrus-imapd.spec
@@ -1,6 +1,6 @@
 Name: cyrus-imapd
 Version: 2.4.13
-Release: 1%{?dist}
+Release: 2%{?dist}
 
 %define ssl_pem_file %{_sysconfdir}/pki/%{name}/%{name}.pem
 
@@ -481,6 +481,9 @@ fi
 %{_mandir}/man1/*
 
 %changelog
+* Fri Jan 13 2012 Fedora Release Engineering <rel-eng at lists.fedoraproject.org> - 2.4.13-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild
+
 * Mon Jan 02 2012 Jeroen van Meeuwen <vanmeeuwen at kolabsys.com> - 2.4.13-1
 - New upstream release
 


commit 60873b97c3d766e09a0c71f9ea74e8225a7e989b
Author: Jeroen van Meeuwen (Ergo Project) <jeroen.van.meeuwen at ergo-project.org>
Date:   Mon Jan 2 15:47:00 2012 +0100

    Check in new upstream version

diff --git a/.gitignore b/.gitignore
index d925c43..bc93684 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,3 +6,4 @@ cyrus_sharedbackup-0.1.tar.gz
 /cyrus-imapd-2.4.10.tar.gz
 /cyrus-imapd-2.4.11.tar.gz
 /cyrus-imapd-2.4.12.tar.gz
+/cyrus-imapd-2.4.13.tar.gz
diff --git a/cyrus-imapd.spec b/cyrus-imapd.spec
index 5a8d98a..b0ed7f0 100644
--- a/cyrus-imapd.spec
+++ b/cyrus-imapd.spec
@@ -1,6 +1,6 @@
 Name: cyrus-imapd
-Version: 2.4.12
-Release: 5%{?dist}
+Version: 2.4.13
+Release: 1%{?dist}
 
 %define ssl_pem_file %{_sysconfdir}/pki/%{name}/%{name}.pem
 
@@ -481,6 +481,9 @@ fi
 %{_mandir}/man1/*
 
 %changelog
+* Mon Jan 02 2012 Jeroen van Meeuwen <vanmeeuwen at kolabsys.com> - 2.4.13-1
+- New upstream release
+
 * Wed Dec 07 2011 Michal Hlavinka <mhlavink at redhat.com> - 2.4.12-5
 - do not use digest-md5 as part of default auth mechanisms, 
   it does not coop with pam
diff --git a/sources b/sources
index 261db9c..4e2d58a 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-80f27401490a3dc9e422884ceee6ecf6  cyrus-imapd-2.4.12.tar.gz
+7d7c8864863df8a56a9dae5f1d846065  cyrus-imapd-2.4.13.tar.gz


commit 58147a2761a12606491bf16f195ca8486ec30d45
Author: Michal Hlavinka <mhlavink at redhat.com>
Date:   Wed Dec 7 11:47:17 2011 +0100

    do not use digest-md5 as part of default auth mechanisms,
    it does not coop with pam

diff --git a/cyrus-imapd.imap-2.3.x-conf b/cyrus-imapd.imap-2.3.x-conf
index c14cf20..9a6b5b5 100644
--- a/cyrus-imapd.imap-2.3.x-conf
+++ b/cyrus-imapd.imap-2.3.x-conf
@@ -5,7 +5,7 @@ sievedir: /var/lib/imap/sieve
 sendmail: /usr/sbin/sendmail
 hashimapspool: true
 sasl_pwcheck_method: saslauthd
-sasl_mech_list: PLAIN LOGIN DIGEST-MD5
+sasl_mech_list: PLAIN LOGIN
 allowplaintext: no
 defaultdomain: mail
 tls_cert_file: /etc/pki/cyrus-imapd/cyrus-imapd.pem
diff --git a/cyrus-imapd.spec b/cyrus-imapd.spec
index cc47bf3..5a8d98a 100644
--- a/cyrus-imapd.spec
+++ b/cyrus-imapd.spec
@@ -1,6 +1,6 @@
 Name: cyrus-imapd
 Version: 2.4.12
-Release: 4%{?dist}
+Release: 5%{?dist}
 
 %define ssl_pem_file %{_sysconfdir}/pki/%{name}/%{name}.pem
 
@@ -481,6 +481,10 @@ fi
 %{_mandir}/man1/*
 
 %changelog
+* Wed Dec 07 2011 Michal Hlavinka <mhlavink at redhat.com> - 2.4.12-5
+- do not use digest-md5 as part of default auth mechanisms, 
+  it does not coop with pam
+
 * Tue Nov 22 2011 Michal Hlavinka <mhlavink at redhat.com> - 2.4.12-4
 - reduce noisy logging, add option to turn on LOG_DEBUG syslog 
   messages again (thanks Philip	Prindeville) (#754940)


commit e0b805b4c7227e718ba82174d6190daa73f6940e
Author: Michal Hlavinka <mhlavink at redhat.com>
Date:   Tue Nov 22 14:48:07 2011 +0100

    reduce noisy logging, add option to turn on LOG_DEBUG syslog
    messages again (thanks Philip	Prindeville) (#754940)

diff --git a/cyrus-imapd-2.4.12-debugopt.patch b/cyrus-imapd-2.4.12-debugopt.patch
new file mode 100644
index 0000000..170a994
--- /dev/null
+++ b/cyrus-imapd-2.4.12-debugopt.patch
@@ -0,0 +1,109 @@
+diff -up cyrus-imapd-2.4.12/imap/global.c.debugopt cyrus-imapd-2.4.12/imap/global.c
+--- cyrus-imapd-2.4.12/imap/global.c.debugopt	2011-10-04 21:53:03.000000000 +0200
++++ cyrus-imapd-2.4.12/imap/global.c	2011-11-22 14:24:28.272416643 +0100
+@@ -157,6 +157,10 @@ int cyrus_init(const char *alt_config, c
+ 	/* don't free the openlog() string! */
+     }
+ 
++    /* allow debug logging */
++    if (!config_debug)
++	setlogmask(~LOG_MASK(LOG_DEBUG));
++
+     /* Look up default partition */
+     config_defpartition = config_getstring(IMAPOPT_DEFAULTPARTITION);
+     for (p = (char *)config_defpartition; p && *p; p++) {
+diff -up cyrus-imapd-2.4.12/imap/tls.c.debugopt cyrus-imapd-2.4.12/imap/tls.c
+--- cyrus-imapd-2.4.12/imap/tls.c.debugopt	2011-10-04 21:53:03.000000000 +0200
++++ cyrus-imapd-2.4.12/imap/tls.c	2011-11-22 14:24:28.272416643 +0100
+@@ -255,9 +255,9 @@ static DH *load_dh_param(const char *key
+ 
+     if (ret == NULL) {
+ 	ret = get_dh1024();
+-	syslog(LOG_NOTICE, "imapd:Loading hard-coded DH parameters");
++	syslog(LOG_DEBUG, "imapd:Loading hard-coded DH parameters");
+     } else {
+-	syslog(LOG_NOTICE, "imapd:Loading DH parameters from file");
++	syslog(LOG_DEBUG, "imapd:Loading DH parameters from file");
+     }
+ 
+     if (bio != NULL) BIO_free(bio);
+diff -up cyrus-imapd-2.4.12/lib/imapoptions.debugopt cyrus-imapd-2.4.12/lib/imapoptions
+--- cyrus-imapd-2.4.12/lib/imapoptions.debugopt	2011-11-22 14:24:28.265416615 +0100
++++ cyrus-imapd-2.4.12/lib/imapoptions	2011-11-22 14:24:28.273416647 +0100
+@@ -388,6 +388,9 @@ Blank lines and lines beginning with ``#
+    hashing done on configuration directories.  This is recommended if
+    one partition has a very bushy mailbox tree. */
+ 
++{ "debug", 0, SWITCH }
++/* If enabled, allow syslog() to pass LOG_DEBUG messages. */
++
+ # Commented out - there's no such thing as "hostname_mechs", but we need
+ # this for the man page
+ # { "hostname_mechs", NULL, STRING }
+diff -up cyrus-imapd-2.4.12/lib/libconfig.c.debugopt cyrus-imapd-2.4.12/lib/libconfig.c
+--- cyrus-imapd-2.4.12/lib/libconfig.c.debugopt	2011-10-04 21:53:03.000000000 +0200
++++ cyrus-imapd-2.4.12/lib/libconfig.c	2011-11-22 14:24:28.274416650 +0100
+@@ -84,6 +84,7 @@ int config_auditlog;
+ unsigned config_maxword;
+ unsigned config_maxquoted;
+ int config_qosmarking;
++int config_debug;
+ 
+ /* declared in each binary that uses libconfig */
+ extern const int config_need_data;
+@@ -350,6 +351,9 @@ void config_read(const char *alt_config)
+ 
+     ival = config_getenum(IMAPOPT_QOSMARKING);
+     config_qosmarking = qos[ival];
++
++    /* allow debug logging */
++    config_debug = config_getswitch(IMAPOPT_DEBUG);
+ }
+ 
+ #define GROWSIZE 4096
+diff -up cyrus-imapd-2.4.12/lib/libconfig.h.debugopt cyrus-imapd-2.4.12/lib/libconfig.h
+--- cyrus-imapd-2.4.12/lib/libconfig.h.debugopt	2011-10-04 21:53:03.000000000 +0200
++++ cyrus-imapd-2.4.12/lib/libconfig.h	2011-11-22 14:24:28.274416650 +0100
+@@ -82,6 +82,7 @@ extern int config_auditlog;
+ extern unsigned config_maxquoted;
+ extern unsigned config_maxword;
+ extern int config_qosmarking;
++extern int config_debug;
+ 
+ /* config requirement flags */
+ #define CONFIG_NEED_PARTITION_DATA (1<<0)
+diff -up cyrus-imapd-2.4.12/master/master.c.debugopt cyrus-imapd-2.4.12/master/master.c
+--- cyrus-imapd-2.4.12/master/master.c.debugopt	2011-10-04 21:53:03.000000000 +0200
++++ cyrus-imapd-2.4.12/master/master.c	2011-11-22 14:30:47.243975974 +0100
+@@ -1984,7 +1984,7 @@ int main(int argc, char **argv)
+ 	if(pidlock_fd != -1) close(pidlock_fd);
+     }
+ 
+-    syslog(LOG_NOTICE, "process started");
++    syslog(LOG_DEBUG, "process started");
+ 
+ #if defined(HAVE_UCDSNMP) || defined(HAVE_NETSNMP)
+     /* initialize SNMP agent */
+@@ -2041,7 +2041,7 @@ int main(int argc, char **argv)
+     init_janitor();
+     
+     /* ok, we're going to start spawning like mad now */
+-    syslog(LOG_NOTICE, "ready for work");
++    syslog(LOG_DEBUG, "ready for work");
+ 
+     now = time(NULL);
+     for (;;) {
+diff -up cyrus-imapd-2.4.12/master/masterconf.c.debugopt cyrus-imapd-2.4.12/master/masterconf.c
+--- cyrus-imapd-2.4.12/master/masterconf.c.debugopt	2011-10-04 21:53:03.000000000 +0200
++++ cyrus-imapd-2.4.12/master/masterconf.c	2011-11-22 14:24:28.276416658 +0100
+@@ -99,6 +99,10 @@ int masterconf_init(const char *ident, c
+         /* don't free the openlog() string! */
+     }
+ 
++    /* drop debug messages locally */
++    if (!config_debug)
++	setlogmask(~LOG_MASK(LOG_DEBUG));
++
+     return 0;
+ }
+ 
diff --git a/cyrus-imapd.spec b/cyrus-imapd.spec
index a9a2517..cc47bf3 100644
--- a/cyrus-imapd.spec
+++ b/cyrus-imapd.spec
@@ -1,6 +1,6 @@
 Name: cyrus-imapd
 Version: 2.4.12
-Release: 3%{?dist}
+Release: 4%{?dist}
 
 %define ssl_pem_file %{_sysconfdir}/pki/%{name}/%{name}.pem
 
@@ -42,6 +42,9 @@ Patch6: cyrus-imapd-2.3.12p2-current-db.patch
 # temporary workaround, rhbz#553011, https://bugzilla.andrew.cmu.edu/show_bug.cgi?id=3206
 Patch7: cyrus-imapd-2.3.16-nodenny.patch
 
+# for c-i <= 2.4.12
+Patch8: cyrus-imapd-2.4.12-debugopt.patch
+
 BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
 
 BuildRequires: autoconf
@@ -118,6 +121,7 @@ one running the server.
 %patch3 -p1 -b .flock
 %patch4 -p1 -b .authid_normalize
 %patch6 -p1 -b .libdb
+%patch8 -p1 -b .debugopt
 
 install -m 644 %{SOURCE4} %{SOURCE5} %{SOURCE11} doc/
 
@@ -477,6 +481,10 @@ fi
 %{_mandir}/man1/*
 
 %changelog
+* Tue Nov 22 2011 Michal Hlavinka <mhlavink at redhat.com> - 2.4.12-4
+- reduce noisy logging, add option to turn on LOG_DEBUG syslog 
+  messages again (thanks Philip	Prindeville) (#754940)
+
 * Mon Oct 24 2011 Michal Hlavinka <mhlavink at redhat.com> - 2.4.12-3
 - add login and digest-md5 as part of default auth mechanisms (#748278)
 


commit c8c1f50634d793fcab04b9e0a9cf3c37b4afb6de
Author: Michal Hlavinka <mhlavink at redhat.com>
Date:   Mon Oct 24 11:13:26 2011 +0200

    add login and digest-md5 as part of default auth mechanisms (#748278)

diff --git a/cyrus-imapd.imap-2.3.x-conf b/cyrus-imapd.imap-2.3.x-conf
index da3a0be..c14cf20 100644
--- a/cyrus-imapd.imap-2.3.x-conf
+++ b/cyrus-imapd.imap-2.3.x-conf
@@ -5,7 +5,9 @@ sievedir: /var/lib/imap/sieve
 sendmail: /usr/sbin/sendmail
 hashimapspool: true
 sasl_pwcheck_method: saslauthd
-sasl_mech_list: PLAIN
+sasl_mech_list: PLAIN LOGIN DIGEST-MD5
+allowplaintext: no
+defaultdomain: mail
 tls_cert_file: /etc/pki/cyrus-imapd/cyrus-imapd.pem
 tls_key_file: /etc/pki/cyrus-imapd/cyrus-imapd.pem
 tls_ca_file: /etc/pki/tls/certs/ca-bundle.crt
diff --git a/cyrus-imapd.spec b/cyrus-imapd.spec
index bf50396..a9a2517 100644
--- a/cyrus-imapd.spec
+++ b/cyrus-imapd.spec
@@ -1,6 +1,6 @@
 Name: cyrus-imapd
 Version: 2.4.12
-Release: 2%{?dist}
+Release: 3%{?dist}
 
 %define ssl_pem_file %{_sysconfdir}/pki/%{name}/%{name}.pem
 
@@ -477,6 +477,9 @@ fi
 %{_mandir}/man1/*
 
 %changelog
+* Mon Oct 24 2011 Michal Hlavinka <mhlavink at redhat.com> - 2.4.12-3
+- add login and digest-md5 as part of default auth mechanisms (#748278)
+
 * Tue Oct 11 2011 Michal Hlavinka <mhlavink at redhat.com> - 2.4.12-2
 - do not hide errors if cyrus user can't be added
 


commit f1a444adf71040c29e3c69511d8d4d7e7479ec64
Author: Michal Hlavinka <mhlavink at redhat.com>
Date:   Tue Oct 11 15:11:05 2011 +0200

    do not hide errors if cyrus user can't be added

diff --git a/cyrus-imapd.spec b/cyrus-imapd.spec
index ce9484f..bf50396 100644
--- a/cyrus-imapd.spec
+++ b/cyrus-imapd.spec
@@ -1,6 +1,6 @@
 Name: cyrus-imapd
 Version: 2.4.12
-Release: 1%{?dist}
+Release: 2%{?dist}
 
 %define ssl_pem_file %{_sysconfdir}/pki/%{name}/%{name}.pem
 
@@ -287,9 +287,9 @@ rm -rf %{buildroot}
 
 %pre
 # Create 'cyrus' user on target host
-/usr/sbin/groupadd -g %{gid} -r saslauth 2> /dev/null || :
-/usr/sbin/useradd -c "Cyrus IMAP Server" -d %{_var}/lib/imap -g %{_cyrusgroup} \
-  -G saslauth -s /sbin/nologin -u %{uid} -r %{_cyrususer} 2> /dev/null || :
+getent group saslauth >/dev/null || /usr/sbin/groupadd -g %{gid} -r saslauth 
+getent passwd cyrus >/dev/null || /usr/sbin/useradd -c "Cyrus IMAP Server" -d %{_var}/lib/imap -g %{_cyrusgroup} \
+  -G saslauth -s /sbin/nologin -u %{uid} -r %{_cyrususer}
 
 %post
 /bin/systemctl daemon-reload > /dev/null 2>&1 :
@@ -477,6 +477,9 @@ fi
 %{_mandir}/man1/*
 
 %changelog
+* Tue Oct 11 2011 Michal Hlavinka <mhlavink at redhat.com> - 2.4.12-2
+- do not hide errors if cyrus user can't be added
+
 * Wed Oct 05 2011 Michal Hlavinka <mhlavink at redhat.com> - 2.4.12-1
 - cyrus-imapd updated to 2.4.12
 - fixes incomplete authentication checks in nntpd (Secunia SA46093)


commit db5cac617dc251984b1b0de9f47530c097e473e9
Author: Michal Hlavinka <mhlavink at redhat.com>
Date:   Wed Oct 5 10:46:05 2011 +0200

    cyrus-imapd updated to 2.4.12
    fixes incomplete authentication checks in nntpd (Secunia SA46093)

diff --git a/.gitignore b/.gitignore
index e9b779f..d925c43 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,3 +5,4 @@ cyrus_sharedbackup-0.1.tar.gz
 /cyrus-imapd-2.4.8.tar.gz
 /cyrus-imapd-2.4.10.tar.gz
 /cyrus-imapd-2.4.11.tar.gz
+/cyrus-imapd-2.4.12.tar.gz
diff --git a/cyrus-imapd.spec b/cyrus-imapd.spec
index ac49a60..ce9484f 100644
--- a/cyrus-imapd.spec
+++ b/cyrus-imapd.spec
@@ -1,5 +1,5 @@
 Name: cyrus-imapd
-Version: 2.4.11
+Version: 2.4.12
 Release: 1%{?dist}
 
 %define ssl_pem_file %{_sysconfdir}/pki/%{name}/%{name}.pem
@@ -477,6 +477,10 @@ fi
 %{_mandir}/man1/*
 
 %changelog
+* Wed Oct 05 2011 Michal Hlavinka <mhlavink at redhat.com> - 2.4.12-1
+- cyrus-imapd updated to 2.4.12
+- fixes incomplete authentication checks in nntpd (Secunia SA46093)
+
 * Fri Sep  9 2011 Jeroen van Meeuwen <vanmeeuwen at kolabsys.com> - 2.4.11-1
 - update to 2.4.11
 - Fix CVE-2011-3208 (#734926, #736838)
diff --git a/sources b/sources
index df2ffa8..261db9c 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-d4a066e979adbe85679a6e239d64ee74  cyrus-imapd-2.4.11.tar.gz
+80f27401490a3dc9e422884ceee6ecf6  cyrus-imapd-2.4.12.tar.gz


commit f47d683af2b8bcc49efd84db85b1e132824f04e5
Author: Jeroen van Meeuwen (Ergo Project) <jeroen.van.meeuwen at ergo-project.org>
Date:   Fri Sep 9 09:04:42 2011 +0100

    Check in 2.4.11

diff --git a/.gitignore b/.gitignore
index f47daae..e9b779f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,3 +4,4 @@ cyrus_sharedbackup-0.1.tar.gz
 /cyrus-imapd-2.4.7.tar.gz
 /cyrus-imapd-2.4.8.tar.gz
 /cyrus-imapd-2.4.10.tar.gz
+/cyrus-imapd-2.4.11.tar.gz
diff --git a/cyrus-imapd.spec b/cyrus-imapd.spec
index 7d486d6..ac49a60 100644
--- a/cyrus-imapd.spec
+++ b/cyrus-imapd.spec
@@ -1,6 +1,6 @@
 Name: cyrus-imapd
-Version: 2.4.10
-Release: 4%{?dist}
+Version: 2.4.11
+Release: 1%{?dist}
 
 %define ssl_pem_file %{_sysconfdir}/pki/%{name}/%{name}.pem
 
@@ -477,6 +477,10 @@ fi
 %{_mandir}/man1/*
 
 %changelog
+* Fri Sep  9 2011 Jeroen van Meeuwen <vanmeeuwen at kolabsys.com> - 2.4.11-1
+- update to 2.4.11
+- Fix CVE-2011-3208 (#734926, #736838)
+
 * Tue Aug 16 2011 Michal Hlavinka <mhlavink at redhat.com> - 2.4.10-4
 - rebuild with db5
 
diff --git a/sources b/sources
index cf7ef60..df2ffa8 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-55f08eeabf2f93281e61ba27854aea67  cyrus-imapd-2.4.10.tar.gz
+d4a066e979adbe85679a6e239d64ee74  cyrus-imapd-2.4.11.tar.gz


commit f0183d33fa3e819ccf0beb230ba4eb0736e7c7ad
Author: Michal Hlavinka <mhlavink at redhat.com>
Date:   Thu Aug 18 15:51:13 2011 +0200

    spec cleanup for pending package review

diff --git a/cyrus-imapd-2.3.16-autocreate-0.10-0.diff b/cyrus-imapd-2.3.16-autocreate-0.10-0.diff
deleted file mode 100644
index d28f424..0000000
--- a/cyrus-imapd-2.3.16-autocreate-0.10-0.diff
+++ /dev/null
@@ -1,2401 +0,0 @@
-diff -Naur cyrus-imapd-2.3.16/README.autocreate cyrus-imapd-2.3.16-autocreate.uncompiled/README.autocreate
---- cyrus-imapd-2.3.16/README.autocreate	1970-01-01 02:00:00.000000000 +0200
-+++ cyrus-imapd-2.3.16-autocreate.uncompiled/README.autocreate	2009-12-22 19:56:22.000000000 +0200
-@@ -0,0 +1,211 @@
-+Cyrus IMAP autocreate Inbox patch
-+----------------------------------
-+
-+NOTE : This patch has been created at the University of Athens. For more info, as well 
-+as more patches on Cyrus IMAPD server, please visit http://email.uoa.gr/ 
-+
-+The design of Cyrus IMAP server does not predict the automatic creation of users'
-+INBOX folders. The creation of a user's INBOX is considered to be an external task,
-+that has to be completed as part of the user email account creation procedure. 
-+Hence, to create a new email account the site administrator has to:
-+
-+  a) Include the new account in the user database for the authentication procedure
-+     (e.g. sasldb, shadow, mysql, ldap).
-+  b) Create the corresponding INBOX folder. 
-+
-+Alternatively, the user, if succesfully authenticated, may create his own INBOX folder,
-+as long as the configuration of the site allows it (see "autocreatequota" in imapd.conf).
-+Unlike what not careful readers may think, enabling the "autocreatequota" option, doesn't 
-+lead to the automatic INBOX folder creation by Cyrus IMAP server.
-+In fact, "autocreate" means that the IMAP clients are allowed to automatically create 
-+the user INBOX. 
-+
-+This patch adds the functionality of automatic creation of the users' INBOX folders into
-+the Cyrus IMAP server. It is implemented as two features, namely the  "create on login"
-+and "create on post".
-+ 
-+
-+
-+Create on login
-+===============
-+This feauture provides automatic creation of a user's INBOX folder when all of the 
-+following requirements are met:
-+
-+i)  The user has succesfully passed the authentication procedure.
-+
-+ii) The user's authorisation ID (typically the same as the user's
-+authentication ID)  doesn't belong to the imap_admins or admins
-+accounts (see imapd.conf).
-+
-+iii) The "autocreatequota" option in the imap configuration file 
-+has been set to a non zero value. 
-+
-+iv) The corresponding to the user's authorisation ID INBOX folder
-+does not exist.
-+
-+The user's first login is the most typical case when all four requirements are met. 
-+Note that if the authenticated ID is allowed to proxy to another account for which 
-+all of the above requirements are met, the corresponding INBOX folder for that account 
-+will be created.
-+
-+
-+
-+Create on post
-+==============
-+This feauture provides automatic creation of a user's INBOX folder when all of the 
-+following requirements are met. 
-+
-+i) An email message addressed to the user has been received.  
-+
-+ii) The recipient is not any of the imap_admins or admins accounts. 
-+Note that passing emails to admins or imap_admins accounts from 
-+the MTA to LMTP should be avoided in any case.
-+
-+iii) The recipient's INBOX does not exist.
-+
-+iv) The "autocreatequota" option in the imap configuration file 
-+has been set to a non zero value. 
-+
-+v) The "createonpost" option in the imap configuration file 
-+has been switched on. 
-+
-+
-+Besides the automatic creation of INBOX folder, additional functionalities are
-+provided:
-+
-+  (A) Automatic creation of INBOX subfolders controlled by "autocreateinboxfolders"
-+configuration option. eg 
-+
-+autocreateinboxfolders: sent|drafts|spam|templates
-+
-+  (B) Automatic subscription of INBOX subfolders controlled by "autosubscribeinboxfolders"
-+configuration option. eg
-+
-+autosubscribeinboxfolders: sent|spam
-+
-+Obviously, only subscription to subfolders included in the "autocreateinboxfolder"
-+list is meaningful. 
-+
-+  (C) Automatic subscription to shared folders (bulletin boards). The user gets
-+automatically subscribed to the shared folders declared in the "autosubscribesharedfolders"
-+configuration option in imapd.conf.
-+eg autosubscribesharedfolders: public_folder | public_folder.subfolder
-+
-+In order the above action to succeed, the shared folder has to pre-exist the INBOX creation
-+and the user must have the appropriate permissions in order to be able to subscribe to the
-+shared folder.
-+
-+* A new config option has been added. 'autosubscribe_all_sharedfolders' is a yes/no
-+option. When set to yes, the user is automatically subscribed to all shared folders one 
-+has permission to subscribe to. Please, note that when this option is set to yes, then
-+'autosubscribesharedfolders' option is overriden.
-+
-+  (D) Automatic creation of a predefined default sieve script.
-+
-+This is very useful when a default sieve script is used for every user. Usually, a
-+default anti-spam script may me be written in a file and copied to each user
-+sieve scripts upon the INBOX creation. The imapd.conf options that have been added
-+are 'autocreate_sieve_script', 'autocreate_sieve_compiledscript' and 
-+'generate_compiled_sieve_script'. 
-+
-+autocreate_sieve_script configuration option refers to the full path of the file 
-+that contains the sieve script. The default value is null and if no file is defined,
-+then no default script is created upon INBOX creation. (The feature is disabled)
-+eg autocreate_sieve_script: /etc/default_sieve_script
-+
-+autocreate_sieve_compiledscript configuration option refers to the full path of the
-+file that contains the bytecode compiled sieve script. If this filename is defined
-+in imapd.conf and the file exists, then it is automatically copied in the user's sieve
-+directory. If it is not defined, then a bytecode sieve script gets on the fly compiled
-+by the daemon. 
-+eg autocreate_sieve_compiledscript: /etc/default_sieve_script.bc
-+
-+generate_compiled_sieve_script is a boolean option that triggers the compilation of the 
-+source sieve script to bytecode sieve script. The file that the bytecode script will
-+be saved is pointed by autocreate_sieve_compiledscript.
-+
-+Ways of compiling a sieve script : 
-+1. Compile a sieve script using the standard sievec utility, distributed by CMU
-+2. Compile a sieve script using the compile_sieve utility, released by UoA. This 
-+   tool is almost identical to the sievec utility, with the difference that it 
-+   reads the input and output file from autocreate_sieve_script and 
-+   autocreate_sieve_compiledscript options in imapd.conf
-+3. Let cyrus create a compiled sieve script using a source script. Cyrus can be
-+   instructed to save the compiled script any time a compiled script does not exist.
-+
-+NOTES : 
-+1. In order this functionality to work, the following requirements must have been met:
-+   - 'sieveusehomedir' option must be 'no' in the configuration (default).
-+   - 'sievedir' option must have a valid value.
-+2. Currently, this patch checks the validity of the source script while generating a 
-+   bytecode compiled script, but not the validity of the bytecode sieve script file.
-+   The administrator should make sure that the provided files contain a valid sieve
-+   script as well as the compiled script is updated every time the source script changes.
-+
-+
-+  (E) The administrator may control for which users and/or groups may the INBOXes 
-+automatically be created. The autocreate_users option restricts the groups
-+for which the patch will create the mailboxes. 
-+
-+The default value of autocreate_users is anyone. So, if not set at all, the patch will 
-+work for all users. However, one may set:
-+
-+autocreate_users: user1 user2 group:group1 group:group2
-+
-+In that case, the INBOX will be created only for user1, user2 and the users that belong 
-+to group1 and group2. 
-+
-+More refined control per service is provided by the options imap_autocreate_users,
-+pop3_autocreate_users and lmtp_autocreate_users. These options override the 
-+autocreate_users option and offer per service control.
-+
-+Example: 
-+One may want to restrict the create on post functionality only for a specific group
-+of users. To achieve this, the following lines must be added in the imapd.conf file:
-+
-+createonpost: yes
-+lmtp_autocreate_users: group:groupname
-+
-+
-+
-+Issues to be considered 
-+=======================
-+
-+I) In order to use the create on post feauture one should be absolutely sure that: 
-+a) The MTA checks the validity of the email recipient before sending the email to
-+LMTP. This is an RFC821 requirement. This usually expands to "the mta should be 
-+able to use the account database as user mailbox database". 
-+b) Only authorised accounts/services can talk to LMTP.
-+
-+II) Especially in the case of imap logins, the current patch implementation checks
-+for the INBOX folder existence upon login, causing an extra mailbox lookup in most 
-+of the cases. 
-+A better approach would be to chase the "IMAP_MAILBOX_NONEXISTENT" error code and
-+check if the error is associated with an INBOX folder. However, this would mess up
-+Cyrus code. The way it was implemented may not have been the most performance
-+optimised, but it produces a much cleaner and simple patch.
-+
-+
-+
-+Virtual Domains Support
-+=======================
-+
-+Virtual domains are supported by all versions of the patch for cyrus-imapd-2.2.1-BETA and 
-+later. However, it is not possible to declare different INBOX subfolders to be created or 
-+shared folders to be subscribed to for every domain.
-+
-+
-+
-+Things to be done
-+=================
-+
-+1. Support MUPDATE
-+
-+It is within the developers' intentions to support the mupdate protocol, but serious 
-+design issues on future cyrus releases have to resolved first.
-+
-+2. Select different attributes (quota, partition, sieve filter, etc) depending on the group
-+a user belongs to. 
-+
-+For more information and updates please visit http://email.uoa.gr/projects/cyrus/autocreate
-+
-diff -Naur cyrus-imapd-2.3.16/imap/Makefile.in cyrus-imapd-2.3.16-autocreate.uncompiled/imap/Makefile.in
---- cyrus-imapd-2.3.16/imap/Makefile.in	2009-03-30 19:04:56.000000000 +0300
-+++ cyrus-imapd-2.3.16-autocreate.uncompiled/imap/Makefile.in	2009-12-23 00:49:25.000000000 +0200
-@@ -101,7 +101,7 @@
- 	convert_code.o duplicate.o saslclient.o saslserver.o signals.o \
- 	annotate.o search_engines.o squat.o squat_internal.o mbdump.o \
- 	imapparse.o telemetry.o user.o notify.o idle.o quota_db.o \
--	sync_log.o $(SEEN) mboxkey.o backend.o tls.o message_guid.o \
-+	sync_log.o autosieve.o $(SEEN) mboxkey.o backend.o tls.o message_guid.o \
- 	statuscache_db.o
- 
- IMAPDOBJS=pushstats.o imapd.o proxy.o imap_proxy.o index.o version.o
-@@ -118,7 +118,7 @@
- 	fud smmapd reconstruct quota mbpath ipurge cyr_dbtool cyr_synclog \
- 	cyrdump chk_cyrus cvt_cyrusdb deliver ctl_mboxlist \
- 	ctl_deliver ctl_cyrusdb squatter mbexamine cyr_expire arbitron \
--	unexpunge cyr_df @IMAP_PROGS@
-+	unexpunge compile_sieve cyr_df @IMAP_PROGS@
- 
- BUILTSOURCES = imap_err.c imap_err.h pushstats.c pushstats.h \
- 	lmtpstats.c lmtpstats.h xversion.h mupdate_err.c mupdate_err.h \
-@@ -183,9 +183,9 @@
- mupdate_err.h: mupdate_err.c
- 
- ### Services
--idled: idled.o mutex_fake.o libimap.a $(DEPLIBS)
-+idled: idled.o mutex_fake.o libimap.a $(SIEVE_LIBS) $(DEPLIBS)
- 	$(CC) $(LDFLAGS) -o idled \
--	 idled.o mutex_fake.o libimap.a $(DEPLIBS) $(LIBS)
-+	 idled.o mutex_fake.o libimap.a $(SIEVE_LIBS) $(DEPLIBS) $(LIBS)
- 
- lmtpd: lmtpd.o proxy.o $(LMTPOBJS) $(SIEVE_OBJS) mutex_fake.o \
- 	 libimap.a $(SIEVE_LIBS) $(DEPLIBS) $(SERVICE)
-@@ -199,166 +199,171 @@
- 	 $(SERVICE) lmtpd.o proxy.o $(LMTPOBJS) $(SIEVE_OBJS) \
- 	 mutex_fake.o libimap.a $(SIEVE_LIBS) $(DEPLIBS) $(LIBS) $(LIB_WRAP)
- 
--imapd: $(IMAPDOBJS) mutex_fake.o libimap.a $(DEPLIBS) $(SERVICE)
-+imapd: $(IMAPDOBJS) mutex_fake.o libimap.a $(SIEVE_LIBS) $(DEPLIBS) $(SERVICE)
- 	$(CC) $(LDFLAGS) -o imapd \
- 	 $(SERVICE) $(IMAPDOBJS) mutex_fake.o \
--	libimap.a $(DEPLIBS) $(LIBS) $(LIB_WRAP)
-+	libimap.a $(SIEVE_LIBS) $(DEPLIBS) $(LIBS) $(LIB_WRAP)
- 
--imapd.pure: $(IMAPDOBJS) mutex_fake.o libimap.a $(DEPLIBS) $(SERVICE)
-+imapd.pure: $(IMAPDOBJS) mutex_fake.o libimap.a $(SIEVE_LIBS) $(DEPLIBS) $(SERVICE)
- 	$(PURIFY) $(PUREOPT) $(CC) $(LDFLAGS) -o imapd.pure \
- 	 $(SERVICE) $(IMAPDOBJS) mutex_fake.o libimap.a \
--	$(DEPLIBS) $(LIBS) $(LIB_WRAP)
-+	$(SIEVE_LIBS) $(DEPLIBS) $(LIBS) $(LIB_WRAP)
- 
--imapd.quant: $(IMAPDOBJS) mutex_fake.o libimap.a $(DEPLIBS) $(SERVICE)
-+imapd.quant: $(IMAPDOBJS) mutex_fake.o libimap.a $(SIEVE_LIBS) $(DEPLIBS) $(SERVICE)
- 	$(QUANTIFY) $(QUANTOPT) $(CC) $(LDFLAGS) -o imapd.quant \
- 	 $(SERVICE) $(IMAPDOBJS) mutex_fake.o libimap.a \
--	$(DEPLIBS) $(LIBS) $(LIB_WRAP)
-+	$(SIEVE_LIBS) $(DEPLIBS) $(LIBS) $(LIB_WRAP)
- 
- mupdate: mupdate.o mupdate-slave.o mupdate-client.o mutex_pthread.o tls.o \
--	libimap.a $(DEPLIBS)
-+	libimap.a $(SIEVE_LIBS) $(DEPLIBS)
- 	$(CC) $(LDFLAGS) -o mupdate \
- 	 $(SERVICETHREAD) mupdate.o mupdate-slave.o mupdate-client.o \
- 	 mutex_pthread.o tls.o libimap.a \
--	 $(DEPLIBS) $(LIBS) $(LIB_WRAP) -lpthread
-+	 $(SIEVE_LIBS) $(DEPLIBS) $(LIBS) $(LIB_WRAP) -lpthread
- 
- mupdate.pure: mupdate.o mupdate-slave.o mupdate-client.o mutex_pthread.o \
--	libimap.a $(DEPLIBS)
-+	libimap.a $(SIEVE_LIBS) $(DEPLIBS)
- 	$(PURIFY) $(PUREOPT) $(CC) $(LDFLAGS) -o mupdate.pure \
- 	 $(SERVICETHREAD) mupdate.o mupdate-slave.o mupdate-client.o \
--	 mutex_pthread.o libimap.a $(DEPLIBS) $(LIBS) $(LIB_WRAP) -lpthread
-+	 mutex_pthread.o libimap.a $(SIEVE_LIBS) $(DEPLIBS) $(LIBS) $(LIB_WRAP) -lpthread
- 
- pop3d: pop3d.o proxy.o backend.o tls.o mutex_fake.o libimap.a \
--	$(DEPLIBS) $(SERVICE)
-+	$(SIEVE_LIBS) $(DEPLIBS) $(SERVICE)
- 	$(CC) $(LDFLAGS) -o pop3d pop3d.o proxy.o backend.o tls.o $(SERVICE) \
--	 mutex_fake.o libimap.a $(DEPLIBS) $(LIBS) $(LIB_WRAP)
-+	 mutex_fake.o libimap.a $(SIEVE_LIBS) $(DEPLIBS) $(LIBS) $(LIB_WRAP)
- 
- nntpd: nntpd.o proxy.o backend.o index.o smtpclient.o spool.o tls.o \
--	 mutex_fake.o nntp_err.o libimap.a $(DEPLIBS) $(SERVICE)
-+	 mutex_fake.o nntp_err.o libimap.a $(SIEVE_LIBS) $(DEPLIBS) $(SERVICE)
- 	$(CC) $(LDFLAGS) -o nntpd nntpd.o proxy.o backend.o index.o spool.o \
- 	 smtpclient.o tls.o $(SERVICE) mutex_fake.o nntp_err.o \
--	 libimap.a $(DEPLIBS) $(LIBS) $(LIB_WRAP)
-+	 libimap.a $(SIEVE_LIBS) $(DEPLIBS) $(LIBS) $(LIB_WRAP)
- 
--fud: fud.o libimap.a mutex_fake.o $(DEPLIBS) $(SERVICE)
-+fud: fud.o libimap.a mutex_fake.o $(SIEVE_LIBS) $(DEPLIBS) $(SERVICE)
- 	$(CC) $(LDFLAGS) -o fud $(SERVICE) fud.o mutex_fake.o libimap.a \
--	$(DEPLIBS) $(LIBS) $(LIB_WRAP)
-+	$(SIEVE_LIBS) $(DEPLIBS) $(LIBS) $(LIB_WRAP)
- 
--smmapd: smmapd.o libimap.a mutex_fake.o $(DEPLIBS) $(SERVICE)
-+smmapd: smmapd.o libimap.a mutex_fake.o $(SIEVE_LIBS) $(DEPLIBS) $(SERVICE)
- 	$(CC) $(LDFLAGS) -o smmapd $(SERVICE) smmapd.o mutex_fake.o libimap.a \
--	$(DEPLIBS) $(LIBS) $(LIB_WRAP)
-+	$(SIEVE_LIBS) $(DEPLIBS) $(LIBS) $(LIB_WRAP)
- 
- sync_server: sync_server.o sync_support.o sync_commit.o \
--	imapparse.o tls.o libimap.a mutex_fake.o $(DEPLIBS) $(SERVICE)
-+	imapparse.o tls.o libimap.a mutex_fake.o $(SIEVE_LIBS) $(DEPLIBS) $(SERVICE)
- 	$(CC) $(LDFLAGS) -o \
- 	sync_server sync_server.o sync_support.o sync_commit.o \
- 	imapparse.o tls.o $(SERVICE) libimap.a mutex_fake.o \
--	$(DEPLIBS) $(LIBS) $(LIB_WRAP)
-+	$(SIEVE_LIBS) $(DEPLIBS) $(LIBS) $(LIB_WRAP)
- 
- ### Command Line Utilities
--arbitron: arbitron.o $(CLIOBJS) libimap.a $(DEPLIBS)
-+arbitron: arbitron.o $(CLIOBJS) libimap.a $(SIEVE_LIBS) $(DEPLIBS)
- 	$(CC) $(LDFLAGS) -o arbitron arbitron.o $(CLIOBJS) \
--	libimap.a $(DEPLIBS) $(LIBS)
-+	libimap.a $(SIEVE_LIBS) $(DEPLIBS) $(LIBS)
- 
--cyr_dbtool: cyr_dbtool.o mutex_fake.o libimap.a $(DEPLIBS)
-+cyr_dbtool: cyr_dbtool.o mutex_fake.o libimap.a $(SIEVE_LIBS) $(DEPLIBS)
- 	$(CC) $(LDFLAGS) -o cyr_dbtool cyr_dbtool.o $(CLIOBJS) \
--	libimap.a $(DEPLIBS) $(LIBS)
-+	libimap.a $(SIEVE_LIBS) $(DEPLIBS) $(LIBS)
- 
--cyr_synclog: cyr_synclog.o mutex_fake.o libimap.a $(DEPLIBS)
-+cyr_synclog: cyr_synclog.o mutex_fake.o libimap.a $(SIEVE_LIBS) $(DEPLIBS)
- 	$(CC) $(LDFLAGS) -o cyr_synclog cyr_synclog.o $(CLIOBJS) \
--	libimap.a $(DEPLIBS) $(LIBS)
-+	libimap.a $(SIEVE_LIBS) $(DEPLIBS) $(LIBS)
- 
--cvt_cyrusdb: cvt_cyrusdb.o mutex_fake.o libimap.a $(DEPLIBS)
-+cvt_cyrusdb: cvt_cyrusdb.o mutex_fake.o libimap.a $(SIEVE_LIBS) $(DEPLIBS)
- 	$(CC) $(LDFLAGS) -o cvt_cyrusdb cvt_cyrusdb.o $(CLIOBJS) \
--	libimap.a $(DEPLIBS) $(LIBS)
-+	libimap.a $(SIEVE_LIBS) $(DEPLIBS) $(LIBS)
- 
--chk_cyrus: chk_cyrus.o mutex_fake.o libimap.a $(DEPLIBS)
-+chk_cyrus: chk_cyrus.o mutex_fake.o libimap.a $(SIEVE_LIBS) $(DEPLIBS)
- 	$(CC) $(LDFLAGS) -o chk_cyrus chk_cyrus.o $(CLIOBJS) \
--	libimap.a $(DEPLIBS) $(LIBS)
-+	libimap.a $(SIEVE_LIBS) $(DEPLIBS) $(LIBS)
- 
--deliver: deliver.o $(LMTPOBJS) proxy.o mutex_fake.o libimap.a $(DEPLIBS)
-+deliver: deliver.o $(LMTPOBJS) proxy.o mutex_fake.o libimap.a $(SIEVE_LIBS) $(DEPLIBS)
- 	$(CC) $(LDFLAGS) -o deliver deliver.o $(LMTPOBJS) proxy.o \
--	mutex_fake.o libimap.a $(DEPLIBS) $(LIBS)
-+	mutex_fake.o libimap.a $(SIEVE_LIBS) $(DEPLIBS) $(LIBS)
- 
--ctl_deliver: ctl_deliver.o $(CLIOBJS) libimap.a $(DEPLIBS)
-+ctl_deliver: ctl_deliver.o $(CLIOBJS) libimap.a $(SIEVE_LIBS) $(DEPLIBS)
- 	$(CC) $(LDFLAGS) -o \
--	 $@ ctl_deliver.o $(CLIOBJS) libimap.a $(DEPLIBS) $(LIBS)
-+	 $@ ctl_deliver.o $(CLIOBJS) libimap.a $(SIEVE_LIBS) $(DEPLIBS) $(LIBS)
- 
--ctl_mboxlist: ctl_mboxlist.o mupdate-client.o $(CLIOBJS) libimap.a $(DEPLIBS)
-+ctl_mboxlist: ctl_mboxlist.o mupdate-client.o $(CLIOBJS) libimap.a $(SIEVE_LIBS) $(DEPLIBS)
- 	$(CC) $(LDFLAGS) -o $@ ctl_mboxlist.o mupdate-client.o $(CLIOBJS) \
--	libimap.a $(DEPLIBS) $(LIBS)
-+	libimap.a $(SIEVE_LIBS) $(DEPLIBS) $(LIBS)
- 
--ctl_cyrusdb: ctl_cyrusdb.o $(CLIOBJS) libimap.a $(DEPLIBS)
-+ctl_cyrusdb: ctl_cyrusdb.o $(CLIOBJS) libimap.a $(SIEVE_LIBS) $(DEPLIBS)
- 	$(CC) $(LDFLAGS) -o \
--	 $@ ctl_cyrusdb.o $(CLIOBJS) libimap.a $(DEPLIBS) $(LIBS)
-+	 $@ ctl_cyrusdb.o $(CLIOBJS) libimap.a $(SIEVE_LIBS) $(DEPLIBS) $(LIBS)
- 
--cyr_expire: cyr_expire.o $(CLIOBJS) libimap.a $(DEPLIBS)
-+cyr_expire: cyr_expire.o $(CLIOBJS) libimap.a $(SIEVE_LIBS) $(DEPLIBS)
- 	$(CC) $(LDFLAGS) -o $@ cyr_expire.o $(CLIOBJS) \
--	libimap.a $(DEPLIBS) $(LIBS)
-+	libimap.a $(SIEVE_LIBS) $(DEPLIBS) $(LIBS)
- 
--fetchnews: fetchnews.o $(CLIOBJS) libimap.a $(DEPLIBS)
-+fetchnews: fetchnews.o $(CLIOBJS) libimap.a $(SIEVE_LIBS) $(DEPLIBS)
- 	$(CC) $(LDFLAGS) -o \
--	 $@ fetchnews.o $(CLIOBJS) libimap.a $(DEPLIBS) $(LIBS)
-+	 $@ fetchnews.o $(CLIOBJS) libimap.a $(SIEVE_LIBS) $(DEPLIBS) $(LIBS)
- 
--squatter: squatter.o index.o squat_build.o $(CLIOBJS) libimap.a $(DEPLIBS)
-+squatter: squatter.o index.o squat_build.o $(CLIOBJS) libimap.a $(SIEVE_LIBS) $(DEPLIBS)
- 	$(CC) $(LDFLAGS) -o squatter squatter.o index.o squat_build.o \
--	$(CLIOBJS) libimap.a $(DEPLIBS) $(LIBS)
-+	$(CLIOBJS) libimap.a $(SIEVE_LIBS) $(DEPLIBS) $(LIBS)
- 
--mbpath: mbpath.o $(CLIOBJS) libimap.a $(DEPLIBS)
-+mbpath: mbpath.o $(CLIOBJS) libimap.a $(SIEVE_LIBS) $(DEPLIBS)
- 	$(CC) $(LDFLAGS) -o mbpath mbpath.o $(CLIOBJS) libimap.a \
--	$(DEPLIBS) $(LIBS)
-+	$(SIEVE_LIBS) $(DEPLIBS) $(LIBS)
- 
--ipurge: ipurge.o $(CLIOBJS) libimap.a $(DEPLIBS)
-+ipurge: ipurge.o $(CLIOBJS) libimap.a $(SIEVE_LIBS) $(DEPLIBS)
- 	$(CC) $(LDFLAGS) -o ipurge ipurge.o $(CLIOBJS) \
--	libimap.a $(DEPLIBS) $(LIBS)
-+	libimap.a $(SIEVE_LIBS) $(DEPLIBS) $(LIBS)
- 
--cyr_virusscan: cyr_virusscan.o index.o $(CLIOBJS) libimap.a $(DEPLIBS)
-+cyr_virusscan: cyr_virusscan.o index.o $(CLIOBJS) libimap.a $(SIEVE_LIBS) $(DEPLIBS)
- 	$(CC) $(LDFLAGS) -o cyr_virusscan cyr_virusscan.o index.o $(CLIOBJS) \
--	libimap.a $(DEPLIBS) $(LIBS) -lclamav
-+	libimap.a $(SIEVE_LIBS) $(DEPLIBS) $(LIBS) -lclamav
- 
--cyrdump: cyrdump.o index.o $(CLIOBJS) libimap.a $(DEPLIBS)
-+cyrdump: cyrdump.o index.o $(CLIOBJS) libimap.a $(SIEVE_LIBS) $(DEPLIBS)
- 	$(CC) $(LDFLAGS) -o cyrdump cyrdump.o index.o $(CLIOBJS) \
--	libimap.a $(DEPLIBS) $(LIBS)
-+	libimap.a $(SIEVE_LIBS) $(DEPLIBS) $(LIBS)
- 
--cyr_df: cyr_df.o $(CLIOBJS) libimap.a $(DEPLIBS)
-+cyr_df: cyr_df.o $(CLIOBJS) libimap.a $(SIEVE_LIBS) $(DEPLIBS)
- 	$(CC) $(LDFLAGS) -o \
--	 cyr_df cyr_df.o $(CLIOBJS) libimap.a $(DEPLIBS) $(LIBS)
-+	 cyr_df cyr_df.o $(CLIOBJS) libimap.a $(SIEVE_LIBS) $(DEPLIBS) $(LIBS)
- 
--mbexamine: mbexamine.o $(CLIOBJS) libimap.a $(DEPLIBS)
-+mbexamine: mbexamine.o $(CLIOBJS) libimap.a $(SIEVE_LIBS) $(DEPLIBS)
- 	$(CC) $(LDFLAGS) -o \
--	 mbexamine mbexamine.o $(CLIOBJS) libimap.a $(DEPLIBS) $(LIBS)
-+	 mbexamine mbexamine.o $(CLIOBJS) libimap.a $(SIEVE_LIBS) $(DEPLIBS) $(LIBS)
- 
--reconstruct: reconstruct.o $(CLIOBJS) libimap.a $(DEPLIBS)
-+reconstruct: reconstruct.o $(CLIOBJS) libimap.a $(SIEVE_LIBS) $(DEPLIBS)
- 	$(CC) $(LDFLAGS) -o \
--	 reconstruct reconstruct.o $(CLIOBJS) libimap.a $(DEPLIBS) $(LIBS)
-+	 reconstruct reconstruct.o $(CLIOBJS) libimap.a $(SIEVE_LIBS) $(DEPLIBS) $(LIBS)
- 
--quota: quota.o $(CLIOBJS) libimap.a $(DEPLIBS)
-+quota: quota.o $(CLIOBJS) libimap.a $(SIEVE_LIBS) $(DEPLIBS)
- 	$(CC) $(LDFLAGS) -o quota quota.o $(CLIOBJS) \
--	libimap.a $(DEPLIBS) $(LIBS)
-+	libimap.a $(SIEVE_LIBS) $(DEPLIBS) $(LIBS)
- 
--tls_prune: tls_prune.o tls.o $(CLIOBJS) libimap.a $(DEPLIBS)
-+tls_prune: tls_prune.o tls.o $(CLIOBJS) libimap.a $(SIEVE_LIBS) $(DEPLIBS)
- 	$(CC) $(LDFLAGS) -o \
--	 $@ tls_prune.o tls.o $(CLIOBJS) libimap.a $(DEPLIBS) $(LIBS)
-+	 $@ tls_prune.o tls.o $(CLIOBJS) libimap.a $(SIEVE_LIBS) $(DEPLIBS) $(LIBS)
- 
--unexpunge: unexpunge.o $(CLIOBJS) libimap.a $(DEPLIBS)
-+unexpunge: unexpunge.o $(CLIOBJS) libimap.a $(SIEVE_LIBS) $(DEPLIBS)
- 	$(CC) $(LDFLAGS) -o $@ unexpunge.o $(CLIOBJS) \
--	libimap.a $(DEPLIBS) $(LIBS)
-+	libimap.a $(SIEVE_LIBS) $(DEPLIBS) $(LIBS)
- 
--make_md5: make_md5.o libimap.a mutex_fake.o $(DEPLIBS)
--	$(CC) $(LDFLAGS) -o make_md5 make_md5.o libimap.a mutex_fake.o $(DEPLIBS) $(LIBS)
-+make_md5: make_md5.o libimap.a mutex_fake.o $(SIEVE_LIBS) $(DEPLIBS)
-+	$(CC) $(LDFLAGS) -o make_md5 make_md5.o libimap.a mutex_fake.o $(SIEVE_LIBS) $(DEPLIBS) $(LIBS)
- 
--make_sha1: make_sha1.o libimap.a mutex_fake.o $(DEPLIBS)
--	$(CC) $(LDFLAGS) -o make_sha1 make_sha1.o libimap.a mutex_fake.o $(DEPLIBS) $(LIBS)
-+make_sha1: make_sha1.o libimap.a mutex_fake.o $(SIEVE_LIBS) $(DEPLIBS)
-+	$(CC) $(LDFLAGS) -o make_sha1 make_sha1.o libimap.a mutex_fake.o $(SIEVE_LIBS) $(DEPLIBS) $(LIBS)
- 
- sync_client: sync_client.o sync_support.o \
--	backend.o tls.o imapparse.o libimap.a mutex_fake.o $(DEPLIBS)
-+	backend.o tls.o imapparse.o libimap.a mutex_fake.o $(SIEVE_LIBS) $(DEPLIBS)
- 	$(CC) $(LDFLAGS) -o \
- 	sync_client sync_client.o sync_support.o \
--	backend.o tls.o imapparse.o libimap.a mutex_fake.o $(DEPLIBS) $(LIBS)
-+	backend.o tls.o imapparse.o libimap.a mutex_fake.o $(SIEVE_LIBS) $(DEPLIBS) $(LIBS)
- 
- sync_reset: sync_reset.o sync_support.o sync_commit.o \
--	libimap.a mutex_fake.o $(DEPLIBS)
-+	libimap.a mutex_fake.o $(SIEVE_LIBS) $(DEPLIBS)
- 	$(CC) $(LDFLAGS) -o \
- 	sync_reset sync_reset.o sync_support.o sync_commit.o \
--	libimap.a mutex_fake.o $(DEPLIBS) $(LIBS)
-+	libimap.a mutex_fake.o $(SIEVE_LIBS) $(DEPLIBS) $(LIBS)
-+
-+compile_sieve: compile_sieve.o libimap.a $(DEPLIBS) $(SIEVE_LIBS)
-+	$(CC) $(LDFLAGS) -o compile_sieve compile_sieve.o $(CLIOBJS) \
-+	libimap.a $(SIEVE_LIBS) $(DEPLIBS) $(LIBS)
-+
- 
- ### Other Misc Targets
- 
-diff -Naur cyrus-imapd-2.3.16/imap/autosieve.c cyrus-imapd-2.3.16-autocreate.uncompiled/imap/autosieve.c
---- cyrus-imapd-2.3.16/imap/autosieve.c	1970-01-01 02:00:00.000000000 +0200
-+++ cyrus-imapd-2.3.16-autocreate.uncompiled/imap/autosieve.c	2009-12-22 19:56:22.000000000 +0200
-@@ -0,0 +1,590 @@
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <string.h>
-+
-+#ifdef HAVE_UNISTD_H
-+#include <unistd.h>
-+#endif
-+
-+#include <errno.h>
-+#include <sys/types.h>
-+#include <sys/stat.h>
-+#include <sys/uio.h>
-+#include <fcntl.h>
-+#include <ctype.h>
-+#include <time.h>
-+#include <syslog.h>
-+#include <com_err.h>
-+#include <config.h>
-+
-+#include "global.h"
-+#include "util.h"
-+#include "xmalloc.h"
-+#include "xstrlcpy.h"
-+#include "xstrlcat.h"
-+#include "mailbox.h"
-+#include "imap_err.h"
-+#include "sieve_interface.h"
-+#include "script.h"
-+
-+#define TIMSIEVE_FAIL 	-1
-+#define TIMSIEVE_OK 	0
-+#define MAX_FILENAME	1024
-+
-+static int get_script_name(char *sievename, size_t buflen, const char *filename);
-+static int get_script_dir(char *sieve_script_dir, size_t buflen, char *userid, const char *sieve_dir);
-+int autoadd_sieve(char *userid, const char *source_script);
-+
-+//static void fatal(const char *s, int code);
-+static void foo(void);
-+static int sieve_notify(void *ac __attribute__((unused)),
-+                        void *interp_context __attribute__((unused)),
-+                        void *script_context __attribute__((unused)),
-+                        void *message_context __attribute__((unused)),
-+                        const char **errmsg __attribute__((unused)));
-+static int mysieve_error(int lineno, const char *msg,
-+                  void *i __attribute__((unused)), void *s);
-+static int is_script_parsable(FILE *stream, char **errstr, sieve_script_t **ret);
-+
-+
-+sieve_vacation_t vacation2 = {
-+    0,                          /* min response */
-+    0,                          /* max response */
-+    (sieve_callback *) &foo,    /* autorespond() */
-+    (sieve_callback *) &foo     /* send_response() */
-+};
-+
-+
-+/*
-+ * Find the name of the sieve script
-+ * given the source script and compiled script names
-+ */
-+static int get_script_name(char *sievename, size_t buflen, const char *filename)
-+{
-+  char *p;
-+  int r;
-+
-+  p = strrchr(filename, '/');
-+  if (p == NULL)
-+      p = (char *) filename;
-+  else
-+      p++;
-+
-+  r = strlcpy(sievename, p, buflen) - buflen;
-+  return (r >= 0 || r == -buflen ? 1 : 0);
-+}
-+
-+
-+/*
-+ * Find the directory where the sieve scripts of the user
-+ * reside
-+ */
-+static int get_script_dir(char *sieve_script_dir, size_t buflen, char *userid, const char *sieve_dir)
-+{
-+    char *user = NULL, *domain = NULL;
-+
-+    /* Setup the user and the domain */
-+    if(config_virtdomains && (domain = strchr(userid, '@'))) {
-+        user = (char *) xmalloc((domain - userid +1) * sizeof(char));
-+        strlcpy(user, userid, domain - userid + 1);
-+        domain++;
-+    } else
-+        user = userid;
-+
-+    /*  Find the dir path where the sieve scripts of the user will reside */   
-+    if (config_virtdomains && domain) {
-+         if(snprintf(sieve_script_dir, buflen, "%s%s%c/%s/%c/%s/",
-+              sieve_dir, FNAME_DOMAINDIR, dir_hash_c(domain, config_fulldirhash), domain, dir_hash_c(user,config_fulldirhash), user) >= buflen) {
-+                 free(user);
-+                 return 1;
-+ 	 }
-+    } else {
-+         if(snprintf(sieve_script_dir, buflen, "%s/%c/%s/", 
-+     	      sieve_dir, dir_hash_c(user,config_fulldirhash), user) >= buflen) 
-+                 return 1;
-+    }
-+
-+    /* Free the xmalloced user memory, reserved above */
-+    if(user != userid)
-+        free(user);
-+
-+    return 0;
-+}
-+
-+int autoadd_sieve(char *userid, const char *source_script)
-+{   
-+    sieve_script_t *s = NULL;
-+    bytecode_info_t *bc = NULL;
-+    char *err = NULL;
-+    FILE *in_stream, *out_fp;
-+    int out_fd, in_fd, r, k;
-+    int do_compile = 0;
-+    const char *sieve_dir = NULL;
-+    const char *compiled_source_script = NULL;
-+    char sievename[MAX_FILENAME];
-+    char sieve_script_name[MAX_FILENAME];
-+    char sieve_script_dir[MAX_FILENAME];
-+    char sieve_bcscript_name[MAX_FILENAME];
-+    char sieve_default[MAX_FILENAME];
-+    char sieve_tmpname[MAX_FILENAME];
-+    char sieve_bctmpname[MAX_FILENAME];
-+    char sieve_bclink_name[MAX_FILENAME];
-+    char buf[4096];
-+    mode_t oldmask;
-+    struct stat statbuf;
-+
-+    /* We don't support using the homedirectory, like timsieved */
-+    if (config_getswitch(IMAPOPT_SIEVEUSEHOMEDIR)) {
-+        syslog(LOG_WARNING,"autocreate_sieve: autocreate_sieve does not work with sieveusehomedir option in imapd.conf");
-+        return 1;
-+    }
-+
-+    /* Check if sievedir is defined in imapd.conf */
-+    if(!(sieve_dir = config_getstring(IMAPOPT_SIEVEDIR))) { 
-+        syslog(LOG_WARNING, "autocreate_sieve: sievedir option is not defined. Check imapd.conf");
-+        return 1;
-+    }
-+
-+    /* Check if autocreate_sieve_compiledscript is defined in imapd.conf */
-+    if(!(compiled_source_script  = config_getstring(IMAPOPT_AUTOCREATE_SIEVE_COMPILEDSCRIPT))) {
-+        syslog(LOG_WARNING, "autocreate_sieve: autocreate_sieve_compiledscript option is not defined. Compiling it");
-+        do_compile = 1;
-+    }
-+
-+    if(get_script_dir(sieve_script_dir, sizeof(sieve_script_dir), userid, sieve_dir)) {
-+        syslog(LOG_WARNING, "autocreate_sieve: Cannot find sieve scripts directory");
-+        return 1;
-+    }
-+
-+    if (get_script_name(sievename, sizeof(sievename), source_script)) {
-+        syslog(LOG_WARNING, "autocreate_sieve: Invalid sieve script %s", source_script);
-+        return 1;
-+    }
-+
-+    if(snprintf(sieve_tmpname, sizeof(sieve_tmpname), "%s%s.script.NEW",sieve_script_dir, sievename) >= sizeof(sieve_tmpname)) {
-+        syslog(LOG_WARNING, "autocreate_sieve: Invalid sieve path %s, %s, %s", sieve_dir, sievename, userid);
-+        return 1;
-+    }
-+    if(snprintf(sieve_bctmpname, sizeof(sieve_bctmpname), "%s%s.bc.NEW",sieve_script_dir, sievename) >= sizeof(sieve_bctmpname)) {
-+        syslog(LOG_WARNING, "autocreate_sieve: Invalid sieve path %s, %s, %s", sieve_dir, sievename, userid);
-+        return 1;
-+    }    
-+    if(snprintf(sieve_script_name, sizeof(sieve_script_name), "%s%s.script",sieve_script_dir, sievename) >= sizeof(sieve_script_name)) {
-+        syslog(LOG_WARNING, "autocreate_sieve: Invalid sieve path %s, %s, %s", sieve_dir, sievename, userid);
-+        return 1;
-+    }
-+    if(snprintf(sieve_bcscript_name, sizeof(sieve_bcscript_name), "%s%s.bc",sieve_script_dir, sievename) >= sizeof(sieve_bcscript_name)) {
-+        syslog(LOG_WARNING, "autocreate_sieve: Invalid sieve path %s, %s, %s", sieve_dir, sievename, userid);
-+        return 1;
-+    }
-+    if(snprintf(sieve_default, sizeof(sieve_default), "%s%s",sieve_script_dir,"defaultbc") >= sizeof(sieve_default)) {
-+        syslog(LOG_WARNING, "autocreate_sieve: Invalid sieve path %s, %s, %s", sieve_dir, sievename, userid);
-+        return 1;
-+    }
-+    if(snprintf(sieve_bclink_name, sizeof(sieve_bclink_name), "%s.bc", sievename) >= sizeof(sieve_bclink_name))  {
-+        syslog(LOG_WARNING, "autocreate_sieve: Invalid sieve path %s, %s, %s", sieve_dir, sievename, userid);
-+        return 1;
-+    }
-+
-+    /* Check if a default sieve filter alrady exists */
-+    if(!stat(sieve_default,&statbuf)) {
-+        syslog(LOG_WARNING,"autocreate_sieve: Default sieve script already exists");
-+        fclose(in_stream);
-+        return 1;
-+    }
-+
-+    /* Open the source script. if there is a problem with that exit */
-+    in_stream = fopen(source_script, "r");
-+    if(!in_stream) {
-+        syslog(LOG_WARNING,"autocreate_sieve: Unable to open sieve script %s. Check permissions",source_script);
-+        return 1;
-+    }
-+    
-+    
-+    /* 
-+     * At this point we start the modifications of the filesystem 
-+     */
-+
-+    /* Create the directory where the sieve scripts will reside */
-+    r = cyrus_mkdir(sieve_script_dir, 0755);
-+    if(r == -1) {
-+        /* If this fails we just leave */
-+        syslog(LOG_WARNING,"autocreate_sieve: Unable to create directory %s. Check permissions",sieve_script_name);
-+        return 1;
-+    }
-+
-+    /*
-+     * We open the file that will be used as the bc file. If this file exists, overwrite it 
-+     * since something bad has happened. We open the file here so that this error checking is
-+     * done before we try to open the rest of the files to start copying etc. 
-+     */
-+    out_fd = open(sieve_bctmpname, O_CREAT|O_TRUNC|O_WRONLY, S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);
-+    if(out_fd < 0) {
-+        if(errno == EEXIST) {
-+            syslog(LOG_WARNING,"autocreate_sieve: File %s already exists. Probaly left over. Ignoring",sieve_bctmpname);
-+        } else if (errno == EACCES) {
-+            syslog(LOG_WARNING,"autocreate_sieve: No access to create file %s. Check permissions",sieve_bctmpname);
-+            fclose(in_stream);
-+            return 1;
-+        } else {
-+            syslog(LOG_WARNING,"autocreate_sieve: Unable to create %s. Unknown error",sieve_bctmpname);
-+            fclose(in_stream);
-+            return 1;
-+        }
-+    }
-+
-+    if(!do_compile && compiled_source_script && (in_fd = open(compiled_source_script, O_RDONLY)) != -1) {
-+        while((r = read(in_fd, buf, sizeof(buf))) > 0) {
-+            if((k=write(out_fd, buf,r)) < 0) {
-+                syslog(LOG_WARNING, "autocreate_sieve: Error writing to file: %s, error: %d", sieve_bctmpname, errno);
-+                close(out_fd);
-+                close(in_fd);
-+                fclose(in_stream);
-+                unlink(sieve_bctmpname);
-+                return 1;
-+           }
-+        } 
-+
-+        if(r == 0) { /* EOF */
-+            close(out_fd);
-+            close(in_fd);
-+        } else if (r < 0) {
-+            syslog(LOG_WARNING, "autocreate_sieve: Error reading compiled script file: %s. Will try to compile it", 
-+                           compiled_source_script);
-+            close(in_fd);
-+            do_compile = 1;
-+            if(lseek(out_fd, 0, SEEK_SET)) {
-+                syslog(LOG_WARNING, "autocreate_sieve: Major IO problem. Aborting");
-+                return 1;
-+            }
-+        }
-+        close(in_fd);
-+    } else {
-+        if(compiled_source_script)
-+              syslog(LOG_WARNING,"autocreate_sieve: Problem opening compiled script file: %s. Compiling it", compiled_source_script);
-+        do_compile = 1;
-+    }
-+
-+
-+    /* Because we failed to open a precompiled bc sieve script, we compile one */
-+    if(do_compile) {
-+       if(is_script_parsable(in_stream,&err, &s) == TIMSIEVE_FAIL) {
-+            if(err && *err) {
-+               syslog(LOG_WARNING,"autocreate_sieve: Error while parsing script %s.",err);
-+               free(err);
-+            } else
-+                syslog(LOG_WARNING,"autocreate_sieve: Error while parsing script");
-+    
-+            unlink(sieve_bctmpname);
-+            fclose(in_stream);
-+            close(out_fd);
-+            return 1;
-+        }
-+
-+        /* generate the bytecode */
-+        if(sieve_generate_bytecode(&bc, s) == TIMSIEVE_FAIL) {
-+            syslog(LOG_WARNING,"autocreate_sieve: problem compiling sieve script");
-+            /* removing the copied script and cleaning up memory */
-+            unlink(sieve_bctmpname);
-+            sieve_script_free(&s);
-+            fclose(in_stream);
-+            close(out_fd);
-+            return 1;
-+        }
-+
-+        if(sieve_emit_bytecode(out_fd, bc) == TIMSIEVE_FAIL) {
-+            syslog(LOG_WARNING,"autocreate_sieve: problem emiting sieve script");
-+            /* removing the copied script and cleaning up memory */
-+            unlink(sieve_bctmpname);
-+            sieve_free_bytecode(&bc);
-+            sieve_script_free(&s);
-+            fclose(in_stream);
-+            close(out_fd);
-+            return 1;
-+        }
-+
-+        /* clean up the memory */
-+        sieve_free_bytecode(&bc);
-+        sieve_script_free(&s);
-+    }
-+
-+    close(out_fd);
-+    rewind(in_stream);
-+
-+    /* Copy the initial script */
-+    oldmask = umask(077);
-+    if((out_fp = fopen(sieve_tmpname, "w")) == NULL) {
-+        syslog(LOG_WARNING,"autocreate_sieve: Unable to open %s destination sieve script", sieve_tmpname);
-+        unlink(sieve_bctmpname);
-+        umask(oldmask);
-+        fclose(in_stream);
-+        return 1;
-+    }
-+    umask(oldmask);
-+
-+    while((r = fread(buf,sizeof(char), sizeof(buf), in_stream))) {
-+        if( fwrite(buf,sizeof(char), r, out_fp) != r) {
-+            syslog(LOG_WARNING,"autocreate_sieve: Problem writing to sieve script file: %s",sieve_tmpname);
-+            fclose(out_fp);
-+            unlink(sieve_tmpname);
-+            unlink(sieve_bctmpname);
-+            fclose(in_stream);
-+            return 1;
-+        }
-+    }
-+    
-+    if(feof(in_stream)) {
-+        fclose(out_fp);
-+    } else { /* ferror */
-+        fclose(out_fp);
-+        unlink(sieve_tmpname);
-+        unlink(sieve_bctmpname);
-+        fclose(in_stream);
-+        return 1;
-+    }
-+
-+    /* Renaming the necessary stuff */
-+    if(rename(sieve_tmpname, sieve_script_name)) {
-+        unlink(sieve_tmpname);
-+        unlink(sieve_bctmpname);
-+        return 1;
-+    }
-+
-+    if(rename(sieve_bctmpname, sieve_bcscript_name)) {
-+        unlink(sieve_bctmpname);
-+        unlink(sieve_bcscript_name);
-+        return 1;
-+    }
-+
-+    /* end now with the symlink */
-+    if(symlink(sieve_bclink_name, sieve_default)) {
-+        if(errno != EEXIST) {
-+            syslog(LOG_WARNING, "autocreate_sieve: problem making the default link.");
-+            /* Lets delete the files */
-+            unlink(sieve_script_name);
-+            unlink(sieve_bcscript_name);
-+        }
-+    }
-+
-+    /* 
-+     * If everything has succeeded AND we have compiled the script AND we have requested
-+     * to generate the global script so that it is not compiled each time then we create it.
-+     */
-+    if(do_compile && 
-+          config_getswitch(IMAPOPT_GENERATE_COMPILED_SIEVE_SCRIPT)) {
-+
-+        if(!compiled_source_script) {
-+            syslog(LOG_WARNING, "autocreate_sieve: To save a compiled sieve script, autocreate_sieve_compiledscript must have been defined in imapd.conf");
-+            return 0;
-+        }
-+
-+        if(snprintf(sieve_tmpname, sizeof(sieve_tmpname), "%s.NEW", compiled_source_script) >= sizeof(sieve_tmpname))
-+            return 0;
-+
-+        /*
-+         * Copy everything from the newly created bc sieve sieve script.
-+         */
-+        if((in_fd = open(sieve_bcscript_name, O_RDONLY))<0) {
-+            return 0;
-+        }
-+
-+        if((out_fd = open(sieve_tmpname, O_CREAT|O_EXCL|O_WRONLY, S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH)) < 0) {
-+            if(errno == EEXIST) {
-+               /* Someone is already doing this so just bail out. */
-+               syslog(LOG_WARNING, "autocreate_sieve: %s already exists. Some other instance processing it, or it is left over", sieve_tmpname);
-+                close(in_fd);
-+                return 0; 
-+            } else if (errno == EACCES) {
-+                syslog(LOG_WARNING,"autocreate_sieve: No access to create file %s. Check permissions",sieve_tmpname);
-+                close(in_fd);
-+                return 0;
-+            } else {
-+                syslog(LOG_WARNING,"autocreate_sieve: Unable to create %s",sieve_tmpname);
-+                close(in_fd);
-+                return 0;
-+            }
-+        }
-+
-+        while((r = read(in_fd, buf, sizeof(buf))) > 0) {
-+            if((k = write(out_fd,buf,r)) < 0) {
-+                syslog(LOG_WARNING, "autocreate_sieve: Error writing to file: %s, error: %d", sieve_tmpname, errno);
-+                close(out_fd);
-+                close(in_fd);
-+                unlink(sieve_tmpname);
-+                return 0;
-+           }
-+        }
-+
-+        if(r == 0 ) { /*EOF */
-+            close(out_fd);
-+            close(in_fd);
-+        } else if (r < 0) {
-+                syslog(LOG_WARNING, "autocreate_sieve: Error writing to file: %s, error: %d", sieve_tmpname, errno);
-+                close(out_fd);
-+                close(in_fd);
-+                unlink(sieve_tmpname);
-+                return 0;
-+        }
-+
-+        /* Rename the temporary created sieve script to its final name. */
-+        if(rename(sieve_tmpname, compiled_source_script)) {
-+            if(errno != EEXIST) {
-+               unlink(sieve_tmpname);
-+               unlink(compiled_source_script);
-+        }
-+            return 0;
-+        }
-+
-+        syslog(LOG_NOTICE, "autocreate_sieve: Compiled sieve script was successfully saved in %s", compiled_source_script);
-+    }
-+
-+    return 0;
-+}
-+
-+/*static void fatal(const char *s, int code)
-+{   
-+    printf("Fatal error: %s (%d)\r\n", s, code);
-+    exit(1);
-+}*/
-+
-+/* to make larry's stupid functions happy :) */
-+static void foo(void)
-+{
-+    fatal("stub function called", 0);
-+}
-+
-+static int sieve_notify(void *ac __attribute__((unused)),
-+                        void *interp_context __attribute__((unused)),
-+                        void *script_context __attribute__((unused)),
-+                        void *message_context __attribute__((unused)),
-+                        const char **errmsg __attribute__((unused)))
-+{
-+    fatal("stub function called", 0);
-+    return SIEVE_FAIL;
-+}
-+
-+static int mysieve_error(int lineno, const char *msg,
-+                  void *i __attribute__((unused)), void *s)
-+{
-+    char buf[1024];
-+    char **errstr = (char **) s;
-+
-+    snprintf(buf, 80, "line %d: %s\r\n", lineno, msg);
-+    *errstr = (char *) xrealloc(*errstr, strlen(*errstr) + strlen(buf) + 30);
-+    syslog(LOG_DEBUG, "%s", buf);
-+    strcat(*errstr, buf);
-+
-+    return SIEVE_OK;
-+}
-+
-+/* end the boilerplate */
-+
-+/* returns TRUE or FALSE */
-+int is_script_parsable(FILE *stream, char **errstr, sieve_script_t **ret)
-+{
-+    sieve_interp_t *i;
-+    sieve_script_t *s;
-+    int res;
-+
-+    res = sieve_interp_alloc(&i, NULL);
-+    if (res != SIEVE_OK) {
-+        syslog(LOG_WARNING, "sieve_interp_alloc() returns %d\n", res);
-+        return TIMSIEVE_FAIL;
-+    }
-+
-+    res = sieve_register_redirect(i, (sieve_callback *) &foo);
-+    if (res != SIEVE_OK) {
-+        syslog(LOG_WARNING, "sieve_register_redirect() returns %d\n", res);
-+        return TIMSIEVE_FAIL;
-+    }
-+    res = sieve_register_discard(i, (sieve_callback *) &foo);
-+    if (res != SIEVE_OK) {
-+        syslog(LOG_WARNING, "sieve_register_discard() returns %d\n", res);
-+        return TIMSIEVE_FAIL;
-+    }
-+    res = sieve_register_reject(i, (sieve_callback *) &foo);
-+    if (res != SIEVE_OK) {
-+        syslog(LOG_WARNING, "sieve_register_reject() returns %d\n", res);
-+        return TIMSIEVE_FAIL;
-+    }
-+    res = sieve_register_fileinto(i, (sieve_callback *) &foo);
-+    if (res != SIEVE_OK) {
-+        syslog(LOG_WARNING, "sieve_register_fileinto() returns %d\n", res);
-+        return TIMSIEVE_FAIL;
-+    }
-+    res = sieve_register_keep(i, (sieve_callback *) &foo);
-+    if (res != SIEVE_OK) {
-+        syslog(LOG_WARNING, "sieve_register_keep() returns %d\n", res);
-+        return TIMSIEVE_FAIL;
-+    }
-+
-+    res = sieve_register_imapflags(i, NULL);
-+    if (res != SIEVE_OK) {
-+        syslog(LOG_WARNING, "sieve_register_imapflags() returns %d\n", res);
-+        return TIMSIEVE_FAIL;
-+    }
-+
-+    res = sieve_register_size(i, (sieve_get_size *) &foo);
-+    if (res != SIEVE_OK) {
-+        syslog(LOG_WARNING, "sieve_register_size() returns %d\n", res);
-+        return TIMSIEVE_FAIL;
-+    }
-+
-+    res = sieve_register_header(i, (sieve_get_header *) &foo);
-+    if (res != SIEVE_OK) {
-+        syslog(LOG_WARNING, "sieve_register_header() returns %d\n", res);
-+        return TIMSIEVE_FAIL;
-+    }
-+
-+    res = sieve_register_envelope(i, (sieve_get_envelope *) &foo);
-+    if (res != SIEVE_OK) {
-+        syslog(LOG_WARNING, "sieve_register_envelope() returns %d\n", res);
-+        return TIMSIEVE_FAIL;
-+    }
-+
-+    res = sieve_register_vacation(i, &vacation2);
-+    if (res != SIEVE_OK) {
-+        syslog(LOG_WARNING, "sieve_register_vacation() returns %d\n", res);
-+        return TIMSIEVE_FAIL;
-+    }
-+
-+    res = sieve_register_notify(i, &sieve_notify);
-+    if (res != SIEVE_OK) {
-+        syslog(LOG_WARNING, "sieve_register_notify() returns %d\n", res);
-+        return TIMSIEVE_FAIL;
-+    }
-+
-+    res = sieve_register_parse_error(i, &mysieve_error);
-+    if (res != SIEVE_OK) {
-+        syslog(LOG_WARNING, "sieve_register_parse_error() returns %d\n", res);
-+        return TIMSIEVE_FAIL;
-+    }
-+
-+    rewind(stream);
-+
-+    *errstr = (char *) xmalloc(20 * sizeof(char));
-+    strcpy(*errstr, "script errors:\r\n");
-+
-+    res = sieve_script_parse(i, stream, errstr, &s);
-+
-+    if (res == SIEVE_OK) {
-+        if(ret) {
-+            *ret = s;
-+        } else {
-+            sieve_script_free(&s);
-+        }
-+        free(*errstr);
-+        *errstr = NULL;
-+    }
-+
-+    /* free interpreter */
-+    sieve_interp_free(&i);
-+
-+    return (res == SIEVE_OK) ? TIMSIEVE_OK : TIMSIEVE_FAIL;
-+}
-+
-+/*
-+ * Btw the initial date of this patch is Sep, 02 2004 which is the birthday of
-+ * Pavlos. Author of cyrusmaster. So consider this patch as his birthday present
-+ */
-+
-diff -Naur cyrus-imapd-2.3.16/imap/compile_sieve.c cyrus-imapd-2.3.16-autocreate.uncompiled/imap/compile_sieve.c
---- cyrus-imapd-2.3.16/imap/compile_sieve.c	1970-01-01 02:00:00.000000000 +0200
-+++ cyrus-imapd-2.3.16-autocreate.uncompiled/imap/compile_sieve.c	2009-12-22 19:56:22.000000000 +0200
-@@ -0,0 +1,365 @@
-+/* This tool compiles the sieve script from a command
-+line so that it can be used wby the autoadd patch */
-+#include <stdio.h>
-+#include <stdlib.h>
-+
-+#include <config.h>
-+#include <string.h>
-+#ifdef HAVE_UNISTD_H
-+#include <unistd.h>
-+#endif
-+#include <errno.h>
-+#include <sys/types.h>
-+#include <sys/stat.h>
-+#include <sys/uio.h>
-+#include <fcntl.h>
-+#include <ctype.h>
-+#include <time.h>
-+#include <com_err.h>
-+
-+#include "global.h"
-+
-+#include "util.h"
-+#include "xmalloc.h"
-+#include "xstrlcpy.h"
-+#include "xstrlcat.h"
-+#include "mailbox.h"
-+#include "imap_err.h"
-+#include "sieve_interface.h"
-+#include "script.h"
-+
-+#include <pwd.h>
-+
-+#define TIMSIEVE_FAIL 		-1
-+#define TIMSIEVE_OK 		0
-+#define MAX_FILENAME_SIZE	100
-+
-+/* Needed by libconfig */
-+const int config_need_data = 0;
-+
-+static int is_script_parsable(FILE *stream, char **errstr, sieve_script_t **ret);
-+
-+/*static void fatal(const char *s, int code)
-+{   
-+    printf("Fatal error: %s (%d)\r\n", s, code);
-+
-+    exit(1);
-+}*/
-+
-+void usage(void)
-+{
-+    fprintf(stderr,
-+            "Usage:\n\tcompile_sieve [-C <altconfig>] [-i <infile> -o <outfile>]\n");
-+    exit(-1);
-+}
-+
-+
-+int main (int argc, char **argv)
-+{   
-+
-+    sieve_script_t *s = NULL;
-+    bytecode_info_t *bc = NULL;
-+    char *err = NULL;
-+    FILE *in_stream;
-+    int  out_fd, opt;
-+    char *source_script = NULL;
-+    char *compiled_source_script = NULL;
-+    char *alt_config = NULL;
-+    extern char *optarg;
-+    char sieve_tmpname[MAX_MAILBOX_NAME+1];
-+
-+    if (geteuid() == 0) fatal("must run as the Cyrus user", EC_USAGE);
-+
-+    while((opt = getopt(argc, argv, "C:i:o:")) != EOF) {
-+        switch (opt) {
-+            case 'C': /* alt config file */
-+	        alt_config =  optarg;
-+	        break;
-+	    case 'i': /* input script file */
-+		source_script = optarg;
-+		break;
-+	    case 'o': /* output script file */
-+		compiled_source_script = optarg;
-+		break;
-+	    default:
-+	        usage();
-+		break;
-+	}
-+    }
-+
-+    if(source_script && !compiled_source_script) {
-+	    fprintf(stderr, "No output file was defined\n");
-+	    usage();
-+    } else if (!source_script && compiled_source_script) {
-+	    fprintf(stderr, "No input file was defined\n");
-+	    usage();
-+    }	
-+
-+    /*
-+     * If no <infile> has been defined, then read them from
-+     * the configuration file.
-+     */
-+    if (!source_script && !compiled_source_script) { 
-+	    cyrus_init(alt_config, "compile_sieve", 0);
-+
-+	    /* Initially check if we want to have the sieve script created */
-+	    if(!(source_script = (char *) config_getstring(IMAPOPT_AUTOCREATE_SIEVE_SCRIPT))) {
-+        	fprintf(stderr,"autocreate_sieve_script option not defined. Check imapd.conf\n");
-+	        return 1;
-+	    }
-+
-+	    /* Check if we have an already compiled sieve script*/
-+	    if(!(compiled_source_script = (char *) config_getstring(IMAPOPT_AUTOCREATE_SIEVE_COMPILEDSCRIPT))) {
-+	        fprintf(stderr, "autocreate_sieve_compiledscript option not defined. Check imapd.conf\n");
-+		return 1;
-+	    }
-+
-+	    if(!strrchr(source_script,'/') || !strrchr(compiled_source_script,'/')) {
-+       		/* 
-+		 * At this point the only think that is inconsistent is the directory 
-+		 * that was created. But if the user will have any sieve scripts then 
-+		 * they will eventually go there, so no big deal 
-+		 */
-+	        fprintf(stderr, 
-+			"In imapd.conf the full path of the filenames must be defined\n");
-+	       	return 1;
-+	    }
-+    }
-+
-+    printf("input file : %s, output file : %s\n", source_script, compiled_source_script);
-+
-+
-+    if(strlen(compiled_source_script) + sizeof(".NEW") + 1 > sizeof(sieve_tmpname)) {
-+	    fprintf(stderr, "Filename %s is too big\n", compiled_source_script);
-+	    return 1;
-+    }
-+    	
-+    snprintf(sieve_tmpname, sizeof(sieve_tmpname), "%s.NEW", compiled_source_script);
-+
-+    in_stream = fopen(source_script,"r");
-+
-+    if(!in_stream) {
-+        fprintf(stderr,"Unable to open %s source sieve script\n",source_script);
-+        return 1; 
-+    }
-+
-+    /* 
-+     * We open the file that will be used as the bc file. If this file exists, overwrite it 
-+     * since something bad has happened. We open the file here so that this error checking is
-+     * done before we try to open the rest of the files to start copying etc. 
-+     */
-+    out_fd = open(sieve_tmpname, O_CREAT|O_EXCL|O_WRONLY, S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);
-+    if(out_fd < 0) {
-+        if(errno == EEXIST) {
-+            fprintf(stderr, "File %s already exists\n", sieve_tmpname);
-+        } else if (errno == EACCES) {
-+            fprintf(stderr,"No access to create file %s. Please check that you have the correct permissions\n",
-+			    sieve_tmpname);
-+        } else {
-+            fprintf(stderr,"Unable to create %s. Please check that you have the correct permissions\n", 
-+			    sieve_tmpname);
-+        }
-+	
-+	fclose(in_stream);
-+	return 1;
-+    }
-+
-+    if(is_script_parsable(in_stream,&err, &s) == TIMSIEVE_FAIL) {
-+        if(err && *err) {
-+           fprintf(stderr, "Error while parsing script %s\n",err);
-+           free(err);
-+        }
-+        else
-+            fprintf(stderr,"Error while parsing script\n");
-+            unlink(sieve_tmpname);
-+	    fclose(in_stream);
-+	    close(out_fd);
-+        return 1;
-+   }
-+
-+
-+    /* generate the bytecode */
-+    if(sieve_generate_bytecode(&bc,s) == TIMSIEVE_FAIL) {
-+        fprintf(stderr,"Error occured while compiling sieve script\n");
-+        /* removing the copied script and cleaning up memory */
-+        unlink(sieve_tmpname);
-+        sieve_script_free(&s);
-+        fclose(in_stream);
-+        close(out_fd);
-+        return 1;
-+    }
-+    if(sieve_emit_bytecode(out_fd,bc) == TIMSIEVE_FAIL) {
-+        fprintf(stderr, "Error occured while emitting sieve script\n");
-+        unlink(sieve_tmpname);
-+        sieve_free_bytecode(&bc);
-+        sieve_script_free(&s);
-+        fclose(in_stream);
-+        close(out_fd);
-+        return 1;
-+    }
-+
-+    /* clean up the memory */
-+    sieve_free_bytecode(&bc);
-+    sieve_script_free(&s);
-+
-+    close(out_fd);
-+
-+    if(rename(sieve_tmpname, compiled_source_script)) {
-+        if(errno != EEXIST) {
-+            unlink(sieve_tmpname);
-+            unlink(compiled_source_script);
-+            return 1;
-+        }
-+    }
-+    return 0;
-+}
-+
-+
-+/* to make larry's stupid functions happy :) */
-+static void foo(void)
-+{
-+    fatal("stub function called", 0);
-+}
-+
-+extern sieve_vacation_t vacation2;/* = {
-+    0,                          / min response /
-+    0,                          / max response /
-+    (sieve_callback *) &foo,    / autorespond() /
-+    (sieve_callback *) &foo     / send_response() /
-+}; */
-+
-+static int sieve_notify(void *ac __attribute__((unused)),
-+                        void *interp_context __attribute__((unused)),
-+                        void *script_context __attribute__((unused)),
-+                        void *message_context __attribute__((unused)),
-+                        const char **errmsg __attribute__((unused)))
-+{
-+    fatal("stub function called", 0);
-+    return SIEVE_FAIL;
-+}
-+
-+static int mysieve_error(int lineno, const char *msg,
-+                  void *i __attribute__((unused)), void *s)
-+{
-+    char buf[1024];
-+    char **errstr = (char **) s;
-+
-+    snprintf(buf, 80, "line %d: %s\r\n", lineno, msg);
-+    *errstr = (char *) xrealloc(*errstr, strlen(*errstr) + strlen(buf) + 30);
-+    fprintf(stderr, "%s\n", buf);
-+    strcat(*errstr, buf);
-+
-+    return SIEVE_OK;
-+}
-+
-+/* end the boilerplate */
-+
-+/* returns TRUE or FALSE */
-+int is_script_parsable(FILE *stream, char **errstr, sieve_script_t **ret)
-+{
-+    sieve_interp_t *i;
-+    sieve_script_t *s;
-+    int res;
-+
-+    res = sieve_interp_alloc(&i, NULL);
-+    if (res != SIEVE_OK) {
-+        fprintf(stderr, "sieve_interp_alloc() returns %d\n", res);
-+        return TIMSIEVE_FAIL;
-+    }
-+
-+    res = sieve_register_redirect(i, (sieve_callback *) &foo);
-+    if (res != SIEVE_OK) {
-+        fprintf(stderr, "sieve_register_redirect() returns %d\n", res);
-+        return TIMSIEVE_FAIL;
-+    }
-+    res = sieve_register_discard(i, (sieve_callback *) &foo);
-+    if (res != SIEVE_OK) {
-+        fprintf(stderr, "sieve_register_discard() returns %d\n", res);
-+        return TIMSIEVE_FAIL;
-+    }
-+    res = sieve_register_reject(i, (sieve_callback *) &foo);
-+    if (res != SIEVE_OK) {
-+        fprintf(stderr, "sieve_register_reject() returns %d\n", res);
-+        return TIMSIEVE_FAIL;
-+    }
-+    res = sieve_register_fileinto(i, (sieve_callback *) &foo);
-+    if (res != SIEVE_OK) {
-+        fprintf(stderr, "sieve_register_fileinto() returns %d\n", res);
-+        return TIMSIEVE_FAIL;
-+    }
-+    res = sieve_register_keep(i, (sieve_callback *) &foo);
-+    if (res != SIEVE_OK) {
-+        fprintf(stderr, "sieve_register_keep() returns %d\n", res);
-+        return TIMSIEVE_FAIL;
-+    }
-+
-+    res = sieve_register_imapflags(i, NULL);
-+    if (res != SIEVE_OK) {
-+        fprintf(stderr, "sieve_register_imapflags() returns %d\n", res);
-+        return TIMSIEVE_FAIL;
-+    }
-+
-+    res = sieve_register_size(i, (sieve_get_size *) &foo);
-+    if (res != SIEVE_OK) {
-+        fprintf(stderr, "sieve_register_size() returns %d\n", res);
-+        return TIMSIEVE_FAIL;
-+    }
-+
-+    res = sieve_register_header(i, (sieve_get_header *) &foo);
-+    if (res != SIEVE_OK) {
-+        fprintf(stderr, "sieve_register_header() returns %d\n", res);
-+        return TIMSIEVE_FAIL;
-+    }
-+
-+    res = sieve_register_envelope(i, (sieve_get_envelope *) &foo);
-+    if (res != SIEVE_OK) {
-+        fprintf(stderr, "sieve_register_envelope() returns %d\n", res);
-+        return TIMSIEVE_FAIL;
-+    }
-+
-+    res = sieve_register_vacation(i, &vacation2);
-+    if (res != SIEVE_OK) {
-+        fprintf(stderr, "sieve_register_vacation() returns %d\n", res);
-+        return TIMSIEVE_FAIL;
-+    }
-+
-+    res = sieve_register_notify(i, &sieve_notify);
-+    if (res != SIEVE_OK) {
-+        fprintf(stderr, "sieve_register_notify() returns %d\n", res);
-+        return TIMSIEVE_FAIL;
-+    }
-+
-+    res = sieve_register_parse_error(i, &mysieve_error);
-+    if (res != SIEVE_OK) {
-+        fprintf(stderr, "sieve_register_parse_error() returns %d\n", res);
-+        return TIMSIEVE_FAIL;
-+    }
-+
-+    rewind(stream);
-+
-+    *errstr = (char *) xmalloc(20 * sizeof(char));
-+    strcpy(*errstr, "script errors:\r\n");
-+
-+    res = sieve_script_parse(i, stream, errstr, &s);
-+
-+    if (res == SIEVE_OK) {
-+        if(ret) {
-+            *ret = s;
-+        } else {
-+            sieve_script_free(&s);
-+        }
-+        free(*errstr);
-+        *errstr = NULL;
-+    }
-+
-+    /* free interpreter */
-+    sieve_interp_free(&i);
-+
-+    return (res == SIEVE_OK) ? TIMSIEVE_OK : TIMSIEVE_FAIL;
-+}
-+
-+
-+
-+
-+
-+
-diff -Naur cyrus-imapd-2.3.16/imap/imapd.c cyrus-imapd-2.3.16-autocreate.uncompiled/imap/imapd.c
---- cyrus-imapd-2.3.16/imap/imapd.c	2009-12-16 04:51:39.000000000 +0200
-+++ cyrus-imapd-2.3.16-autocreate.uncompiled/imap/imapd.c	2009-12-22 19:56:22.000000000 +0200
-@@ -214,6 +214,7 @@
- void motd_file(int fd);
- void shut_down(int code);
- void fatal(const char *s, int code);
-+void autocreate_inbox(void);
- 
- void cmdloop(void);
- void cmd_login(char *tag, char *user);
-@@ -2011,6 +2012,43 @@
- }
- 
- /*
-+ * Autocreate Inbox and subfolders upon login
-+ */
-+void autocreate_inbox()
-+{
-+    char inboxname[MAX_MAILBOX_NAME+1];
-+    int autocreatequota;
-+    int r;
-+ 
-+    /*
-+     * Exlude admin's accounts
-+     */
-+    if (imapd_userisadmin || imapd_userisproxyadmin)
-+        return;
-+ 
-+    /*
-+     * Exclude anonymous
-+     */
-+    if (!strcmp(imapd_userid, "anonymous"))
-+        return;
-+ 
-+    if ((autocreatequota = config_getint(IMAPOPT_AUTOCREATEQUOTA))) {
-+        /* This is actyally not required
-+           as long as the lenght of userid is ok */
-+           r = (*imapd_namespace.mboxname_tointernal) (&imapd_namespace,
-+                                      "INBOX", imapd_userid, inboxname);
-+           if (!r)
-+               r = mboxlist_lookup(inboxname, NULL, NULL);
-+ 
-+           if (r == IMAP_MAILBOX_NONEXISTENT) {
-+                mboxlist_autocreateinbox(&imapd_namespace, imapd_userid,
-+                         imapd_authstate, inboxname, autocreatequota);
-+	   }
-+     }
-+}
-+
-+
-+/*
-  * Perform a LOGIN command
-  */
- void cmd_login(char *tag, char *user)
-@@ -2187,6 +2225,9 @@
- 				strcspn(imapd_userid, "@") : 0);
- 
-     freebuf(&passwdbuf);
-+
-+    autocreate_inbox();
-+
-     return;
- }
- 
-@@ -2344,6 +2385,8 @@
- 				config_virtdomains ?
- 				strcspn(imapd_userid, "@") : 0);
- 
-+    autocreate_inbox();
-+
-     return;
- }
- 
-diff -Naur cyrus-imapd-2.3.16/imap/lmtpd.c cyrus-imapd-2.3.16-autocreate.uncompiled/imap/lmtpd.c
---- cyrus-imapd-2.3.16/imap/lmtpd.c	2009-12-16 04:51:41.000000000 +0200
-+++ cyrus-imapd-2.3.16-autocreate.uncompiled/imap/lmtpd.c	2009-12-22 19:56:22.000000000 +0200
-@@ -117,6 +117,8 @@
- static FILE *spoolfile(message_data_t *msgdata);
- static void removespool(message_data_t *msgdata);
- 
-+static int autocreate_inbox(const char *user, const char *domain);
-+
- /* current namespace */
- static struct namespace lmtpd_namespace;
- 
-@@ -979,6 +981,86 @@
-     exit(code);
- }
- 
-+
-+/*
-+ * Autocreate Inbox and subfolders upon login
-+ */
-+int autocreate_inbox(const char *user, const char *domain)
-+{
-+    struct auth_state *auth_state;
-+    char inboxname[MAX_MAILBOX_NAME+1];
-+    char *rcpt_userid = NULL;
-+    int autocreatequota;
-+    int r = 0;
-+
-+    if (user == NULL)
-+          return IMAP_MAILBOX_NONEXISTENT;
-+
-+    if (domain != NULL) {
-+	int k;
-+	
-+	rcpt_userid = (char *) xmalloc((strlen(user) + strlen(domain) + 2) * sizeof(char));
-+	k = strlcpy(rcpt_userid, user, strlen(user) + 1);
-+  	*(rcpt_userid + k) = '@';
-+       strlcpy(rcpt_userid + k + 1, domain, strlen(domain) + 1);
-+    } else {
-+	rcpt_userid = (char *) user;
-+    }
-+
-+
-+    /*
-+     * Exclude anonymous
-+     */
-+    if (!strcmp(rcpt_userid, "anonymous")) {
-+	if (rcpt_userid != user) {
-+	    free(rcpt_userid);
-+	}
-+
-+        return IMAP_MAILBOX_NONEXISTENT;
-+    }
-+    
-+    /*
-+     * Check for autocreatequota and createonpost
-+     */
-+    if (!(autocreatequota = config_getint(IMAPOPT_AUTOCREATEQUOTA)) ||
-+        !(config_getswitch(IMAPOPT_CREATEONPOST))) {
-+	    
-+	if (rcpt_userid != user) {
-+	    free(rcpt_userid);
-+	}
-+	
-+        return IMAP_MAILBOX_NONEXISTENT;
-+     }
-+
-+
-+    /*
-+     * Exclude admin's accounts
-+     */
-+     auth_state = auth_newstate(rcpt_userid);
-+     
-+     if (global_authisa(auth_state, IMAPOPT_ADMINS)) {
-+	if (rcpt_userid != user) {
-+	    free(rcpt_userid);
-+	}
-+
-+        return IMAP_MAILBOX_NONEXISTENT;
-+     }
-+     
-+     r = (*lmtpd_namespace.mboxname_tointernal) (&lmtpd_namespace,
-+                                "INBOX", rcpt_userid, inboxname);
-+     
-+     if (!r)
-+ 	r = mboxlist_autocreateinbox(&lmtpd_namespace, rcpt_userid,
-+                         auth_state, inboxname, autocreatequota);
-+     
-+     if (rcpt_userid != user) {
-+	free(rcpt_userid);
-+     }
-+       
-+     return r;
-+}
-+
-+
- static int verify_user(const char *user, const char *domain, char *mailbox,
- 		       quota_t quotacheck, struct auth_state *authstate)
- {
-@@ -1022,6 +1104,15 @@
- 	 */
- 	r = mlookup(namebuf, &server, &acl, NULL);
- 
-+	/* If user mailbox does not exist, then invoke autocreate inbox function */
-+	if (r == IMAP_MAILBOX_NONEXISTENT) {
-+	    r = autocreate_inbox(user, domain);
-+
-+	    /* Try to locate the mailbox again */
-+	    if (!r)
-+		r = mlookup(namebuf, &server, &acl, NULL);
-+	}
-+
- 	if (r == IMAP_MAILBOX_NONEXISTENT && !user &&
- 	    config_getswitch(IMAPOPT_LMTP_FUZZY_MAILBOX_MATCH) &&
- 	    /* see if we have a mailbox whose name is close */
-@@ -1048,6 +1139,7 @@
- 			     aclcheck, (quotacheck < 0)
- 			     || config_getswitch(IMAPOPT_LMTP_STRICT_QUOTA) ?
- 			     quotacheck : 0);
-+
- 	}
-     }
- 
-diff -Naur cyrus-imapd-2.3.16/imap/mboxlist.c cyrus-imapd-2.3.16-autocreate.uncompiled/imap/mboxlist.c
---- cyrus-imapd-2.3.16/imap/mboxlist.c	2009-11-17 05:34:30.000000000 +0200
-+++ cyrus-imapd-2.3.16-autocreate.uncompiled/imap/mboxlist.c	2009-12-22 19:56:22.000000000 +0200
-@@ -83,6 +83,12 @@
- #include "quota.h"
- #include "sync_log.h"
- 
-+#ifdef USE_SIEVE
-+extern int autoadd_sieve(char *userid, 
-+		const char *source_script);
-+#endif
-+
-+
- #define DB config_mboxlist_db
- #define SUBDB config_subscription_db
- 
-@@ -100,11 +106,29 @@
- static int mboxlist_changequota(const char *name, int matchlen, int maycreate,
- 				void *rock);
- 
-+static int mboxlist_autochangesub(char *name, int matchlen, int maycreate,
-+			      void *rock);
-+
-+static int mboxlist_autosubscribe_sharedfolders(struct namespace *namespace,
-+                        char *userid, char *auth_userid,
-+                        struct auth_state *auth_state);
-+
- struct change_rock {
-     struct quota *quota;
-     struct txn **tid;
- };
- 
-+/*
-+ * Struct needed to be passed as void *rock to
-+ * mboxlist_autochangesub();
-+ */
-+struct changesub_rock_st {
-+        char *userid;
-+        char *auth_userid;
-+        struct auth_state *auth_state;
-+};
-+
-+
- #define FNAME_SUBSSUFFIX ".sub"
- 
- /*
-@@ -3464,3 +3488,349 @@
- 
-     return(count);
- }
-+
-+/*
-+ * Automatically subscribe user to *ALL* shared folders,
-+ * one has permissions to be subscribed to.
-+ * INBOX subfolders are excluded.
-+ */
-+static int mboxlist_autochangesub(char *name, int matchlen, int maycreate,
-+                        void *rock) {
-+
-+  struct changesub_rock_st *changesub_rock = (struct changesub_rock_st *) rock;
-+  char *userid = changesub_rock->userid;
-+  char *auth_userid = changesub_rock->auth_userid;
-+  struct auth_state *auth_state = changesub_rock->auth_state;
-+  int r;
-+
-+
-+  if((strlen(name) == 5 && !strncmp(name, "INBOX", 5)) || /* Exclude INBOX */
-+     (strlen(name) > 5  && !strncmp(name, "INBOX.",6)) || /* Exclude INBOX subfolders */
-+     (strlen(name) > 4  && !strncmp(name, "user.", 5)))   /* Exclude other users' folders */
-+	  return 0;
-+
-+     
-+  r = mboxlist_changesub(name, userid, auth_state, 1, 0);
-+
-+  if (r) {
-+      syslog(LOG_WARNING,
-+             "autosubscribe: User %s to folder %s, subscription failed: %s",
-+             auth_userid, name, error_message(r));
-+  } else {
-+      syslog(LOG_NOTICE,
-+             "autosubscribe: User %s to folder %s, subscription succeeded",
-+             auth_userid, name);
-+  }
-+
-+  return 0;
-+}
-+
-+#define SEP '|'
-+
-+/*
-+ * Automatically subscribe user to a shared folder.
-+ * Subscription is done successfully, if the shared
-+ * folder exists and the user has the necessary 
-+ * permissions.
-+ */
-+static int mboxlist_autosubscribe_sharedfolders(struct namespace *namespace,
-+                        char *userid, char *auth_userid,
-+                        struct auth_state *auth_state) {
-+        
-+    const char *sub ;
-+    char *p, *q, *next_sub;
-+    char folder[MAX_MAILBOX_NAME+1], name[MAX_MAILBOX_NAME+1], mailboxname[MAX_MAILBOX_NAME+1];
-+    int len;
-+    int r = 0;
-+    int subscribe_all_sharedfolders = 0;
-+
-+    subscribe_all_sharedfolders = config_getswitch(IMAPOPT_AUTOSUBSCRIBE_ALL_SHAREDFOLDERS);
-+
-+    /*
-+     * If subscribeallsharedfolders is set to yes in imapd.conf, then
-+     * subscribe user to every shared folder one has the apropriate 
-+     * permissions.
-+     */
-+    if(subscribe_all_sharedfolders) {
-+       char pattern[MAX_MAILBOX_PATH+1];
-+       struct changesub_rock_st changesub_rock;
-+
-+       strcpy(pattern, "*");
-+       changesub_rock.userid = userid;
-+       changesub_rock.auth_userid = auth_userid;
-+       changesub_rock.auth_state = auth_state;
-+
-+       r = mboxlist_findall(namespace, pattern, 0, userid,
-+                            auth_state, mboxlist_autochangesub, &changesub_rock);
-+
-+       return r;
-+    }
-+
-+    if ((sub=config_getstring(IMAPOPT_AUTOSUBSCRIBESHAREDFOLDERS)) == NULL)
-+       return r;
-+
-+    next_sub = (char *) sub;
-+    while (*next_sub) {
-+        for (p = next_sub ; isspace((int) *p) || *p == SEP ; p++);
-+        for (next_sub = p ; *next_sub && *next_sub != SEP ; next_sub++);
-+        for (q = next_sub ; q > p && (isspace((int) *q) || *q == SEP || !*q) ; q--);
-+        if (!*p ) continue;
-+
-+        len = q - p + 1;
-+        /* Check for folder length */
-+        if (len  > sizeof(folder)-1)
-+                continue;
-+
-+        if (!r) {
-+                strncpy(folder, p, len);
-+                folder[len] = '\0';
-+
-+               strlcpy(name, namespace->prefix[NAMESPACE_SHARED], sizeof(name));
-+               len = strlcat(name, folder, sizeof(name));
-+
-+               r = (namespace->mboxname_tointernal) (namespace, name, userid,
-+                                                                  mailboxname);
-+       }
-+                                                                  
-+        if (!r)
-+               r = mboxlist_changesub(mailboxname, userid, auth_state, 1, 0);
-+
-+        if (!r) {
-+                syslog(LOG_NOTICE, "autosubscribe: User %s to %s succeeded", 
-+                       userid, folder);
-+        } else {
-+                syslog(LOG_WARNING, "autosubscribe: User %s to %s failed: %s", 
-+                       userid, folder, error_message(r));
-+                r = 0;
-+        }
-+    }
-+
-+    return r;
-+}
-+
-+
-+
-+int mboxlist_autocreateinbox(struct namespace *namespace,
-+                        char *userid,
-+                        struct auth_state *auth_state,
-+                        char *mailboxname, int autocreatequota) {
-+    char name [MAX_MAILBOX_NAME+1];
-+    char folder [MAX_MAILBOX_NAME+1];
-+    char *auth_userid = NULL;
-+    char *partition = NULL;
-+    const char *crt;
-+    const char *sub;
-+    char *p, *q, *next_crt, *next_sub;
-+    int len;
-+    int r = 0;
-+    int numcrt = 0;
-+    int numsub = 0;
-+#ifdef USE_SIEVE
-+    const char *source_script;
-+#endif
-+
-+
-+
-+    auth_userid = auth_canonuser(auth_state);
-+    if (auth_userid == NULL) {
-+         /*
-+          * Couldn't get cannon userid
-+          */
-+          syslog(LOG_ERR,
-+                 "autocreateinbox: Could not get canonified userid for user %s", userid);
-+          return IMAP_PARTITION_UNKNOWN;
-+    }
-+
-+    /* Added this for debug information. */
-+    syslog(LOG_DEBUG, "autocreateinbox: autocreate inbox for user %s was called", auth_userid);
-+
-+   /*
-+    * While this is not needed for admins
-+    * and imap_admins accounts, it would be
-+    * better to separate *all* admins and
-+    * proxyservers from normal accounts
-+    * (accounts that have mailboxes).
-+    * UOA Specific note(1): Even if we do not
-+    * exclude these servers-classes here,
-+    * UOA specific code, will neither return
-+    * role, nor create INBOX, because none of these
-+    * administrative accounts belong to  the
-+    * mailRecipient objectclass, or have imapPartition.
-+    * UOA Specific note(2): Another good reason for doing
-+    * this, is to prevent the code, from getting into
-+    * cyrus_ldap.c because of the continues MSA logins to LMTPd.
-+    */
-+
-+   /*
-+    * admins and the coresponding imap
-+    * service, had already been excluded.
-+    */
-+
-+   /*
-+    * Do we really need group membership
-+    * for admins or service_admins?
-+    */
-+    if (global_authisa(auth_state, IMAPOPT_ADMINS)) return 0;
-+
-+   /*
-+    * Do we really need group membership
-+    * for proxyservers?
-+    */
-+    if (global_authisa(auth_state, IMAPOPT_PROXYSERVERS)) return 0;
-+
-+    /* 
-+     * Check if user belongs to the autocreate_users group. This option
-+     * controls for whom the mailbox may be automatically created. Default
-+     * value for this option is 'anyone'. So, if not declared, all mailboxes
-+     * will be created.
-+     */
-+    if (!global_authisa(auth_state, IMAPOPT_AUTOCREATE_USERS)) {
-+	    syslog(LOG_DEBUG, "autocreateinbox: User %s does not belong to the autocreate_users. No mailbox is created",
-+			    auth_userid);
-+	    return IMAP_MAILBOX_NONEXISTENT;
-+    }
-+
-+#if 0
-+        /*
-+         * Get Partition info or return.
-+         * (Here you should propably use
-+         * you own "get_partition(char *userid)"
-+         * function. Otherwise all new INBOXes will be
-+         * created into whatever partition has been declared
-+         * as default in your imapd.conf)
-+         */
-+
-+        partition = get_partition(userid);
-+        if (partition == NULL) {
-+            /*
-+             * Couldn't get partition info
-+             */
-+            syslog(LOG_ERR,
-+                   "Could not get imapPartition info for user %s", userid);
-+            return IMAP_PARTITION_UNKNOWN;
-+        }
-+#endif
-+
-+    r = mboxlist_createmailbox(mailboxname, MAILBOX_FORMAT_NORMAL, NULL,
-+                                      1, userid, auth_state, 0, 0, 0);
-+
-+    if (!r && autocreatequota > 0)
-+        r = mboxlist_setquota(mailboxname, autocreatequota, 0);
-+
-+    if (!r)
-+        r = mboxlist_changesub(mailboxname, userid,
-+                              auth_state, 1, 1);
-+
-+    if (!r) {
-+       syslog(LOG_NOTICE, "autocreateinbox: User %s, INBOX was successfully created in partition %s", 
-+               auth_userid, partition == NULL ? "default" : partition);
-+    } else {
-+       syslog(LOG_ERR, "autocreateinbox: User %s, INBOX failed. %s", 
-+               auth_userid, error_message(r));
-+    }
-+
-+#if 0
-+    /* Allocated from get_partition, and not needed any more */
-+    free_partition(partition);
-+#endif
-+
-+    if (r) return r;
-+
-+    /* INBOX's subfolders */
-+    if ((crt=config_getstring(IMAPOPT_AUTOCREATEINBOXFOLDERS)))
-+        sub=config_getstring(IMAPOPT_AUTOSUBSCRIBEINBOXFOLDERS);
-+
-+    /* Roll through crt */
-+    next_crt = (char *) crt;
-+    while (next_crt!=NULL && *next_crt) {
-+          for (p = next_crt ; isspace((int) *p) || *p == SEP ; p++);
-+          for (next_crt = p ; *next_crt && *next_crt != SEP ; next_crt++);
-+          for (q = next_crt ; q > p && (isspace((int) *q) || *q == SEP || !*q); q--);
-+
-+          if (!*p) continue;
-+
-+          len = q - p + 1;
-+
-+          /* First time we check for length */
-+          if (len > sizeof(folder) - 5)
-+              r = IMAP_MAILBOX_BADNAME;
-+
-+          if (!r) {
-+                  strncpy(folder, p, len);
-+                  folder[len] = '\0';
-+
-+                  strlcpy(name, namespace->prefix[NAMESPACE_INBOX], sizeof(name));
-+                  len = strlcat(name, folder, sizeof(name));
-+          }
-+
-+          if (!r)
-+            r = (namespace->mboxname_tointernal) (namespace, name, userid,
-+                                                 mailboxname);
-+          if (!r)
-+             r = mboxlist_createmailbox(mailboxname, MAILBOX_FORMAT_NORMAL, NULL,
-+                                            1, userid, auth_state, 0, 0, 0);
-+
-+          if (!r) {
-+            numcrt++;
-+            syslog(LOG_NOTICE, "autocreateinbox: User %s, subfolder %s creation succeeded.", 
-+               auth_userid, name);
-+         } else {
-+             syslog(LOG_WARNING, "autocreateinbox: User %s, subfolder %s creation failed. %s", 
-+               auth_userid, name, error_message(r));
-+             r=0;
-+             continue;
-+          }
-+
-+          /* Roll through sub */
-+          next_sub = (char *) sub;
-+          while (next_sub!=NULL && *next_sub) {
-+                for (p = next_sub ; isspace((int) *p) || *p == SEP ; p++);
-+                for (next_sub = p ; *next_sub && *next_sub != SEP ; next_sub++);
-+                for (q = next_sub ; q > p && (isspace((int) *q) || *q == SEP || !*q) ; q--);
-+                if (!*p ) continue;
-+
-+                len = q - p + 1;
-+
-+                if (len != strlen(folder) || strncmp(folder, p, len))
-+                    continue;
-+
-+                r = mboxlist_changesub(mailboxname, userid, auth_state, 1, 1);
-+
-+               if (!r) {
-+                   numsub++;
-+                   syslog(LOG_NOTICE,"autocreateinbox: User %s, subscription to %s succeeded",
-+                       auth_userid, name);
-+               } else
-+                    syslog(LOG_WARNING, "autocreateinbox: User %s, subscription to  %s failed. %s",
-+                       auth_userid, name, error_message(r));
-+
-+                break;
-+         }
-+    }
-+
-+    if (crt!=NULL && *crt)
-+       syslog(LOG_INFO, "User %s, Inbox subfolders, created %d, subscribed %d", 
-+               auth_userid, numcrt, numsub);
-+
-+    /*
-+     * Check if shared folders are available for subscription.
-+     */
-+    mboxlist_autosubscribe_sharedfolders(namespace, userid, auth_userid, auth_state);
-+
-+#ifdef USE_SIEVE
-+    /*
-+     * Here the autocreate sieve script feature is iniated from.
-+     */
-+    source_script = config_getstring(IMAPOPT_AUTOCREATE_SIEVE_SCRIPT);
-+ 
-+    if (source_script) {
-+        if (!autoadd_sieve(userid, source_script))
-+            syslog(LOG_NOTICE, "autocreate_sieve: User %s, default sieve script creation succeeded", auth_userid);
-+        else
-+            syslog(LOG_WARNING, "autocreate_sieve: User %s, default sieve script creation failed", auth_userid);
-+    }
-+#endif
-+
-+    return r;
-+}
-+
-diff -Naur cyrus-imapd-2.3.16/imap/mboxlist.h cyrus-imapd-2.3.16-autocreate.uncompiled/imap/mboxlist.h
---- cyrus-imapd-2.3.16/imap/mboxlist.h	2009-11-17 05:34:17.000000000 +0200
-+++ cyrus-imapd-2.3.16-autocreate.uncompiled/imap/mboxlist.h	2009-12-22 19:57:35.000000000 +0200
-@@ -221,4 +221,9 @@
- int mboxlist_count_inferiors(char *mailboxname, int isadmin, char *userid,
-                              struct auth_state *authstate);
- 
-+int mboxlist_autocreateinbox(struct namespace *namespace,char *userid,
-+				struct auth_state *auth_state, char *mailboxname, 
-+			       int autocreatequota);
-+
-+
- #endif
-diff -Naur cyrus-imapd-2.3.16/imap/pop3d.c cyrus-imapd-2.3.16-autocreate.uncompiled/imap/pop3d.c
---- cyrus-imapd-2.3.16/imap/pop3d.c	2009-12-17 17:32:32.000000000 +0200
-+++ cyrus-imapd-2.3.16-autocreate.uncompiled/imap/pop3d.c	2009-12-22 19:56:22.000000000 +0200
-@@ -177,6 +177,8 @@
- static char popd_apop_chal[45 + MAXHOSTNAMELEN + 1]; /* <rand.time at hostname> */
- static void cmd_apop(char *response);
- 
-+static int autocreate_inbox(char *inboxname, char *userid);
-+
- static void cmd_auth(char *arg);
- static void cmd_capa(void);
- static void cmd_pass(char *pass);
-@@ -1294,6 +1296,7 @@
- 	popd_userid = xstrdup(userbuf);
- 	prot_printf(popd_out, "+OK Name is a valid mailbox\r\n");
-     }
-+
- }
- 
- void cmd_pass(char *pass)
-@@ -1597,6 +1600,43 @@
- }
- 
- /*
-+ * Autocreate Inbox and subfolders upon login
-+ */
-+int autocreate_inbox(char *inboxname, char *auth_userid)
-+{
-+    struct auth_state *auth_state;
-+    int autocreatequota;
-+    int r;
-+
-+    if (inboxname == NULL || auth_userid == NULL)
-+	    return IMAP_MAILBOX_NONEXISTENT;
-+    
-+    /*
-+     * Exclude anonymous
-+     */
-+    if (!strcmp(popd_userid, "anonymous"))
-+        return IMAP_MAILBOX_NONEXISTENT;
-+
-+    /*
-+     * Check for autocreatequota
-+     */
-+    if (!(autocreatequota = config_getint(IMAPOPT_AUTOCREATEQUOTA)))
-+        return IMAP_MAILBOX_NONEXISTENT;
-+
-+    /*
-+     * Exclude admin's accounts
-+     */
-+     auth_state = auth_newstate(popd_userid);
-+     if (global_authisa(auth_state, IMAPOPT_ADMINS))
-+          return IMAP_MAILBOX_NONEXISTENT;
-+
-+     r = mboxlist_autocreateinbox(&popd_namespace, auth_userid,
-+                         auth_state, inboxname, autocreatequota);
-+     return r;
-+}
-+
-+
-+/*
-  * Complete the login process by opening and locking the user's inbox
-  */
- int openinbox(void)
-@@ -1626,6 +1666,12 @@
- 
-     if (!r) r = mboxlist_detail(inboxname, &type, NULL, NULL,
- 				&server, &acl, NULL);
-+
-+    /* Try once again after autocreate_inbox */
-+    if (r == IMAP_MAILBOX_NONEXISTENT && !(r = autocreate_inbox(inboxname, userid)))
-+	r = mboxlist_detail(inboxname, &type, NULL, NULL,
-+				&server, &acl, NULL);
-+
-     if (!r && (config_popuseacl = config_getswitch(IMAPOPT_POPUSEACL)) &&
- 	(!acl ||
- 	 !((myrights = cyrus_acl_myrights(popd_authstate, acl)) & ACL_READ))) {
-diff -Naur cyrus-imapd-2.3.16/lib/auth.c cyrus-imapd-2.3.16-autocreate.uncompiled/lib/auth.c
---- cyrus-imapd-2.3.16/lib/auth.c	2008-03-24 19:43:08.000000000 +0200
-+++ cyrus-imapd-2.3.16-autocreate.uncompiled/lib/auth.c	2009-12-22 19:56:22.000000000 +0200
-@@ -118,3 +118,11 @@
- 
-     auth->freestate(auth_state);
- }
-+
-+char *auth_canonuser(struct auth_state *auth_state)
-+{
-+    struct auth_mech *auth = auth_fromname();
-+
-+    return auth->auth_canonuser(auth_state);
-+}
-+
-diff -Naur cyrus-imapd-2.3.16/lib/auth.h cyrus-imapd-2.3.16-autocreate.uncompiled/lib/auth.h
---- cyrus-imapd-2.3.16/lib/auth.h	2008-03-24 19:43:08.000000000 +0200
-+++ cyrus-imapd-2.3.16-autocreate.uncompiled/lib/auth.h	2009-12-22 19:56:22.000000000 +0200
-@@ -55,6 +55,7 @@
-              const char *identifier);
-     struct auth_state *(*newstate)(const char *identifier);
-     void (*freestate)(struct auth_state *auth_state);
-+    char *(*auth_canonuser)(struct auth_state *auth_state);
- };
- 
- extern struct auth_mech *auth_mechs[];
-@@ -77,5 +78,6 @@
-  	 const char *identifier);
- struct auth_state *auth_newstate(const char *identifier);
- void auth_freestate(struct auth_state *auth_state);
-+char *auth_canonuser(struct auth_state *auth_state);
- 
- #endif /* INCLUDED_AUTH_H */
-diff -Naur cyrus-imapd-2.3.16/lib/auth_krb.c cyrus-imapd-2.3.16-autocreate.uncompiled/lib/auth_krb.c
---- cyrus-imapd-2.3.16/lib/auth_krb.c	2009-03-31 07:11:21.000000000 +0300
-+++ cyrus-imapd-2.3.16-autocreate.uncompiled/lib/auth_krb.c	2009-12-22 19:56:22.000000000 +0200
-@@ -341,6 +341,15 @@
-     free((char *)auth_state);
- }
- 
-+static char *mycanonuser(struct auth_state *auth_state)
-+{
-+    if (auth_state)
-+       return auth_state->userid;
-+
-+    return NULL;
-+}
-+
-+
- #else /* HAVE_KRB */
- 
- static int mymemberof(
-@@ -372,6 +381,13 @@
- 	fatal("Authentication mechanism (krb) not compiled in", EC_CONFIG);
- }
- 
-+static char *mycanonuser(
-+    struct auth_state *auth_state __attribute__((unused)))
-+{
-+        fatal("Authentication mechanism (krb) not compiled in", EC_CONFIG);
-+}
-+
-+
- #endif
- 
- struct auth_mech auth_krb = 
-@@ -382,4 +398,5 @@
-     &mymemberof,
-     &mynewstate,
-     &myfreestate,
-+    &mycanonuser,
- };
-diff -Naur cyrus-imapd-2.3.16/lib/auth_krb5.c cyrus-imapd-2.3.16-autocreate.uncompiled/lib/auth_krb5.c
---- cyrus-imapd-2.3.16/lib/auth_krb5.c	2008-03-24 19:43:08.000000000 +0200
-+++ cyrus-imapd-2.3.16-autocreate.uncompiled/lib/auth_krb5.c	2009-12-22 19:56:22.000000000 +0200
-@@ -199,6 +199,14 @@
-     free(auth_state);
- }
- 
-+static char *mycanonuser(struct auth_state *auth_state)
-+{
-+    if (auth_state)
-+       return auth_state->userid;
-+
-+    return NULL;
-+}
-+
- #else /* HAVE_GSSAPI_H */
- 
- static int mymemberof(
-@@ -230,6 +238,13 @@
- 	fatal("Authentication mechanism (krb5) not compiled in", EC_CONFIG);
- }
- 
-+static char *mycanonuser(
-+    struct auth_state *auth_state __attribute__((unused)))
-+{
-+        fatal("Authentication mechanism (krb5) not compiled in", EC_CONFIG);
-+	return NULL;
-+}
-+
- #endif
- 
- struct auth_mech auth_krb5 = 
-@@ -240,4 +255,5 @@
-     &mymemberof,
-     &mynewstate,
-     &myfreestate,
-+    &mycanonuser,
- };
-diff -Naur cyrus-imapd-2.3.16/lib/auth_pts.c cyrus-imapd-2.3.16-autocreate.uncompiled/lib/auth_pts.c
---- cyrus-imapd-2.3.16/lib/auth_pts.c	2008-03-24 19:43:08.000000000 +0200
-+++ cyrus-imapd-2.3.16-autocreate.uncompiled/lib/auth_pts.c	2009-12-22 19:56:22.000000000 +0200
-@@ -512,6 +512,14 @@
-     free(auth_state);
- }
- 
-+static char *mycanonuser(struct auth_state *auth_state)
-+{
-+    if (auth_state)
-+       return auth_state->userid.id;
-+
-+    return NULL;
-+}
-+
- struct auth_mech auth_pts = 
- {
-     "pts",		/* name */
-@@ -520,4 +528,5 @@
-     &mymemberof,
-     &mynewstate,
-     &myfreestate,
-+    &mycanonuser,
- };
-diff -Naur cyrus-imapd-2.3.16/lib/auth_unix.c cyrus-imapd-2.3.16-autocreate.uncompiled/lib/auth_unix.c
---- cyrus-imapd-2.3.16/lib/auth_unix.c	2009-03-31 07:11:22.000000000 +0300
-+++ cyrus-imapd-2.3.16-autocreate.uncompiled/lib/auth_unix.c	2009-12-22 19:56:22.000000000 +0200
-@@ -315,6 +315,16 @@
-     free((char *)auth_state);
- }
- 
-+static char *mycanonuser(auth_state)
-+    struct auth_state *auth_state;
-+{
-+    if (auth_state)
-+         return auth_state->userid;
-+
-+    return NULL;
-+}
-+
-+
- 
- struct auth_mech auth_unix = 
- {
-@@ -324,4 +334,5 @@
-     &mymemberof,
-     &mynewstate,
-     &myfreestate,
-+    &mycanonuser,
- };
-diff -Naur cyrus-imapd-2.3.16/lib/imapoptions cyrus-imapd-2.3.16-autocreate.uncompiled/lib/imapoptions
---- cyrus-imapd-2.3.16/lib/imapoptions	2009-12-21 13:25:22.000000000 +0200
-+++ cyrus-imapd-2.3.16-autocreate.uncompiled/lib/imapoptions	2009-12-22 19:56:22.000000000 +0200
-@@ -236,6 +236,55 @@
- /* Number of seconds to wait before returning a timeout failure when
-    performing a client connection (e.g., in a murder environment) */
- 
-+{ "createonpost", 0, SWITCH }
-+/* If yes, when lmtpd receives an incoming mail for an INBOX that does not exist,
-+   then the INBOX is automatically created by lmtpd. */
-+
-+{ "autocreateinboxfolders", NULL, STRING }
-+/* If a user does not have an INBOX created then the INBOX as well as some INBOX 
-+   subfolders are created under two conditions.
-+     1. The user logins via the IMAP or the POP3 protocol. (autocreatequota option must have a nonzero value)
-+     2. A message arrives for the user through the LMTPD protocol.(createonpost option must be yes)
-+   autocreateinboxfolders is a list of INBOX's subfolders separated by a "|", that 
-+   are automatically created by the server under the previous two situations. */
-+
-+{ "autosubscribeinboxfolders", NULL, STRING }
-+/* A list of folder names, separated by "|", that the users get automatically subscribed to, 
-+   when their INBOX is created. These folder names must have been included in the 
-+   autocreateinboxfolders option of the imapd.conf. */
-+
-+{ "autosubscribesharedfolders", NULL, STRING }
-+/* A list of shared folders (bulletin boards), separated by "|", that the users get
-+   automatically subscribed to, after their INBOX is created. The shared folder must 
-+   have been created and the user must have the required permissions to get subscribed 
-+   to it. Otherwise, subscribing to the shared folder fails. */
-+
-+{ "autosubscribe_all_sharedfolders", 0, SWITCH }
-+/* If set to yes, the user is automatically subscribed to all shared folders, one has permission
-+   to subscribe to. */
-+
-+{ "autocreate_sieve_script", NULL, STRING }
-+/* The full path of a file that contains a sieve script. This script automatically becomes a
-+   user's initial default sieve filter script. When this option is not defined, no default 
-+   sieve filter is created. The file must be readable by the cyrus daemon. */
-+
-+{ "autocreate_sieve_compiledscript", NULL, STRING }
-+/* The full path of a file that contains a compiled in bytecode sieve script. This script 
-+   automatically becomes a user's initial default sieve filter script.  If this option is 
-+   not specified, or the filename doesn't exist then the script defined by 
-+   autocreate_sieve_script is compiled on the fly and installed as the user's default
-+   sieve script */
-+
-+{ "generate_compiled_sieve_script", 0, SWITCH }
-+/* If set to yes and no compiled sieve script file exists, the sieve script which is 
-+   compiled on the fly will be saved in the file name that autocreate_sieve_compiledscript 
-+   option points to. In order a compiled script to be generated, autocreate_sieve_script and 
-+   autocreate_sieve_compiledscript must have valid values */
-+
-+{ "autocreate_users", "anyone", STRING }
-+/* A space separated list of users and/or groups that are allowed their INBOX to be
-+   automatically created. */
-+
- { "configdirectory", NULL, STRING }
- /* The pathname of the IMAP configuration directory.  This field is
-    required. */
-diff -Naur cyrus-imapd-2.3.16/notifyd/Makefile.in cyrus-imapd-2.3.16-autocreate.uncompiled/notifyd/Makefile.in
---- cyrus-imapd-2.3.16/notifyd/Makefile.in	2008-03-24 21:59:32.000000000 +0200
-+++ cyrus-imapd-2.3.16-autocreate.uncompiled/notifyd/Makefile.in	2009-12-22 19:56:22.000000000 +0200
-@@ -71,10 +71,11 @@
- SERVICE=../master/service.o
- 
- IMAP_LIBS = @IMAP_LIBS@ @LIB_RT@
-+SIEVE_LIBS = @SIEVE_LIBS@
- IMAP_COM_ERR_LIBS = @IMAP_COM_ERR_LIBS@
- LIB_WRAP = @LIB_WRAP@
- LIBS = @ZEPHYR_LIBS@ @LIBS@ $(IMAP_COM_ERR_LIBS)
--DEPLIBS=../imap/mutex_fake.o ../imap/libimap.a ../lib/libcyrus.a ../lib/libcyrus_min.a @DEPLIBS@
-+DEPLIBS=../imap/mutex_fake.o ../imap/libimap.a $(SIEVE_LIBS) ../lib/libcyrus.a ../lib/libcyrus_min.a @DEPLIBS@
- 
- PURIFY=/usr/local/bin/purify
- PUREOPT=-best-effort
-diff -Naur cyrus-imapd-2.3.16/notifyd/notifyd.c cyrus-imapd-2.3.16-autocreate.uncompiled/notifyd/notifyd.c
---- cyrus-imapd-2.3.16/notifyd/notifyd.c	2008-03-24 21:59:32.000000000 +0200
-+++ cyrus-imapd-2.3.16-autocreate.uncompiled/notifyd/notifyd.c	2009-12-22 19:56:22.000000000 +0200
-@@ -96,7 +96,7 @@
- 
- #define NOTIFY_MAXSIZE 8192
- 
--int do_notify()
-+static int do_notify()
- {
-     struct sockaddr_un sun_data;
-     socklen_t sunlen = sizeof(sun_data);
-diff -Naur cyrus-imapd-2.3.16/ptclient/Makefile.in cyrus-imapd-2.3.16-autocreate.uncompiled/ptclient/Makefile.in
---- cyrus-imapd-2.3.16/ptclient/Makefile.in	2008-03-24 20:34:22.000000000 +0200
-+++ cyrus-imapd-2.3.16-autocreate.uncompiled/ptclient/Makefile.in	2009-12-22 19:56:22.000000000 +0200
-@@ -57,10 +57,11 @@
- AFS_LDFLAGS = @AFS_LDFLAGS@ @COM_ERR_LDFLAGS@
- AFS_LIBS = @AFS_LIBS@
- IMAP_LIBS = @IMAP_LIBS@ @LIB_RT@
-+SIEVE_LIBS = @SIEVE_LIBS@
- LIBS = $(IMAP_LIBS) @COM_ERR_LIBS@
- LIB_SASL = @LIB_SASL@
- LIB_WRAP = @LIB_WRAP@
--DEPLIBS = ../imap/libimap.a ../lib/libcyrus.a ../lib/libcyrus_min.a @DEPLIBS@
-+DEPLIBS = ../imap/libimap.a $(SIEVE_LIBS) ../lib/libcyrus.a ../lib/libcyrus_min.a @DEPLIBS@ 
- UTIL_LIBS = ../imap/mutex_fake.o ../imap/cli_fatal.o
- 
- LDAP_LIBS=@LDAP_LIBS@
diff --git a/cyrus-imapd-2.3.16-autosieve-0.6.0.diff b/cyrus-imapd-2.3.16-autosieve-0.6.0.diff
deleted file mode 100644
index b66fcce..0000000
--- a/cyrus-imapd-2.3.16-autosieve-0.6.0.diff
+++ /dev/null
@@ -1,181 +0,0 @@
-diff -Naur cyrus-imapd-2.3.16/README.autosievefolder cyrus-imapd-2.3.16-autosieve.uncompiled/README.autosievefolder
---- cyrus-imapd-2.3.16/README.autosievefolder	1970-01-01 02:00:00.000000000 +0200
-+++ cyrus-imapd-2.3.16-autosieve.uncompiled/README.autosievefolder	2009-12-23 01:08:09.000000000 +0200
-@@ -0,0 +1,42 @@
-+Cyrus IMAP autosievefolder patch
-+----------------------------------
-+
-+NOTE : This patch has been created at the University of Athens. For more info, as well 
-+as more patches on Cyrus IMAPD server, please visit http://email.uoa.gr 
-+
-+
-+  When the lmtpd daemon receives an email message prior to delivering it to the 
-+INBOX folder of the user, checks if the user has specified sieve filters. If the
-+user has specified sieve filters the filters are evaluated. If the message matches
-+any of the filters the action that is specified in the filter is executed. If the action 
-+is FileInto it is stored in the subfolder specified in the filter. If the 
-+subfolder doesn't exist then the message is sent to the INBOX folder of the user.
-+
-+  With this patch if the folder doesn't exist AND the name of the subfolder is 
-+specified in the autosievefolders option, OR the anysievefolder is set to 
-+yes in the cyrus-imap configuration file then the subfolder is created and the mail 
-+is stored there.
-+
-+
-+Check the following options of the imapd.conf file
-+==================================================
-+
-+* anysievefolder : It must be "yes" in order to permit the autocreation of any 
-+INBOX subfolder requested by a sieve filter, through the "fileinto" action. (default = no)
-+* autosievefolders : It is a "|" separated list of subfolders of INBOX that will be 
-+automatically created, if requested by a sieve filter, through the "fileinto" 
-+action. (default = null)
-+	i.e. autosievefolders: Junk | Spam
-+
-+WARNING: anysievefolder, takes precedence over autosievefolders . Which means that if 
-+anysievefolder is set to "yes", cyrus will create any INBOX subfolder requested, no-matter what the value of autosievefolders is.
-+
-+
-+Things to be done
-+=================
-+
-+1. Support cyrus wildcards in the autosievefolders option. 
-+
-+
-+For more information and updates please visit http://email.uoa.gr/projects/cyrus/autosievefolder
-+
-diff -Naur cyrus-imapd-2.3.16/imap/lmtp_sieve.c cyrus-imapd-2.3.16-autosieve.uncompiled/imap/lmtp_sieve.c
---- cyrus-imapd-2.3.16/imap/lmtp_sieve.c	2009-03-31 07:11:18.000000000 +0300
-+++ cyrus-imapd-2.3.16-autosieve.uncompiled/imap/lmtp_sieve.c	2009-12-23 01:08:09.000000000 +0200
-@@ -88,6 +88,9 @@
-     struct auth_state *authstate;
- } script_data_t;
- 
-+static int autosieve_subfolder(char *userid, struct auth_state *auth_state,
-+                               char *subfolder, struct namespace *namespace);
-+
- static char *make_sieve_db(const char *user)
- {
-     static char buf[MAX_MAILBOX_PATH+1];
-@@ -484,7 +487,20 @@
- 			      sd->username, mdata->notifyheader,
- 			      namebuf, quotaoverride, 0);
-     }
--
-+    
-+    if (ret == IMAP_MAILBOX_NONEXISTENT) {
-+        /* if "plus" folder under INBOX, then try to create it */
-+        ret = autosieve_subfolder((char *) sd->username, sd->authstate, namebuf, mdata->namespace);
-+
-+	/* Try to deliver the mail again. */
-+        if (!ret)
-+            ret = deliver_mailbox(md->f, mdata->content, mdata->stage, md->size,
-+                                  fc->imapflags->flag, fc->imapflags->nflags,
-+                                  (char *) sd->username, sd->authstate, md->id,
-+                                  sd->username, mdata->notifyheader,
-+                                  namebuf, quotaoverride, 0);
-+    }
-+    
-     if (!ret) {
- 	snmp_increment(SIEVE_FILEINTO, 1);
- 	return SIEVE_OK;
-@@ -935,3 +951,80 @@
-        we'll do normal delivery */
-     return r;
- }
-+
-+
-+#define SEP '|'
-+
-+static int autosieve_subfolder(char *userid, struct auth_state *auth_state,
-+                               char *subfolder, struct namespace *namespace)
-+{
-+     char option_name_external[MAX_MAILBOX_NAME + 1];
-+     char option_name_internal[MAX_MAILBOX_NAME + 1];
-+     const char *subf ;
-+     char *p, *q, *next_subf;
-+     int len, r = 0;
-+     int createsievefolder = 0;
-+
-+    /* Check if subfolder or userid are NULL */
-+    if(userid == NULL || subfolder == NULL)
-+         return IMAP_MAILBOX_NONEXISTENT;
-+
-+    syslog(LOG_DEBUG, "autosievefolder: autosieve_subfolder() was called for user %s, folder %s", 
-+		    userid, subfolder);
-+
-+    if (config_getswitch(IMAPOPT_ANYSIEVEFOLDER)) {
-+         createsievefolder = 1;
-+    } else if ((subf = config_getstring(IMAPOPT_AUTOSIEVEFOLDERS)) != NULL) {
-+         /* Roll through subf */
-+         next_subf = (char *) subf;
-+         while (*next_subf) {
-+              for (p = next_subf ; isspace((int) *p) || *p == SEP ; p++);
-+              for (next_subf = p ; *next_subf && *next_subf != SEP ; next_subf++);
-+              for (q = next_subf ; q > p && (isspace((int) *q) || *q == SEP || !*q); q--);
-+
-+              if (!*p) continue;
-+                    
-+              len = q - p + 1;
-+             /*
-+              * This is a preliminary length check based on the assumption
-+              * that the *final* internal format will be something
-+              * like user.userid.subfolder(s).
-+              */
-+              if (len > sizeof(option_name_external) - strlen(userid) - 5)
-+                   return IMAP_MAILBOX_BADNAME;
-+
-+              strlcpy(option_name_external, namespace->prefix[NAMESPACE_INBOX], sizeof(option_name_external));
-+	      strncat(option_name_external, p, len);
-+                    
-+              /* 
-+               * Transform the option folder name to internal namespace and compare it
-+	       * with what must be created.
-+               */
-+              r = namespace->mboxname_tointernal(namespace, option_name_external, userid, option_name_internal);
-+              if (r) continue;
-+
-+              if (!strcmp(option_name_internal, subfolder)) {
-+                  createsievefolder = 1;
-+                  break;
-+              }
-+         }
-+    }
-+
-+    if (createsievefolder) {
-+        /* Folder is already in internal namespace format */
-+        r = mboxlist_createmailbox(subfolder, MAILBOX_FORMAT_NORMAL, NULL,
-+                                           1, userid, auth_state, 0, 0, 0);
-+        if (!r) {
-+            mboxlist_changesub(subfolder, userid, auth_state, 1, 1);
-+            syslog(LOG_DEBUG, "autosievefolder: User %s, folder %s creation succeeded",
-+                                                   userid, subfolder);
-+            return 0;
-+        } else {
-+            syslog(LOG_ERR, "autosievefolder: User %s, folder %s creation failed. %s",
-+                                                  userid, subfolder,error_message(r));
-+            return r;
-+        }
-+    } else
-+        return IMAP_MAILBOX_NONEXISTENT;
-+}
-+
-diff -Naur cyrus-imapd-2.3.16/lib/imapoptions cyrus-imapd-2.3.16-autosieve.uncompiled/lib/imapoptions
---- cyrus-imapd-2.3.16/lib/imapoptions	2009-12-21 13:25:22.000000000 +0200
-+++ cyrus-imapd-2.3.16-autosieve.uncompiled/lib/imapoptions	2009-12-23 01:08:09.000000000 +0200
-@@ -1043,6 +1043,15 @@
- /* If enabled, lmtpd will look for Sieve scripts in user's home
-    directories: ~user/.sieve. */
- 
-+{ "anysievefolder", 0, SWITCH }
-+/* It must be "yes" in order to permit the autocreation of any INBOX subfolder 
-+   requested by a sieve filter, through the "fileinto" action. (default = no) */
-+
-+{ "autosievefolders", NULL, STRING }
-+/* It is a "|" separated list of subfolders of INBOX that will be automatically created, 
-+   if requested by a sieve filter, through the "fileinto" action. (default = null)
-+   i.e. autosievefolders: Junk | Spam */
-+
- { "singleinstancestore", 1, SWITCH }
- /* If enabled, imapd, lmtpd and nntpd attempt to only write one copy
-    of a message per partition and create hard links, resulting in a
diff --git a/cyrus-imapd.spec b/cyrus-imapd.spec
index b083dd1..7d486d6 100644
--- a/cyrus-imapd.spec
+++ b/cyrus-imapd.spec
@@ -32,15 +32,6 @@ Source11: README.rpm
 Source12: cyrus-imapd.service
 Source13: cyr_systemd_helper
 
-# inclusion requested:
-# http://bugzilla.cyrusimap.org/bugzilla3/show_bug.cgi?id=3182
-# http://bugzilla.cyrusimap.org/bugzilla3/show_bug.cgi?id=3212
-Patch1: http://email.uoa.gr/download/cyrus/cyrus-imapd-2.3.16/cyrus-imapd-2.3.16-autocreate-0.10-0.diff
-
-# inclusion requested:
-# https://bugzilla.andrew.cmu.edu/show_bug.cgi?id=3212
-Patch2: http://email.uoa.gr/download/cyrus/cyrus-imapd-2.3.16/cyrus-imapd-2.3.16-autosieve-0.6.0.diff
-
 Patch3: http://www.oakton.edu/~jwade/cyrus/cyrus-imapd-2.1.3/cyrus-imapd-2.1.3-flock.patch
 
 Patch4: cyrus-imapd-2.3.1-authid_normalize.patch
@@ -70,6 +61,8 @@ Requires: %{name}-utils = %{version}-%{release}
 Requires: file, libdb-utils
 Requires: perl(:MODULE_COMPAT_%(eval "`%{__perl} -V:version`"; echo $version))
 
+%{?perl_default_filter}
+
 %description
 The %{name} package contains the core of the Cyrus IMAP server.
 It is a scaleable enterprise mail system designed for use from
@@ -122,8 +115,6 @@ one running the server.
 
 %prep
 %setup -q
-#%patch1 -p1 -b .autocreate
-#%patch2 -p1 -b .autosieve
 %patch3 -p1 -b .flock
 %patch4 -p1 -b .authid_normalize
 %patch6 -p1 -b .libdb


commit 6fe53495447ec5cf6bb6bf697335c732f839f81e
Author: Michal Hlavinka <mhlavink at redhat.com>
Date:   Tue Aug 16 11:35:23 2011 +0200

    rebuild with db5

diff --git a/cyrus-imapd.spec b/cyrus-imapd.spec
index b223406..b083dd1 100644
--- a/cyrus-imapd.spec
+++ b/cyrus-imapd.spec
@@ -1,6 +1,6 @@
 Name: cyrus-imapd
 Version: 2.4.10
-Release: 3%{?dist}
+Release: 4%{?dist}
 
 %define ssl_pem_file %{_sysconfdir}/pki/%{name}/%{name}.pem
 
@@ -55,7 +55,7 @@ BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
 
 BuildRequires: autoconf
 BuildRequires: cyrus-sasl-devel, perl-devel, tcp_wrappers
-BuildRequires: db4-devel, openssl-devel, pkgconfig
+BuildRequires: libdb-devel, openssl-devel, pkgconfig
 BuildRequires: flex, bison, groff, automake
 BuildRequires: openldap-devel
 BuildRequires: krb5-devel
@@ -67,7 +67,7 @@ Requires(preun):  systemd-units, coreutils
 Requires(postun): systemd-units
 
 Requires: %{name}-utils = %{version}-%{release}
-Requires: file, db4-utils
+Requires: file, libdb-utils
 Requires: perl(:MODULE_COMPAT_%(eval "`%{__perl} -V:version`"; echo $version))
 
 %description
@@ -126,7 +126,7 @@ one running the server.
 #%patch2 -p1 -b .autosieve
 %patch3 -p1 -b .flock
 %patch4 -p1 -b .authid_normalize
-%patch6 -p1 -b .db4.7
+%patch6 -p1 -b .libdb
 
 install -m 644 %{SOURCE4} %{SOURCE5} %{SOURCE11} doc/
 
@@ -174,7 +174,7 @@ LDFLAGS="$LDFLAGS -pie"; export LDFLAGS
   --with-perl=%{__perl} \
   --with-cyrus-prefix=%{_cyrexecdir} \
   --with-service-path=%{_cyrexecdir} \
-  --with-bdb-incdir=%{_includedir}/db4 \
+  --with-bdb-incdir=%{_includedir}/libdb \
   --with-extraident="Fedora-RPM-%{version}-%{release}" \
   --with-syslogfacility=MAIL \
   --with-krbimpl=mit
@@ -486,6 +486,9 @@ fi
 %{_mandir}/man1/*
 
 %changelog
+* Tue Aug 16 2011 Michal Hlavinka <mhlavink at redhat.com> - 2.4.10-4
+- rebuild with db5
+
 * Thu Jul 21 2011 Petr Sabata <contyk at redhat.com> - 2.4.10-3
 - Perl mass rebuild
 


commit c284d5fce66fe03a823dcf0a59301de73b4ce91b
Author: Petr Sabata <contyk at redhat.com>
Date:   Thu Jul 21 18:38:50 2011 +0200

    Perl mass rebuild

diff --git a/cyrus-imapd.spec b/cyrus-imapd.spec
index 2c97436..b223406 100644
--- a/cyrus-imapd.spec
+++ b/cyrus-imapd.spec
@@ -1,6 +1,6 @@
 Name: cyrus-imapd
 Version: 2.4.10
-Release: 2%{?dist}
+Release: 3%{?dist}
 
 %define ssl_pem_file %{_sysconfdir}/pki/%{name}/%{name}.pem
 
@@ -486,6 +486,9 @@ fi
 %{_mandir}/man1/*
 
 %changelog
+* Thu Jul 21 2011 Petr Sabata <contyk at redhat.com> - 2.4.10-3
+- Perl mass rebuild
+
 * Wed Jul 20 2011 Petr Sabata <contyk at redhat.com> - 2.4.10-2
 - Perl mass rebuild
 


commit 38931f39a24a556cbb60faa3e400b75935c02eb3
Author: Petr Sabata <contyk at redhat.com>
Date:   Wed Jul 20 11:58:24 2011 +0200

    Perl mass rebuild

diff --git a/cyrus-imapd.spec b/cyrus-imapd.spec
index e7801fd..2c97436 100644
--- a/cyrus-imapd.spec
+++ b/cyrus-imapd.spec
@@ -1,6 +1,6 @@
 Name: cyrus-imapd
 Version: 2.4.10
-Release: 1%{?dist}
+Release: 2%{?dist}
 
 %define ssl_pem_file %{_sysconfdir}/pki/%{name}/%{name}.pem
 
@@ -486,6 +486,9 @@ fi
 %{_mandir}/man1/*
 
 %changelog
+* Wed Jul 20 2011 Petr Sabata <contyk at redhat.com> - 2.4.10-2
+- Perl mass rebuild
+
 * Wed Jul  6 2011 Jeroen van Meeuwen <kanarip at kanarip.com> - 2.4.10-1
 - New upstream release
 


commit 808c92b6b434eaacc8f975c5db0b0baa0ffb7ee6
Author: Jeroen van Meeuwen (Ergo Project) <jeroen.van.meeuwen at ergo-project.org>
Date:   Wed Jul 6 09:17:13 2011 +0100

    Check in version 2.4.10

diff --git a/.gitignore b/.gitignore
index 1241a97..f47daae 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,3 +3,4 @@ cyrus_sharedbackup-0.1.tar.gz
 /cyrus-imapd-2.4.6.tar.gz
 /cyrus-imapd-2.4.7.tar.gz
 /cyrus-imapd-2.4.8.tar.gz
+/cyrus-imapd-2.4.10.tar.gz
diff --git a/cyrus-imapd.spec b/cyrus-imapd.spec
index 6a18102..e7801fd 100644
--- a/cyrus-imapd.spec
+++ b/cyrus-imapd.spec
@@ -1,6 +1,6 @@
 Name: cyrus-imapd
-Version: 2.4.8
-Release: 5%{?dist}
+Version: 2.4.10
+Release: 1%{?dist}
 
 %define ssl_pem_file %{_sysconfdir}/pki/%{name}/%{name}.pem
 
@@ -51,10 +51,6 @@ Patch6: cyrus-imapd-2.3.12p2-current-db.patch
 # temporary workaround, rhbz#553011, https://bugzilla.andrew.cmu.edu/show_bug.cgi?id=3206
 Patch7: cyrus-imapd-2.3.16-nodenny.patch
 
-# compatibility with perl 5.14
-# adapted from http://bugzilla.cyrusimap.org/bugzilla3/show_bug.cgi?id=3478
-Patch8: cyrus-imapd-perl5.14.patch
-
 BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
 
 BuildRequires: autoconf
@@ -131,7 +127,6 @@ one running the server.
 %patch3 -p1 -b .flock
 %patch4 -p1 -b .authid_normalize
 %patch6 -p1 -b .db4.7
-%patch8 -p1 -b .perl5.14
 
 install -m 644 %{SOURCE4} %{SOURCE5} %{SOURCE11} doc/
 
@@ -491,6 +486,9 @@ fi
 %{_mandir}/man1/*
 
 %changelog
+* Wed Jul  6 2011 Jeroen van Meeuwen <kanarip at kanarip.com> - 2.4.10-1
+- New upstream release
+
 * Wed Jun 22 2011 Iain Arnell <iarnell at gmail.com> 2.4.8-5
 - Patch to work with Perl 5.14
 
diff --git a/sources b/sources
index 1f0b9ca..cf7ef60 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-b55930293787a42d571a47f69aaacf28  cyrus-imapd-2.4.8.tar.gz
+55f08eeabf2f93281e61ba27854aea67  cyrus-imapd-2.4.10.tar.gz


commit 1c765ef33ccec876c5b67c5733e5c8da39348da2
Author: Iain Arnell <iarnell at gmail.com>
Date:   Wed Jun 22 05:22:29 2011 +0200

    Patch to work with Perl 5.14

diff --git a/cyrus-imapd-perl5.14.patch b/cyrus-imapd-perl5.14.patch
new file mode 100644
index 0000000..ddc04bf
--- /dev/null
+++ b/cyrus-imapd-perl5.14.patch
@@ -0,0 +1,96 @@
+diff -up cyrus-imapd-2.4.8/perl/imap/IMAP.xs.perl5.14 cyrus-imapd-2.4.8/perl/imap/IMAP.xs
+--- cyrus-imapd-2.4.8/perl/imap/IMAP.xs.perl5.14	2011-04-13 16:35:22.000000000 +0200
++++ cyrus-imapd-2.4.8/perl/imap/IMAP.xs	2011-06-21 08:08:16.841989447 +0200
+@@ -125,10 +125,10 @@ void imclient_xs_cb(struct imclient *cli
+   SAVETMPS;
+   PUSHMARK(SP);
+   XPUSHs(sv_2mortal(newSVpv("-client", 0)));
+-  rv = newSVsv(&sv_undef);
++  rv = newSVsv(&PL_sv_undef);
+   sv_setref_pv(rv, NULL, (void *) rock->client);
+   XPUSHs(rv);
+-  if (rock->prock != &sv_undef) {
++  if (rock->prock != &PL_sv_undef) {
+     XPUSHs(sv_2mortal(newSVpv("-rock", 0)));
+     XPUSHs(sv_mortalcopy(rock->prock));
+   }
+@@ -393,7 +393,7 @@ CODE:
+ 	ST(0) = sv_newmortal();
+ 
+ 	if(client->authenticated) {
+-	  ST(0) = &sv_no;
++	  ST(0) = &PL_sv_no;
+ 	  return;
+ 	}
+ 
+@@ -415,10 +415,10 @@ CODE:
+ 	rc = imclient_authenticate(client->imclient, mechlist, service, user,
+ 				   minssf, maxssf);
+ 	if (rc)
+-	  ST(0) = &sv_no;
++	  ST(0) = &PL_sv_no;
+ 	else {
+ 	  client->authenticated = 1;
+-	  ST(0) = &sv_yes;
++	  ST(0) = &PL_sv_yes;
+ 	}
+ 
+ int
+@@ -450,12 +450,12 @@ CODE:
+ #ifdef HAVE_SSL
+ 	rc = imclient_starttls(client->imclient, tls_cert_file, tls_key_file, CAfile, CApath);
+ 	if (rc)
+-	  ST(0) = &sv_no;
++	  ST(0) = &PL_sv_no;
+ 	else {
+-	  ST(0) = &sv_yes;
++	  ST(0) = &PL_sv_yes;
+ 	}
+ #else
+-	ST(0) = &sv_no;
++	ST(0) = &PL_sv_no;
+ #endif /* HAVE_SSL */
+ 
+ void
+@@ -515,7 +515,7 @@ PPCODE:
+ 	      (val = hv_fetch(cb, "Rock", 4, 0)))
+ 	    prock = *val;
+ 	  else
+-	    prock = &sv_undef;
++	    prock = &PL_sv_undef;
+ 	  /*
+ 	   * build our internal rock, which is used by our internal
+ 	   * callback handler to invoke the Perl callback
+@@ -526,7 +526,7 @@ PPCODE:
+ 	    rock = (struct xsccb *) safemalloc(sizeof *rock);
+ 	    /* bump refcounts on these so they don't go away */
+ 	    rock->pcb = SvREFCNT_inc(pcb);
+-	    if (!prock) prock = &sv_undef;
++	    if (!prock) prock = &PL_sv_undef;
+ 	    rock->prock = SvREFCNT_inc(prock);
+ 	    rock->client = client;
+ 	    rock->autofree = 0;
+@@ -653,9 +653,9 @@ PPCODE:
+ 	    EXTEND(SP, 1);
+ 	    pcb = av_shift(av);
+ 	    if (strcmp(SvPV(pcb, arg), "OK") == 0)
+-	      PUSHs(&sv_yes);
++	      PUSHs(&PL_sv_yes);
+ 	    else
+-	      PUSHs(&sv_no);
++	      PUSHs(&PL_sv_no);
+ 	    pcb = perl_get_sv("@", TRUE);
+ 	    sv_setsv(pcb, av_shift(av));
+ 	    if (av_len(av) != -1) {
+@@ -688,9 +688,9 @@ PPCODE:
+ 	EXTEND(SP, 2);
+ 	PUSHs(sv_2mortal(newSViv(fd)));
+ 	if (writep)
+-	  PUSHs(&sv_yes);
++	  PUSHs(&PL_sv_yes);
+ 	else
+-	  PUSHs(&sv_no);
++	  PUSHs(&PL_sv_no);
+ 
+ void
+ imclient_fromURL(client,url)
diff --git a/cyrus-imapd.spec b/cyrus-imapd.spec
index 426de47..6a18102 100644
--- a/cyrus-imapd.spec
+++ b/cyrus-imapd.spec
@@ -1,6 +1,6 @@
 Name: cyrus-imapd
 Version: 2.4.8
-Release: 4%{?dist}
+Release: 5%{?dist}
 
 %define ssl_pem_file %{_sysconfdir}/pki/%{name}/%{name}.pem
 
@@ -51,6 +51,10 @@ Patch6: cyrus-imapd-2.3.12p2-current-db.patch
 # temporary workaround, rhbz#553011, https://bugzilla.andrew.cmu.edu/show_bug.cgi?id=3206
 Patch7: cyrus-imapd-2.3.16-nodenny.patch
 
+# compatibility with perl 5.14
+# adapted from http://bugzilla.cyrusimap.org/bugzilla3/show_bug.cgi?id=3478
+Patch8: cyrus-imapd-perl5.14.patch
+
 BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
 
 BuildRequires: autoconf
@@ -127,6 +131,7 @@ one running the server.
 %patch3 -p1 -b .flock
 %patch4 -p1 -b .authid_normalize
 %patch6 -p1 -b .db4.7
+%patch8 -p1 -b .perl5.14
 
 install -m 644 %{SOURCE4} %{SOURCE5} %{SOURCE11} doc/
 
@@ -486,6 +491,9 @@ fi
 %{_mandir}/man1/*
 
 %changelog
+* Wed Jun 22 2011 Iain Arnell <iarnell at gmail.com> 2.4.8-5
+- Patch to work with Perl 5.14
+
 * Mon Jun 20 2011 Marcela Mašláňová <mmaslano at redhat.com> - 2.4.8-4
 - Perl mass rebuild
 


commit cd4866d88496c48bbdb878c3fe81b1ed90fe2b8d
Author: Marcela Mašláňová <mmaslano at redhat.com>
Date:   Mon Jun 20 21:58:05 2011 +0200

    Perl mass rebuild

diff --git a/cyrus-imapd.spec b/cyrus-imapd.spec
index 77ccbbf..426de47 100644
--- a/cyrus-imapd.spec
+++ b/cyrus-imapd.spec
@@ -1,6 +1,6 @@
 Name: cyrus-imapd
 Version: 2.4.8
-Release: 3%{?dist}
+Release: 4%{?dist}
 
 %define ssl_pem_file %{_sysconfdir}/pki/%{name}/%{name}.pem
 
@@ -486,6 +486,9 @@ fi
 %{_mandir}/man1/*
 
 %changelog
+* Mon Jun 20 2011 Marcela Mašláňová <mmaslano at redhat.com> - 2.4.8-4
+- Perl mass rebuild
+
 * Fri Jun 10 2011 Marcela Mašláňová <mmaslano at redhat.com> - 2.4.8-3
 - Perl 5.14 mass rebuild
 


commit 37f88d5d834f610d7183f7f8c1877ae5ea92fcca
Author: Marcela Mašláňová <mmaslano at redhat.com>
Date:   Fri Jun 10 15:14:06 2011 +0200

    Perl 5.14 mass rebuild

diff --git a/cyrus-imapd.spec b/cyrus-imapd.spec
index a897941..77ccbbf 100644
--- a/cyrus-imapd.spec
+++ b/cyrus-imapd.spec
@@ -1,6 +1,6 @@
 Name: cyrus-imapd
 Version: 2.4.8
-Release: 2%{?dist}
+Release: 3%{?dist}
 
 %define ssl_pem_file %{_sysconfdir}/pki/%{name}/%{name}.pem
 
@@ -486,6 +486,9 @@ fi
 %{_mandir}/man1/*
 
 %changelog
+* Fri Jun 10 2011 Marcela Mašláňová <mmaslano at redhat.com> - 2.4.8-3
+- Perl 5.14 mass rebuild
+
 * Mon May 09 2011 Michal Hlavinka <mhlavink at redhat.com> - 2.4.8-2
 - fixed: systemd commands in %%post (thanks Bill Nottingham)
 


commit a1eec5a1e5fc03f4feeb62ce8ef13ce4ddada71d
Author: Michal Hlavinka <mhlavink at redhat.com>
Date:   Mon May 9 13:39:37 2011 +0200

    fixed: systemd commands in %post (thanks Bill Nottingham)

diff --git a/cyrus-imapd.spec b/cyrus-imapd.spec
index a832ea7..a897941 100644
--- a/cyrus-imapd.spec
+++ b/cyrus-imapd.spec
@@ -1,6 +1,6 @@
 Name: cyrus-imapd
 Version: 2.4.8
-Release: 1%{?dist}
+Release: 2%{?dist}
 
 %define ssl_pem_file %{_sysconfdir}/pki/%{name}/%{name}.pem
 
@@ -301,10 +301,7 @@ rm -rf %{buildroot}
   -G saslauth -s /sbin/nologin -u %{uid} -r %{_cyrususer} 2> /dev/null || :
 
 %post
-/sbin/service cyrus-imapd condrestart >/dev/null 2>&1 ||:
-if [ $1 -eq 1 ]; then
-        /bin/systemctl enable cyrus-imapd.service >/dev/null 2>&1 || :
-fi
+/bin/systemctl daemon-reload > /dev/null 2>&1 :
 
 # Force synchronous updates, usually only on ext2 filesystems
 for i in %{_var}/lib/imap/{user,quota} %{_var}/spool/imap
@@ -349,8 +346,8 @@ if [ $1 -ge 1 ] ; then
         /bin/systemctl try-restart cyrus-imapd.service >/dev/null 2>&1 || :
 fi
 
-%triggerun -- smartmontools < 2.4.7-2
-/sbin/chkconfig smartd && /bin/systemctl enable smartd.service >/dev/null 2>&1 || :
+%triggerun -- cyrus-imapd < 2.4.7-2
+/sbin/chkconfig --level 3 cyrus-imapd && /bin/systemctl enable cyrus-imapd.service >/dev/null 2>&1 || :
 
 %files
 %defattr(-,root,root,-)
@@ -489,6 +486,9 @@ fi
 %{_mandir}/man1/*
 
 %changelog
+* Mon May 09 2011 Michal Hlavinka <mhlavink at redhat.com> - 2.4.8-2
+- fixed: systemd commands in %%post (thanks Bill Nottingham)
+
 * Thu Apr 14 2011 Michal Hlavinka <mhlavink at redhat.com> - 2.4.8-1
 - cyrus-imapd updated to 2.4.8
 - fixed: cannot set unlimited quota through proxy


commit 45c13ab9af2b497963290da2a699cde5033b341c
Author: Michal Hlavinka <mhlavink at redhat.com>
Date:   Thu Apr 14 12:15:02 2011 +0200

    cyrus-imapd updated to 2.4.8
    fixed: cannot set unlimited quota through proxy
    fixed: reconstruct tries to set timestamps again and again
    fixed: response for LIST "" user is wrong
    fixed: THREAD command doesn't support quoted charset
    fixed crashes in mupdatetest and cyr_expire when using -x

diff --git a/.gitignore b/.gitignore
index cfeb695..1241a97 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,3 +2,4 @@ cyrus-imapd-2.3.16.tar.gz
 cyrus_sharedbackup-0.1.tar.gz
 /cyrus-imapd-2.4.6.tar.gz
 /cyrus-imapd-2.4.7.tar.gz
+/cyrus-imapd-2.4.8.tar.gz
diff --git a/cyrus-imapd.spec b/cyrus-imapd.spec
index 37cf687..a832ea7 100644
--- a/cyrus-imapd.spec
+++ b/cyrus-imapd.spec
@@ -1,6 +1,6 @@
 Name: cyrus-imapd
-Version: 2.4.7
-Release: 2%{?dist}
+Version: 2.4.8
+Release: 1%{?dist}
 
 %define ssl_pem_file %{_sysconfdir}/pki/%{name}/%{name}.pem
 
@@ -489,6 +489,14 @@ fi
 %{_mandir}/man1/*
 
 %changelog
+* Thu Apr 14 2011 Michal Hlavinka <mhlavink at redhat.com> - 2.4.8-1
+- cyrus-imapd updated to 2.4.8
+- fixed: cannot set unlimited quota through proxy
+- fixed: reconstruct tries to set timestamps again and again   
+- fixed: response for LIST "" user is wrong
+- fixed: THREAD command doesn't support quoted charset   
+- fixed crashes in mupdatetest and cyr_expire when using -x  
+
 * Mon Apr 04 2011 Michal Hlaivnka <mhlavink at redhat.com> - 2.4.7-2
 - now using systemd
 
diff --git a/sources b/sources
index 25369ef..1f0b9ca 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-7ef3a02c3e92a44a2adf25f81db4ca3c  cyrus-imapd-2.4.7.tar.gz
+b55930293787a42d571a47f69aaacf28  cyrus-imapd-2.4.8.tar.gz


commit 04182b7a17a18b7ef5b29de706ae7223e2e7e46c
Author: Michal Hlavinka <mhlavink at redhat.com>
Date:   Mon Apr 4 17:32:41 2011 +0200

    remove not used init script

diff --git a/cyrus-imapd.init b/cyrus-imapd.init
deleted file mode 100644
index 214e435..0000000
--- a/cyrus-imapd.init
+++ /dev/null
@@ -1,159 +0,0 @@
-#!/bin/sh
-#
-# chkconfig: - 65 35
-# description: The Cyrus IMAPD master serves as a master process for the Cyrus \
-#              IMAP and POP servers.
-# config: /etc/cyrus.conf
-# config: /etc/imapd.conf
-# pidfile: /var/run/cyrus-master.pid
-
-# author:	Simon Matter, Invoca Systems <simon.matter at invoca.ch>
-# version:	2005111100
-# changed:	add quickstart/stop option to init script to bypass db import/export
-
-. /etc/init.d/functions
-
-config=/etc/imapd.conf
-config2=/etc/cyrus.conf
-exec=/usr/lib/cyrus-imapd/cyrus-master
-lockfile=/var/lock/subsys/cyrus-imapd
-pidfile=/var/run/cyrus-master.pid
-prog="cyrus-imapd"
-
-if [ -f /etc/sysconfig/$prog ]; then
-    . /etc/sysconfig/$prog
-fi
-
-# check if the config files are present
-configok=true
-[ -f $config -a $config2 ] || configok=false
- 
-# get_config [config default]
-# extracts config option from config file
-get_config() {
-  if conf=$(grep "^$1" /etc/imapd.conf); then
-    echo $conf | cut -d: -f2
-  else
-    echo $2
-  fi
-}
-
-# where to find files and directories
-CONFIGDIRECTORY=$(get_config configdirectory /var/lib/imap)
-CYRUSMASTER=/usr/lib/cyrus-imapd/cyrus-master
-CYRUS_PROC_NAME=$(basename $CYRUSMASTER)
-ALWAYS_CONVERT=1
-
-RETVAL=0
-RETVAL2=1
-QUICK=0
-
-start() {
-  [ $UID -eq 0 ] || exit 4
-  [ -x $exec ] || exit 5
-  $configok || exit 6
-  if [ $(/sbin/pidof -s $CYRUSMASTER) ]; then
-    echo -n $"$prog already running."
-    true
-    echo
-  else
-    if [ $QUICK -eq 0 ]; then
-      echo -n $"Importing $prog databases: "
-      cd $CONFIGDIRECTORY
-      runuser - cyrus -s /bin/sh -c "umask 166 ; /usr/lib/cyrus-imapd/cvt_cyrusdb_all > ${CONFIGDIRECTORY}/rpm/db_import.log 2>&1" < /dev/null
-      RETVAL=$?
-      if [ $RETVAL -eq 0 ]; then
-        success $"$prog importing databases"
-      else
-        failure $"$prog error importing databases, check ${CONFIGDIRECTORY}/rpm/db_import.log"
-      fi
-      echo
-    fi
-    if [ $RETVAL -eq 0 ]; then
-      echo -n $"Starting $prog: "
-      daemon $CYRUSMASTER -d $CYRUSOPTIONS
-      RETVAL2=$?
-      echo
-    fi
-  fi
-  [ $RETVAL -eq 0 -a $RETVAL2 -eq 0 ] && touch $lockfile
-  return $RETVAL
-}
-
-stop() {
-  [ $UID -eq 0 ] || exit 4
-  [ -x $exec ] || exit 5
-
-  echo -n $"Shutting down $prog: "
-  killproc $CYRUSMASTER
-  RETVAL=$?
-  if [ $QUICK -eq 0 ]; then
-    if [ ! $(/sbin/pidof -s $CYRUSMASTER) ]; then
-      echo
-      echo -n $"Exporting $prog databases: "
-      cd $CONFIGDIRECTORY
-      runuser - cyrus -s /bin/sh -c "umask 166 ; /usr/lib/cyrus-imapd/cvt_cyrusdb_all export > ${CONFIGDIRECTORY}/rpm/db_export.log 2>&1" < /dev/null
-      RETVAL2=$?
-      if [ $RETVAL2 -eq 0 ]; then
-        success $"$prog exporting databases"
-      else
-        failure $"$prog error exporting databases, check ${CONFIGDIRECTORY}/rpm/db_export.log"
-      fi
-    fi
-  fi
-  echo
-  [ $RETVAL -eq 0 -a $RETVAL2 -eq 0 ] && rm -f $lockfile
-  return $RETVAL
-}
-
-restart() {
-  stop
-  start
-}
-
-reload() {
-  echo -n $"Reloading cyrus.conf file: "
-  killproc $CYRUSMASTER -HUP
-  RETVAL=$?
-  echo
-  return $RETVAL
-}
- 
-case "$1" in
-  start)
-    start
-    ;;
-  stop)
-    stop
-    ;;
-  force-reload|restart)
-    restart
-    ;;
-  reload)
-    reload
-    ;;
-  condrestart|try-restart)
-    if [ -f $lockfile ]; then
-        stop
-        start
-    fi
-    ;;
-  status)
-    status -p $pidfile $prog 
-    RETVAL=$?
-    ;;
-  quickstart)
-    QUICK=1
-    start
-    ;;
-  quickstop)
-    QUICK=1
-    stop
-    ;;
-  *)
-    echo $"Usage: $0 {start|stop|restart|reload|force-reload|condrestart|try-restart|status|quickstart|quickstop}"
-    RETVAL=2
-    [ "$1" = "usage" ] && RETVAL=0
-esac
-
-exit $RETVAL


commit 41d9d318b6e8e54313695b261a07c58dce84e8c4
Author: Michal Hlavinka <mhlavink at redhat.com>
Date:   Mon Apr 4 17:10:19 2011 +0200

    now using systemd

diff --git a/cyr_systemd_helper b/cyr_systemd_helper
new file mode 100755
index 0000000..2d9ad56
--- /dev/null
+++ b/cyr_systemd_helper
@@ -0,0 +1,38 @@
+#!/bin/sh
+# get_config [config default]
+# extracts config option from config file
+get_config() {
+  if conf=$(grep "^$1" /etc/imapd.conf); then
+    echo $conf | cut -d: -f2
+  else
+    echo $2
+  fi
+}
+
+CONFIGDIRECTORY=$(get_config configdirectory /var/lib/imap)
+RETVAL=0
+
+start() {
+      cd $CONFIGDIRECTORY
+      runuser - cyrus -s /bin/sh -c "umask 166 ; /usr/lib/cyrus-imapd/cvt_cyrusdb_all > ${CONFIGDIRECTORY}/rpm/db_import.log 2>&1" < /dev/null
+      RETVAL=$?
+}
+
+stop() {
+      cd $CONFIGDIRECTORY
+      runuser - cyrus -s /bin/sh -c "umask 166 ; /usr/lib/cyrus-imapd/cvt_cyrusdb_all export > ${CONFIGDIRECTORY}/rpm/db_export.log 2>&1" < /dev/null
+      RETVAL=$?
+}
+
+case "$1" in
+  start)
+    start
+    ;;
+  stop)
+    stop
+    ;;
+  *)
+    ;;
+esac
+
+exit $RETVAL
diff --git a/cyrus-imapd.service b/cyrus-imapd.service
new file mode 100644
index 0000000..4675ec1
--- /dev/null
+++ b/cyrus-imapd.service
@@ -0,0 +1,13 @@
+[Unit]
+Description=Cyrus-imapd IMAP/POP3 email server
+After=local-fs.target network.target
+
+[Service]
+Type=simple
+EnvironmentFile=/etc/sysconfig/cyrus-imapd
+ExecStartPre=/usr/lib/cyrus-imapd/cyr_systemd_helper start
+ExecStart=/usr/lib/cyrus-imapd/cyrus-master $CYRUSOPTIONS
+ExecStopPost=/usr/lib/cyrus-imapd/cyr_systemd_helper stop
+
+[Install]
+WantedBy=multi-user.target
diff --git a/cyrus-imapd.spec b/cyrus-imapd.spec
index ea092e9..37cf687 100644
--- a/cyrus-imapd.spec
+++ b/cyrus-imapd.spec
@@ -1,6 +1,6 @@
 Name: cyrus-imapd
 Version: 2.4.7
-Release: 1%{?dist}
+Release: 2%{?dist}
 
 %define ssl_pem_file %{_sysconfdir}/pki/%{name}/%{name}.pem
 
@@ -22,13 +22,16 @@ Source2: cyrus-imapd.imap-2.3.x-conf
 Source3: cyrus-imapd.pam-config
 Source4: http://email.uoa.gr/projects/cyrus/autocreate/README.autocreate-cyrus-2.3
 Source5: http://email.uoa.gr/projects/cyrus/autosievefolder/README.autosievefolder
-Source6: cyrus-imapd.init
 Source7: cyrus-imapd.sysconfig
 Source8: cyrus-imapd.cvt_cyrusdb_all
 Source9: cyrus-imapd.magic
 Source10: cyrus-imapd.cron-daily
 Source11: README.rpm
 
+#systemd support
+Source12: cyrus-imapd.service
+Source13: cyr_systemd_helper
+
 # inclusion requested:
 # http://bugzilla.cyrusimap.org/bugzilla3/show_bug.cgi?id=3182
 # http://bugzilla.cyrusimap.org/bugzilla3/show_bug.cgi?id=3212
@@ -59,9 +62,9 @@ BuildRequires: krb5-devel
 BuildRequires: net-snmp-devel
 BuildRequires: transfig
 
-Requires(post): e2fsprogs, chkconfig, initscripts, perl, grep, coreutils, findutils
-Requires(preun): chkconfig, initscripts, coreutils
-Requires(postun): initscripts
+Requires(post):   e2fsprogs, perl, grep, coreutils, findutils, systemd-units
+Requires(preun):  systemd-units, coreutils
+Requires(postun): systemd-units
 
 Requires: %{name}-utils = %{version}-%{release}
 Requires: file, db4-utils
@@ -229,10 +232,12 @@ install -p -m 644 %{SOURCE3}    %{buildroot}%{_sysconfdir}/pam.d/lmtp
 install -p -m 644 %{SOURCE3}    %{buildroot}%{_sysconfdir}/pam.d/nntp
 install -p -m 644 %{SOURCE3}    %{buildroot}%{_sysconfdir}/pam.d/csync
 install -p -m 644 %{SOURCE1}    %{buildroot}%{_sysconfdir}/logrotate.d/%{name}
-install -p -m 755 %{SOURCE6}   %{buildroot}%{_sysconfdir}/rc.d/init.d/%{name}
 install -p -m 644 %{SOURCE7}   %{buildroot}%{_sysconfdir}/sysconfig/%{name}
 install -p -m 755 %{SOURCE10}   %{buildroot}%{_sysconfdir}/cron.daily/%{name}
 
+install -p -D -m 644 %{SOURCE12}   %{buildroot}/lib/systemd/system/cyrus-imapd.service
+install -p -D -m 755 %{SOURCE13}   %{buildroot}%{_cyrexecdir}/cyr_systemd_helper
+
 # Cleanup of doc dir
 find doc perl -name CVS -type d -prune -exec rm -rf {} \;
 find doc perl -name .cvsignore -type f -exec rm -f {} \;
@@ -296,7 +301,10 @@ rm -rf %{buildroot}
   -G saslauth -s /sbin/nologin -u %{uid} -r %{_cyrususer} 2> /dev/null || :
 
 %post
-/sbin/chkconfig --add %{name}
+/sbin/service cyrus-imapd condrestart >/dev/null 2>&1 ||:
+if [ $1 -eq 1 ]; then
+        /bin/systemctl enable cyrus-imapd.service >/dev/null 2>&1 || :
+fi
 
 # Force synchronous updates, usually only on ext2 filesystems
 for i in %{_var}/lib/imap/{user,quota} %{_var}/spool/imap
@@ -328,23 +336,28 @@ popd
 fi
 
 %preun
-if [ $1 = 0 ]; then
-  /sbin/service %{name} stop >/dev/null 2>&1 || :
-  /sbin/chkconfig --del %{name}
+if [ $1 -eq 0 ] ; then
+        # Package removal, not upgrade
+        /bin/systemctl disable cyrus-imapd.service >/dev/null 2>&1 || :
+        /bin/systemctl stop cyrus-imapd.service > /dev/null 2>&1 || :
 fi
 
 %postun
-if [ $1 != 0 ]; then
-  /sbin/service %{name} condrestart >/dev/null 2>&1 || :
+/bin/systemctl daemon-reload >/dev/null 2>&1 || :
+if [ $1 -ge 1 ] ; then
+        # Package upgrade, not uninstall
+        /bin/systemctl try-restart cyrus-imapd.service >/dev/null 2>&1 || :
 fi
 
+%triggerun -- smartmontools < 2.4.7-2
+/sbin/chkconfig smartd && /bin/systemctl enable smartd.service >/dev/null 2>&1 || :
+
 %files
 %defattr(-,root,root,-)
 %doc COPYRIGHT README
 %doc doc/*
 %config(noreplace) %{_sysconfdir}/cyrus.conf
 %config(noreplace) %{_sysconfdir}/imapd.conf
-%{_sysconfdir}/rc.d/init.d/%{name}
 %config(noreplace) %{_sysconfdir}/logrotate.d/%{name}
 %config(noreplace) %{_sysconfdir}/sysconfig/%{name}
 %config(noreplace) %{_sysconfdir}/pam.d/pop
@@ -355,7 +368,9 @@ fi
 %config(noreplace) %{_sysconfdir}/pam.d/csync
 %config(noreplace) %{_sysconfdir}/pam.d/nntp
 %{_sysconfdir}/cron.daily/%{name}
+/lib/systemd/system/cyrus-imapd.service
 %dir %{_cyrexecdir}
+%{_cyrexecdir}/cyr_systemd_helper
 %{_cyrexecdir}/arbitron
 %{_cyrexecdir}/arbitronsort.pl
 %{_cyrexecdir}/chk_cyrus
@@ -474,6 +489,9 @@ fi
 %{_mandir}/man1/*
 
 %changelog
+* Mon Apr 04 2011 Michal Hlaivnka <mhlavink at redhat.com> - 2.4.7-2
+- now using systemd
+
 * Thu Mar 31 2011 Michal Hlavinka <mhlavink at redhat.com> - 2.4.7-1
 - updated to 2.4.7
 


commit 66faec925560389861b5dd7f597c368648a20bf3
Author: Michal Hlavinka <mhlavink at redhat.com>
Date:   Thu Mar 31 08:44:23 2011 +0200

    updated to 2.4.7

diff --git a/.gitignore b/.gitignore
index afc03fa..cfeb695 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
 cyrus-imapd-2.3.16.tar.gz
 cyrus_sharedbackup-0.1.tar.gz
 /cyrus-imapd-2.4.6.tar.gz
+/cyrus-imapd-2.4.7.tar.gz
diff --git a/cyrus-imapd-2.3.1-make_md5_defaults.patch b/cyrus-imapd-2.3.1-make_md5_defaults.patch
deleted file mode 100644
index 38b8e70..0000000
--- a/cyrus-imapd-2.3.1-make_md5_defaults.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-diff -up cyrus-imapd-2.4.6/lib/imapoptions.make_md5_defaults cyrus-imapd-2.4.6/lib/imapoptions
---- cyrus-imapd-2.4.6/lib/imapoptions.make_md5_defaults	2011-02-10 13:15:02.620914246 +0100
-+++ cyrus-imapd-2.4.6/lib/imapoptions	2011-02-10 13:20:09.717498074 +0100
-@@ -671,10 +671,14 @@ Blank lines and lines beginning with ``#
-    mailspool, but each have their own "replicated" copy of
-    mailboxes.db. */
- 
--{ "md5_dir", NULL, STRING }
-+{ "md5_dir", "/var/lib/imap/md5", STRING }
- /* Top level directory for MD5 store manipulated by make_md5. File
-    structure within this directory is one file for each user on the system,
--   hashed on the first letter of the userid (e.g., /var/imap/md5/d/dpc22). */
-+   hashed on the first letter of the
-+   userid (e.g., /var/imap/md5/d/dpc22).
-+.PP   
-+   Note: This RPM build uses \fI/var/lib/imap/md5\fR by default 
-+   instead of \fI/var/imap/md5\fR for \fBmd5_dir\fR. */
- 
- { "md5_user_map", NULL, STRING }
- /* Map file (cdb) to allow partial make_md5 runs. Maps username to UID */
-diff -up cyrus-imapd-2.4.6/lib/imapopts.c.make_md5_defaults cyrus-imapd-2.4.6/lib/imapopts.c
---- cyrus-imapd-2.4.6/lib/imapopts.c.make_md5_defaults	2010-12-20 14:20:42.000000000 +0100
-+++ cyrus-imapd-2.4.6/lib/imapopts.c	2011-02-10 13:19:14.961641299 +0100
-@@ -402,7 +402,7 @@ struct imapopt_s imapopts[] =
-       { "replicated" , IMAP_ENUM_MUPDATE_CONFIG_REPLICATED },
-       { NULL, IMAP_ENUM_ZERO } } },
-   { IMAPOPT_MD5_DIR, "md5_dir", 0, OPT_STRING,
--    {(void *)(NULL)},
-+    {(void *)("/var/lib/imap/md5")},
-     { { NULL, IMAP_ENUM_ZERO } } },
-   { IMAPOPT_MD5_USER_MAP, "md5_user_map", 0, OPT_STRING,
-     {(void *)(NULL)},
diff --git a/cyrus-imapd.spec b/cyrus-imapd.spec
index 6b0c220..ea092e9 100644
--- a/cyrus-imapd.spec
+++ b/cyrus-imapd.spec
@@ -1,5 +1,5 @@
 Name: cyrus-imapd
-Version: 2.4.6
+Version: 2.4.7
 Release: 1%{?dist}
 
 %define ssl_pem_file %{_sysconfdir}/pki/%{name}/%{name}.pem
@@ -42,9 +42,6 @@ Patch3: http://www.oakton.edu/~jwade/cyrus/cyrus-imapd-2.1.3/cyrus-imapd-2.1.3-f
 
 Patch4: cyrus-imapd-2.3.1-authid_normalize.patch
 
-# fedora/rhel specific, we use different directory
-Patch5: cyrus-imapd-2.3.1-make_md5_defaults.patch
-
 # fedora/rhel specific, find current db lib, rhbz#461875
 Patch6: cyrus-imapd-2.3.12p2-current-db.patch
 
@@ -126,7 +123,6 @@ one running the server.
 #%patch2 -p1 -b .autosieve
 %patch3 -p1 -b .flock
 %patch4 -p1 -b .authid_normalize
-%patch5 -p1 -b .make_md5_defaults
 %patch6 -p1 -b .db4.7
 
 install -m 644 %{SOURCE4} %{SOURCE5} %{SOURCE11} doc/
@@ -478,6 +474,9 @@ fi
 %{_mandir}/man1/*
 
 %changelog
+* Thu Mar 31 2011 Michal Hlavinka <mhlavink at redhat.com> - 2.4.7-1
+- updated to 2.4.7
+
 * Fri Feb 10 2011 Michal Hlavinka <mhlavink at redhat.com> - 2.4.6-1
 - updated to 2.4.6
 - "autocreate" and "autosieve" features were removed
diff --git a/sources b/sources
index a72c1fe..25369ef 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-c37b06ce2419734d8edf3d67004e5b0c  cyrus-imapd-2.4.6.tar.gz
+7ef3a02c3e92a44a2adf25f81db4ca3c  cyrus-imapd-2.4.7.tar.gz


commit 4a781052aed8085a1922f7b023be3acf8d223fb2
Author: Michal Hlavinka <mhlavink at redhat.com>
Date:   Mon Feb 14 18:50:56 2011 +0100

    add new sources

diff --git a/.gitignore b/.gitignore
index 9a827ef..afc03fa 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,3 @@
 cyrus-imapd-2.3.16.tar.gz
 cyrus_sharedbackup-0.1.tar.gz
+/cyrus-imapd-2.4.6.tar.gz
diff --git a/sources b/sources
index e34d8d7..a72c1fe 100644
--- a/sources
+++ b/sources
@@ -1,2 +1 @@
-6a37feb1985974eee8a4a4b2932dd54c  cyrus-imapd-2.3.16.tar.gz
-8f7a26b0556369827bb5c8084a3e3ea1  cyrus_sharedbackup-0.1.tar.gz
+c37b06ce2419734d8edf3d67004e5b0c  cyrus-imapd-2.4.6.tar.gz


commit eaf31cffbd82c631e6b764cfbcf37e92359dc71c
Author: Michal Hlavinka <mhlavink at redhat.com>
Date:   Thu Feb 10 14:56:53 2011 +0100

    - updated to 2.4.6
    - "autocreate" and "autosieve" features were removed

diff --git a/cyrus-imapd-2.1.3-flock.patch b/cyrus-imapd-2.1.3-flock.patch
index b74b99d..3b8a27e 100644
--- a/cyrus-imapd-2.1.3-flock.patch
+++ b/cyrus-imapd-2.1.3-flock.patch
@@ -1,9 +1,10 @@
---- cyrus-imapd-2.1.3/lib/lock_flock.c	Tue Oct  2 16:08:13 2001
-+++ cyrus-imapd-2.1.3-patched/lib/lock_flock.c	Tue Apr 16 09:44:58 2002
-@@ -51,6 +51,10 @@
+diff -up cyrus-imapd-2.4.6/lib/lock_flock.c.flock cyrus-imapd-2.4.6/lib/lock_flock.c
+--- cyrus-imapd-2.4.6/lib/lock_flock.c.flock	2010-12-20 14:15:49.000000000 +0100
++++ cyrus-imapd-2.4.6/lib/lock_flock.c	2011-02-10 12:56:45.262786102 +0100
+@@ -52,6 +52,10 @@
  #endif
  
- #include "lock.h"
+ #include "cyr_lock.h"
 +#include <syslog.h>
 +
 +/* Locking timeout parameter */
@@ -11,7 +12,7 @@
  
  const char *lock_method_desc = "flock";
  
-@@ -69,6 +73,18 @@
+@@ -68,6 +72,18 @@ const char *lock_method_desc = "flock";
   * 'failaction' is provided, it is filled in with a pointer to a fixed
   * string naming the action that failed.
   *
@@ -30,7 +31,7 @@
   */
  int lock_reopen(fd, filename, sbuf, failaction)
  int fd;
-@@ -79,17 +95,29 @@
+@@ -78,17 +94,29 @@ const char **failaction;
      int r;
      struct stat sbuffile, sbufspare;
      int newfd;
@@ -65,7 +66,7 @@
  	fstat(fd, sbuf);
  	r = stat(filename, &sbuffile);
  	if (r == -1) {
-@@ -97,9 +125,7 @@
+@@ -96,9 +124,7 @@ const char **failaction;
  	    flock(fd, LOCK_UN);
  	    return -1;
  	}
diff --git a/cyrus-imapd-2.3.1-make_md5_defaults.patch b/cyrus-imapd-2.3.1-make_md5_defaults.patch
index 8b348a3..38b8e70 100644
--- a/cyrus-imapd-2.3.1-make_md5_defaults.patch
+++ b/cyrus-imapd-2.3.1-make_md5_defaults.patch
@@ -1,17 +1,7 @@
---- cyrus-imapd-2.3.13/imap/make_md5.c.make_md5_defaults	2008-10-02 16:05:44.000000000 +0200
-+++ cyrus-imapd-2.3.13/imap/make_md5.c	2009-01-13 11:44:24.000000000 +0100
-@@ -857,7 +857,7 @@
-     if (!md5_dir) md5_dir = config_getstring(IMAPOPT_MD5_DIR);
- 
-     if (!md5_dir)
--        md5_dir = xstrdup("/var/imap/md5");
-+        md5_dir = xstrdup("/var/lib/imap/md5");
- 
-     if (max_children == 0) {
-         /* Simple case */
---- cyrus-imapd-2.3.13/lib/imapoptions.make_md5_defaults	2009-01-13 11:44:24.000000000 +0100
-+++ cyrus-imapd-2.3.13/lib/imapoptions	2009-01-13 14:17:35.000000000 +0100
-@@ -634,10 +634,14 @@
+diff -up cyrus-imapd-2.4.6/lib/imapoptions.make_md5_defaults cyrus-imapd-2.4.6/lib/imapoptions
+--- cyrus-imapd-2.4.6/lib/imapoptions.make_md5_defaults	2011-02-10 13:15:02.620914246 +0100
++++ cyrus-imapd-2.4.6/lib/imapoptions	2011-02-10 13:20:09.717498074 +0100
+@@ -671,10 +671,14 @@ Blank lines and lines beginning with ``#
     mailspool, but each have their own "replicated" copy of
     mailboxes.db. */
  
@@ -23,8 +13,20 @@
 +   hashed on the first letter of the
 +   userid (e.g., /var/imap/md5/d/dpc22).
 +.PP   
-+   Note: This Invoca RPM build uses \fI/var/lib/imap/md5\fR by default 
++   Note: This RPM build uses \fI/var/lib/imap/md5\fR by default 
 +   instead of \fI/var/imap/md5\fR for \fBmd5_dir\fR. */
  
  { "md5_user_map", NULL, STRING }
  /* Map file (cdb) to allow partial make_md5 runs. Maps username to UID */
+diff -up cyrus-imapd-2.4.6/lib/imapopts.c.make_md5_defaults cyrus-imapd-2.4.6/lib/imapopts.c
+--- cyrus-imapd-2.4.6/lib/imapopts.c.make_md5_defaults	2010-12-20 14:20:42.000000000 +0100
++++ cyrus-imapd-2.4.6/lib/imapopts.c	2011-02-10 13:19:14.961641299 +0100
+@@ -402,7 +402,7 @@ struct imapopt_s imapopts[] =
+       { "replicated" , IMAP_ENUM_MUPDATE_CONFIG_REPLICATED },
+       { NULL, IMAP_ENUM_ZERO } } },
+   { IMAPOPT_MD5_DIR, "md5_dir", 0, OPT_STRING,
+-    {(void *)(NULL)},
++    {(void *)("/var/lib/imap/md5")},
+     { { NULL, IMAP_ENUM_ZERO } } },
+   { IMAPOPT_MD5_USER_MAP, "md5_user_map", 0, OPT_STRING,
+     {(void *)(NULL)},
diff --git a/cyrus-imapd-2.3.12p2-current-db.patch b/cyrus-imapd-2.3.12p2-current-db.patch
index 320c403..85d242a 100644
--- a/cyrus-imapd-2.3.12p2-current-db.patch
+++ b/cyrus-imapd-2.3.12p2-current-db.patch
@@ -1,11 +1,21 @@
---- cyrus-imapd-2.3.12p2/cmulocal/berkdb.m4.orig	2008-09-12 07:46:46.000000000 +0200
-+++ cyrus-imapd-2.3.12p2/cmulocal/berkdb.m4	2008-09-12 07:47:10.000000000 +0200
-@@ -213,7 +213,7 @@ AC_DEFUN([CYRUS_BERKELEY_DB_CHK_LIB],
- 	fi
+diff -up cyrus-imapd-2.4.6/cmulocal/berkdb.m4.db4.7 cyrus-imapd-2.4.6/cmulocal/berkdb.m4
+--- cyrus-imapd-2.4.6/cmulocal/berkdb.m4.db4.7	2010-12-20 14:15:49.000000000 +0100
++++ cyrus-imapd-2.4.6/cmulocal/berkdb.m4	2011-02-10 13:43:26.397438481 +0100
+@@ -214,6 +214,7 @@ AC_DEFUN([CYRUS_BERKELEY_DB_CHK_LIB],
  
  	saved_LIBS=$LIBS
--        for dbname in ${with_bdb} db-4.7 db4.7 db47 db-4.6 db4.6 db46 db-4.5 db4.5 db45 db-4.4 db4.4 db44 db-4.3 db4.3 db43 db-4.2 db4.2 db42 db-4.1 db4.1 db41 db-4.0 db4.0 db-4 db40 db4 db-3.3 db3.3 db33 db-3.2 db3.2 db32 db-3.1 db3.1 db31 db-3 db30 db3 db
-+        for dbname in ${with_bdb} db db-4.7 db4.7 db47 db-4.6 db4.6 db46 db-4.5 db4.5 db45 db-4.4 db4.4 db44 db-4.3 db4.3 db43 db-4.2 db4.2 db42 db-4.1 db4.1 db41 db-4.0 db4.0 db-4 db40 db4 db-3.3 db3.3 db33 db-3.2 db3.2 db32 db-3.1 db3.1 db31 db-3 db30 db3
-           do
+ 	    for dbname in ${with_bdb} \
++	        db \
+ 	        db-4.8 db4.8 db48 \
+ 	        db-4.7 db4.7 db47 \
+ 	        db-4.6 db4.6 db46 \
+@@ -226,8 +227,7 @@ AC_DEFUN([CYRUS_BERKELEY_DB_CHK_LIB],
+ 	        db-3.3 db3.3 db33 \
+ 	        db-3.2 db3.2 db32 \
+ 	        db-3.1 db3.1 db31 \
+-	        db-3.0 db3.0 db30 db-3 db3 \
+-	        db
++	        db-3.0 db3.0 db30 db-3 db3
+ 	      do
  	    LIBS="$saved_LIBS -l$dbname"
  	    AC_TRY_LINK([#include <stdio.h>
diff --git a/cyrus-imapd.spec b/cyrus-imapd.spec
index 7090a48..6b0c220 100644
--- a/cyrus-imapd.spec
+++ b/cyrus-imapd.spec
@@ -1,6 +1,6 @@
 Name: cyrus-imapd
-Version: 2.3.16
-Release: 8%{?dist}
+Version: 2.4.6
+Release: 1%{?dist}
 
 %define ssl_pem_file %{_sysconfdir}/pki/%{name}/%{name}.pem
 
@@ -30,8 +30,8 @@ Source10: cyrus-imapd.cron-daily
 Source11: README.rpm
 
 # inclusion requested:
-# https://bugzilla.andrew.cmu.edu/show_bug.cgi?id=3182
-# https://bugzilla.andrew.cmu.edu/show_bug.cgi?id=3212
+# http://bugzilla.cyrusimap.org/bugzilla3/show_bug.cgi?id=3182
+# http://bugzilla.cyrusimap.org/bugzilla3/show_bug.cgi?id=3212
 Patch1: http://email.uoa.gr/download/cyrus/cyrus-imapd-2.3.16/cyrus-imapd-2.3.16-autocreate-0.10-0.diff
 
 # inclusion requested:
@@ -51,9 +51,6 @@ Patch6: cyrus-imapd-2.3.12p2-current-db.patch
 # temporary workaround, rhbz#553011, https://bugzilla.andrew.cmu.edu/show_bug.cgi?id=3206
 Patch7: cyrus-imapd-2.3.16-nodenny.patch
 
-# from upstream, rhbz#576652, for cyrus-imapd < 2.4
-Patch8: cyrus-imapd-2.3.15-qos.patch
-
 BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
 
 BuildRequires: autoconf
@@ -125,14 +122,12 @@ one running the server.
 
 %prep
 %setup -q
-%patch1 -p1 -b .autocreate
-%patch2 -p1 -b .autosieve
+#%patch1 -p1 -b .autocreate
+#%patch2 -p1 -b .autosieve
 %patch3 -p1 -b .flock
 %patch4 -p1 -b .authid_normalize
 %patch5 -p1 -b .make_md5_defaults
 %patch6 -p1 -b .db4.7
-%patch7 -p1 -b .nodenny
-%patch8 -p1 -b .qos
 
 install -m 644 %{SOURCE4} %{SOURCE5} %{SOURCE11} doc/
 
@@ -376,7 +371,9 @@ fi
 %{_cyrexecdir}/cvt_cyrusdb
 %{_cyrexecdir}/cyr_dbtool
 %{_cyrexecdir}/cyr_expire
+%{_cyrexecdir}/cyr_sequence
 %{_cyrexecdir}/cyr_synclog
+%{_cyrexecdir}/cyr_userseen
 %{_cyrexecdir}/cyrdump
 %{_cyrexecdir}/cyrus-master
 %{_cyrexecdir}/deliver
@@ -386,7 +383,6 @@ fi
 %{_cyrexecdir}/ipurge
 %{_cyrexecdir}/lmtpd
 %{_cyrexecdir}/lmtpproxyd
-%{_cyrexecdir}/make_sha1
 %{_cyrexecdir}/masssievec
 %{_cyrexecdir}/mbexamine
 %{_cyrexecdir}/mbpath
@@ -410,11 +406,9 @@ fi
 %{_cyrexecdir}/upgradesieve
 %{_cyrexecdir}/cvt_cyrusdb_all
 %{_cyrexecdir}/idled
-%{_cyrexecdir}/compile_sieve
 %{_cyrexecdir}/mupdate
 %{_cyrexecdir}/mupdate-loadgen.pl
 %{_cyrexecdir}/proxyd
-%{_cyrexecdir}/make_md5
 %{_cyrexecdir}/sync_client
 %{_cyrexecdir}/sync_reset
 %{_cyrexecdir}/sync_server
@@ -484,6 +478,10 @@ fi
 %{_mandir}/man1/*
 
 %changelog
+* Fri Feb 10 2011 Michal Hlavinka <mhlavink at redhat.com> - 2.4.6-1
+- updated to 2.4.6
+- "autocreate" and "autosieve" features were removed
+
 * Tue Feb 08 2011 Fedora Release Engineering <rel-eng at lists.fedoraproject.org> - 2.3.16-8
 - Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild
 


commit 365d195afebbda652cbba8405e8ee877ee21400a
Author: Dennis Gilmore <dennis at ausil.us>
Date:   Tue Feb 8 06:34:48 2011 -0600

    - Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild

diff --git a/cyrus-imapd.spec b/cyrus-imapd.spec
index 03ee87f..7090a48 100644
--- a/cyrus-imapd.spec
+++ b/cyrus-imapd.spec
@@ -1,6 +1,6 @@
 Name: cyrus-imapd
 Version: 2.3.16
-Release: 7%{?dist}
+Release: 8%{?dist}
 
 %define ssl_pem_file %{_sysconfdir}/pki/%{name}/%{name}.pem
 
@@ -484,6 +484,9 @@ fi
 %{_mandir}/man1/*
 
 %changelog
+* Tue Feb 08 2011 Fedora Release Engineering <rel-eng at lists.fedoraproject.org> - 2.3.16-8
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild
+
 * Fri Jan 21 2011 Michal Hlavinka <mhlavink at redhat.com> - 2.3.16-7
 - don't force sync io for all filesystems
 


commit 80ce5e695863e31b03fe87bd100765b62e93bfc0
Author: Michal Hlavinka <mhlavink at redhat.com>
Date:   Fri Jan 21 10:51:57 2011 +0100

    - don't force sync io for all filesystems

diff --git a/cyrus-imapd.spec b/cyrus-imapd.spec
index 87b7d42..03ee87f 100644
--- a/cyrus-imapd.spec
+++ b/cyrus-imapd.spec
@@ -1,6 +1,6 @@
 Name: cyrus-imapd
 Version: 2.3.16
-Release: 6%{?dist}
+Release: 7%{?dist}
 
 %define ssl_pem_file %{_sysconfdir}/pki/%{name}/%{name}.pem
 
@@ -307,8 +307,13 @@ rm -rf %{buildroot}
 %post
 /sbin/chkconfig --add %{name}
 
-# Force synchronous updates, usually only on extX filesystems
-chattr -R +S $i %{_var}/lib/imap/{user,quota} %{_var}/spool/imap 2>/dev/null ||:
+# Force synchronous updates, usually only on ext2 filesystems
+for i in %{_var}/lib/imap/{user,quota} %{_var}/spool/imap
+do
+  if [ "$(find $i -maxdepth 0 -printf %%F)" = "ext2" ]; then
+    chattr -R +S $i 2>/dev/null ||:
+  fi
+done
 
 # Create SSL certificates
 exec > /dev/null 2> /dev/null
@@ -479,6 +484,9 @@ fi
 %{_mandir}/man1/*
 
 %changelog
+* Fri Jan 21 2011 Michal Hlavinka <mhlavink at redhat.com> - 2.3.16-7
+- don't force sync io for all filesystems
+
 * Fri Jul 07 2010 Michal Hlavinka <mhlavink at redhat.com> - 2.3.16-6
 - follow licensing guideline update
 - devel sub-package has to have virtual static provides (#609604)




More information about the packaging-commits mailing list