diff -Naur cyrus-imapd-2.4.10.orig/imap/userdeny_db.c cyrus-imapd-2.4.10/imap/userdeny_db.c --- cyrus-imapd-2.4.10.orig/imap/userdeny_db.c 2011-07-04 17:05:01.000000000 +0200 +++ cyrus-imapd-2.4.10/imap/userdeny_db.c 2011-08-04 08:23:46.000000000 +0200 @@ -52,6 +52,8 @@ #include #include #include +#include +#include #include "cyrusdb.h" #include "global.h" @@ -81,7 +83,9 @@ if (!deny_dbopen) return 0; /* fetch entry for user */ +/* syslog(LOG_DEBUG, "fetching user_deny.db entry for '%s'", user); +*/ do { r = DENYDB->fetch(denydb, user, strlen(user), &data, &datalen, NULL); } while (r == CYRUSDB_AGAIN); @@ -175,6 +179,7 @@ { int ret; char *tofree = NULL; + struct stat sbuf; if (!fname) fname = config_getstring(IMAPOPT_USERDENY_DB_PATH); @@ -185,7 +190,11 @@ fname = tofree; } - ret = (DENYDB->open)(fname, 0, &denydb); + if (stat(fname, &sbuf) == -1 && errno == ENOENT) { + ret = CYRUSDB_IOERROR; + } else { + ret = (DENYDB->open)(fname, 0, &denydb); + } if (ret == CYRUSDB_OK) { deny_dbopen = 1; } else if (errno != ENOENT) {