devel/cyrus-imapd cyrus-imapd-2.3.3-autosieve-0.6.0.diff, NONE, 1.1 cyrus-imapd-2.3.7-autocreate-0.10-0.diff, NONE, 1.1 cyrus-imapd-2.3.7-rmquota+deletemailbox.patch, NONE, 1.1 cyrus-imapd-2.3.7.tar.gz.sig, NONE, 1.1 cyrus-imapd.pam-config, 1.1, 1.2 cyrus-imapd.spec, 1.12, 1.13 sources, 1.6, 1.7

Petr Rockai (mornfall) fedora-extras-commits at redhat.com
Thu Jul 27 10:41:04 UTC 2006


Author: mornfall

Update of /cvs/extras/devel/cyrus-imapd
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv14497

Modified Files:
	cyrus-imapd.pam-config cyrus-imapd.spec sources 
Added Files:
	cyrus-imapd-2.3.3-autosieve-0.6.0.diff 
	cyrus-imapd-2.3.7-autocreate-0.10-0.diff 
	cyrus-imapd-2.3.7-rmquota+deletemailbox.patch 
	cyrus-imapd-2.3.7.tar.gz.sig 
Log Message:
* Sun Jul 23 2006 Petr Rockai <prockai at redhat.com> - 2.3.7-1
- update to latest upstream version, fixes a fair amount of issues
- forward-port the autocreate and rmquota patches (used latest
  upstream patches, those are for 2.3.3)

* Tue Jul 18 2006 Petr Rockai <prockai at redhat.com> - 2.3.1-3
- install perl modules into vendor_perl instead of site_perl
- change mode of perl .so files to 755 instead of 555
- update pam configuration to use include directive instead
  of deprecated pam_stack
- change prereq on cyrus-imapd-utils to requires

* Tue Jul 11 2006 Petr Rockai <prockai at redhat.com> - 2.3.1-2.99.test1
- address bunch of rpmlint errors and warnings
- rename perl-Cyrus to cyrus-imapd-perl to be consistent with rest
  of package (the cyrus modules are not part of cpan)
- added provides on cyrus-nntp and cyrus-murder (the functionality
  is part of main package now)
- removed generation of README.buildoptions
- the two above made it possible to get rid of most build-time parameter
  guessing from environment
- get rid of internal autoconf (iew)
- don't strip binaries, renders -debuginfo useless...
- remove prereq's in favour of newly added requires(...)


cyrus-imapd-2.3.3-autosieve-0.6.0.diff:

--- NEW FILE cyrus-imapd-2.3.3-autosieve-0.6.0.diff ---
diff -Naur cyrus-imapd-2.3.3/README.autosievefolder cyrus-imapd-2.3.3-autosieve.uncompiled/README.autosievefolder
--- cyrus-imapd-2.3.3/README.autosievefolder	1970-01-01 02:00:00.000000000 +0200
+++ cyrus-imapd-2.3.3-autosieve.uncompiled/README.autosievefolder	2006-03-01 16:57:26.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.3/imap/lmtp_sieve.c cyrus-imapd-2.3.3-autosieve.uncompiled/imap/lmtp_sieve.c
--- cyrus-imapd-2.3.3/imap/lmtp_sieve.c	2005-11-21 18:26:54.000000000 +0200
+++ cyrus-imapd-2.3.3-autosieve.uncompiled/imap/lmtp_sieve.c	2006-03-01 16:57:26.000000000 +0200
@@ -86,6 +86,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];
@@ -487,7 +490,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;
@@ -939,3 +955,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.3/lib/imapoptions cyrus-imapd-2.3.3-autosieve.uncompiled/lib/imapoptions
--- cyrus-imapd-2.3.3/lib/imapoptions	2006-02-01 21:44:06.000000000 +0200
+++ cyrus-imapd-2.3.3-autosieve.uncompiled/lib/imapoptions	2006-03-01 16:57:26.000000000 +0200
@@ -863,6 +863,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

cyrus-imapd-2.3.7-autocreate-0.10-0.diff:

***** Error reading new file: [Errno 2] No such file or directory: 'cyrus-imapd-2.3.7-autocreate-0.10-0.diff'
cyrus-imapd-2.3.7-rmquota+deletemailbox.patch:

--- NEW FILE cyrus-imapd-2.3.7-rmquota+deletemailbox.patch ---
--- cyrus-imapd-2.3.7/imap/ctl_cyrusdb.c.rmquota	2005-02-16 22:06:18.000000000 +0100
+++ cyrus-imapd-2.3.7/imap/ctl_cyrusdb.c	2006-07-23 12:52:14.000000000 +0200
@@ -133,7 +133,7 @@
     /* if it is MBTYPE_RESERVED, unset it & call mboxlist_delete */
     if(!r && (mbtype & MBTYPE_RESERVE)) {
 	if(!r) {
-	    r = mboxlist_deletemailbox(name, 1, NULL, NULL, 0, 0, 1);
+	    r = mboxlist_deletemailbox(name, 1, NULL, NULL, 0, 0, 1, 1);
 	    if(r) {
 		/* log the error */
 		syslog(LOG_ERR,
--- cyrus-imapd-2.3.7/imap/ctl_mboxlist.c.rmquota	2006-04-06 17:42:10.000000000 +0200
+++ cyrus-imapd-2.3.7/imap/ctl_mboxlist.c	2006-07-23 12:52:14.000000000 +0200
@@ -457,7 +457,7 @@
 	    
 	    wipe_head = wipe_head->next;
 	    
-	    ret = mboxlist_deletemailbox(me->mailbox, 1, "", NULL, 0, 1, 1);
+	    ret = mboxlist_deletemailbox(me->mailbox, 1, "", NULL, 0, 1, 1, 1);
 	    if(ret) {
 		fprintf(stderr, "couldn't delete defunct mailbox %s\n",
 			me->mailbox);
--- cyrus-imapd-2.3.7/imap/imapd.c.rmquota	2006-07-23 12:52:14.000000000 +0200
+++ cyrus-imapd-2.3.7/imap/imapd.c	2006-07-23 12:55:14.000000000 +0200
@@ -4985,7 +4985,7 @@
 
     r = mboxlist_deletemailbox(name, imapd_userisadmin,
 			       imapd_userid, imapd_authstate,
-			       0, 0, 0);
+			       0, 0, 0, 1);
     
     if (!r) sync_log_mailbox(name);
 
@@ -5009,6 +5009,12 @@
     char *p;
     int domainlen = 0;
     int sync_lockfd = (-1);
+    int keepQuota = 1;
+
+    if(name && *name == '+') {
+	keepQuota = 0;
+	name++;
+    }
 
     r = (*imapd_namespace.mboxname_tointernal)(&imapd_namespace, name,
 					       imapd_userid, mailboxname);
@@ -5067,7 +5073,7 @@
 
 	r = mboxlist_deletemailbox(mailboxname, imapd_userisadmin,
 				   imapd_userid, imapd_authstate, 1-force,
-				   localonly, 0);
+				   localonly, 0, keepQuota);
     }
 
     /* was it a top-level user mailbox? */
@@ -6426,6 +6432,7 @@
 {
     int newquota = -1;
     int badresource = 0;
+    int rmquota = 0;
     int c;
     int force = 0;
     static struct buf arg;
@@ -6442,7 +6449,8 @@
     if (c != ')' || arg.s[0] != '\0') {
 	for (;;) {
 	    if (c != ' ') goto badlist;
-	    if (strcasecmp(arg.s, "storage") != 0) badresource = 1;
+	    if (strcasecmp(arg.s, "remove") == 0) rmquota = 1;
+	    else if (strcasecmp(arg.s, "storage") != 0) badresource = 1;
 	    c = getword(imapd_in, &arg);
 	    if (c != ' ' && c != ')') goto badlist;
 	    if (arg.s[0] == '\0') goto badlist;
@@ -6511,7 +6519,10 @@
 
     /* local mailbox */
     if (!r || (r == IMAP_MAILBOX_NONEXISTENT)) {
-	r = mboxlist_setquota(mailboxname, newquota, force);
+        if (!rmquota)
+            r = mboxlist_setquota(mailboxname, newquota, force);
+        else
+            r = mboxlist_unsetquota(mailboxname);
     }
 
     imapd_check(NULL, 0, 0);
@@ -8224,7 +8235,7 @@
 	/* note also that we need to remember to let proxyadmins do this */
 	r = mboxlist_deletemailbox(mailboxname,
 				   imapd_userisadmin || imapd_userisproxyadmin,
-				   imapd_userid, imapd_authstate, 0, 1, 0);
+				   imapd_userid, imapd_authstate, 0, 1, 0, 1);
 	if(r) syslog(LOG_ERR,
 		     "Could not delete local mailbox during move of %s",
 		     mailboxname);
--- cyrus-imapd-2.3.7/imap/mailbox.c.rmquota	2006-06-02 20:55:06.000000000 +0200
+++ cyrus-imapd-2.3.7/imap/mailbox.c	2006-07-23 12:52:14.000000000 +0200
@@ -2689,27 +2689,7 @@
 
     seen_delete_mailbox(mailbox);
 
-    if (delete_quota_root && !rquota) {
-	quota_delete(&mailbox->quota, &tid);
-	free(mailbox->quota.root);
-	mailbox->quota.root = NULL;
-    } else if (!rquota) {
-	/* Free any quota being used by this mailbox */
-	if (mailbox->quota.used >= mailbox->quota_mailbox_used) {
-	    mailbox->quota.used -= mailbox->quota_mailbox_used;
-	}
-	else {
-	    mailbox->quota.used = 0;
-	}
-	r = quota_write(&mailbox->quota, &tid);
-	if (r) {
-	    syslog(LOG_ERR,
-		   "LOSTQUOTA: unable to record free of " UQUOTA_T_FMT " bytes in quota %s",
-		   mailbox->quota_mailbox_used, mailbox->quota.root);
-	}
-	else
-	    quota_commit(&tid);
-    }
+    mailbox_updatequota(mailbox,NULL);
 
     /* remove data (message file) directory */
     path = mailbox->path;
@@ -3331,3 +3311,49 @@
 	if (*p == '.') *p = '/';
     }
 }
+
+
+/* This function is used to update the quota. Can be used to replace
+ * identical parts of the code, and can be quite handy some times 
+ * The tid is used in order to make possible to make the quota update
+ * being a part of a bigger transaction to the quota db */
+int mailbox_updatequota(struct mailbox *mailbox, struct txn **tid)
+{
+    int r = 0, havetid = 0;
+    struct txn **ltid = NULL;
+
+    if(tid) {
+        ltid = tid;
+        havetid = 1;
+    }
+    /* Ensure that we are locked */
+    if(!mailbox->header_lock_count) return IMAP_INTERNAL;
+
+
+    if(mailbox->quota.root) {
+        r = quota_read(&mailbox->quota, ltid, 1);
+        if( r == 0 ) {
+            if (mailbox->quota.used >= mailbox->quota_mailbox_used) {
+                mailbox->quota.used -= mailbox->quota_mailbox_used;
+            }
+            else {
+                mailbox->quota.used = 0;
+            }
+            r = quota_write(&mailbox->quota, ltid);
+            if (r) {
+                syslog(LOG_ERR,
+                   "LOSTQUOTA: unable to record free of %lu bytes in quota %s",
+                   mailbox->quota_mailbox_used, mailbox->quota.root);
+            }
+            else if(!havetid)
+                quota_commit(tid);
+        }
+        /* It is not a big mistake not to have quota .. just remove from the mailbox */
+        else if ( r == IMAP_QUOTAROOT_NONEXISTENT) {
+                free(mailbox->quota.root);
+                r = 0;
+        }
+    }
+    return r;
+}
+
--- cyrus-imapd-2.3.7/imap/mailbox.h.rmquota	2006-06-02 18:41:57.000000000 +0200
+++ cyrus-imapd-2.3.7/imap/mailbox.h	2006-07-23 12:52:14.000000000 +0200
@@ -364,6 +364,8 @@
 			  struct mailbox *mailboxp);
 extern int mailbox_delete(struct mailbox *mailbox, int delete_quota_root);
 
+extern int mailbox_updatequota(struct mailbox *mailbox, struct txn **tid);
+
 extern int mailbox_rename_copy(struct mailbox *oldmailbox, 
 			       const char *newname, char *newpartition,
 			       bit32 *olduidvalidityp, bit32 *newuidvalidityp,
--- cyrus-imapd-2.3.7/imap/mboxlist.c.rmquota	2006-07-23 12:52:14.000000000 +0200
+++ cyrus-imapd-2.3.7/imap/mboxlist.c	2006-07-23 12:52:14.000000000 +0200
@@ -99,6 +99,11 @@
 static int mboxlist_opensubs();
 static void mboxlist_closesubs();
 
+static int child_cb(char *name,
+                    int matchlen __attribute__((unused)),
+                    int maycreate __attribute__((unused)),
+                    void *rock);
+
 static int mboxlist_rmquota(const char *name, int matchlen, int maycreate,
 			    void *rock);
 static int mboxlist_changequota(const char *name, int matchlen, int maycreate,
@@ -113,6 +118,7 @@
 
 struct change_rock {
     struct quota *quota;
+    struct quota *oldquota;
     struct txn **tid;
 };
 
@@ -911,9 +917,9 @@
  */
 int mboxlist_deletemailbox(const char *name, int isadmin, char *userid, 
 			   struct auth_state *auth_state, int checkacl,
-			   int local_only, int force)
+			   int local_only, int force, int keepQuota)
 {
-    int r;
+    int r, has_children = 0;
     char *acl;
     long access;
     struct mailbox mailbox;
@@ -924,6 +930,7 @@
     int mbtype;
     const char *p;
     mupdate_handle *mupdate_h = NULL;
+    char *quotaroot = NULL;
 
     if(!isadmin && force) return IMAP_PERMISSION_DENIED;
 
@@ -1036,13 +1043,44 @@
 
     if ((r && !force) || isremote) goto done;
 
-    if (!r || force) r = mailbox_delete(&mailbox, deletequotaroot);
+    if (!r || force) {
+        /* first we have to keep the previous quota root in order to delete it */
+        if(mailbox.quota.root)
+                quotaroot = xstrdup(mailbox.quota.root);
+	r = mailbox_delete(&mailbox, deletequotaroot);
+    }
 
     /*
      * See if we have to remove mailbox's quota root
      */
-    if (!r && mailbox.quota.root != NULL) {
+    if (!r && quotaroot != NULL) {
 	/* xxx look for any other mailboxes in this quotaroot */
+        /* If we have not asked to remove the quota (default behaviour), we check 
+         * whether there are any subfolders beneeth the quota root. If there aren't
+         * any subfolders the reasonable thing is to delete the quota */
+        if(keepQuota) {
+            char pattern[MAX_MAILBOX_PATH+1];
+            strlcpy(pattern, quotaroot, sizeof(pattern));
+            if (config_virtdomains && name[strlen(name)-1] == '!') {
+                strlcat(pattern, "*", sizeof(pattern));
+            }
+            else {
+                strlcat(pattern, ".*", sizeof(pattern));
+            }
+		/* find if there are subfolders. Then we want to 
+		 * keep the existing quota */
+            mboxlist_findall(NULL, pattern, isadmin, userid,
+                    auth_state, child_cb, (void *) &has_children);
+
+	    if(!has_children)
+                if(!mboxlist_mylookup(quotaroot, NULL, NULL, NULL, NULL, NULL, NULL, 0 ))
+		    has_children = 1;
+        }
+        /* If we want to remove the quota explicitely or the quota root folder has no subfolders
+         * we execute the rmquota patch */
+        if(!keepQuota || !has_children )
+            mboxlist_unsetquota(quotaroot);
+        free(quotaroot);
     }
 
  done:
@@ -2498,6 +2536,7 @@
     if (r) return r;
 
     crock.quota = "a;
+    crock.oldquota = NULL;
     crock.tid = &tid;
     /* top level mailbox */
     if(have_mailbox)
@@ -2516,17 +2555,21 @@
  */
 int mboxlist_unsetquota(const char *root)
 {
+    char newquota[MAX_MAILBOX_PATH+1];
     char pattern[MAX_MAILBOX_PATH+1];
     struct quota quota;
-    int r=0;
+    struct change_rock crock;
+    int r=0, k=0;
 
     if (!root[0] || root[0] == '.' || strchr(root, '/')
 	|| strchr(root, '*') || strchr(root, '%') || strchr(root, '?')) {
 	return IMAP_MAILBOX_BADNAME;
     }
+	
+    crock.tid=NULL;
     
     quota.root = (char *) root;
-    r = quota_read(&quota, NULL, 0);
+    r = quota_read(&quota, crock.tid, 0);
     if (r == IMAP_QUOTAROOT_NONEXISTENT) {
 	/* already unset */
 	return 0;
@@ -2543,13 +2586,45 @@
     }
     else
 	strlcat(pattern, ".*", sizeof(pattern));
-    
-    /* top level mailbox */
-    mboxlist_rmquota(root, 0, 0, (void *)root);
-    /* submailboxes - we're using internal names here */
-    mboxlist_findall(NULL, pattern, 1, 0, 0, mboxlist_rmquota, (void *)root);
 
-    r = quota_delete(&quota, NULL);
+    r = quota_delete(&quota, crock.tid);
+
+    /* If we cannot delete the quota then abort the operation */
+    if(!r) {
+       /* quota_findroot performs several checks that we can
+        * assume that are already done, and don't have to perform
+        * them again. One of them is that it returns 1 only if
+        * quotaroot exists.
+        */
+        if(quota_findroot(newquota, sizeof(newquota), root)) {
+            struct quota rootquota;
+            rootquota.root = newquota;
+            k = quota_read(&rootquota, crock.tid, 0);
+            if (!k) {
+                crock.quota = &rootquota;
+                crock.oldquota = "a;
+                /* top level mailbox */
+                k = mboxlist_changequota(root, 0, 0, &crock);
+            }
+            /* submailboxes - we're using internal names here */
+            if (!k)
+                k = mboxlist_findall(NULL, pattern, 1, 0, 0, mboxlist_changequota, &crock);
+            if(!k)
+                k = quota_write(&rootquota, crock.tid);
+
+         }
+         else {
+           /* top level mailbox */
+           mboxlist_rmquota(root, 0, 0, (void *)root);
+           /* submailboxes - we're using internal names here */
+           mboxlist_findall(NULL, pattern, 1, 0, 0, mboxlist_rmquota, (void *)root);
+       }
+    }
+
+    if(!r && !k)
+        quota_commit(crock.tid);
+    else
+        quota_abort(crock.tid);
 
     return r;
 }
@@ -2647,6 +2722,7 @@
     struct mailbox mailbox;
     struct change_rock *crock = (struct change_rock *) rock;
     struct quota *mboxlist_newquota = crock->quota;
+    struct quota *mboxlist_oldquota = crock->oldquota;
     struct txn **tid = crock->tid;
 
     assert(rock != NULL);
@@ -2664,27 +2740,24 @@
     if (r) goto error;
 
     if (mailbox.quota.root) {
-	if (strlen(mailbox.quota.root) >= strlen(mboxlist_newquota->root)) {
-	    /* Part of a child quota root */
-	    mailbox_close(&mailbox);
-	    return 0;
-	}
-
-	r = quota_read(&mailbox.quota, tid, 1);
-	if (r) goto error;
-	if (mailbox.quota.used >= mailbox.quota_mailbox_used) {
-	    mailbox.quota.used -= mailbox.quota_mailbox_used;
+	if(mboxlist_oldquota) {
+	    if (strlen(mailbox.quota.root) > strlen(mboxlist_oldquota->root)) {
+		/* Part of a child quota root */
+		mailbox_close(&mailbox);
+		return 0;
+	    }
 	}
 	else {
-	    mailbox.quota.used = 0;
-	}
-	r = quota_write(&mailbox.quota, tid);
-	if (r) {
-	    syslog(LOG_ERR,
-		   "LOSTQUOTA: unable to record free of " UQUOTA_T_FMT " bytes in quota %s",
-		   mailbox.quota_mailbox_used, mailbox.quota.root);
+	    if (strlen(mailbox.quota.root) >= strlen(mboxlist_newquota->root)) {
+		/* Part of a child quota root */
+		mailbox_close(&mailbox);
+		return 0;
+	    }
 	}
-	free(mailbox.quota.root);
+
+	r = mailbox_updatequota(&mailbox,tid);
+	if (r)
+	    goto error;
     }
 
     mailbox.quota.root = xstrdup(mboxlist_newquota->root);
@@ -2694,18 +2767,24 @@
     mboxlist_newquota->used += mailbox.quota_mailbox_used;
     mailbox_close(&mailbox);
     return 0;
-
+ 
  error:
     mailbox_close(&mailbox);
+    syslog(LOG_ERR, "LOSTQUOTA: unable to change quota root for %s to %s: %s. \
+                        Command aborted. Run reconstruct to make sure mailboxes \
+                         are in consistent state",
+           name, mboxlist_newquota->root, error_message(r));
+    return 1;
  error_noclose:
     syslog(LOG_ERR, "LOSTQUOTA: unable to change quota root for %s to %s: %s",
-	   name, mboxlist_newquota->root, error_message(r));
+           name, mboxlist_newquota->root, error_message(r));
 
     /* Note, we're a callback, and it's not a huge tragedy if we
      * fail, so we don't ever return a failure */
     return 0;
 }
 
+
 /* must be called after cyrus_init */
 void mboxlist_init(int myflags)
 {
--- cyrus-imapd-2.3.7/imap/mboxlist.h.rmquota	2006-07-23 12:52:14.000000000 +0200
+++ cyrus-imapd-2.3.7/imap/mboxlist.h	2006-07-23 12:52:14.000000000 +0200
@@ -125,7 +125,7 @@
  * the planet */
 int mboxlist_deletemailbox(const char *name, int isadmin, char *userid, 
 			   struct auth_state *auth_state, int checkacl,
-			   int local_only, int force);
+			   int local_only, int force, int keepQuota);
 
 /* Rename/move a mailbox (hierarchical) */
 int mboxlist_renamemailbox(char *oldname, char *newname, char *partition, 
--- cyrus-imapd-2.3.7/imap/mupdate.c.rmquota	2006-03-15 19:56:31.000000000 +0100
+++ cyrus-imapd-2.3.7/imap/mupdate.c	2006-07-23 12:52:14.000000000 +0200
@@ -2297,7 +2297,7 @@
 	    remote_boxes.head = r->next;
 	} else if (ret < 0) {
 	    /* Local without corresponding remote, delete it */
-	    mboxlist_deletemailbox(l->mailbox, 1, "", NULL, 0, 0, 0);
+	    mboxlist_deletemailbox(l->mailbox, 1, "", NULL, 0, 0, 0, 1);
 	    local_boxes.head = l->next;
 	} else /* (ret > 0) */ {
 	    /* Remote without corresponding local, insert it */
@@ -2312,7 +2312,7 @@
     if(l && !r) {
 	/* we have more deletes to do */
 	while(l) {
-	    mboxlist_deletemailbox(l->mailbox, 1, "", NULL, 0, 0, 0);
+	    mboxlist_deletemailbox(l->mailbox, 1, "", NULL, 0, 0, 0, 1);
 	    local_boxes.head = l->next;
 	    l = local_boxes.head;
 	}
--- cyrus-imapd-2.3.7/imap/nntpd.c.rmquota	2006-05-26 17:50:07.000000000 +0200
+++ cyrus-imapd-2.3.7/imap/nntpd.c	2006-07-23 12:52:14.000000000 +0200
@@ -3356,7 +3356,7 @@
     /* XXX should we delete right away, or wait until empty? */
 
     r = mboxlist_deletemailbox(mailboxname, 0,
-			       newsmaster, newsmaster_authstate, 1, 0, 0);
+			       newsmaster, newsmaster_authstate, 1, 0, 0, 1);
 
     if (!r) sync_log_mailbox(mailboxname);
 
--- cyrus-imapd-2.3.7/imap/sync_reset.c.rmquota	2005-12-13 16:31:10.000000000 +0100
+++ cyrus-imapd-2.3.7/imap/sync_reset.c	2006-07-23 12:52:14.000000000 +0200
@@ -254,7 +254,7 @@
     if (r) goto fail;
 
     for (item = list->head ; item ; item = item->next) {
-        r=mboxlist_deletemailbox(item->name, 1, NULL, sync_authstate, 1, 0, 0);
+        r=mboxlist_deletemailbox(item->name, 1, NULL, sync_authstate, 1, 0, 0, 1);
 
         if (r) goto fail;
     }
@@ -270,7 +270,7 @@
     if (r) goto fail;
 
     for (item = list->head ; item ; item = item->next) {
-        r=mboxlist_deletemailbox(item->name, 1, NULL, sync_authstate, 1, 0, 0);
+        r=mboxlist_deletemailbox(item->name, 1, NULL, sync_authstate, 1, 0, 0, 1);
 
         if (r) goto fail;
     }
@@ -278,7 +278,7 @@
 
     /* Nuke inbox (recursive nuke possible?) */
     snprintf(buf, sizeof(buf)-1, "user.%s", user);
-    r = mboxlist_deletemailbox(buf, 1, "cyrus", sync_authstate, 1, 0, 0);
+    r = mboxlist_deletemailbox(buf, 1, "cyrus", sync_authstate, 1, 0, 0, 1);
     if (r && (r != IMAP_MAILBOX_NONEXISTENT)) goto fail;
 
     if ((r=user_deletedata(user, sync_userid, sync_authstate, 1)))
--- cyrus-imapd-2.3.7/imap/sync_server.c.rmquota	2006-06-12 20:56:42.000000000 +0200
+++ cyrus-imapd-2.3.7/imap/sync_server.c	2006-07-23 12:52:14.000000000 +0200
@@ -1576,7 +1576,7 @@
 
     for (item = list->head ; item ; item = item->next) {
         r=mboxlist_deletemailbox(item->name, sync_userisadmin, sync_userid,
-				 sync_authstate, 0, 0, 1);
+				 sync_authstate, 0, 0, 1, 1);
 
         if (r) goto fail;
     }
@@ -1586,7 +1586,7 @@
     (sync_namespacep->mboxname_tointernal)(sync_namespacep, "INBOX",
 					   user, buf);
     r = mboxlist_deletemailbox(buf, sync_userisadmin, sync_userid,
-			       sync_authstate, 0, 0, 1);
+			       sync_authstate, 0, 0, 1, 1);
     if (r && (r != IMAP_MAILBOX_NONEXISTENT)) goto fail;
 
     if ((r=user_deletedata(user, sync_userid, sync_authstate, 1)))
@@ -2508,7 +2508,7 @@
 
     /* Delete with admin priveleges */
     r = mboxlist_deletemailbox(name, sync_userisadmin, sync_userid,
-			       sync_authstate, 0, 0, 1);
+			       sync_authstate, 0, 0, 1, 1);
 
     if (r)
         prot_printf(sync_out, "NO Failed to delete %s: %s\r\n",


--- NEW FILE cyrus-imapd-2.3.7.tar.gz.sig ---
ˆ?

Index: cyrus-imapd.pam-config
===================================================================
RCS file: /cvs/extras/devel/cyrus-imapd/cyrus-imapd.pam-config,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- cyrus-imapd.pam-config	15 Apr 2005 20:24:15 -0000	1.1
+++ cyrus-imapd.pam-config	27 Jul 2006 10:41:04 -0000	1.2
@@ -1,3 +1,3 @@
 #%PAM-1.0
-auth       required	pam_stack.so service=system-auth
-account    required	pam_stack.so service=system-auth
+auth       include      system-auth
+account    include      system-auth


Index: cyrus-imapd.spec
===================================================================
RCS file: /cvs/extras/devel/cyrus-imapd/cyrus-imapd.spec,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- cyrus-imapd.spec	28 Feb 2006 22:24:03 -0000	1.12
+++ cyrus-imapd.spec	27 Jul 2006 10:41:04 -0000	1.13
@@ -1,6 +1,6 @@
 Name: cyrus-imapd
-Version: 2.3.1
-Release: 2.6%{?dist}
+Version: 2.3.7
+Release: 1%{?dist}
 
 # ********************** BUILD TIME OPTIONS START **********************
 
@@ -8,7 +8,7 @@
 # rpm --rebuild --define='SEEN_DB skiplist' cyrus-imapd-2.x.x-x.src.rpm
 
 # use saslauth group
-%{!?SASLGROUP: %define SASLGROUP 0}
+%{!?SASLGROUP: %define SASLGROUP 1}
 # include deliver-wrapper
 %{!?DEL_WRAP: %define DEL_WRAP 0}
 # use preforking cyrus.conf
@@ -20,7 +20,7 @@
 # enable IDLED support
 %{!?IDLED: %define IDLED 1}
 # enable SNMP support
-%{!?SNMP: %define SNMP 0}
+%{!?SNMP: %define SNMP 1}
 # force syncronous updates on ext3
 %{!?FORCESYNCEXT3: %define FORCESYNCEXT3 0}
 # include autocreate feature
@@ -32,25 +32,36 @@
 # used syslog facility for logging
 %{!?SYSLOGFACILITY: %define SYSLOGFACILITY MAIL}
 # use -fpie for linking
-%{!?USEPIE: %define USEPIE 0}
+%{!?USEPIE: %define USEPIE 1}
 
 # ********************** BUILD TIME OPTIONS END ************************
 
-%define _acversion 2.59
+#%define _acversion 2.59
 %define _use_internal_dependency_generator 0
-%define _rhver %(eval rpm -q --queryformat '%{VERSION}' $(rpm -qf /etc/redhat-release))
-%define _rhrelease %(eval %{__cat} /etc/redhat-release)
+#%define _rhver %(eval rpm -q --queryformat '%{VERSION}' $(rpm -qf /etc/redhat-release))
+#%define _rhrelease %(eval %{__cat} /etc/redhat-release)
 %define _dbver db4
-%define _dbrpmver %(eval "rpm -q %{_dbver}")
+#%define _dbrpmver %(eval "rpm -q %{_dbver}")
 # Do we need the perl install hack for RedHat > 7.3 ?
-%define _perlhack %(eval [ %{_rhver} = "6.2" -o %{_rhver} = "7.0" -o %{_rhver} = "7.1" -o %{_rhver} = "7.2" -o %{_rhver} = "7.3" -o %{_rhver} = "2.1AS" -o %{_rhver} = "2.1ES" ] && echo 0 || echo 1)
+
+%define _perlhack 1
+#(eval [ %{_rhver} = "6.2" -o %{_rhver} = "7.0" -o %{_rhver} = "7.1" -o %{_rhver} = "7.2" -o %{_rhver} = "7.3" -o %{_rhver} = "2.1AS" -o %{_rhver} = "2.1ES" ] && echo 0 || echo 1)
+
 %define _perl_man3dir %(eval "$(perl -V:man3dir)"; echo $man3dir)
-%define _withldap %(eval "rpm -q --requires openldap | grep -q ^libsasl2 && echo 1 || echo 0")
-%define _snmpver %(eval "rpm -q --quiet ucd-snmp && echo ucd || echo net")
+
+%define _withldap 1
+#(eval "rpm -q --requires openldap | grep -q ^libsasl2 && echo 1 || echo 0")
+
+%define _snmpver net
+#(eval "rpm -q --quiet ucd-snmp && echo ucd || echo net")
+
 # Disable -debuginfo package generation
 #define debug_package %{nil}
 # Do we have filesystem >= 2.3.2 (new pki location) ?
-%define use_etc_pki %(eval [ $(rpm -q --queryformat '%{VERSION}' filesystem \| sed -e "s/\\.//g") -ge 232 ] && echo 1 || echo 0 )
+
+%define use_etc_pki 1
+#(eval [ $(rpm -q --queryformat '%{VERSION}' filesystem \| sed -e "s/\\.//g") -ge 232 ] && echo 1 || echo 0 )
+
 %if %{use_etc_pki}
 %define certs_dir %{_sysconfdir}/pki/tls/certs
 %define pki_dir %{_sysconfdir}/pki/%{name}
@@ -58,6 +69,7 @@
 %define certs_dir %{_datadir}/ssl/certs
 %define pki_dir %{_datadir}/ssl/certs
 %endif
+
 %define ssl_pem_file %{pki_dir}/%{name}.pem
 %define uid 76
 %if %{SASLGROUP}
@@ -77,7 +89,7 @@
 %define _cyrusconf %{_confdir}/normal.conf
 %endif
 
-Summary: A high-performance mail server with IMAP, POP3, NNTP and SIEVE support.
+Summary: A high-performance mail server with IMAP, POP3, NNTP and SIEVE support
 License: BSD
 Group: System Environment/Daemons
 URL: http://asg.web.cmu.edu/cyrus/imapd/
@@ -86,7 +98,7 @@
 #Distribution: Invoca Linux Server
 Source0: ftp://ftp.andrew.cmu.edu/pub/cyrus/%{name}-%{version}.tar.gz
 Source1: ftp://ftp.andrew.cmu.edu/pub/cyrus/%{name}-%{version}.tar.gz.sig
-Source2: http://ftp.gnu.org/gnu/autoconf/autoconf-%{_acversion}.tar.gz
+#Source2: http://ftp.gnu.org/gnu/autoconf/autoconf-%{_acversion}.tar.gz
 Source3: cyrus-deliver-wrapper.c
 Source4: cyrus-user-procmailrc.template
 Source5: cyrus-imapd.logrotate
@@ -119,9 +131,9 @@
 Source32: cyrus-imapd.upd_groupcache
 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.1/cyrus-imapd-2.3.1-autocreate-0.10-0.diff
-Patch2: http://email.uoa.gr/download/cyrus/cyrus-imapd-2.3.1/cyrus-imapd-2.3.1-autosievefolder-0.6-0.diff
-Patch3: http://email.uoa.gr/download/cyrus/cyrus-imapd-2.3.1/cyrus-imapd-2.3.1-rmquota+deletemailbox-0.2-1.diff
+Patch1: cyrus-imapd-2.3.7-autocreate-0.10-0.diff
+Patch2: http://email.uoa.gr/download/cyrus/cyrus-imapd-2.3.3/cyrus-imapd-2.3.3-autosieve-0.6.0.diff
+Patch3: cyrus-imapd-2.3.7-rmquota+deletemailbox.patch
 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
 Patch6: cyrus-imapd-2.1.16-getrlimit.patch
@@ -138,20 +150,22 @@
 Patch100: cyrus-imapd-2.3.1-make_md5.patch
 Patch101: cyrus-imapd-2.3.1-backend_sigsegv.patch
 Patch102: cyrus-imapd-2.3.1-replication_policycheck.patch
-BuildRoot: %{_tmppath}/%{name}-%{version}-root
-BuildPrereq: cyrus-sasl-devel >= 2.1.15-1, perl, tcp_wrappers
-BuildPrereq: %{_dbver}-devel, openssl-devel, pkgconfig
-BuildPrereq: flex, bison, groff >= 1.15-8, automake
-%if %{_withldap}
-BuildPrereq: openldap-devel
-%endif
+BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
+BuildRequires: autoconf >= 2.59
+BuildRequires: cyrus-sasl-devel >= 2.1.15-1, perl, tcp_wrappers
+BuildRequires: %{_dbver}-devel, openssl-devel, pkgconfig
+BuildRequires: flex, bison, groff >= 1.15-8, automake
+BuildRequires: openldap-devel
 %if %{SNMP}
-BuildPrereq: %{_snmpver}-snmp-devel, lm_sensors-devel
+BuildRequires: %{_snmpver}-snmp-devel, lm_sensors-devel
 %endif
-Prereq: e2fsprogs, /sbin/chkconfig, /sbin/service
-Prereq: %{name}-utils = %{version}-%{release}
+Requires(post): e2fsprogs, /sbin/chkconfig, /sbin/service, perl, grep, coreutils, findutils
+Requires(preun): /sbin/chkconfig, /sbin/service, coreutils
+Requires(postun): /sbin/service
+Requires: %{name}-utils = %{version}-%{release}
 Requires: cyrus-sasl-lib >= 2.1.15, file >= 3.35-1, %{_dbver}-utils
-Obsoletes: %{name}-murder, %{name}-nntp
+Obsoletes: cyrus-murder, cyrus-nntp
+Provides: cyrus-murder, cyrus-nntp
 
 %description
 The %{name} package contains the core of the Cyrus IMAP server.
@@ -183,26 +197,30 @@
 
 %package devel
 Group: Development/Libraries
-Summary: Cyrus IMAP server development files.
+Summary: Cyrus IMAP server development files
 Requires: %{name} = %{version}-%{release}
 
 %description devel
 The %{name}-devel package contains header files and libraries
 necessary for developing applications which use the imclient library.
 
-%package -n perl-Cyrus
+%package -n cyrus-imapd-perl
+Provides: perl-Cyrus
+Obsoletes: perl-Cyrus
 Group: System Environment/Libraries
-Summary: Cyrus IMAP server utility Perl modules.
+Summary: Cyrus IMAP server utility Perl modules
 
-%description -n perl-Cyrus
-The perl-Cyrus package contains Perl modules necessary to use the
+%description -n cyrus-imapd-perl
+This package contains Perl modules necessary to use the
 Cyrus IMAP server administration utilities.
 
 %package utils
 Group: Applications/System
-Summary: Cyrus IMAP server administration utilities.
-Prereq: diffutils, findutils, grep, sed
-Requires: perl-Cyrus = %{version}-%{release}
+Summary: Cyrus IMAP server administration utilities
+Requires(pre): /usr/sbin/groupadd, /usr/sbin/useradd
+Requires(post): grep, coreutils, make, openssl
+Requires(postun): /usr/sbin/userdel, /usr/sbin/groupdel
+Requires: cyrus-imapd-perl = %{version}-%{release}
 
 %description utils
 The %{name}-utils package contains administrative tools for the
@@ -210,15 +228,20 @@
 one running the server.
 
 %prep
-%setup -q -a 2
+%setup -q
 %patch0 -p1 -b .no_transfig
 %if %{AUTOCREATE}
+#%patch1 -p1 -b .autocreate
+#%patch2 -p1 -b .autosievefolder
+#%patch3 -p1 -b .rmquota
 %patch1 -p1 -b .autocreate
-%patch2 -p1 -b .autosievefolder
+#%patch2 -p1 -b .autocreate1
+%patch2 -p1 -b .autosieve
 %patch3 -p1 -b .rmquota
 %endif
 %patch4 -p1 -b .flock
-%patch5 -p1 -b .munge8bit
+# superseded by upstream munge8bit support
+#%patch5 -p1 -b .munge8bit
 %patch6 -p1 -b .getrlimit
 %if %{NO_BARE_NL}
 %patch7 -p1 -b .nobarenewlinescheck
@@ -226,24 +249,24 @@
 %if %{GROUPCACHE}
 %patch8 -p1 -b .groupcache
 %endif
-%patch9 -p1 -b .config_defaults
+#%patch9 -p1 -b .config_defaults
 %patch10 -p1 -b .acceptinvalidfrom
-%patch11 -p1 -b .dam_invalid_id
+# fixed upstream already
+#%patch11 -p1 -b .dam_invalid_id
 %patch12 -p1 -b .notify_sms
 %patch13 -p0 -b .allow_auth_plain
 %patch14 -p1 -b .authid_normalize
 %patch15 -p1 -b .make_md5_defaults
-%patch100 -p1 -b .make_md5
-%patch101 -p1 -b .backend_sigsegv
-%patch102 -p1 -b .replication_policycheck
-
-# build and run private autoconf
-autodir=$(pwd)/auto-instroot
-pushd autoconf-%{_acversion}
-./configure --prefix=$autodir
-make all install
-popd
-PATH=${autodir}/bin:${PATH}
+# fixed upstream
+#%patch100 -p1 -b .make_md5
+# fixed upstream
+#%patch101 -p1 -b .backend_sigsegv
+# not applicable -- the policy check is not done upstream anymore at all
+# commented out with a comment: XXX is this really necessary since only sync_client talks to us?
+# probably fixes same problem as our patch, but in a different way
+# may be a risk of regressions though
+#%patch102 -p1 -b .replication_policycheck
+
 aclocal -I cmulocal
 autoheader
 autoconf -f
@@ -324,60 +347,6 @@
 %{__rm} -f doc/Makefile.dist*
 %{__rm} -f doc/text/htmlstrip.c
 
-# Create README.buildoptions
-%{__cat} << EOF >> doc/README.buildoptions
-This RPM has been built on %{_rhrelease} using the following options:
-
-use saslauth group
-SASLGROUP       : %{SASLGROUP}
-
-include deliver-wrapper
-DEL_WRAP        : %{DEL_WRAP}
-
-use preforking cyrus.conf
-PREFORK         : %{PREFORK}
-
-enable Netscape hack (recommended)
-NETSCAPEHACK    : %{NETSCAPEHACK}
-
-enable IMAP4 LIST extensions
-LISTEXT         : %{LISTEXT}
-
-enable IDLED support
-IDLED           : %{IDLED}
-
-enable SNMP support
-SNMP            : %{SNMP}
-
-force syncronous updates on ext3
-FORCESYNCEXT3   : %{FORCESYNCEXT3}
-
-include autocreate feature
-AUTOCREATE      : %{AUTOCREATE}
-
-include groupcache feature
-GROUPCACHE      : %{GROUPCACHE}
-
-include nobarenewlinescheck patch
-NO_BARE_NL      : %{NO_BARE_NL}
-
-used syslog facility for logging
-SYSLOGFACILITY  : %{SYSLOGFACILITY}
-
-used -fpie for linking
-USEPIE          : %{USEPIE}
-
-enable LDAP support
-(autodetected)  : %{_withldap}
-
-Berkeley DB version
-(autodetected)  : %{_dbrpmver}
-
-
-To modify parameters, edit the .spec file or build like this:
-rpm --rebuild --define='FULLDIRHASH 1' %{name}-%{version}-%{release}.src.rpm
-EOF
-
 %{__install} -m 644 %{SOURCE23}	doc/README.RPM
 %{__install} -m 644 %{SOURCE24}	doc/README.HOWTO-recover-mailboxes.db
 %if %{GROUPCACHE}
@@ -410,10 +379,10 @@
 # This hack is needed on RedHat > 7.3 to install the perl files correctly
 %if %{_perlhack}
 pushd perl/imap
-  %{__perl} Makefile.PL PREFIX=%{buildroot}%{_prefix}
+  %{__perl} Makefile.PL PREFIX=%{buildroot}%{_prefix} INSTALLDIRS=vendor
 popd
 pushd perl/sieve/managesieve
-  %{__perl} Makefile.PL PREFIX=%{buildroot}%{_prefix}
+  %{__perl} Makefile.PL PREFIX=%{buildroot}%{_prefix} INSTALLDIRS=vendor
 popd
 
 # Do what the regular make install does
@@ -467,6 +436,9 @@
 %{__install} -m 644 %{SOURCE22}   %{_contribdir}/
 %{__install} -m 644 %{SOURCE30}   %{_contribdir}/README
 
+# fix permissions on perl .so files
+find %{buildroot}%{_libdir}/perl5/ -type f -name "*.so" -exec %{__chmod} 755 {} \;
+
 # Install config files
 %{__install} -m 644 %{_cyrusconf} %{buildroot}%{_sysconfdir}/cyrus.conf
 %{__install} -m 644 %{SOURCE6}    %{buildroot}%{_sysconfdir}/imapd.conf
@@ -525,20 +497,17 @@
 
 # Create filelist for perl package, compress manpages before
 [ -x /usr/lib/rpm/brp-compress ] && /usr/lib/rpm/brp-compress
-find %{buildroot}%{perl_sitearch}/Cyrus %{buildroot}%{perl_sitearch}/auto/Cyrus -type f -print |
+find %{buildroot}%{perl_vendorarch}/Cyrus %{buildroot}%{perl_vendorarch}/auto/Cyrus -type f -print |
   %{__sed} "s@^%{buildroot}@@g" |
   %{__grep} -v perllocal.pod |
-  %{__grep} -v "\.packlist" > perl-Cyrus-%{version}-filelist
+  %{__grep} -v "\.packlist" > cyrus-imapd-perl-%{version}-filelist
 find %{buildroot}%{_perl_man3dir} -type f -name "Cyrus*" -print |
-  %{__sed} "s@^%{buildroot}@@g" >> perl-Cyrus-%{version}-filelist
-if [ "$(%{__cat} perl-Cyrus-%{version}-filelist)X" = "X" ] ; then
+  %{__sed} "s@^%{buildroot}@@g" >> cyrus-imapd-perl-%{version}-filelist
+if [ "$(%{__cat} cyrus-imapd-perl-%{version}-filelist)X" = "X" ] ; then
   echo "ERROR: EMPTY FILE LIST"
   exit -1
 fi
 
-# Strip binaries
-%{__strip} --strip-unneeded %{buildroot}%{_cyrexecdir}/* ||:
-
 # Remove installed but not packaged files
 %{__rm} -f %{buildroot}%{_cyrexecdir}/not-mkdep
 %{__rm} -f %{buildroot}%{_cyrexecdir}/config2header*
@@ -738,6 +707,7 @@
 %attr(0755,root,root) %{_cyrexecdir}/imapd
 %attr(0755,root,root) %{_cyrexecdir}/ipurge
 %attr(0755,root,root) %{_cyrexecdir}/lmtpd
+%attr(0755,root,root) %{_cyrexecdir}/lmtpproxyd
 %attr(0755,root,root) %{_cyrexecdir}/masssievec
 %attr(0755,root,root) %{_cyrexecdir}/mbexamine
 %attr(0755,root,root) %{_cyrexecdir}/mbpath
@@ -821,7 +791,7 @@
 %{_libdir}/lib*.a
 %{_mandir}/man3/imclient.3*
 
-%files -n perl-Cyrus -f perl-Cyrus-%{version}-filelist
+%files -n cyrus-imapd-perl -f cyrus-imapd-perl-%{version}-filelist
 %defattr(-,root,root)
 %doc perl/imap/README
 %doc perl/imap/Changes
@@ -833,6 +803,31 @@
 %{_mandir}/man1/*
 
 %changelog
+* Sun Jul 23 2006 Petr Rockai <prockai at redhat.com> - 2.3.7-1
+- update to latest upstream version, fixes a fair amount of issues
+- forward-port the autocreate and rmquota patches (used latest
+  upstream patches, those are for 2.3.3)
+
+* Tue Jul 18 2006 Petr Rockai <prockai at redhat.com> - 2.3.1-3
+- install perl modules into vendor_perl instead of site_perl
+- change mode of perl .so files to 755 instead of 555
+- update pam configuration to use include directive instead
+  of deprecated pam_stack
+- change prereq on cyrus-imapd-utils to requires
+
+* Tue Jul 11 2006 Petr Rockai <prockai at redhat.com> - 2.3.1-2.99.test1
+- address bunch of rpmlint errors and warnings
+- rename perl-Cyrus to cyrus-imapd-perl to be consistent with rest
+  of package (the cyrus modules are not part of cpan)
+- added provides on cyrus-nntp and cyrus-murder (the functionality
+  is part of main package now)
+- removed generation of README.buildoptions
+- the two above made it possible to get rid of most build-time parameter
+  guessing from environment
+- get rid of internal autoconf (iew)
+- don't strip binaries, renders -debuginfo useless...
+- remove prereq's in favour of newly added requires(...)
+
 * Tue Feb 28 2006 John Dennis <jdennis at redhat.com> - 2.3.1-2
 - bring up to Simon Matter's 2.3.1-2 release
 - fix bug #173319, require cyrus-sasl-lib instead of cyrus-sasl


Index: sources
===================================================================
RCS file: /cvs/extras/devel/cyrus-imapd/sources,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- sources	28 Feb 2006 21:03:10 -0000	1.6
+++ sources	27 Jul 2006 10:41:04 -0000	1.7
@@ -1,3 +1,2 @@
+07990f3a78a3a9d728cae627e31a9caf  cyrus-imapd-2.3.7.tar.gz
 8f7a26b0556369827bb5c8084a3e3ea1  cyrus_sharedbackup-0.1.tar.gz
-cde15876d5c953bba9ad9f7811aff695  cyrus-imapd-2.3.1.tar.gz
-d4d45eaa1769d45e59dcb131a4af17a0  autoconf-2.59.tar.gz




More information about the fedora-extras-commits mailing list