ad76e47
diff -up cyrus-imapd-2.3.16/imap/global.c.nodenny cyrus-imapd-2.3.16/imap/global.c
ad76e47
--- cyrus-imapd-2.3.16/imap/global.c.nodenny	2009-10-13 17:10:36.000000000 +0200
ad76e47
+++ cyrus-imapd-2.3.16/imap/global.c	2010-01-14 14:00:10.455808186 +0100
ad76e47
@@ -542,14 +542,22 @@ static int acl_ok(const char *user, stru
ad76e47
 int access_ok(const char *user, const char *service, char *msgbuf, int size)
ad76e47
 {
ad76e47
     static char *fname = NULL;
ad76e47
+    static int nodb = 0;
ad76e47
     struct db *db = NULL;
ad76e47
     int r, ret = 1;  /* access always granted by default */
ad76e47
 
ad76e47
+    if (nodb) return ret;
ad76e47
+
ad76e47
     if (!fname) {
ad76e47
+	struct stat s;
ad76e47
 	/* create path to database */
ad76e47
 	fname = xmalloc(strlen(config_dir) + sizeof(FNAME_USERDENYDB) + 1);
ad76e47
 	strcpy(fname, config_dir);
ad76e47
 	strcat(fname, FNAME_USERDENYDB);
ad76e47
+	if (stat(fname, &s) == -1 && errno==ENOENT) {
ad76e47
+	    nodb = 1;
ad76e47
+	    return ret;
ad76e47
+	}
ad76e47
     }
ad76e47
 
ad76e47
     /* try to open database */