Overview
Request 2586 (accepted)
Check in 2.5.13.30
- Created by vanmeeuwen over 5 years ago
- In state accepted
cyrus-imapd.spec
Changed
x
1
2
%global _cyrusgroup mail
3
%global _cyrexecdir %{_exec_prefix}/lib/%{name}
4
5
-%global tag_version 2.5.12.25
6
+%global tag_version 2.5.13.30
7
##%global revision 41
8
##%global git_hash gd53406f3f
9
10
11
##
12
## Patches
13
##
14
-Patch0001: 0001-dlist-Use-int8_t-in-dlist_parsemap.patch
15
-Patch0002: 0002-Avoid-returning-1-as-255.patch
16
+Patch0003: 0003-Canonification-for-multiple-domains.patch
17
18
BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
19
20
21
sed -r -i -e 's/"berkeley(|-[a-z-]+)", //g' lib/imapoptions
22
%endif
23
24
-%if %{_arch} == "ppc64le"
25
-%patch0001 -p1
26
-%patch0002 -p1
27
+%if 0%{?kolab_enterprise} < 1
28
+%patch0003 -p1
29
%endif
30
31
# only to update config.* files
32
33
%{_libdir}/*.la
34
35
%changelog
36
+* Mon Aug 19 2019 Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen@kolabsys.com> - 2.5.12.30-1
37
+- Rebase on to upstream 2.5.13
38
+
39
+* Tue Mar 12 2019 Timotheus Pokorra <tp@tbits.net> - 2.5.12.25-2
40
+- Backport patch from upstream for canonification for multiple domains
41
+
42
* Wed Jan 2 2019 Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen@kolabsys.com> - 2.5.12.25-1
43
- Rebase on to upstream 2.5.12
44
45
0001-dlist-Use-int8_t-in-dlist_parsemap.patch
Deleted
37
1
2
-From 18077fc3c77ab9d62e8691d853e5516a7a765281 Mon Sep 17 00:00:00 2001
3
-From: "Jeroen van Meeuwen (Kolab Systems)" <vanmeeuwen@kolabsys.com>
4
-Date: Fri, 25 Aug 2017 15:17:27 +0200
5
-Subject: [PATCH 1/2] [dlist]: Use int8_t in dlist_parsemap()
6
-
7
-Resolves #2119
8
----
9
- imap/dlist.c | 4 ++--
10
- 1 file changed, 2 insertions(+), 2 deletions(-)
11
-
12
-diff --git a/imap/dlist.c b/imap/dlist.c
13
-index c93b85c..83ae73d 100644
14
---- a/imap/dlist.c
15
-+++ b/imap/dlist.c
16
-@@ -843,7 +843,7 @@ EXPORTED char dlist_parse(struct dlist **dlp, int parsekey, struct protstream *i
17
- struct dlist *dl = NULL;
18
- static struct buf kbuf;
19
- static struct buf vbuf;
20
-- int c;
21
-+ int8_t c;
22
-
23
- /* handle the key if wanted */
24
- if (parsekey) {
25
-@@ -957,7 +957,7 @@ EXPORTED int dlist_parsemap(struct dlist **dlp, int parsekey,
26
- const char *base, unsigned len)
27
- {
28
- struct protstream *stream;
29
-- char c;
30
-+ int8_t c;
31
- struct dlist *dl = NULL;
32
-
33
- stream = prot_readmap(base, len);
34
---
35
-1.8.3.1
36
-
37
0002-Avoid-returning-1-as-255.patch
Deleted
37
1
2
-From 11ca677bada174536fa1f7074892b1aa0f04091a Mon Sep 17 00:00:00 2001
3
-From: "Jeroen van Meeuwen (Kolab Systems)" <vanmeeuwen@kolabsys.com>
4
-Date: Fri, 25 Aug 2017 15:43:35 +0200
5
-Subject: [PATCH 2/2] Avoid returning -1 as 255
6
-
7
-Resolves #2122
8
----
9
- cunit/parse.testc | 4 ++--
10
- 1 file changed, 2 insertions(+), 2 deletions(-)
11
-
12
-diff --git a/cunit/parse.testc b/cunit/parse.testc
13
-index 281b249..dcaf920 100644
14
---- a/cunit/parse.testc
15
-+++ b/cunit/parse.testc
16
-@@ -23,7 +23,7 @@ int wrap_getint32(const char *s, int32_t *valp)
17
- {
18
- struct protstream *prot;
19
- char *b;
20
-- int c;
21
-+ int8_t c;
22
-
23
- b = xstrdup(s); /* work around bug in prot_ungetc */
24
- prot = prot_readmap(b, strlen(b));
25
-@@ -101,7 +101,7 @@ int wrap_getsint32(const char *s, int32_t *valp)
26
- {
27
- struct protstream *prot;
28
- char *b;
29
-- int c;
30
-+ int8_t c;
31
-
32
- b = xstrdup(s); /* work around bug in prot_ungetc */
33
- prot = prot_readmap(b, strlen(b));
34
---
35
-1.8.3.1
36
-
37
0003-Canonification-for-multiple-domains.patch
Added
64
1
2
+--- a/ptclient/ldap.c 2019-01-02 14:44:17.000000000 +0100
3
++++ b/ptclient/ldap.c 2019-03-12 22:13:34.207770974 +0100
4
+@@ -933,7 +933,58 @@
5
+ if (rc != PTSM_OK)
6
+ return rc;
7
+
8
+- if (ptsm->domain_base_dn && (strrchr(canon_id, '@') != NULL)) {
9
++ if (ptsm->domain_base_dn && ptsm->domain_base_dn[0] != '\0' && (strrchr(canon_id, '@') == NULL)) {
10
++ syslog(LOG_DEBUG, "collecting all domains from %s", ptsm->domain_base_dn);
11
++
12
++ snprintf(domain_filter, sizeof(domain_filter), ptsm->domain_filter, "*");
13
++
14
++ syslog(LOG_DEBUG, "Domain filter: %s", domain_filter);
15
++
16
++ rc = ldap_search_st(ptsm->ld, ptsm->domain_base_dn, ptsm->domain_scope, domain_filter, domain_attrs, 0, &(ptsm->timeout), &res);
17
++
18
++ if (rc != LDAP_SUCCESS) {
19
++ if (rc == LDAP_SERVER_DOWN) {
20
++ syslog(LOG_ERR, "LDAP not available: %s", ldap_err2string(rc));
21
++ ldap_unbind(ptsm->ld);
22
++ ptsm->ld = NULL;
23
++ return PTSM_RETRY;
24
++ }
25
++
26
++ syslog(LOG_ERR, "LDAP search for domain failed: %s", ldap_err2string(rc));
27
++ return PTSM_FAIL;
28
++ }
29
++ if (ldap_count_entries(ptsm->ld, res) < 1) {
30
++ syslog(LOG_ERR, "No domain found");
31
++ return PTSM_FAIL;
32
++ } else if (ldap_count_entries(ptsm->ld, res) >= 1) {
33
++ int count_matches = 0;
34
++ char *temp_base = NULL;
35
++ LDAPMessage *res2;
36
++ for (entry = ldap_first_entry(ptsm->ld, res); entry != NULL; entry = ldap_next_entry(ptsm->ld, entry)) {
37
++ if ((vals = ldap_get_values(ptsm->ld, entry, ptsm->domain_name_attribute)) != NULL) {
38
++ syslog(LOG_DEBUG, "we have a domain %s", vals[0]);
39
++ ptsmodule_standard_root_dn(vals[0], (const char **) &temp_base);
40
++ rc = ldap_search_st(ptsm->ld, temp_base, ptsm->scope, filter, attrs, 0, &(ptsm->timeout), &res2);
41
++ if (rc == LDAP_SUCCESS && ldap_count_entries(ptsm->ld, res2) == 1) {
42
++ syslog(LOG_DEBUG, "Found %s in %s", canon_id, temp_base);
43
++ base = temp_base;
44
++ count_matches++;
45
++ }
46
++ }
47
++ }
48
++
49
++ if (count_matches > 1) {
50
++ syslog(LOG_ERR, "LDAP search for %s failed because it matches multiple accounts.", canon_id);
51
++ return PTSM_FAIL;
52
++ } else if (count_matches == 0) {
53
++ syslog(LOG_ERR, "LDAP search for %s failed because it does not match any account in all domains.", canon_id);
54
++ return PTSM_FAIL;
55
++ }
56
++
57
++ syslog(LOG_DEBUG, "we have found %s in %s", canon_id, base);
58
++ }
59
++ }
60
++ else if (ptsm->domain_base_dn && ptsm->domain_base_dn[0] != '\0' && (strrchr(canon_id, '@') != NULL)) {
61
+ syslog(LOG_DEBUG, "Attempting to get domain for %s from %s", canon_id, ptsm->domain_base_dn);
62
+
63
+ /* Get the base dn to search from domain_base_dn searched on domain_scope with
64
cyrus-imapd-2.5.12.25.tar.gz/README -> cyrus-imapd-2.5.13.30.tar.gz/README
Changed
10
1
2
and if upgrading look at doc/install-upgrade.html as well.
3
4
* To obtain updates to this software, visit the web page
5
- http://www.cyrusimap.org/
6
- or ftp directly from
7
- ftp://ftp.cyrusimap.org/cyrus-imapd/
8
-
9
+ https://www.cyrusimap.org/
10
cyrus-imapd-2.5.12.25.tar.gz/cunit/parse.testc -> cyrus-imapd-2.5.13.30.tar.gz/cunit/parse.testc
Changed
19
1
2
{
3
struct protstream *prot;
4
char *b;
5
- int c;
6
+ int8_t c;
7
8
b = xstrdup(s); /* work around bug in prot_ungetc */
9
prot = prot_readmap(b, strlen(b));
10
11
{
12
struct protstream *prot;
13
char *b;
14
- int c;
15
+ int8_t c;
16
17
b = xstrdup(s); /* work around bug in prot_ungetc */
18
prot = prot_readmap(b, strlen(b));
19
cyrus-imapd-2.5.12.25.tar.gz/cunit/quota.testc -> cyrus-imapd-2.5.13.30.tar.gz/cunit/quota.testc
Changed
41
1
2
quota_diff[QUOTA_STORAGE] = 10*1024;
3
quota_diff[QUOTA_MESSAGE] = 2;
4
quota_diff[QUOTA_ANNOTSTORAGE] = 1*1024;
5
- r = quota_update_useds(NULL, quota_diff, 0);
6
+ r = quota_update_useds(NULL, quota_diff, NULL);
7
CU_ASSERT_EQUAL(r, IMAP_QUOTAROOT_NONEXISTENT);
8
9
- r = quota_update_useds("", quota_diff, 0);
10
+ r = quota_update_useds("", quota_diff, NULL);
11
CU_ASSERT_EQUAL(r, IMAP_QUOTAROOT_NONEXISTENT);
12
13
- r = quota_update_useds(QUOTAROOT_NONEXISTANT, quota_diff, 0);
14
+ r = quota_update_useds(QUOTAROOT_NONEXISTANT, quota_diff, NULL);
15
CU_ASSERT_EQUAL(r, IMAP_QUOTAROOT_NONEXISTENT);
16
17
/* set limits */
18
19
#define TESTCASE(d0, d1, d2, e0, e1, e2) { \
20
static const quota_t diff[QUOTA_NUMRESOURCES] = { d0, d1, d2 }; \
21
static const quota_t expused[QUOTA_NUMRESOURCES] = { e0, e1, e2 }; \
22
- r = quota_update_useds(QUOTAROOT, diff, 0); \
23
+ r = quota_update_useds(QUOTAROOT, diff, NULL); \
24
CU_ASSERT_EQUAL(r, 0); \
25
memset(&q2, 0, sizeof(q2)); \
26
q2.root = QUOTAROOT; \
27
28
TESTCASE(-50*1024, -10, -5*1024,
29
0, 0, 0);
30
31
+ /* XXX we call quota_update_useds() with a NULL mailbox, which
32
+ * XXX will crash in some circumstances (see comment inline), but
33
+ * XXX our tests don't crash... which means we're missing tests
34
+ * XXX for the codepath that depends on mboxname!
35
+ * XXX https://github.com/cyrusimap/cyrus-imapd/issues/2808
36
+ */
37
+
38
#undef TESTCASE
39
}
40
41
cyrus-imapd-2.5.12.25.tar.gz/docsrc/conf.py -> cyrus-imapd-2.5.13.30.tar.gz/docsrc/conf.py
Changed
46
1
2
# built documents.
3
#
4
# The short X.Y version.
5
-version = '2.5.12'
6
+version = '2.5.13'
7
# The full version, including alpha/beta/rc tags.
8
-release = '2.5.12'
9
+release = '2.5.13'
10
11
# The language for content autogenerated by Sphinx. Refer to documentation
12
# for a list of supported languages.
13
14
#epub_use_index = True
15
16
rst_prolog = """
17
-.. |imap_last_stable_version| replace:: 2.5.12
18
+.. |imap_last_stable_version| replace:: 2.5.13
19
.. |imap_last_stable_branch| replace:: `cyrus-imapd-2.5`
20
-.. |imap_last_stable_next_version| replace:: 2.5.12 + patches
21
-.. |imap_current_stable_version| replace:: 3.0.8
22
-.. |imap_current_stable_next_version| replace:: 3.0.8 + patches
23
+.. |imap_last_stable_next_version| replace:: 2.5.13 + patches
24
+.. |imap_current_stable_version| replace:: 3.0.11
25
+.. |imap_current_stable_next_version| replace:: 3.0.11 + patches
26
.. |imap_current_stable_branch| replace:: `cyrus-imapd-3.0`
27
-.. |imap_latest_development_version| replace:: 3.1.5
28
+.. |imap_latest_development_version| replace:: 3.1.7
29
.. |imap_latest_development_branch| replace:: master
30
.. |imap_tikanga_stock_version| replace:: 2.3.7
31
.. |imap_santiago_stock_version| replace:: 2.3.16
32
33
.. |sasl_current_stable_version| replace:: 2.1.27
34
.. |imap_stable_release_notes| raw:: html
35
36
- <a href="3.0/x/3.0.0.html">3.0.0</a>
37
+ <a href="3.0/x/3.0.11.html">3.0.11</a>
38
39
.. |imap_development_release_notes| raw:: html
40
41
- <a href="3.1/x/3.1.0.html">3.1.0</a>
42
+ <a href="3.1/x/3.1.7.html">3.1.7</a>
43
44
"""
45
46
cyrus-imapd-2.5.13.30.tar.gz/docsrc/imap/release-notes/2.5/x/2.5.13.rst
Added
41
1
2
+:tocdepth: 3
3
+
4
+===============================
5
+Cyrus IMAP 2.5.13 Release Notes
6
+===============================
7
+
8
+.. IMPORTANT::
9
+
10
+ This is a bug-fix release in the `stable 2.5 series <http://www.cyrusimap.org/stable>`_.
11
+
12
+ Refer to the Cyrus IMAP 2.5.0 Release Notes for important information
13
+ about the 2.5 series, including upgrading instructions.
14
+
15
+Download via HTTPS:
16
+
17
+ * https://github.com/cyrusimap/cyrus-imapd/releases/download/cyrus-imapd-2.5.13/cyrus-imapd-2.5.13.tar.gz
18
+ * https://github.com/cyrusimap/cyrus-imapd/releases/download/cyrus-imapd-2.5.13/cyrus-imapd-2.5.13.tar.gz.sig
19
+
20
+.. _relnotes-2.5.13-changes:
21
+
22
+Changes Since 2.5.12
23
+====================
24
+
25
+Release changes
26
+---------------
27
+
28
+We’re trialing using the Github Releases feature. If you have trouble
29
+downloading this release, please report this to the mailing lists. Thanks!
30
+
31
+Security fixes
32
+--------------
33
+
34
+* Fixed CVE-2019-11356: buffer overrun in httpd
35
+
36
+Bug fixes
37
+---------
38
+
39
+* Fixed: ptloader, ptexpire and ptdump now honour the ``ptscache_db_path``
40
+ setting
41
cyrus-imapd-2.5.12.25.tar.gz/imap/cyr_virusscan.c -> cyrus-imapd-2.5.13.30.tar.gz/imap/cyr_virusscan.c
Changed
19
1
2
int r;
3
4
/* scan file */
5
+#ifdef CL_SCAN_STDOPT
6
r = cl_scanfile(fname, virname, NULL, st->av_engine,
7
CL_SCAN_STDOPT);
8
+#else
9
+ static struct cl_scan_options options;
10
+
11
+ memset(&options, 0, sizeof(struct cl_scan_options));
12
+ options.parse |= ~0; /* enable all parsers */
13
+
14
+ r = cl_scanfile(fname, virname, NULL, st->av_engine, &options);
15
+#endif
16
17
switch (r) {
18
case CL_CLEAN:
19
cyrus-imapd-2.5.12.25.tar.gz/imap/dlist.c -> cyrus-imapd-2.5.13.30.tar.gz/imap/dlist.c
Changed
19
1
2
struct dlist *dl = NULL;
3
static struct buf kbuf;
4
static struct buf vbuf;
5
- int c;
6
+ int8_t c;
7
8
/* handle the key if wanted */
9
if (parsekey) {
10
11
const char *base, unsigned len)
12
{
13
struct protstream *stream;
14
- char c;
15
+ int8_t c;
16
struct dlist *dl = NULL;
17
18
stream = prot_readmap(base, len);
19
cyrus-imapd-2.5.12.25.tar.gz/imap/http_caldav.c -> cyrus-imapd-2.5.13.30.tar.gz/imap/http_caldav.c
Changed
10
1
2
/* Check if this is an empty property error */
3
char propname[256];
4
if (sscanf(errstr,
5
- "No value for %s property", propname) == 1) {
6
+ "No value for %255s property", propname) == 1) {
7
/* Empty LOCATION is OK */
8
if (!strcasecmp(propname, "LOCATION")) continue;
9
if (!strcasecmp(propname, "COMMENT")) continue;
10
cyrus-imapd-2.5.12.25.tar.gz/imap/httpd.c -> cyrus-imapd-2.5.13.30.tar.gz/imap/httpd.c
Changed
10
1
2
memset(&tm, 0, sizeof(struct tm));
3
tm.tm_isdst = -1;
4
sscanf(time, "%02d:%02d:%02d", &tm.tm_hour, &tm.tm_min, &tm.tm_sec);
5
- sscanf(date, "%s %2d %4d", month, &tm.tm_mday, &tm.tm_year);
6
+ sscanf(date, "%3s %2d %4d", month, &tm.tm_mday, &tm.tm_year);
7
tm.tm_year -= 1900;
8
for (tm.tm_mon = 0; tm.tm_mon < 12; tm.tm_mon++) {
9
if (!strcmp(month, monthname[tm.tm_mon])) break;
10
cyrus-imapd-2.5.12.25.tar.gz/imap/imapd.c -> cyrus-imapd-2.5.13.30.tar.gz/imap/imapd.c
Changed
14
1
2
/* special case: query top-level hierarchy separator */
3
prot_printf(imapd_out, "* XLIST (\\Noselect) \"%c\" \"\"\r\n",
4
imapd_namespace.hier_sep);
5
- /*
6
} else if (((listargs->sel & LIST_SEL_SUBSCRIBED) ||
7
(listargs->ret & LIST_RET_SUBSCRIBED)) &&
8
(backend_inbox || (backend_inbox = proxy_findinboxserver(imapd_userid)))) {
9
- */
10
- } else if (backend_inbox || (backend_inbox = proxy_findinboxserver(imapd_userid))) {
11
/* remote inbox */
12
13
/* XXX If we are in a standard Murder, and are given
14
cyrus-imapd-2.5.12.25.tar.gz/imap/mbdump.c -> cyrus-imapd-2.5.13.30.tar.gz/imap/mbdump.c
Changed
10
1
2
}
3
4
if (changed) {
5
- r = quota_update_useds(mailbox->quotaroot, quota_usage, 0);
6
+ r = quota_update_useds(mailbox->quotaroot, quota_usage, NULL);
7
}
8
}
9
10
cyrus-imapd-2.5.12.25.tar.gz/imap/quota_db.c -> cyrus-imapd-2.5.13.30.tar.gz/imap/quota_db.c
Changed
12
1
2
int res;
3
int cmp = 1;
4
if (q.scanmbox) {
5
+ /* XXX this will crash if mboxname was null...
6
+ * https://github.com/cyrusimap/cyrus-imapd/issues/2808
7
+ */
8
+
9
cmp = cyrusdb_compar(qdb, mboxname, strlen(mboxname),
10
q.scanmbox, strlen(q.scanmbox));
11
}
12
cyrus-imapd-2.5.12.25.tar.gz/ptclient/ptdump.c -> cyrus-imapd-2.5.13.30.tar.gz/ptclient/ptdump.c
Changed
43
1
2
int main(int argc, char *argv[])
3
{
4
struct db *ptdb;
5
- char fnamebuf[1024];
6
extern char *optarg;
7
int opt;
8
int r;
9
- char *alt_config = NULL;
10
+ const char *fname;
11
+ char *alt_config = NULL, *tofree = NULL;
12
13
while ((opt = getopt(argc, argv, "C:")) != EOF) {
14
switch (opt) {
15
16
cyrus_init(alt_config, "ptdump", 0, 0);
17
18
/* open database */
19
- strcpy(fnamebuf, config_dir);
20
- strcat(fnamebuf, PTS_DBFIL);
21
- r = cyrusdb_open(config_ptscache_db, fnamebuf, CYRUSDB_CREATE, &ptdb);
22
+ fname = config_getstring(IMAPOPT_PTSCACHE_DB_PATH);
23
+ if (!fname) {
24
+ tofree = strconcat(config_dir, PTS_DBFIL, NULL);
25
+ fname = tofree;
26
+ }
27
+
28
+ r = cyrusdb_open(config_ptscache_db, fname, CYRUSDB_CREATE, &ptdb);
29
if(r != CYRUSDB_OK) {
30
- fprintf(stderr,"error opening %s (%s)", fnamebuf,
31
- cyrusdb_strerror(r));
32
- exit(1);
33
+ fprintf(stderr,"error opening %s (%s)", fname,
34
+ cyrusdb_strerror(r));
35
+ exit(1);
36
}
37
38
+ if (tofree) free(tofree);
39
+
40
/* iterate through db, wiping expired entries */
41
cyrusdb_foreach(ptdb, "", 0, NULL, dump_cb, ptdb, NULL);
42
43
cyrus-imapd-2.5.12.25.tar.gz/ptclient/ptexpire.c -> cyrus-imapd-2.5.13.30.tar.gz/ptclient/ptexpire.c
Changed
41
1
2
int main(int argc, char *argv[])
3
{
4
struct db *ptdb;
5
- char fnamebuf[1024];
6
extern char *optarg;
7
int opt;
8
int r;
9
- char *alt_config = NULL;
10
+ const char *fname;
11
+ char *alt_config = NULL, *tofree = NULL;
12
13
if ((geteuid()) == 0 && (become_cyrus(/*is_master*/0) != 0)) {
14
fatal("must run as the Cyrus user", EC_USAGE);
15
16
syslog(LOG_DEBUG, "%s", "ptexpire.c,v " _CYRUS_VERSION " " CYRUS_GITVERSION);
17
18
/* open database */
19
- strcpy(fnamebuf, config_dir);
20
- strcat(fnamebuf, PTS_DBFIL);
21
- r = cyrusdb_open(config_ptscache_db, fnamebuf, CYRUSDB_CREATE, &ptdb);
22
+ fname = config_getstring(IMAPOPT_PTSCACHE_DB_PATH);
23
+ if (!fname) {
24
+ tofree = strconcat(config_dir, PTS_DBFIL, NULL);
25
+ fname = tofree;
26
+ }
27
+
28
+ r = cyrusdb_open(config_ptscache_db, fname, CYRUSDB_CREATE, &ptdb);
29
if(r != CYRUSDB_OK) {
30
- syslog(LOG_ERR, "error opening %s (%s)", fnamebuf,
31
+ syslog(LOG_ERR, "error opening %s (%s)", fname,
32
cyrusdb_strerror(r));
33
exit(1);
34
}
35
36
+ if (tofree) free(tofree);
37
+
38
/* iterate through db, wiping expired entries */
39
cyrusdb_foreach(ptdb, "", 0, expire_p, expire_cb, ptdb, NULL);
40
41
cyrus-imapd-2.5.12.25.tar.gz/ptclient/ptloader.c -> cyrus-imapd-2.5.13.30.tar.gz/ptclient/ptloader.c
Changed
48
1
2
/* config.c info (libimap) */
3
const int config_need_data = 0;
4
5
-/* Globals */
6
-#define DB (config_ptscache_db)
7
-
8
static char ptclient_debug = 0;
9
struct db *ptsdb = NULL;
10
11
12
{
13
int r;
14
int opt;
15
- char fnamebuf[1024];
16
extern char *optarg;
17
+ const char *fname;
18
+ char *tofree = NULL;
19
20
if (geteuid() == 0) fatal("must run as the Cyrus user", EC_USAGE);
21
setproctitle_init(argc, argv, envp);
22
23
}
24
}
25
26
- strcpy(fnamebuf, config_dir);
27
- strcat(fnamebuf, PTS_DBFIL);
28
- r = cyrusdb_open(DB, fnamebuf, CYRUSDB_CREATE, &ptsdb);
29
+ fname = config_getstring(IMAPOPT_PTSCACHE_DB_PATH);
30
+ if (!fname) {
31
+ tofree = strconcat(config_dir, PTS_DBFIL, NULL);
32
+ fname = tofree;
33
+ }
34
+
35
+ r = cyrusdb_open(config_ptscache_db, fname, CYRUSDB_CREATE, &ptsdb);
36
if (r != 0) {
37
- syslog(LOG_ERR, "DBERROR: opening %s: %s", fnamebuf,
38
+ syslog(LOG_ERR, "DBERROR: opening %s: %s", fname,
39
cyrusdb_strerror(ret));
40
fatal("can't read pts database", EC_TEMPFAIL);
41
}
42
43
+ if (tofree) free(tofree);
44
+
45
ptsmodule_init();
46
47
return 0;
48
cyrus-imapd.dsc
Changed
20
1
2
Source: cyrus-imapd
3
Binary: cyrus-imapd
4
Architecture: any
5
-Version: 2.5.12.25-0~kolab1
6
+Version: 2.5.12.30-0~kolab1
7
Maintainer: Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen@kolabsys.com>
8
-Uploaders: Paul Klos <kolab@klos2day.nl>
9
+Uploaders: Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen@kolabsys.com>
10
Homepage: http://www.cyrusimap.org/
11
Standards-Version: 3.9.1
12
Vcs-Browser: http://git.kolabsys.com/apt/cyrus-imapd/
13
14
Package-List:
15
cyrus-imapd deb mail extra
16
Files:
17
- 00000000000000000000000000000000 0 cyrus-imapd-2.5.12.25.tar.gz
18
+ 00000000000000000000000000000000 0 cyrus-imapd-2.5.13.30.tar.gz
19
00000000000000000000000000000000 0 debian.tar.gz
20
debian.changelog
Changed
11
1
2
+cyrus-imapd (2.5.13.30-0~kolab1) unstable; urgency=low
3
+
4
+ * Rebase on to upstream 2.5.13
5
+
6
+ -- Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen@kolabsys.com> Mon, 19 Aug 2019 11:30:13 +0100
7
+
8
cyrus-imapd (2.5.12.25-0~kolab1) unstable; urgency=low
9
10
* Rebase on to upstream 2.5.12
11
Refresh
cyrus-imapd
x86_64
x86_64
x86_64
x86_64
x86_64
Refresh
Login required, please
login
in order to comment
Request History
vanmeeuwen created request over 5 years ago
Check in 2.5.13.30
vanmeeuwen accepted review over 5 years ago
Accept
vanmeeuwen accepted review over 5 years ago
Accept
vanmeeuwen approved review over 5 years ago
Accept
vanmeeuwen accepted request over 5 years ago
Accept