diff --git a/cyrus-imapd-2.3.8-getgrouplist.patch b/cyrus-imapd-2.3.8-getgrouplist.patch new file mode 100644 index 0000000..2f41f52 --- /dev/null +++ b/cyrus-imapd-2.3.8-getgrouplist.patch @@ -0,0 +1,84 @@ +diff -Naur cyrus-imapd-2.3.8.orig/configure.in cyrus-imapd-2.3.8/configure.in +--- cyrus-imapd-2.3.8.orig/configure.in Thu Nov 30 18:11:16 2006 ++++ cyrus-imapd-2.3.8/configure.in Tue Jun 12 15:40:12 2007 +@@ -119,7 +119,7 @@ + + AC_CHECK_HEADERS(unistd.h sys/select.h sys/param.h stdarg.h) + AC_REPLACE_FUNCS(memmove strcasecmp ftruncate strerror) +-AC_CHECK_FUNCS(strlcat strlcpy) ++AC_CHECK_FUNCS(strlcat strlcpy getgrouplist) + AC_HEADER_DIRENT + + dnl do this before Berkeley DB/IPv6 detection +diff -Naur cyrus-imapd-2.3.8.orig/lib/auth_unix.c cyrus-imapd-2.3.8/lib/auth_unix.c +--- cyrus-imapd-2.3.8.orig/lib/auth_unix.c Thu Nov 30 18:11:22 2006 ++++ cyrus-imapd-2.3.8/lib/auth_unix.c Tue Jun 12 15:42:22 2007 +@@ -224,6 +224,12 @@ + struct passwd *pwd; + struct group *grp; + char **mem; ++#ifdef HAVE_GETGROUPLIST ++ gid_t gid; ++ int ret, ngroups; ++ gid_t *groupids = 0; ++ int i; ++#endif + + identifier = mycanonifyid(identifier, 0); + if (!identifier) return 0; +@@ -239,7 +245,45 @@ + return newstate; + + pwd = getpwnam(identifier); +- ++#ifdef HAVE_GETGROUPLIST ++ gid = pwd ? pwd->pw_gid : (gid_t) -1; ++ ++ // get number of groups user is member of into newstate->ngroups ++ getgrouplist(identifier, gid, NULL, &(newstate->ngroups)); ++ // get the actual group ids. ++ do { ++ if (groupids) ++ free(groupids); ++ groupids = (gid_t *)xmalloc(newstate->ngroups * sizeof(gid_t)); ++ ++ ngroups = newstate->ngroups; ++ ret = getgrouplist(identifier, gid, groupids, &(newstate->ngroups)); ++ /* ++ * This is tricky. We do this as long as getgrouplist tells us to ++ * realloc _and_ the number of groups changes. It tells us to realloc ++ * also in the case of failure... ++ */ ++ } while (ret != -1 && ngroups != newstate->ngroups); ++ ++ if (ret == -1) { ++ newstate->ngroups = 0; ++ newstate->group = NULL; ++ goto err; ++ } ++ ++ newstate->group = (char **)xmalloc(newstate->ngroups * sizeof(char *)); ++ for (i = 0; i < newstate->ngroups; ++i ) { ++ struct group *group; ++ ++ if (pwd || groupids[i] != gid) { ++ if ((group = getgrgid(groupids[i]))) ++ newstate->group[i] = xstrdup(group->gr_name); ++ } ++ } ++ ++err: ++ free( groupids ); ++#else + setgrent(); + while ((grp = getgrent())) { + for (mem = grp->gr_mem; *mem; mem++) { +@@ -254,6 +298,8 @@ + } + } + endgrent(); ++#endif ++ + return newstate; + } + \ No newline at end of file diff --git a/cyrus-imapd-2.3.8-autocreate-0.10-0.diff b/cyrus-imapd-2.3.9-autocreate-0.10-0.1.diff similarity index 99% rename from cyrus-imapd-2.3.8-autocreate-0.10-0.diff rename to cyrus-imapd-2.3.9-autocreate-0.10-0.1.diff index 893e88a..26e4324 100644 --- a/cyrus-imapd-2.3.8-autocreate-0.10-0.diff +++ b/cyrus-imapd-2.3.9-autocreate-0.10-0.1.diff @@ -564,13 +564,13 @@ diff -Naur cyrus-imapd-2.3.8/imap/autosieve.c cyrus-imapd-2.3.8-autocreate.uncom + /* Find the dir path where the sieve scripts of the user will reside */ + if (config_virtdomains && domain) { + if(snprintf(sieve_script_dir, buflen, "%s%s%c/%s/%c/%s/", -+ sieve_dir, FNAME_DOMAINDIR, dir_hash_c(domain), domain, dir_hash_c(user), user) >= buflen) { ++ sieve_dir, FNAME_DOMAINDIR, dir_hash_c(domain, config_fulldirhash), domain, dir_hash_c(user, config_fulldirhash), user) >= buflen) { + free(user); + return 1; + } + } else { + if(snprintf(sieve_script_dir, buflen, "%s/%c/%s/", -+ sieve_dir, dir_hash_c(user), user) >= buflen) ++ sieve_dir, dir_hash_c(user, config_fulldirhash), user) >= buflen) + return 1; + } + diff --git a/cyrus-imapd-2.3.9-openmacro.patch b/cyrus-imapd-2.3.9-openmacro.patch new file mode 100644 index 0000000..43093e9 --- /dev/null +++ b/cyrus-imapd-2.3.9-openmacro.patch @@ -0,0 +1,563 @@ +--- cyrus-imapd-2.3.9/imap/quota_db.c.openmacro 2007-08-14 16:21:29.000000000 +0200 ++++ cyrus-imapd-2.3.9/imap/quota_db.c 2007-08-14 16:31:48.000000000 +0200 +@@ -251,7 +251,7 @@ + strlcat(fname, FNAME_QUOTADB, fname_len); + } + +- ret = QDB->open(fname, CYRUSDB_CREATE, &qdb); ++ ret = (QDB->open)(fname, CYRUSDB_CREATE, &qdb); + if (ret != 0) { + syslog(LOG_ERR, "DBERROR: opening %s: %s", fname, + cyrusdb_strerror(ret)); +@@ -270,7 +270,7 @@ + int r; + + if (quota_dbopen) { +- r = QDB->close(qdb); ++ r = (QDB->close)(qdb); + if (r) { + syslog(LOG_ERR, "DBERROR: error closing quotas: %s", + cyrusdb_strerror(r)); +--- cyrus-imapd-2.3.9/imap/seen_bigdb.c.openmacro 2007-08-14 16:21:29.000000000 +0200 ++++ cyrus-imapd-2.3.9/imap/seen_bigdb.c 2007-08-14 16:32:03.000000000 +0200 +@@ -104,7 +104,7 @@ + strcpy(fname, config_dir); + strcat(fname, FNAME_SEENDB); + +- r = DB->open(fname, CYRUSDB_CREATE, &bigdb); ++ r = (DB->open)(fname, CYRUSDB_CREATE, &bigdb); + if (r != 0) { + syslog(LOG_ERR, "DBERROR: opening %s: %s", fname, + cyrusdb_strerror(r)); +@@ -385,7 +385,7 @@ + int r; + + if (seen_inited) { +- r = DB->close(bigdb); ++ r = (DB->close)(bigdb); + if (r != 0) { + syslog(LOG_ERR, "DBERROR: closing seen database: %s", + cyrusdb_strerror(r)); +--- cyrus-imapd-2.3.9/imap/mboxkey.c.openmacro 2007-08-14 16:21:29.000000000 +0200 ++++ cyrus-imapd-2.3.9/imap/mboxkey.c 2007-08-14 16:31:01.000000000 +0200 +@@ -150,7 +150,7 @@ + /* otherwise, close the existing database */ + if (mboxkeydb) { + abortcurrent(mboxkeydb); +- r = DB->close(mboxkeydb->db); ++ r = (DB->close)(mboxkeydb->db); + if (r) { + syslog(LOG_ERR, "DBERROR: error closing mboxkeydb: %s", + cyrusdb_strerror(r)); +@@ -164,7 +164,7 @@ + + /* open the mboxkeydb corresponding to user */ + fname = mboxkey_getpath(user); +- r = DB->open(fname, (flags & MBOXKEY_CREATE) ? CYRUSDB_CREATE : 0, ++ r = (DB->open)(fname, (flags & MBOXKEY_CREATE) ? CYRUSDB_CREATE : 0, + &mboxkeydb->db); + if (r != 0) { + int level = (flags & MBOXKEY_CREATE) ? LOG_ERR : LOG_DEBUG; +@@ -325,7 +325,7 @@ + + /* free the old database hanging around */ + abortcurrent(lastmboxkey); +- r = DB->close(lastmboxkey->db); ++ r = (DB->close)(lastmboxkey->db); + if (r != CYRUSDB_OK) { + syslog(LOG_ERR, "DBERROR: error closing lastmboxkey: %s", + cyrusdb_strerror(r)); +@@ -409,7 +409,7 @@ + + if (lastmboxkey) { + abortcurrent(lastmboxkey); +- r = DB->close(lastmboxkey->db); ++ r = (DB->close)(lastmboxkey->db); + if (r) { + syslog(LOG_ERR, "DBERROR: error closing lastmboxkey: %s", + cyrusdb_strerror(r)); +@@ -482,10 +482,10 @@ + struct mboxkey_merge_rock rock; + + /* xxx does this need to be CYRUSDB_CREATE? */ +- r = DB->open(tmpfile, CYRUSDB_CREATE, &tmp); ++ r = (DB->open)(tmpfile, CYRUSDB_CREATE, &tmp); + if(r) goto done; + +- r = DB->open(tgtfile, CYRUSDB_CREATE, &tgt); ++ r = (DB->open)(tgtfile, CYRUSDB_CREATE, &tgt); + if(r) goto done; + + rock.db = tgt; +@@ -498,8 +498,8 @@ + + done: + +- if(tgt) DB->close(tgt); +- if(tmp) DB->close(tmp); ++ if(tgt) (DB->close)(tgt); ++ if(tmp) (DB->close)(tmp); + + return r; + } +--- cyrus-imapd-2.3.9/imap/tls.c.openmacro 2007-08-14 16:21:29.000000000 +0200 ++++ cyrus-imapd-2.3.9/imap/tls.c 2007-08-14 16:33:15.000000000 +0200 +@@ -650,7 +650,7 @@ + strlcpy(dbdir, config_dir, sizeof(dbdir)); + strlcat(dbdir, FNAME_TLSSESSIONS, sizeof(dbdir)); + +- r = DB->open(dbdir, CYRUSDB_CREATE, &sessdb); ++ r = (DB->open)(dbdir, CYRUSDB_CREATE, &sessdb); + if (r != 0) { + syslog(LOG_ERR, "DBERROR: opening %s: %s", + dbdir, cyrusdb_strerror(ret)); +@@ -931,7 +931,7 @@ + int r; + + if (tls_serverengine && sess_dbopen) { +- r = DB->close(sessdb); ++ r = (DB->close)(sessdb); + if (r) { + syslog(LOG_ERR, "DBERROR: error closing tlsdb: %s", + cyrusdb_strerror(r)); +@@ -1008,7 +1008,7 @@ + strlcpy(dbdir, config_dir, sizeof(dbdir)); + strlcat(dbdir, FNAME_TLSSESSIONS, sizeof(dbdir)); + +- ret = DB->open(dbdir, CYRUSDB_CREATE, &sessdb); ++ ret = (DB->open)(dbdir, CYRUSDB_CREATE, &sessdb); + if (ret != CYRUSDB_OK) { + syslog(LOG_ERR, "DBERROR: opening %s: %s", + dbdir, cyrusdb_strerror(ret)); +@@ -1019,7 +1019,7 @@ + sess_dbopen = 1; + prock.count = prock.deletions = 0; + DB->foreach(sessdb, "", 0, &prune_p, &prune_cb, &prock, NULL); +- DB->close(sessdb); ++ (DB->close)(sessdb); + sessdb = NULL; + sess_dbopen = 0; + +--- cyrus-imapd-2.3.9/imap/duplicate.c.openmacro 2007-08-14 16:21:29.000000000 +0200 ++++ cyrus-imapd-2.3.9/imap/duplicate.c 2007-08-14 16:30:03.000000000 +0200 +@@ -105,7 +105,7 @@ + strcat(fname, FNAME_DELIVERDB); + } + +- r = DB->open(fname, CYRUSDB_CREATE, &dupdb); ++ r = (DB->open)(fname, CYRUSDB_CREATE, &dupdb); + if (r != 0) + syslog(LOG_ERR, "DBERROR: opening %s: %s", fname, + cyrusdb_strerror(r)); +@@ -395,7 +395,7 @@ + int r = 0; + + if (duplicate_dbopen) { +- r = DB->close(dupdb); ++ r = (DB->close)(dupdb); + if (r) { + syslog(LOG_ERR, "DBERROR: error closing deliverdb: %s", + cyrusdb_strerror(r)); +--- cyrus-imapd-2.3.9/imap/cvt_cyrusdb.c.openmacro 2007-08-14 16:21:29.000000000 +0200 ++++ cyrus-imapd-2.3.9/imap/cvt_cyrusdb.c 2007-08-14 16:29:32.000000000 +0200 +@@ -157,10 +157,10 @@ + printf("Converting from %s (%s) to %s (%s)\n", old_db, DB_OLD->name, + new_db, DB_NEW->name); + +- r = DB_OLD->open(old_db, 0, &odb); ++ r = (DB_OLD->open)(old_db, 0, &odb); + if(r != CYRUSDB_OK) + fatal("can't open old database", EC_TEMPFAIL); +- r = DB_NEW->open(new_db, CYRUSDB_CREATE, &ndb); ++ r = (DB_NEW->open)(new_db, CYRUSDB_CREATE, &ndb); + if(r != CYRUSDB_OK) + fatal("can't open new database", EC_TEMPFAIL); + +@@ -173,8 +173,8 @@ + fprintf(stderr, "Warning: apparently empty database converted.\n"); + + +- DB_OLD->close(odb); +- DB_NEW->close(ndb); ++ (DB_OLD->close)(odb); ++ (DB_NEW->close)(ndb); + + cyrus_done(); + +--- cyrus-imapd-2.3.9/imap/annotate.c.openmacro 2007-08-14 16:21:29.000000000 +0200 ++++ cyrus-imapd-2.3.9/imap/annotate.c 2007-08-14 16:28:42.000000000 +0200 +@@ -253,7 +253,7 @@ + strcat(fname, FNAME_ANNOTATIONS); + } + +- ret = DB->open(fname, CYRUSDB_CREATE, &anndb); ++ ret = (DB->open)(fname, CYRUSDB_CREATE, &anndb); + if (ret != 0) { + syslog(LOG_ERR, "DBERROR: opening %s: %s", fname, + cyrusdb_strerror(ret)); +@@ -270,7 +270,7 @@ + int r; + + if (annotate_dbopen) { +- r = DB->close(anndb); ++ r = (DB->close)(anndb); + if (r) { + syslog(LOG_ERR, "DBERROR: error closing annotations: %s", + cyrusdb_strerror(r)); +--- cyrus-imapd-2.3.9/imap/arbitron.c.openmacro 2007-08-14 16:21:29.000000000 +0200 ++++ cyrus-imapd-2.3.9/imap/arbitron.c 2007-08-14 16:29:11.000000000 +0200 +@@ -419,14 +419,14 @@ + int r; + struct db *tmp = NULL; + +- r = DB->open(path, 0, &tmp); ++ r = (DB->open)(path, 0, &tmp); + if(r) goto done; + + DB->foreach(tmp, "", 0, process_user_p, process_user_cb, + (void *) user, NULL); + + done: +- if(tmp) DB->close(tmp); ++ if(tmp) (DB->close)(tmp); + } + + static int process_subs_cb(void *rockp __attribute__((unused)), +@@ -475,14 +475,14 @@ + int r; + struct db *tmp = NULL; + +- r = SUBDB->open(path, 0, &tmp); ++ r = (SUBDB->open)(path, 0, &tmp); + if(r) goto done; + + SUBDB->foreach(tmp, "", 0, process_subs_p, process_subs_cb, + (void *) user, NULL); + + done: +- if(tmp) SUBDB->close(tmp); ++ if(tmp) (SUBDB->close)(tmp); + } + + void report_users(struct user_list *u) +--- cyrus-imapd-2.3.9/imap/mboxlist.c.openmacro 2007-08-14 16:21:29.000000000 +0200 ++++ cyrus-imapd-2.3.9/imap/mboxlist.c 2007-08-14 16:31:28.000000000 +0200 +@@ -2746,7 +2746,7 @@ + flags |= CYRUSDB_MBOXSORT; + } + +- ret = DB->open(fname, flags, &mbdb); ++ ret = (DB->open)(fname, flags, &mbdb); + if (ret != 0) { + syslog(LOG_ERR, "DBERROR: opening %s: %s", fname, + cyrusdb_strerror(ret)); +@@ -2765,7 +2765,7 @@ + int r; + + if (mboxlist_dbopen) { +- r = DB->close(mbdb); ++ r = (DB->close)(mbdb); + if (r) { + syslog(LOG_ERR, "DBERROR: error closing mailboxes: %s", + cyrusdb_strerror(r)); +@@ -2825,7 +2825,7 @@ + flags |= CYRUSDB_MBOXSORT; + } + +- r = SUBDB->open(subsfname, flags, ret); ++ r = (SUBDB->open)(subsfname, flags, ret); + if (r != CYRUSDB_OK) { + r = IMAP_IOERROR; + } +@@ -2839,7 +2839,7 @@ + */ + static void mboxlist_closesubs(struct db *sub) + { +- SUBDB->close(sub); ++ (SUBDB->close)(sub); + } + + /* +--- cyrus-imapd-2.3.9/imap/cyr_dbtool.c.openmacro 2007-08-14 16:21:29.000000000 +0200 ++++ cyrus-imapd-2.3.9/imap/cyr_dbtool.c 2007-08-14 16:29:52.000000000 +0200 +@@ -203,7 +203,7 @@ + cyrus_init(alt_config, "cyr_dbtool", 0); + + +- r = DB_OLD->open(old_db, db_flags, &odb); ++ r = (DB_OLD->open)(old_db, db_flags, &odb); + if(r != CYRUSDB_OK) + fatal("can't open database", EC_TEMPFAIL); + +@@ -250,7 +250,7 @@ + printf("Unknown action %s\n", action); + } + +- DB_OLD->close(odb); ++ (DB_OLD->close)(odb); + + cyrus_done(); + +--- cyrus-imapd-2.3.9/imap/seen_db.c.openmacro 2007-08-14 16:21:29.000000000 +0200 ++++ cyrus-imapd-2.3.9/imap/seen_db.c 2007-08-14 16:32:46.000000000 +0200 +@@ -157,7 +157,7 @@ + /* otherwise, close the existing database */ + if (seendb) { + abortcurrent(seendb); +- r = DB->close(seendb->db); ++ r = (DB->close)(seendb->db); + if (r) { + syslog(LOG_ERR, "DBERROR: error closing seendb: %s", + cyrusdb_strerror(r)); +@@ -170,7 +170,7 @@ + + /* open the seendb corresponding to user */ + fname = seen_getpath(user); +- r = DB->open(fname, (flags & SEEN_CREATE) ? CYRUSDB_CREATE : 0, ++ r = (DB->open)(fname, (flags & SEEN_CREATE) ? CYRUSDB_CREATE : 0, + &seendb->db); + if (r != 0) { + int level = (flags & SEEN_CREATE) ? LOG_ERR : LOG_DEBUG; +@@ -416,7 +416,7 @@ + + /* free the old database hanging around */ + abortcurrent(lastseen); +- r = DB->close(lastseen->db); ++ r = (DB->close)(lastseen->db); + if (r != CYRUSDB_OK) { + syslog(LOG_ERR, "DBERROR: error closing lastseen: %s", + cyrusdb_strerror(r)); +@@ -555,7 +555,7 @@ + + if (lastseen) { + abortcurrent(lastseen); +- r = DB->close(lastseen->db); ++ r = (DB->close)(lastseen->db); + if (r) { + syslog(LOG_ERR, "DBERROR: error closing lastseen: %s", + cyrusdb_strerror(r)); +@@ -653,10 +653,10 @@ + struct seen_merge_rock rock; + + /* xxx does this need to be CYRUSDB_CREATE? */ +- r = DB->open(tmpfile, CYRUSDB_CREATE, &tmp); ++ r = (DB->open)(tmpfile, CYRUSDB_CREATE, &tmp); + if(r) goto done; + +- r = DB->open(tgtfile, CYRUSDB_CREATE, &tgt); ++ r = (DB->open)(tgtfile, CYRUSDB_CREATE, &tgt); + if(r) goto done; + + rock.db = tgt; +@@ -669,8 +669,8 @@ + + done: + +- if(tgt) DB->close(tgt); +- if(tmp) DB->close(tmp); ++ if(tgt) (DB->close)(tgt); ++ if(tmp) (DB->close)(tmp); + + return r; + } +--- cyrus-imapd-2.3.9/imap/fetchnews.c.openmacro 2007-08-14 16:21:29.000000000 +0200 ++++ cyrus-imapd-2.3.9/imap/fetchnews.c 2007-08-14 16:30:14.000000000 +0200 +@@ -94,7 +94,7 @@ + strcat(fname, FNAME_NEWSRCDB); + } + +- r = DB->open(fname, CYRUSDB_CREATE, &newsrc_db); ++ r = (DB->open)(fname, CYRUSDB_CREATE, &newsrc_db); + if (r != 0) + syslog(LOG_ERR, "DBERROR: opening %s: %s", fname, + cyrusdb_strerror(r)); +@@ -112,7 +112,7 @@ + int r = 0; + + if (newsrc_dbopen) { +- r = DB->close(newsrc_db); ++ r = (DB->close)(newsrc_db); + if (r) { + syslog(LOG_ERR, "DBERROR: error closing fetchnews.db: %s", + cyrusdb_strerror(r)); +--- cyrus-imapd-2.3.9/lib/auth_pts.c.openmacro 2007-08-14 16:21:29.000000000 +0200 ++++ cyrus-imapd-2.3.9/lib/auth_pts.c 2007-08-14 16:33:28.000000000 +0200 +@@ -359,7 +359,7 @@ + + strcpy(fnamebuf, config_dir); + strcat(fnamebuf, PTS_DBFIL); +- r = the_ptscache_db->open(fnamebuf, CYRUSDB_CREATE, &ptdb); ++ r = (the_ptscache_db->open)(fnamebuf, CYRUSDB_CREATE, &ptdb); + if (r != 0) { + syslog(LOG_ERR, "DBERROR: opening %s: %s", fnamebuf, + cyrusdb_strerror(ret)); +@@ -501,7 +501,7 @@ + } + + /* close and unlock the database */ +- the_ptscache_db->close(ptdb); ++ (the_ptscache_db->close)(ptdb); + + return rc; + } +--- cyrus-imapd-2.3.9/lib/test/rnddb.c.openmacro 2007-08-14 16:21:29.000000000 +0200 ++++ cyrus-imapd-2.3.9/lib/test/rnddb.c 2007-08-14 16:34:50.000000000 +0200 +@@ -133,7 +133,7 @@ + srand(atoi(argv[2])); + } + +- TRY(DB->open("scratch", &db)); ++ TRY((DB->open)("scratch", &db)); + + if (DB->consistent) { + TRY(DB->consistent(db)); +@@ -291,7 +291,7 @@ + #endif + } + +- TRY(DB->close(db)); ++ TRY((DB->close)(db)); + TRY(DB->done()); + + do_report(); +--- cyrus-imapd-2.3.9/lib/test/cyrusdb.c.openmacro 2007-08-14 16:21:29.000000000 +0200 ++++ cyrus-imapd-2.3.9/lib/test/cyrusdb.c 2007-08-14 16:34:37.000000000 +0200 +@@ -70,15 +70,15 @@ + char *fname = buf + 5; + + if (db) { /* close it */ +- TRY(DB->close(db)); ++ TRY((DB->close)(db)); + } +- TRY(DB->open(fname, 1, &db)); ++ TRY((DB->open)(fname, 1, &db)); + + printf("ok\n"); + } else if (!db) { + TRY(db == NULL); + } else if (!strncasecmp(buf, "close", 5)) { +- TRY(DB->close(db)); ++ TRY((DB->close)(db)); + db = NULL; + printf("ok\n"); + } else if (!strncasecmp(buf, "put ", 4)) { +--- cyrus-imapd-2.3.9/lib/cyrusdb_berkeley.c.openmacro 2007-08-14 16:21:29.000000000 +0200 ++++ cyrus-imapd-2.3.9/lib/cyrusdb_berkeley.c 2007-08-14 16:34:19.000000000 +0200 +@@ -212,7 +212,7 @@ + r = dbenv->set_cachesize(dbenv, 0, opt * 1024, 0); + if (r) { + dbenv->err(dbenv, r, "set_cachesize"); +- dbenv->close(dbenv, 0); ++ (dbenv->close)(dbenv, 0); + syslog(LOG_ERR, "DBERROR: set_cachesize(): %s", db_strerror(r)); + return CYRUSDB_IOERROR; + } +@@ -223,9 +223,9 @@ + flags |= DB_INIT_LOCK | DB_INIT_MPOOL | + DB_INIT_LOG | DB_INIT_TXN; + #if (DB_VERSION_MAJOR > 3) || ((DB_VERSION_MAJOR == 3) && (DB_VERSION_MINOR > 0)) +- r = dbenv->open(dbenv, dbdir, flags, 0644); ++ r = (dbenv->open)(dbenv, dbdir, flags, 0644); + #else +- r = dbenv->open(dbenv, dbdir, NULL, flags, 0644); ++ r = (dbenv->open)(dbenv, dbdir, NULL, flags, 0644); + #endif + if (r) { + if (do_retry && (r == ENOENT)) { +@@ -264,7 +264,7 @@ + + if (--dbinit) return 0; + +- r = dbenv->close(dbenv, 0); ++ r = (dbenv->close)(dbenv, 0); + dbinit = 0; + if (r) { + syslog(LOG_ERR, "DBERROR: error exiting application: %s", +@@ -412,15 +412,15 @@ + if (flags & CYRUSDB_MBOXSORT) db->set_bt_compare(db, mbox_compar); + + #if DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR >= 1 +- r = db->open(db, NULL, fname, NULL, type, dbflags | DB_AUTO_COMMIT, 0664); ++ r = (db->open)(db, NULL, fname, NULL, type, dbflags | DB_AUTO_COMMIT, 0664); + #else +- r = db->open(db, fname, NULL, type, dbflags, 0664); ++ r = (db->open)(db, fname, NULL, type, dbflags, 0664); + #endif + + if (r != 0) { + int level = (flags & CYRUSDB_CREATE) ? LOG_ERR : LOG_DEBUG; + syslog(level, "DBERROR: opening %s: %s", fname, db_strerror(r)); +- r = db->close(db, DB_NOSYNC); ++ r = (db->close)(db, DB_NOSYNC); + if (r != 0) { + syslog(level, "DBERROR: closing %s: %s", fname, db_strerror(r)); + } +@@ -450,7 +450,7 @@ + assert(dbinit && db); + + /* since we're using txns, we can supply DB_NOSYNC */ +- r = a->close(a, DB_NOSYNC); ++ r = (a->close)(a, DB_NOSYNC); + if (r != 0) { + syslog(LOG_ERR, "DBERROR: error closing: %s", db_strerror(r)); + r = CYRUSDB_IOERROR; +--- cyrus-imapd-2.3.9/ptclient/ptloader.c.openmacro 2007-08-14 16:21:29.000000000 +0200 ++++ cyrus-imapd-2.3.9/ptclient/ptloader.c 2007-08-14 16:35:25.000000000 +0200 +@@ -167,7 +167,7 @@ + + strcpy(fnamebuf, config_dir); + strcat(fnamebuf, PTS_DBFIL); +- r = DB->open(fnamebuf, CYRUSDB_CREATE, &ptsdb); ++ r = (DB->open)(fnamebuf, CYRUSDB_CREATE, &ptsdb); + if (r != 0) { + syslog(LOG_ERR, "DBERROR: opening %s: %s", fnamebuf, + cyrusdb_strerror(ret)); +@@ -184,7 +184,7 @@ + { + int r; + +- r = DB->close(ptsdb); ++ r = (DB->close)(ptsdb); + if (r) { + syslog(LOG_ERR, "DBERROR: error closing ptsdb: %s", + cyrusdb_strerror(r)); +--- cyrus-imapd-2.3.9/ptclient/ptdump.c.openmacro 2007-08-14 16:21:29.000000000 +0200 ++++ cyrus-imapd-2.3.9/ptclient/ptdump.c 2007-08-14 16:35:02.000000000 +0200 +@@ -100,7 +100,7 @@ + /* open database */ + strcpy(fnamebuf, config_dir); + strcat(fnamebuf, PTS_DBFIL); +- r = config_ptscache_db->open(fnamebuf, CYRUSDB_CREATE, &ptdb); ++ r = (config_ptscache_db->open)(fnamebuf, CYRUSDB_CREATE, &ptdb); + if(r != CYRUSDB_OK) { + fprintf(stderr,"error opening %s (%s)", fnamebuf, + cyrusdb_strerror(r)); +@@ -110,7 +110,7 @@ + /* iterate through db, wiping expired entries */ + config_ptscache_db->foreach(ptdb, "", 0, NULL, dump_cb, ptdb, NULL); + +- config_ptscache_db->close(ptdb); ++ (config_ptscache_db->close)(ptdb); + + cyrus_done(); + +--- cyrus-imapd-2.3.9/ptclient/ptexpire.c.openmacro 2007-08-14 16:21:29.000000000 +0200 ++++ cyrus-imapd-2.3.9/ptclient/ptexpire.c 2007-08-14 16:35:14.000000000 +0200 +@@ -148,7 +148,7 @@ + /* open database */ + strcpy(fnamebuf, config_dir); + strcat(fnamebuf, PTS_DBFIL); +- r = config_ptscache_db->open(fnamebuf, CYRUSDB_CREATE, &ptdb); ++ r = (config_ptscache_db->open)(fnamebuf, CYRUSDB_CREATE, &ptdb); + if(r != CYRUSDB_OK) { + syslog(LOG_ERR, "error opening %s (%s)", fnamebuf, + cyrusdb_strerror(r)); +@@ -158,7 +158,7 @@ + /* iterate through db, wiping expired entries */ + config_ptscache_db->foreach(ptdb, "", 0, expire_p, expire_cb, ptdb, NULL); + +- config_ptscache_db->close(ptdb); ++ (config_ptscache_db->close)(ptdb); + + cyrus_done(); + diff --git a/cyrus-imapd.spec b/cyrus-imapd.spec index e690d72..3b592a0 100644 --- a/cyrus-imapd.spec +++ b/cyrus-imapd.spec @@ -1,6 +1,7 @@ +%define upstream_ver 2.3.9rc1 Name: cyrus-imapd -Version: 2.3.8 -Release: 3.2%{?dist} +Version: 2.3.9 +Release: 4.rc1%{?dist} # ********************** BUILD TIME OPTIONS START ********************** @@ -96,8 +97,8 @@ URL: http://cyrusimap.web.cmu.edu/ #Packager: Simon Matter #Vendor: Invoca Systems #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 +Source0: ftp://ftp.andrew.cmu.edu/pub/cyrus/%{name}-%{upstream_ver}.tar.gz +#Source1: ftp://ftp.andrew.cmu.edu/pub/cyrus/%{name}-%{upstream_ver}.tar.gz.sig #Source2: http://ftp.gnu.org/gnu/autoconf/autoconf-%{_acversion}.tar.gz Source3: cyrus-deliver-wrapper.c Source4: cyrus-user-procmailrc.template @@ -131,7 +132,8 @@ Source31: cyrus-imapd-README.groupcache 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.8/cyrus-imapd-2.3.8-autocreate-0.10-0.diff +#Patch1: http://email.uoa.gr/download/cyrus/cyrus-imapd-2.3.8/cyrus-imapd-2.3.8-autocreate-0.10-0.diff +Patch1: cyrus-imapd-2.3.9-autocreate-0.10-0.1.diff Patch2: http://email.uoa.gr/download/cyrus/cyrus-imapd-2.3.8/cyrus-imapd-2.3.8-autosieve-0.6.0.diff Patch3: http://email.uoa.gr/download/cyrus/cyrus-imapd-2.3.8/cyrus-imapd-2.3.8-rmquota+deletemailbox-0.2-1.diff Patch4: http://servercc.oakton.edu/~jwade/cyrus/cyrus-imapd-2.1.3/cyrus-imapd-2.1.3-flock.patch @@ -149,13 +151,15 @@ Patch15: cyrus-imapd-2.3.1-make_md5_defaults.patch Patch16: cyrus-imapd-2.3.7-db4.5.patch Patch17: cyrus-imapd-2.3.7-makeinstallfix.patch Patch18: cyrus-imapd-2.3.7-krb4.patch +Patch19: cyrus-imapd-2.3.9-openmacro.patch +Patch20: cyrus-imapd-2.3.8-getgrouplist.patch # Patches >= 100 are / will be fixed in CVS 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}-%{release}-root BuildRequires: autoconf >= 2.59 -BuildRequires: cyrus-sasl-devel >= 2.1.15-1, perl, tcp_wrappers +BuildRequires: cyrus-sasl-devel >= 2.1.15-1, perl, perl-devel, tcp_wrappers BuildRequires: %{_dbver}-devel, openssl-devel, pkgconfig BuildRequires: flex, bison, groff >= 1.15-8, automake BuildRequires: openldap-devel @@ -237,7 +241,7 @@ one running the server. %if %{AUTOCREATE} %patch1 -p1 -b .autocreate %patch2 -p1 -b .autosieve -%patch3 -p1 -b .rmquota +#%patch3 -p1 -b .rmquota %endif %patch4 -p1 -b .flock # superseded by upstream munge8bit support @@ -254,12 +258,14 @@ one running the server. # fixed upstream already #%patch11 -p1 -b .dam_invalid_id %patch12 -p1 -b .notify_sms -%patch13 -p0 -b .allow_auth_plain +#%patch13 -p0 -b .allow_auth_plain %patch14 -p1 -b .authid_normalize %patch15 -p1 -b .make_md5_defaults -%patch16 -p1 -b .db4.5 -%patch17 -p1 -b .makeinstallfix +#%patch16 -p1 -b .db4.5 +#%patch17 -p1 -b .makeinstallfix %patch18 -p1 -b .krb4 +%patch19 -p1 -b .openmacro +%patch20 -p1 -b .getgrouplist # fixed upstream #%patch100 -p1 -b .make_md5 # fixed upstream @@ -810,6 +816,14 @@ fi %{_mandir}/man1/* %changelog +* Tue Aug 14 2007 Tomas Janousek - 2.3.9-4.rc1 +- update to latest upstream beta +- temporarily dropped the rmquota+deletemailbox patch (doesn't apply) +- fixed to compile with newer glibc +- added the getgrouplist patch from RHEL-4 +- dropped the allow_auth_plain patch +- buildrequire perl-devel + * Mon Jul 23 2007 Tomas Janousek - 2.3.8-3.2 - removed the lm_sensors-devel dependency, since it's properly required in net-snmp-devel