- 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@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@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(...)
This commit is contained in:
parent
2aa9c3b37d
commit
f397365bd3
181
cyrus-imapd-2.3.3-autosieve-0.6.0.diff
Normal file
181
cyrus-imapd-2.3.3-autosieve-0.6.0.diff
Normal file
@ -0,0 +1,181 @@
|
|||||||
|
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
|
12929
cyrus-imapd-2.3.7-autocreate-0.10-0.diff
Normal file
12929
cyrus-imapd-2.3.7-autocreate-0.10-0.diff
Normal file
File diff suppressed because it is too large
Load Diff
537
cyrus-imapd-2.3.7-rmquota+deletemailbox.patch
Normal file
537
cyrus-imapd-2.3.7-rmquota+deletemailbox.patch
Normal file
@ -0,0 +1,537 @@
|
|||||||
|
--- 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("a, NULL, 0);
|
||||||
|
+ r = quota_read("a, 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("a, NULL);
|
||||||
|
+ r = quota_delete("a, 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",
|
BIN
cyrus-imapd-2.3.7.tar.gz.sig
Normal file
BIN
cyrus-imapd-2.3.7.tar.gz.sig
Normal file
Binary file not shown.
@ -1,3 +1,3 @@
|
|||||||
#%PAM-1.0
|
#%PAM-1.0
|
||||||
auth required pam_stack.so service=system-auth
|
auth include system-auth
|
||||||
account required pam_stack.so service=system-auth
|
account include system-auth
|
||||||
|
227
cyrus-imapd.spec
227
cyrus-imapd.spec
@ -1,6 +1,6 @@
|
|||||||
Name: cyrus-imapd
|
Name: cyrus-imapd
|
||||||
Version: 2.3.1
|
Version: 2.3.7
|
||||||
Release: 2.6%{?dist}
|
Release: 1%{?dist}
|
||||||
|
|
||||||
# ********************** BUILD TIME OPTIONS START **********************
|
# ********************** BUILD TIME OPTIONS START **********************
|
||||||
|
|
||||||
@ -8,7 +8,7 @@ Release: 2.6%{?dist}
|
|||||||
# rpm --rebuild --define='SEEN_DB skiplist' cyrus-imapd-2.x.x-x.src.rpm
|
# rpm --rebuild --define='SEEN_DB skiplist' cyrus-imapd-2.x.x-x.src.rpm
|
||||||
|
|
||||||
# use saslauth group
|
# use saslauth group
|
||||||
%{!?SASLGROUP: %define SASLGROUP 0}
|
%{!?SASLGROUP: %define SASLGROUP 1}
|
||||||
# include deliver-wrapper
|
# include deliver-wrapper
|
||||||
%{!?DEL_WRAP: %define DEL_WRAP 0}
|
%{!?DEL_WRAP: %define DEL_WRAP 0}
|
||||||
# use preforking cyrus.conf
|
# use preforking cyrus.conf
|
||||||
@ -20,7 +20,7 @@ Release: 2.6%{?dist}
|
|||||||
# enable IDLED support
|
# enable IDLED support
|
||||||
%{!?IDLED: %define IDLED 1}
|
%{!?IDLED: %define IDLED 1}
|
||||||
# enable SNMP support
|
# enable SNMP support
|
||||||
%{!?SNMP: %define SNMP 0}
|
%{!?SNMP: %define SNMP 1}
|
||||||
# force syncronous updates on ext3
|
# force syncronous updates on ext3
|
||||||
%{!?FORCESYNCEXT3: %define FORCESYNCEXT3 0}
|
%{!?FORCESYNCEXT3: %define FORCESYNCEXT3 0}
|
||||||
# include autocreate feature
|
# include autocreate feature
|
||||||
@ -32,25 +32,36 @@ Release: 2.6%{?dist}
|
|||||||
# used syslog facility for logging
|
# used syslog facility for logging
|
||||||
%{!?SYSLOGFACILITY: %define SYSLOGFACILITY MAIL}
|
%{!?SYSLOGFACILITY: %define SYSLOGFACILITY MAIL}
|
||||||
# use -fpie for linking
|
# use -fpie for linking
|
||||||
%{!?USEPIE: %define USEPIE 0}
|
%{!?USEPIE: %define USEPIE 1}
|
||||||
|
|
||||||
# ********************** BUILD TIME OPTIONS END ************************
|
# ********************** BUILD TIME OPTIONS END ************************
|
||||||
|
|
||||||
%define _acversion 2.59
|
#%define _acversion 2.59
|
||||||
%define _use_internal_dependency_generator 0
|
%define _use_internal_dependency_generator 0
|
||||||
%define _rhver %(eval rpm -q --queryformat '%{VERSION}' $(rpm -qf /etc/redhat-release))
|
#%define _rhver %(eval rpm -q --queryformat '%{VERSION}' $(rpm -qf /etc/redhat-release))
|
||||||
%define _rhrelease %(eval %{__cat} /etc/redhat-release)
|
#%define _rhrelease %(eval %{__cat} /etc/redhat-release)
|
||||||
%define _dbver db4
|
%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 ?
|
# 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 _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
|
# Disable -debuginfo package generation
|
||||||
#define debug_package %{nil}
|
#define debug_package %{nil}
|
||||||
# Do we have filesystem >= 2.3.2 (new pki location) ?
|
# 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}
|
%if %{use_etc_pki}
|
||||||
%define certs_dir %{_sysconfdir}/pki/tls/certs
|
%define certs_dir %{_sysconfdir}/pki/tls/certs
|
||||||
%define pki_dir %{_sysconfdir}/pki/%{name}
|
%define pki_dir %{_sysconfdir}/pki/%{name}
|
||||||
@ -58,6 +69,7 @@ Release: 2.6%{?dist}
|
|||||||
%define certs_dir %{_datadir}/ssl/certs
|
%define certs_dir %{_datadir}/ssl/certs
|
||||||
%define pki_dir %{_datadir}/ssl/certs
|
%define pki_dir %{_datadir}/ssl/certs
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
%define ssl_pem_file %{pki_dir}/%{name}.pem
|
%define ssl_pem_file %{pki_dir}/%{name}.pem
|
||||||
%define uid 76
|
%define uid 76
|
||||||
%if %{SASLGROUP}
|
%if %{SASLGROUP}
|
||||||
@ -77,7 +89,7 @@ Release: 2.6%{?dist}
|
|||||||
%define _cyrusconf %{_confdir}/normal.conf
|
%define _cyrusconf %{_confdir}/normal.conf
|
||||||
%endif
|
%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
|
License: BSD
|
||||||
Group: System Environment/Daemons
|
Group: System Environment/Daemons
|
||||||
URL: http://asg.web.cmu.edu/cyrus/imapd/
|
URL: http://asg.web.cmu.edu/cyrus/imapd/
|
||||||
@ -86,7 +98,7 @@ URL: http://asg.web.cmu.edu/cyrus/imapd/
|
|||||||
#Distribution: Invoca Linux Server
|
#Distribution: Invoca Linux Server
|
||||||
Source0: ftp://ftp.andrew.cmu.edu/pub/cyrus/%{name}-%{version}.tar.gz
|
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
|
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
|
Source3: cyrus-deliver-wrapper.c
|
||||||
Source4: cyrus-user-procmailrc.template
|
Source4: cyrus-user-procmailrc.template
|
||||||
Source5: cyrus-imapd.logrotate
|
Source5: cyrus-imapd.logrotate
|
||||||
@ -119,9 +131,9 @@ Source31: cyrus-imapd-README.groupcache
|
|||||||
Source32: cyrus-imapd.upd_groupcache
|
Source32: cyrus-imapd.upd_groupcache
|
||||||
Source33: cyrus-imapd-README.skiplist_recovery
|
Source33: cyrus-imapd-README.skiplist_recovery
|
||||||
Patch0: cyrus-imapd-2.2.12-no_transfig.patch
|
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
|
Patch1: cyrus-imapd-2.3.7-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
|
Patch2: http://email.uoa.gr/download/cyrus/cyrus-imapd-2.3.3/cyrus-imapd-2.3.3-autosieve-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
|
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
|
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
|
Patch5: cyrus-imapd-2.2.12-munge8bit.patch
|
||||||
Patch6: cyrus-imapd-2.1.16-getrlimit.patch
|
Patch6: cyrus-imapd-2.1.16-getrlimit.patch
|
||||||
@ -138,20 +150,22 @@ Patch15: cyrus-imapd-2.3.1-make_md5_defaults.patch
|
|||||||
Patch100: cyrus-imapd-2.3.1-make_md5.patch
|
Patch100: cyrus-imapd-2.3.1-make_md5.patch
|
||||||
Patch101: cyrus-imapd-2.3.1-backend_sigsegv.patch
|
Patch101: cyrus-imapd-2.3.1-backend_sigsegv.patch
|
||||||
Patch102: cyrus-imapd-2.3.1-replication_policycheck.patch
|
Patch102: cyrus-imapd-2.3.1-replication_policycheck.patch
|
||||||
BuildRoot: %{_tmppath}/%{name}-%{version}-root
|
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
||||||
BuildPrereq: cyrus-sasl-devel >= 2.1.15-1, perl, tcp_wrappers
|
BuildRequires: autoconf >= 2.59
|
||||||
BuildPrereq: %{_dbver}-devel, openssl-devel, pkgconfig
|
BuildRequires: cyrus-sasl-devel >= 2.1.15-1, perl, tcp_wrappers
|
||||||
BuildPrereq: flex, bison, groff >= 1.15-8, automake
|
BuildRequires: %{_dbver}-devel, openssl-devel, pkgconfig
|
||||||
%if %{_withldap}
|
BuildRequires: flex, bison, groff >= 1.15-8, automake
|
||||||
BuildPrereq: openldap-devel
|
BuildRequires: openldap-devel
|
||||||
%endif
|
|
||||||
%if %{SNMP}
|
%if %{SNMP}
|
||||||
BuildPrereq: %{_snmpver}-snmp-devel, lm_sensors-devel
|
BuildRequires: %{_snmpver}-snmp-devel, lm_sensors-devel
|
||||||
%endif
|
%endif
|
||||||
Prereq: e2fsprogs, /sbin/chkconfig, /sbin/service
|
Requires(post): e2fsprogs, /sbin/chkconfig, /sbin/service, perl, grep, coreutils, findutils
|
||||||
Prereq: %{name}-utils = %{version}-%{release}
|
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
|
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
|
%description
|
||||||
The %{name} package contains the core of the Cyrus IMAP server.
|
The %{name} package contains the core of the Cyrus IMAP server.
|
||||||
@ -183,26 +197,30 @@ recipients, SIEVE provides server side email filtering.
|
|||||||
|
|
||||||
%package devel
|
%package devel
|
||||||
Group: Development/Libraries
|
Group: Development/Libraries
|
||||||
Summary: Cyrus IMAP server development files.
|
Summary: Cyrus IMAP server development files
|
||||||
Requires: %{name} = %{version}-%{release}
|
Requires: %{name} = %{version}-%{release}
|
||||||
|
|
||||||
%description devel
|
%description devel
|
||||||
The %{name}-devel package contains header files and libraries
|
The %{name}-devel package contains header files and libraries
|
||||||
necessary for developing applications which use the imclient library.
|
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
|
Group: System Environment/Libraries
|
||||||
Summary: Cyrus IMAP server utility Perl modules.
|
Summary: Cyrus IMAP server utility Perl modules
|
||||||
|
|
||||||
%description -n perl-Cyrus
|
%description -n cyrus-imapd-perl
|
||||||
The perl-Cyrus package contains Perl modules necessary to use the
|
This package contains Perl modules necessary to use the
|
||||||
Cyrus IMAP server administration utilities.
|
Cyrus IMAP server administration utilities.
|
||||||
|
|
||||||
%package utils
|
%package utils
|
||||||
Group: Applications/System
|
Group: Applications/System
|
||||||
Summary: Cyrus IMAP server administration utilities.
|
Summary: Cyrus IMAP server administration utilities
|
||||||
Prereq: diffutils, findutils, grep, sed
|
Requires(pre): /usr/sbin/groupadd, /usr/sbin/useradd
|
||||||
Requires: perl-Cyrus = %{version}-%{release}
|
Requires(post): grep, coreutils, make, openssl
|
||||||
|
Requires(postun): /usr/sbin/userdel, /usr/sbin/groupdel
|
||||||
|
Requires: cyrus-imapd-perl = %{version}-%{release}
|
||||||
|
|
||||||
%description utils
|
%description utils
|
||||||
The %{name}-utils package contains administrative tools for the
|
The %{name}-utils package contains administrative tools for the
|
||||||
@ -210,15 +228,20 @@ Cyrus IMAP server. It can be installed on systems other than the
|
|||||||
one running the server.
|
one running the server.
|
||||||
|
|
||||||
%prep
|
%prep
|
||||||
%setup -q -a 2
|
%setup -q
|
||||||
%patch0 -p1 -b .no_transfig
|
%patch0 -p1 -b .no_transfig
|
||||||
%if %{AUTOCREATE}
|
%if %{AUTOCREATE}
|
||||||
|
#%patch1 -p1 -b .autocreate
|
||||||
|
#%patch2 -p1 -b .autosievefolder
|
||||||
|
#%patch3 -p1 -b .rmquota
|
||||||
%patch1 -p1 -b .autocreate
|
%patch1 -p1 -b .autocreate
|
||||||
%patch2 -p1 -b .autosievefolder
|
#%patch2 -p1 -b .autocreate1
|
||||||
|
%patch2 -p1 -b .autosieve
|
||||||
%patch3 -p1 -b .rmquota
|
%patch3 -p1 -b .rmquota
|
||||||
%endif
|
%endif
|
||||||
%patch4 -p1 -b .flock
|
%patch4 -p1 -b .flock
|
||||||
%patch5 -p1 -b .munge8bit
|
# superseded by upstream munge8bit support
|
||||||
|
#%patch5 -p1 -b .munge8bit
|
||||||
%patch6 -p1 -b .getrlimit
|
%patch6 -p1 -b .getrlimit
|
||||||
%if %{NO_BARE_NL}
|
%if %{NO_BARE_NL}
|
||||||
%patch7 -p1 -b .nobarenewlinescheck
|
%patch7 -p1 -b .nobarenewlinescheck
|
||||||
@ -226,24 +249,24 @@ one running the server.
|
|||||||
%if %{GROUPCACHE}
|
%if %{GROUPCACHE}
|
||||||
%patch8 -p1 -b .groupcache
|
%patch8 -p1 -b .groupcache
|
||||||
%endif
|
%endif
|
||||||
%patch9 -p1 -b .config_defaults
|
#%patch9 -p1 -b .config_defaults
|
||||||
%patch10 -p1 -b .acceptinvalidfrom
|
%patch10 -p1 -b .acceptinvalidfrom
|
||||||
%patch11 -p1 -b .dam_invalid_id
|
# fixed upstream already
|
||||||
|
#%patch11 -p1 -b .dam_invalid_id
|
||||||
%patch12 -p1 -b .notify_sms
|
%patch12 -p1 -b .notify_sms
|
||||||
%patch13 -p0 -b .allow_auth_plain
|
%patch13 -p0 -b .allow_auth_plain
|
||||||
%patch14 -p1 -b .authid_normalize
|
%patch14 -p1 -b .authid_normalize
|
||||||
%patch15 -p1 -b .make_md5_defaults
|
%patch15 -p1 -b .make_md5_defaults
|
||||||
%patch100 -p1 -b .make_md5
|
# fixed upstream
|
||||||
%patch101 -p1 -b .backend_sigsegv
|
#%patch100 -p1 -b .make_md5
|
||||||
%patch102 -p1 -b .replication_policycheck
|
# 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
|
||||||
|
|
||||||
# build and run private autoconf
|
|
||||||
autodir=$(pwd)/auto-instroot
|
|
||||||
pushd autoconf-%{_acversion}
|
|
||||||
./configure --prefix=$autodir
|
|
||||||
make all install
|
|
||||||
popd
|
|
||||||
PATH=${autodir}/bin:${PATH}
|
|
||||||
aclocal -I cmulocal
|
aclocal -I cmulocal
|
||||||
autoheader
|
autoheader
|
||||||
autoconf -f
|
autoconf -f
|
||||||
@ -324,60 +347,6 @@ find doc -name "*.html.*" -type f | xargs -r %{__rm} -f
|
|||||||
%{__rm} -f doc/Makefile.dist*
|
%{__rm} -f doc/Makefile.dist*
|
||||||
%{__rm} -f doc/text/htmlstrip.c
|
%{__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 %{SOURCE23} doc/README.RPM
|
||||||
%{__install} -m 644 %{SOURCE24} doc/README.HOWTO-recover-mailboxes.db
|
%{__install} -m 644 %{SOURCE24} doc/README.HOWTO-recover-mailboxes.db
|
||||||
%if %{GROUPCACHE}
|
%if %{GROUPCACHE}
|
||||||
@ -410,10 +379,10 @@ EOF
|
|||||||
# This hack is needed on RedHat > 7.3 to install the perl files correctly
|
# This hack is needed on RedHat > 7.3 to install the perl files correctly
|
||||||
%if %{_perlhack}
|
%if %{_perlhack}
|
||||||
pushd perl/imap
|
pushd perl/imap
|
||||||
%{__perl} Makefile.PL PREFIX=%{buildroot}%{_prefix}
|
%{__perl} Makefile.PL PREFIX=%{buildroot}%{_prefix} INSTALLDIRS=vendor
|
||||||
popd
|
popd
|
||||||
pushd perl/sieve/managesieve
|
pushd perl/sieve/managesieve
|
||||||
%{__perl} Makefile.PL PREFIX=%{buildroot}%{_prefix}
|
%{__perl} Makefile.PL PREFIX=%{buildroot}%{_prefix} INSTALLDIRS=vendor
|
||||||
popd
|
popd
|
||||||
|
|
||||||
# Do what the regular make install does
|
# Do what the regular make install does
|
||||||
@ -467,6 +436,9 @@ done
|
|||||||
%{__install} -m 644 %{SOURCE22} %{_contribdir}/
|
%{__install} -m 644 %{SOURCE22} %{_contribdir}/
|
||||||
%{__install} -m 644 %{SOURCE30} %{_contribdir}/README
|
%{__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 config files
|
||||||
%{__install} -m 644 %{_cyrusconf} %{buildroot}%{_sysconfdir}/cyrus.conf
|
%{__install} -m 644 %{_cyrusconf} %{buildroot}%{_sysconfdir}/cyrus.conf
|
||||||
%{__install} -m 644 %{SOURCE6} %{buildroot}%{_sysconfdir}/imapd.conf
|
%{__install} -m 644 %{SOURCE6} %{buildroot}%{_sysconfdir}/imapd.conf
|
||||||
@ -525,20 +497,17 @@ touch %{buildroot}%{ssl_pem_file}
|
|||||||
|
|
||||||
# Create filelist for perl package, compress manpages before
|
# Create filelist for perl package, compress manpages before
|
||||||
[ -x /usr/lib/rpm/brp-compress ] && /usr/lib/rpm/brp-compress
|
[ -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" |
|
%{__sed} "s@^%{buildroot}@@g" |
|
||||||
%{__grep} -v perllocal.pod |
|
%{__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 |
|
find %{buildroot}%{_perl_man3dir} -type f -name "Cyrus*" -print |
|
||||||
%{__sed} "s@^%{buildroot}@@g" >> perl-Cyrus-%{version}-filelist
|
%{__sed} "s@^%{buildroot}@@g" >> cyrus-imapd-perl-%{version}-filelist
|
||||||
if [ "$(%{__cat} perl-Cyrus-%{version}-filelist)X" = "X" ] ; then
|
if [ "$(%{__cat} cyrus-imapd-perl-%{version}-filelist)X" = "X" ] ; then
|
||||||
echo "ERROR: EMPTY FILE LIST"
|
echo "ERROR: EMPTY FILE LIST"
|
||||||
exit -1
|
exit -1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Strip binaries
|
|
||||||
%{__strip} --strip-unneeded %{buildroot}%{_cyrexecdir}/* ||:
|
|
||||||
|
|
||||||
# Remove installed but not packaged files
|
# Remove installed but not packaged files
|
||||||
%{__rm} -f %{buildroot}%{_cyrexecdir}/not-mkdep
|
%{__rm} -f %{buildroot}%{_cyrexecdir}/not-mkdep
|
||||||
%{__rm} -f %{buildroot}%{_cyrexecdir}/config2header*
|
%{__rm} -f %{buildroot}%{_cyrexecdir}/config2header*
|
||||||
@ -738,6 +707,7 @@ fi
|
|||||||
%attr(0755,root,root) %{_cyrexecdir}/imapd
|
%attr(0755,root,root) %{_cyrexecdir}/imapd
|
||||||
%attr(0755,root,root) %{_cyrexecdir}/ipurge
|
%attr(0755,root,root) %{_cyrexecdir}/ipurge
|
||||||
%attr(0755,root,root) %{_cyrexecdir}/lmtpd
|
%attr(0755,root,root) %{_cyrexecdir}/lmtpd
|
||||||
|
%attr(0755,root,root) %{_cyrexecdir}/lmtpproxyd
|
||||||
%attr(0755,root,root) %{_cyrexecdir}/masssievec
|
%attr(0755,root,root) %{_cyrexecdir}/masssievec
|
||||||
%attr(0755,root,root) %{_cyrexecdir}/mbexamine
|
%attr(0755,root,root) %{_cyrexecdir}/mbexamine
|
||||||
%attr(0755,root,root) %{_cyrexecdir}/mbpath
|
%attr(0755,root,root) %{_cyrexecdir}/mbpath
|
||||||
@ -821,7 +791,7 @@ fi
|
|||||||
%{_libdir}/lib*.a
|
%{_libdir}/lib*.a
|
||||||
%{_mandir}/man3/imclient.3*
|
%{_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)
|
%defattr(-,root,root)
|
||||||
%doc perl/imap/README
|
%doc perl/imap/README
|
||||||
%doc perl/imap/Changes
|
%doc perl/imap/Changes
|
||||||
@ -833,6 +803,31 @@ fi
|
|||||||
%{_mandir}/man1/*
|
%{_mandir}/man1/*
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Sun Jul 23 2006 Petr Rockai <prockai@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@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@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@redhat.com> - 2.3.1-2
|
* Tue Feb 28 2006 John Dennis <jdennis@redhat.com> - 2.3.1-2
|
||||||
- bring up to Simon Matter's 2.3.1-2 release
|
- bring up to Simon Matter's 2.3.1-2 release
|
||||||
- fix bug #173319, require cyrus-sasl-lib instead of cyrus-sasl
|
- fix bug #173319, require cyrus-sasl-lib instead of cyrus-sasl
|
||||||
|
3
sources
3
sources
@ -1,3 +1,2 @@
|
|||||||
|
07990f3a78a3a9d728cae627e31a9caf cyrus-imapd-2.3.7.tar.gz
|
||||||
8f7a26b0556369827bb5c8084a3e3ea1 cyrus_sharedbackup-0.1.tar.gz
|
8f7a26b0556369827bb5c8084a3e3ea1 cyrus_sharedbackup-0.1.tar.gz
|
||||||
cde15876d5c953bba9ad9f7811aff695 cyrus-imapd-2.3.1.tar.gz
|
|
||||||
d4d45eaa1769d45e59dcb131a4af17a0 autoconf-2.59.tar.gz
|
|
||||||
|
Loading…
Reference in New Issue
Block a user