2bab04f
--- cyrus-imapd-2.3.13/lib/libcyr_cfg.h.authid_normalize	2008-07-30 18:03:39.000000000 +0200
2bab04f
+++ cyrus-imapd-2.3.13/lib/libcyr_cfg.h	2009-01-13 11:41:59.000000000 +0100
058d90e
@@ -112,6 +112,8 @@ enum cyrus_opt {
058d90e
     CYRUSOPT_SQL_PASSWD,
058d90e
     /* Secure SQL connection (OFF) */
058d90e
     CYRUSOPT_SQL_USESSL,
2bab04f
+    /* Lowercase uid and strip leading and trailing blanks (OFF) */
2bab04f
+    CYRUSOPT_NORMALIZEUID,
058d90e
 
058d90e
     CYRUSOPT_LAST
058d90e
     
2bab04f
--- cyrus-imapd-2.3.13/lib/auth_unix.c.authid_normalize	2009-01-13 11:38:08.000000000 +0100
2bab04f
+++ cyrus-imapd-2.3.13/lib/auth_unix.c	2009-01-13 11:38:08.000000000 +0100
2bab04f
@@ -155,10 +155,12 @@
9e566a4
 size_t len;
9e566a4
 {
9e566a4
     static char retbuf[81];
9e566a4
+    char backup[81];
9e566a4
     struct group *grp;
9e566a4
     char sawalpha;
9e566a4
     char *p;
9e566a4
     int username_tolower = 0;
9e566a4
+    int ic,rbc;
9e566a4
 
9e566a4
     if(!len) len = strlen(identifier);
9e566a4
     if(len >= sizeof(retbuf)) return NULL;
9e566a4
@@ -210,6 +212,22 @@
9e566a4
     /* now we don't */
9e566a4
     /* if (!sawalpha) return NULL;  */
9e566a4
 
9e566a4
+    if( (libcyrus_config_getswitch(CYRUSOPT_NORMALIZEUID) == 1) ) {
9e566a4
+        strcpy(backup,retbuf);
9e566a4
+       /* remove leading blanks */
9e566a4
+       for(ic=0; isblank(backup[ic]); ic++);
9e566a4
+       for(rbc=0; backup[ic]; ic++) {
9e566a4
+            retbuf[rbc] = ( isalpha(backup[ic]) ?
9e566a4
+                 tolower(backup[ic]) : backup[ic] );
9e566a4
+            rbc++;
9e566a4
+       }
9e566a4
+       retbuf[rbc] = '\0';
9e566a4
+       /* remove trailing blanks */
9e566a4
+       for(--rbc; isblank(retbuf[rbc]); rbc--) {
9e566a4
+            retbuf[rbc] = '\0';
9e566a4
+       }
9e566a4
+    }
9e566a4
+
9e566a4
     return retbuf;
9e566a4
 }
9e566a4
 
2bab04f
--- cyrus-imapd-2.3.13/lib/imapoptions.authid_normalize	2009-01-13 11:38:08.000000000 +0100
2bab04f
+++ cyrus-imapd-2.3.13/lib/imapoptions	2009-01-13 11:38:08.000000000 +0100
2bab04f
@@ -1182,6 +1182,11 @@
9e566a4
    interface, otherwise the user is assumed to be in the default
9e566a4
    domain (if set). */
9e566a4
 
9e566a4
+{ "normalizeuid", 0, SWITCH }
9e566a4
+/* Lowercase uid and strip leading and trailing blanks. It is recommended
9e566a4
+   to set this to yes, especially if OpenLDAP is used as authentication
9e566a4
+   source. */
9e566a4
+
9e566a4
 /*
9e566a4
 .SH SEE ALSO
9e566a4
 .PP
2bab04f
--- cyrus-imapd-2.3.13/lib/libcyr_cfg.c.authid_normalize	2008-07-30 18:03:38.000000000 +0200
2bab04f
+++ cyrus-imapd-2.3.13/lib/libcyr_cfg.c	2009-01-13 11:38:08.000000000 +0100
2bab04f
@@ -150,6 +150,11 @@
2bab04f
       CFGVAL(long, 0),
2bab04f
       CYRUS_OPT_SWITCH },
9e566a4
 
9e566a4
+    { CYRUSOPT_NORMALIZEUID,
9e566a4
+      CFGVAL(long, 1),
9e566a4
+      CYRUS_OPT_SWITCH },
9e566a4
+
9e566a4
+
9e566a4
     { CYRUSOPT_LAST, { NULL }, CYRUS_OPT_NOTOPT }
9e566a4
 };
9e566a4