rpms/cyrus-imapd/devel cyrus-imapd-2.3.12p2-autocreate-0.10-0.diff, NONE, 1.1 cyrus-imapd-2.3.12p2-autosieve-0.6.0.diff, NONE, 1.1 .cvsignore, 1.11, 1.12 cyrus-imapd.spec, 1.41, 1.42 sources, 1.13, 1.14 cyrus-imapd-2.2.10-groupcache.patch, 1.1, NONE cyrus-imapd-2.3.11-autocreate-0.10-0.diff, 1.1, NONE cyrus-imapd-2.3.11-autosieve-0.6.0.diff, 1.1, NONE cyrus-imapd-2.3.7.tar.gz.sig, 1.1, NONE

Dan Horák sharkcz at fedoraproject.org
Mon Sep 1 11:51:14 UTC 2008


Author: sharkcz

Update of /cvs/pkgs/rpms/cyrus-imapd/devel
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv15039

Modified Files:
	.cvsignore cyrus-imapd.spec sources 
Added Files:
	cyrus-imapd-2.3.12p2-autocreate-0.10-0.diff 
	cyrus-imapd-2.3.12p2-autosieve-0.6.0.diff 
Removed Files:
	cyrus-imapd-2.2.10-groupcache.patch 
	cyrus-imapd-2.3.11-autocreate-0.10-0.diff 
	cyrus-imapd-2.3.11-autosieve-0.6.0.diff 
	cyrus-imapd-2.3.7.tar.gz.sig 
Log Message:
* Mon Sep  1 2008 Dan Horák <dan[at]danny.cz - 2.3.12p2-1
- update to new upstream version 2.3.12p2
- update patches


cyrus-imapd-2.3.12p2-autocreate-0.10-0.diff:

--- NEW FILE cyrus-imapd-2.3.12p2-autocreate-0.10-0.diff ---
diff -Naur cyrus-imapd-2.3.12p2/README.autocreate cyrus-imapd-2.3.12p2-autocreate.uncompiled/README.autocreate
--- cyrus-imapd-2.3.12p2/README.autocreate	1970-01-01 02:00:00.000000000 +0200
+++ cyrus-imapd-2.3.12p2-autocreate.uncompiled/README.autocreate	2008-05-06 14:48:41.000000000 +0300
@@ -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.
[...1987 lines suppressed...]
+
 #endif
 
 struct auth_mech auth_krb = 
@@ -381,4 +397,5 @@
     &mymemberof,
     &mynewstate,
     &myfreestate,
+    &mycanonuser,
 };
diff -Naur cyrus-imapd-2.3.12p2/lib/auth_krb5.c cyrus-imapd-2.3.12p2-autocreate.uncompiled/lib/auth_krb5.c
--- cyrus-imapd-2.3.12p2/lib/auth_krb5.c	2008-03-24 19:43:08.000000000 +0200
+++ cyrus-imapd-2.3.12p2-autocreate.uncompiled/lib/auth_krb5.c	2008-05-06 14:48:41.000000000 +0300
@@ -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,12 @@
 	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);
+}
+
 #endif
 
 struct auth_mech auth_krb5 = 
@@ -240,4 +254,5 @@
     &mymemberof,
     &mynewstate,
     &myfreestate,
+    &mycanonuser,
 };
diff -Naur cyrus-imapd-2.3.12p2/lib/auth_pts.c cyrus-imapd-2.3.12p2-autocreate.uncompiled/lib/auth_pts.c
--- cyrus-imapd-2.3.12p2/lib/auth_pts.c	2008-03-24 19:43:08.000000000 +0200
+++ cyrus-imapd-2.3.12p2-autocreate.uncompiled/lib/auth_pts.c	2008-05-06 14:48:41.000000000 +0300
@@ -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.12p2/lib/auth_unix.c cyrus-imapd-2.3.12p2-autocreate.uncompiled/lib/auth_unix.c
--- cyrus-imapd-2.3.12p2/lib/auth_unix.c	2008-03-24 19:43:08.000000000 +0200
+++ cyrus-imapd-2.3.12p2-autocreate.uncompiled/lib/auth_unix.c	2008-05-06 14:48:41.000000000 +0300
@@ -312,6 +312,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 = 
 {
@@ -321,4 +331,5 @@
     &mymemberof,
     &mynewstate,
     &myfreestate,
+    &mycanonuser,
 };
diff -Naur cyrus-imapd-2.3.12p2/lib/imapoptions cyrus-imapd-2.3.12p2-autocreate.uncompiled/lib/imapoptions
--- cyrus-imapd-2.3.12p2/lib/imapoptions	2008-04-11 23:07:00.000000000 +0300
+++ cyrus-imapd-2.3.12p2-autocreate.uncompiled/lib/imapoptions	2008-05-06 14:48:41.000000000 +0300
@@ -198,6 +198,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.12p2/notifyd/Makefile.in cyrus-imapd-2.3.12p2-autocreate.uncompiled/notifyd/Makefile.in
--- cyrus-imapd-2.3.12p2/notifyd/Makefile.in	2008-03-24 21:59:32.000000000 +0200
+++ cyrus-imapd-2.3.12p2-autocreate.uncompiled/notifyd/Makefile.in	2008-05-06 14:48:41.000000000 +0300
@@ -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.12p2/notifyd/notifyd.c cyrus-imapd-2.3.12p2-autocreate.uncompiled/notifyd/notifyd.c
--- cyrus-imapd-2.3.12p2/notifyd/notifyd.c	2008-03-24 21:59:32.000000000 +0200
+++ cyrus-imapd-2.3.12p2-autocreate.uncompiled/notifyd/notifyd.c	2008-05-06 14:48:41.000000000 +0300
@@ -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.12p2/ptclient/Makefile.in cyrus-imapd-2.3.12p2-autocreate.uncompiled/ptclient/Makefile.in
--- cyrus-imapd-2.3.12p2/ptclient/Makefile.in	2008-03-24 20:34:22.000000000 +0200
+++ cyrus-imapd-2.3.12p2-autocreate.uncompiled/ptclient/Makefile.in	2008-05-06 14:48:41.000000000 +0300
@@ -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@

cyrus-imapd-2.3.12p2-autosieve-0.6.0.diff:

--- NEW FILE cyrus-imapd-2.3.12p2-autosieve-0.6.0.diff ---
diff -Naur cyrus-imapd-2.3.12p2/README.autosievefolder cyrus-imapd-2.3.12p2-autosieve.uncompiled/README.autosievefolder
--- cyrus-imapd-2.3.12p2/README.autosievefolder	1970-01-01 02:00:00.000000000 +0200
+++ cyrus-imapd-2.3.12p2-autosieve.uncompiled/README.autosievefolder	2008-05-06 15:16:21.000000000 +0300
@@ -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.12p2/imap/lmtp_sieve.c cyrus-imapd-2.3.12p2-autosieve.uncompiled/imap/lmtp_sieve.c
--- cyrus-imapd-2.3.12p2/imap/lmtp_sieve.c	2008-03-24 19:09:17.000000000 +0200
+++ cyrus-imapd-2.3.12p2-autosieve.uncompiled/imap/lmtp_sieve.c	2008-05-06 15:16:21.000000000 +0300
@@ -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.12p2/lib/imapoptions cyrus-imapd-2.3.12p2-autosieve.uncompiled/lib/imapoptions
--- cyrus-imapd-2.3.12p2/lib/imapoptions	2008-04-11 23:07:00.000000000 +0300
+++ cyrus-imapd-2.3.12p2-autosieve.uncompiled/lib/imapoptions	2008-05-06 15:16:21.000000000 +0300
@@ -942,6 +942,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


Index: .cvsignore
===================================================================
RCS file: /cvs/pkgs/rpms/cyrus-imapd/devel/.cvsignore,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- .cvsignore	25 Mar 2008 10:23:56 -0000	1.11
+++ .cvsignore	1 Sep 2008 11:50:44 -0000	1.12
@@ -1,3 +1,3 @@
 cyrus_sharedbackup-0.1.tar.gz
-cyrus-imapd-2.3.11.tar.gz
-cyrus-imapd-2.3.11.tar.gz.sig
+cyrus-imapd-2.3.12p2.tar.gz
+cyrus-imapd-2.3.12p2.tar.gz.sig


Index: cyrus-imapd.spec
===================================================================
RCS file: /cvs/pkgs/rpms/cyrus-imapd/devel/cyrus-imapd.spec,v
retrieving revision 1.41
retrieving revision 1.42
diff -u -r1.41 -r1.42
--- cyrus-imapd.spec	1 Sep 2008 09:41:02 -0000	1.41
+++ cyrus-imapd.spec	1 Sep 2008 11:50:44 -0000	1.42
@@ -1,7 +1,7 @@
-%define upstream_ver 2.3.11
+%define upstream_ver 2.3.12p2
 Name: cyrus-imapd
-Version: 2.3.11
-Release: 3%{?dist}
+Version: 2.3.12p2
+Release: 1%{?dist}
 
 # ********************** BUILD TIME OPTIONS START **********************
 
@@ -130,8 +130,8 @@
 Source30: cyrus-imapd-README.contrib
 Source33: cyrus-imapd-README.skiplist_recovery
 Patch0: cyrus-imapd-2.2.12-no_transfig.patch
-Patch1: http://email.uoa.gr/download/cyrus/cyrus-imapd-2.3.9/cyrus-imapd-2.3.11-autocreate-0.10-0.diff
-Patch2: http://email.uoa.gr/download/cyrus/cyrus-imapd-2.3.9/cyrus-imapd-2.3.11-autosieve-0.6.0.diff
+Patch1: http://email.uoa.gr/download/cyrus/cyrus-imapd-2.3.12/cyrus-imapd-2.3.12p2-autocreate-0.10-0.diff
+Patch2: http://email.uoa.gr/download/cyrus/cyrus-imapd-2.3.12/cyrus-imapd-2.3.12p2-autosieve-0.6.0.diff
 #Patch3: http://email.uoa.gr/download/cyrus/cyrus-imapd-2.3.9/cyrus-imapd-2.3.9-rmquota+deletemailbox-0.2-1.diff
 Patch4: http://servercc.oakton.edu/~jwade/cyrus/cyrus-imapd-2.1.3/cyrus-imapd-2.1.3-flock.patch
 Patch5: cyrus-imapd-2.2.12-munge8bit.patch
@@ -807,6 +807,10 @@
 %{_mandir}/man1/*
 
 %changelog
+* Mon Sep  1 2008 Dan Horák <dan[at]danny.cz - 2.3.12p2-1
+- update to new upstream version 2.3.12p2
+- update patches
+
 * Mon Sep  1 2008 Dan Horák <dan[at]danny.cz - 2.3.11-3
 - refresh patches
 


Index: sources
===================================================================
RCS file: /cvs/pkgs/rpms/cyrus-imapd/devel/sources,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- sources	25 Mar 2008 10:23:56 -0000	1.13
+++ sources	1 Sep 2008 11:50:44 -0000	1.14
@@ -1,3 +1,3 @@
 8f7a26b0556369827bb5c8084a3e3ea1  cyrus_sharedbackup-0.1.tar.gz
-df632eb2a89e36e6296e4abd687435ed  cyrus-imapd-2.3.11.tar.gz
-ad1350a4e871f2287081de6c8d4aecf9  cyrus-imapd-2.3.11.tar.gz.sig
+ee2c300687994e4982c6af6aa154c742  cyrus-imapd-2.3.12p2.tar.gz
+a04fd37f1e47cfbed3394758ac2e4981  cyrus-imapd-2.3.12p2.tar.gz.sig


--- cyrus-imapd-2.2.10-groupcache.patch DELETED ---


--- cyrus-imapd-2.3.11-autocreate-0.10-0.diff DELETED ---


--- cyrus-imapd-2.3.11-autosieve-0.6.0.diff DELETED ---


--- cyrus-imapd-2.3.7.tar.gz.sig DELETED ---




More information about the fedora-extras-commits mailing list