Projects
Kolab:3.4
cyrus-imapd
Log In
Username
Password
We truncated the diff of some files because they were too big. If you want to see the full diff for every file,
click here
.
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
Expand all
Collapse all
Changes of Revision 121
View file
cyrus-imapd-2.5.tar.gz/imap/ctl_mboxlist.c
Changed
@@ -920,7 +920,12 @@ // Look up the mailbox db entry r = mboxlist_lookup(name, &mbentry, NULL); - part = xstrdup(mbentry->partition); + + if (!r && mbentry->partition) + part = xstrdup(mbentry->partition); + else + part = NULL; + mboxlist_entry_free(&mbentry); if (r) { @@ -957,8 +962,11 @@ } - free(name); - free(part); + if (name) + free(name); + + if (part) + free(part); return 0; }
View file
cyrus-imapd-2.5.tar.gz/imap/cyr_info.c
Changed
@@ -53,7 +53,6 @@ #include "global.h" #include "exitcodes.h" -#include "libcyr_cfg.h" #include "proc.h" #include "util.h" #include "../master/masterconf.h" @@ -77,10 +76,11 @@ fprintf(stderr, "\n"); fprintf(stderr, "Where command is one of:\n"); fprintf(stderr, "\n"); - fprintf(stderr, " * proc - listing of all open processes\n"); - fprintf(stderr, " * allconf - listing of all config values\n"); - fprintf(stderr, " * conf - listing of non-default config values\n"); - fprintf(stderr, " * lint - unknown config keys\n"); + fprintf(stderr, " * conf-all - listing of all config values\n"); + fprintf(stderr, " * conf - listing of non-default config values\n"); + fprintf(stderr, " * conf-defaults - listing of all default config values\n"); + fprintf(stderr, " * conf-lint - unknown config keys\n"); + fprintf(stderr, " * proc - listing of all open processes\n"); cyrus_done(); exit(-1); } @@ -119,66 +119,71 @@ for (i = 1; i < IMAPOPT_LAST; i++) { switch (imapopts[i].t) { - case OPT_STRING: - case OPT_STRINGLIST: - if (only_changed) { - const char *defvalue = imapopts[i].def.s; - char *freeme = NULL; - - if (defvalue && - !strncasecmp(defvalue, "{configdirectory}", 17)) - { - freeme = strconcat(imapopts[IMAPOPT_CONFIGDIRECTORY].val.s, - defvalue+17, (char *)NULL); - defvalue = freeme; + case OPT_BITFIELD: + if (only_changed) { + if (imapopts[i].def.x == imapopts[i].val.x) break; } - if (!strcmpsafe(defvalue, imapopts[i].val.s)) { - free(freeme); - break; + printf("%s:", imapopts[i].optname); + for (j = 0; imapopts[i].enum_options[j].name; j++) { + if (imapopts[i].val.x & (1<<j)) { + printf(" %s", imapopts[i].enum_options[j].name); + } } - free(freeme); - } - printf("%s: %s\n", imapopts[i].optname, imapopts[i].val.s ? imapopts[i].val.s : ""); - break; - case OPT_INT: - if (only_changed) { - if (imapopts[i].def.i == imapopts[i].val.i) break; - } - printf("%s: %ld\n", imapopts[i].optname, imapopts[i].val.i); - break; - case OPT_SWITCH: - if (only_changed) { - if (imapopts[i].def.b == imapopts[i].val.b) break; - } - printf("%s: %s\n", imapopts[i].optname, imapopts[i].val.b ? "yes" : "no"); - break; - case OPT_ENUM: - if (only_changed) { - if (imapopts[i].def.e == imapopts[i].val.e) break; - } - printf("%s:", imapopts[i].optname); - for (j = 0; imapopts[i].enum_options[j].name; j++) { - if (imapopts[i].val.e == imapopts[i].enum_options[j].val) { - printf(" %s", imapopts[i].enum_options[j].name); - break; + printf("\n"); + break; + + case OPT_ENUM: + if (only_changed) { + if (imapopts[i].def.e == imapopts[i].val.e) break; } - } - printf("\n"); - break; - case OPT_BITFIELD: - if (only_changed) { - if (imapopts[i].def.x == imapopts[i].val.x) break; - } - printf("%s:", imapopts[i].optname); - for (j = 0; imapopts[i].enum_options[j].name; j++) { - if (imapopts[i].val.x & (1<<j)) { - printf(" %s", imapopts[i].enum_options[j].name); + printf("%s:", imapopts[i].optname); + for (j = 0; imapopts[i].enum_options[j].name; j++) { + if (imapopts[i].val.e == imapopts[i].enum_options[j].val) { + printf(" %s", imapopts[i].enum_options[j].name); + break; + } } - } - printf("\n"); - break; - default: - abort(); + printf("\n"); + break; + + case OPT_INT: + if (only_changed) { + if (imapopts[i].def.i == imapopts[i].val.i) break; + } + printf("%s: %ld\n", imapopts[i].optname, imapopts[i].val.i); + break; + + case OPT_STRING: + case OPT_STRINGLIST: + if (only_changed) { + const char *defvalue = imapopts[i].def.s; + char *freeme = NULL; + + if (defvalue && + !strncasecmp(defvalue, "{configdirectory}", 17)) + { + freeme = strconcat(imapopts[IMAPOPT_CONFIGDIRECTORY].val.s, + defvalue+17, (char *)NULL); + defvalue = freeme; + } + if (!strcmpsafe(defvalue, imapopts[i].val.s)) { + free(freeme); + break; + } + free(freeme); + } + printf("%s: %s\n", imapopts[i].optname, imapopts[i].val.s ? imapopts[i].val.s : ""); + break; + + case OPT_SWITCH: + if (only_changed) { + if (imapopts[i].def.b == imapopts[i].val.b) break; + } + printf("%s: %s\n", imapopts[i].optname, imapopts[i].val.b ? "yes" : "no"); + break; + + default: + abort(); } } @@ -186,6 +191,55 @@ config_foreachoverflowstring(print_overflow, NULL); } +static void do_defconf(void) +{ + int i; + unsigned j; + + /* XXX: this is semi-sorted, but the overflow strings aren't sorted at all */ + + for (i = 1; i < IMAPOPT_LAST; i++) { + switch (imapopts[i].t) { + case OPT_BITFIELD: + printf("%s:", imapopts[i].optname); + for (j = 0; imapopts[i].enum_options[j].name; j++) { + if (imapopts[i].def.x & (1<<j)) { + printf(" %s", imapopts[i].enum_options[j].name); + } + } + printf("\n"); + break; + + case OPT_ENUM: + printf("%s:", imapopts[i].optname); + for (j = 0; imapopts[i].enum_options[j].name; j++) { + if (imapopts[i].val.e == imapopts[i].enum_options[j].val) { + printf(" %s", imapopts[i].enum_options[j].name); + break; + } + } + printf("\n"); + break; + + case OPT_INT: + printf("%s: %ld\n", imapopts[i].optname, imapopts[i].def.i); + break; + + case OPT_STRING: + case OPT_STRINGLIST: + printf("%s: %s\n", imapopts[i].optname, imapopts[i].def.s ? imapopts[i].def.s : ""); + break; + + case OPT_SWITCH: + printf("%s: %s\n", imapopts[i].optname, imapopts[i].def.b ? "yes" : "no"); + break; + + default:
View file
cyrus-imapd-2.5.tar.gz/lib/cyrusdb_skiplist.c
Changed
@@ -399,7 +399,7 @@ case ADD: level = LEVEL_safe(db, ptr); if (!level) { - syslog(LOG_ERR, "IOERROR: skiplist RECSIZE not safe %s, offset %u", + syslog(LOG_ERR, "IOERROR: skiplist2 RECSIZE_safe not safe %s, offset %u", db->fname, (unsigned)(ptr - db->map_base)); return 0; } @@ -413,20 +413,50 @@ break; case DELETE: - if (!is_safe(db, ptr+8)) { - syslog(LOG_ERR, "IOERROR: skiplist RECSIZE not safe %s, offset %u", - db->fname, (unsigned)(ptr - db->map_base)); - return 0; - } ret += 8; break; case COMMIT: - if (!is_safe(db, ptr+4)) { - syslog(LOG_ERR, "IOERROR: skiplist RECSIZE not safe %s, offset %u", - db->fname, (unsigned)(ptr - db->map_base)); - return 0; - } + ret += 4; + break; + } + + return ret; +} + +/* how many levels does this record have? */ +static unsigned LEVEL(const char *ptr) +{ + const uint32_t *p, *q; + + assert(TYPE(ptr) == DUMMY || TYPE(ptr) == INORDER || TYPE(ptr) == ADD); + p = q = (uint32_t *) FIRSTPTR(ptr); + while (*p != (uint32_t)-1) p++; + return (p - q); +} + +/* how big is this record? */ +static unsigned RECSIZE(const char *ptr) +{ + int ret = 0; + switch (TYPE(ptr)) { + case DUMMY: + case INORDER: + case ADD: + ret += 4; /* tag */ + ret += 4; /* keylen */ + ret += ROUNDUP(KEYLEN(ptr)); /* key */ + ret += 4; /* datalen */ + ret += ROUNDUP(DATALEN(ptr)); /* data */ + ret += 4 * LEVEL(ptr); /* pointers */ + ret += 4; /* padding */ + break; + + case DELETE: + ret += 8; + break; + + case COMMIT: ret += 4; break; } @@ -494,12 +524,7 @@ } -static unsigned PADDING_safe(struct dbengine *db, const char *ptr) -{ - unsigned size = RECSIZE_safe(db, ptr); - if (!size) return 0; - return ntohl(*((uint32_t *)((ptr) + size - 4))); -} +#define PADDING(ptr) (ntohl(*((uint32_t *)((ptr) + RECSIZE(ptr) - 4)))) /* given an open, mapped db, read in the header information */ static int read_header(struct dbengine *db) @@ -570,9 +595,9 @@ db->fname); r = CYRUSDB_IOERROR; } - if (!r && LEVEL_safe(db, dptr) != db->maxlevel) { + if (!r && LEVEL(dptr) != db->maxlevel) { syslog(LOG_ERR, "DBERROR: %s: DUMMY level(%d) != db->maxlevel(%d)", - db->fname, LEVEL_safe(db, dptr), db->maxlevel); + db->fname, LEVEL(dptr), db->maxlevel); r = CYRUSDB_IOERROR; } @@ -1281,7 +1306,7 @@ return CYRUSDB_EXISTS; } else { /* replace with an equal height node */ - lvl = LEVEL_safe(db, ptr); + lvl = LEVEL(ptr); /* log a removal */ WRITEV_ADD_TO_IOVEC(iov, num_iov, (char *) &delrectype, 4); @@ -1575,8 +1600,8 @@ /* find the last log entry */ for (offset = tid->logstart, ptr = db->map_base + offset; - offset + RECSIZE_safe(db, ptr) != (uint32_t) tid->logend; - offset += RECSIZE_safe(db, ptr), ptr = db->map_base + offset) ; + offset + RECSIZE(ptr) != (uint32_t) tid->logend; + offset += RECSIZE(ptr), ptr = db->map_base + offset) ; offset = ptr - db->map_base; @@ -1613,7 +1638,7 @@ /* re-add this record. it can't exist right now. */ netnewoffset = *((uint32_t *)(ptr + 4)); q = db->map_base + ntohl(netnewoffset); - lvl = LEVEL_safe(db, q); + lvl = LEVEL(q); (void) find_node(db, KEY(q), KEYLEN(q), updateoffsets); for (i = 0; i < lvl; i++) { /* the current pointers FROM this node are correct, @@ -1628,7 +1653,7 @@ } /* remove looking at this */ - tid->logend -= RECSIZE_safe(db, ptr); + tid->logend -= RECSIZE(ptr); } /* truncate the file to remove log entries */ @@ -1742,13 +1767,13 @@ uint32_t netnewoffset; ptr = db->map_base + offset; - lvl = LEVEL_safe(db, ptr); + lvl = LEVEL(ptr); db->listsize++; num_iov = 0; WRITEV_ADD_TO_IOVEC(iov, num_iov, (char *) &iorectype, 4); /* copy all but the rectype from the record */ - WRITEV_ADD_TO_IOVEC(iov, num_iov, (char *) ptr + 4, RECSIZE_safe(db, ptr) - 4); + WRITEV_ADD_TO_IOVEC(iov, num_iov, (char *) ptr + 4, RECSIZE(ptr) - 4); newoffset = lseek(db->fd, 0, SEEK_END); netnewoffset = htonl(newoffset); @@ -1915,9 +1940,9 @@ case INORDER: case ADD: printf("kl=%d dl=%d lvl=%d\n", - KEYLEN(ptr), DATALEN(ptr), LEVEL_safe(db, ptr)); + KEYLEN(ptr), DATALEN(ptr), LEVEL(ptr)); printf("\t"); - for (i = 0; i < LEVEL_safe(db, ptr); i++) { + for (i = 0; i < LEVEL(ptr); i++) { printf("%04X ", FORWARD(ptr, i)); } printf("\n"); @@ -1932,7 +1957,7 @@ break; } - ptr += RECSIZE_safe(db, ptr); + ptr += RECSIZE(ptr); } unlock(db); @@ -1961,7 +1986,7 @@ ptr = db->map_base + offset; - for (i = 0; i < LEVEL_safe(db, ptr); i++) { + for (i = 0; i < LEVEL(ptr); i++) { offset = FORWARD(ptr, i); if (offset > db->map_size) { @@ -2005,11 +2030,9 @@ static int recovery(struct dbengine *db, int flags) { const char *ptr, *keyptr; - unsigned filesize = db->map_size; unsigned updateoffsets[SKIPLIST_MAXLEVEL+1]; uint32_t offset, offsetnet, myoff = 0; - int r = 0; - int need_checkpoint = libcyrus_config_getswitch(CYRUSOPT_SKIPLIST_ALWAYS_CHECKPOINT); + int r = 0, need_checkpoint = 0; time_t start = time(NULL); unsigned i; @@ -2063,11 +2086,11 @@ } /* pointers for db->maxlevel */ - if (!r && LEVEL_safe(db, ptr) != db->maxlevel) { + if (!r && LEVEL(ptr) != db->maxlevel) { r = CYRUSDB_IOERROR;
View file
cyrus-imapd-2.5.tar.gz/lib/imapoptions
Changed
@@ -169,7 +169,7 @@ affect LMTP delivery of messages directly to mailboxes via plus-addressing. */ -{ "annotation_db", "twoskip", STRINGLIST("berkeley", "berkeley-hash", "skiplist", "twoskip")} +{ "annotation_db", "skiplist", STRINGLIST("berkeley", "berkeley-hash", "skiplist", "twoskip")} /* The cyrusdb backend to use for mailbox annotations. */ { "annotation_db_path", NULL, STRING } @@ -508,7 +508,7 @@ specifies the actual key used for iSchedule DKIM signing within the domain. */ -{ "duplicate_db", "twoskip", STRINGLIST("berkeley", "berkeley-nosync", "berkeley-hash", "berkeley-hash-nosync", "skiplist", "sql", "twoskip")} +{ "duplicate_db", "skiplist", STRINGLIST("berkeley", "berkeley-nosync", "berkeley-hash", "berkeley-hash-nosync", "skiplist", "sql", "twoskip")} /* The cyrusdb backend to use for the duplicate delivery suppression and sieve. */ @@ -1013,10 +1013,10 @@ { "maxword", 131072, INT } /* Maximum size of a single word for the parser. Default 128k */ -{ "mboxkey_db", "twoskip", STRINGLIST("berkeley", "skiplist", "twoskip") } +{ "mboxkey_db", "skiplist", STRINGLIST("berkeley", "skiplist", "twoskip") } /* The cyrusdb backend to use for mailbox keys. */ -{ "mboxlist_db", "twoskip", STRINGLIST("flat", "berkeley", "berkeley-hash", "skiplist", "sql", "twoskip")} +{ "mboxlist_db", "skiplist", STRINGLIST("flat", "berkeley", "berkeley-hash", "skiplist", "sql", "twoskip")} /* The cyrusdb backend to use for the mailbox list. */ { "mboxlist_db_path", NULL, STRING } @@ -1376,7 +1376,7 @@ /* Unix domain socket that ptloader listens on. (defaults to configdir/ptclient/ptsock) */ -{ "ptscache_db", "twoskip", STRINGLIST("berkeley", "berkeley-hash", "skiplist", "twoskip")} +{ "ptscache_db", "skiplist", STRINGLIST("berkeley", "berkeley-hash", "skiplist", "twoskip")} /* The cyrusdb backend to use for the pts cache. */ { "ptscache_db_path", NULL, STRING } @@ -1401,7 +1401,7 @@ /* This specifies the Class Selector or Differentiated Services Code Point designation on IP headers (in the ToS field). */ -{ "quota_db", "twoskip", STRINGLIST("flat", "berkeley", "berkeley-hash", "skiplist", "sql", "quotalegacy", "twoskip")} +{ "quota_db", "skiplist", STRINGLIST("flat", "berkeley", "berkeley-hash", "skiplist", "sql", "quotalegacy", "twoskip")} /* The cyrusdb backend to use for quotas. */ { "quota_db_path", NULL, STRING } @@ -1521,7 +1521,7 @@ recommended for most cases - it's a good compromise which keeps words separate. */ -{ "seenstate_db", "twoskip", STRINGLIST("flat", "berkeley", "berkeley-hash", "skiplist", "twoskip")} +{ "seenstate_db", "skiplist", STRINGLIST("flat", "berkeley", "berkeley-hash", "skiplist", "twoskip")} /* The cyrusdb backend to use for the seen state. */ { "sendmail", "/usr/lib/sendmail", STRING } @@ -1715,7 +1715,7 @@ { "statuscache", 0, SWITCH } /* Enable/disable the imap status cache. */ -{ "statuscache_db", "twoskip", STRINGLIST("berkeley", "berkeley-nosync", "berkeley-hash", "berkeley-hash-nosync", "skiplist", "sql", "twoskip") } +{ "statuscache_db", "skiplist", STRINGLIST("berkeley", "berkeley-nosync", "berkeley-hash", "berkeley-hash-nosync", "skiplist", "sql", "twoskip") } /* The cyrusdb backend to use for the imap status cache. */ { "statuscache_db_path", NULL, STRING } @@ -1880,7 +1880,7 @@ /* File containing the private key belonging to the certificate in tls_server_cert. */ -{ "tls_sessions_db", "twoskip", STRINGLIST("berkeley", "berkeley-nosync", "berkeley-hash", "berkeley-hash-nosync", "skiplist", "sql", "twoskip")} +{ "tls_sessions_db", "skiplist", STRINGLIST("berkeley", "berkeley-nosync", "berkeley-hash", "berkeley-hash-nosync", "skiplist", "sql", "twoskip")} /* The cyrusdb backend to use for the TLS cache. */ { "tls_sessions_db_path", NULL, STRING } @@ -1944,7 +1944,7 @@ this user. NOTE: This must be an existing local user name with an INBOX, NOT an email address! */ -{ "zoneinfo_db", "twoskip", STRINGLIST("flat", "berkeley", "berkeley-hash", "skiplist", "twoskip")} +{ "zoneinfo_db", "skiplist", STRINGLIST("flat", "berkeley", "berkeley-hash", "skiplist", "twoskip")} /* The cyrusdb backend to use for zoneinfo. */ { "zoneinfo_db_path", NULL, STRING }
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.