diff -Naur cyrus-imapd.uncompiled/imap/mboxlist.c cyrus-imapd-findall.uncompiled/imap/mboxlist.c
--- cyrus-imapd.uncompiled/imap/mboxlist.c	2004-03-11 17:25:48.000000000 +0200
+++ cyrus-imapd-findall.uncompiled/imap/mboxlist.c	2004-03-11 17:40:07.000000000 +0200
@@ -1882,7 +1882,7 @@
  */
 /* Find all mailboxes that match 'pattern'. */
 int mboxlist_findall(struct namespace *namespace __attribute__((unused)),
-		     char *pattern, int isadmin, char *userid, 
+		     const char *pat, int isadmin, char *userid, 
 		     struct auth_state *auth_state, int (*proc)(), void *rock)
 {
     struct find_rock cbrock;
@@ -1895,14 +1895,15 @@
     int prefixlen;
     int userlen = userid ? strlen(userid) : 0, domainlen = 0;
     char domainpat[MAX_MAILBOX_NAME+1] = ""; /* do intra-domain fetches only */
+    char *pattern = NULL;
 
     if (config_virtdomains) {
 	if (userid && (p = strrchr(userid, '@'))) {
 	    userlen = p - userid;
 	    domainlen = strlen(p); /* includes separator */
-	    snprintf(domainpat, sizeof(domainpat), "%s!%s", p+1, pattern);
+	    snprintf(domainpat, sizeof(domainpat), "%s!%s", p+1, pat);
 	}
-	if ((p = strrchr(pattern, '@'))) {
+	if ((p = strrchr(pat, '@'))) {
 	    /* global admin specified mbox@domain */
 	    if (domainlen) {
 		/* can't do both user@domain and mbox@domain */
@@ -1915,14 +1916,14 @@
 		domainlen = strlen(p);
 	    }
 	    snprintf(domainpat+domainlen, sizeof(domainpat)-domainlen,
-		     "%.*s", p - pattern, pattern);
+		     "%.*s", p - pat, pat);
 	}
     }
 
     if (domainpat[0] == '\0')
-	strlcpy(domainpat, pattern, sizeof(domainpat));
+	strlcpy(domainpat, pat, sizeof(domainpat));
 
-    cbrock.g = glob_init(pattern, GLOB_HIERARCHY|GLOB_INBOXCASE);
+    cbrock.g = glob_init(pat, GLOB_HIERARCHY|GLOB_INBOXCASE);
     cbrock.namespace = NULL;
     cbrock.domainlen = domainlen;
     cbrock.inboxcase = glob_inboxcase(cbrock.g);
@@ -1957,7 +1958,7 @@
 	    }
 	    else if (r == CYRUSDB_NOTFOUND) r = 0;
 	}
-	else if (!strncmp(pattern,
+	else if (!strncmp(pat,
 			  usermboxname+domainlen, usermboxnamelen-domainlen) &&
 		 GLOB_TEST(cbrock.g, usermboxname+domainlen) != -1) {
 	    r = DB->fetch(mbdb, usermboxname, usermboxnamelen,
@@ -1979,6 +1980,7 @@
 
     if (r) goto done;
 
+    pattern = xstrdup(pat);
     /* Find fixed-string pattern prefix */
     for (p = pattern; *p; p++) {
 	if (*p == '*' || *p == '%' || *p == '?' || *p == '@') break;
@@ -2035,12 +2037,13 @@
 
   done:
     glob_free(&cbrock.g);
-
+    if(pattern)
+	free(pattern);
     return r;
 }
 
 int mboxlist_findall_alt(struct namespace *namespace,
-			 char *pattern, int isadmin, char *userid,
+			 const char *pat, int isadmin, char *userid,
 			 struct auth_state *auth_state, int (*proc)(),
 			 void *rock)
 {
@@ -2054,6 +2057,7 @@
     int prefixlen, len;
     int userlen = userid ? strlen(userid) : 0, domainlen = 0;
     char domainpat[MAX_MAILBOX_NAME+1]; /* do intra-domain fetches only */
+    char *pattern = NULL;
 
     if (config_virtdomains && userid && (p = strchr(userid, '@'))) {
 	userlen = p - userid;
@@ -2063,7 +2067,7 @@
     else
 	domainpat[0] = '\0';
 
-    cbrock.g = glob_init(pattern, GLOB_HIERARCHY|GLOB_INBOXCASE);
+    cbrock.g = glob_init(pat, GLOB_HIERARCHY|GLOB_INBOXCASE);
     cbrock.namespace = namespace;
     cbrock.domainlen = domainlen;
     cbrock.inboxcase = glob_inboxcase(cbrock.g);
@@ -2113,6 +2117,7 @@
 
     glob_free(&cbrock.g);
 
+    pattern = xstrdup(pat);
     /* Find fixed-string pattern prefix */
     for (p = pattern; *p; p++) {
 	if (*p == '*' || *p == '%' || *p == '?' || *p == '@') break;
@@ -2241,6 +2246,8 @@
 
   done:
     glob_free(&cbrock.g);
+    if(pattern)
+	free(pattern);
 
     return r;
 }
diff -Naur cyrus-imapd.uncompiled/imap/mboxlist.h cyrus-imapd-findall.uncompiled/imap/mboxlist.h
--- cyrus-imapd.uncompiled/imap/mboxlist.h	2004-03-11 17:25:48.000000000 +0200
+++ cyrus-imapd-findall.uncompiled/imap/mboxlist.h	2004-03-11 17:34:15.000000000 +0200
@@ -136,13 +136,13 @@
 
 /* Find all mailboxes that match 'pattern'. */
 int mboxlist_findall(struct namespace *namespace,
-		     char *pattern, int isadmin, char *userid, 
+		     const char *pat, int isadmin, char *userid, 
 		     struct auth_state *auth_state, int (*proc)(), void *rock);
 int mboxlist_findall_std(struct namespace *namespace,
-			 char *pattern, int isadmin, char *userid, 
+			 const char *pat, int isadmin, char *userid, 
 			 struct auth_state *auth_state, int (*proc)(),
 			 void *rock);
-int mboxlist_findall_alt(struct namespace *namespace, char *pattern,
+int mboxlist_findall_alt(struct namespace *namespace, const char *pat,
 			 int isadmin, char *userid, 
 			 struct auth_state *auth_state, int (*proc)(),
 			 void *rock);
