[Dovecot] Trim trailing whitespace from username

David Jonas djonas at vitalwerks.com
Fri May 16 10:48:02 EEST 2008


Recently we changed Postfix to use Dovecot for our SASL authentication 
and we ran into trouble with some of our clients having extraneous 
spaces at the end of their usernames. The quick fix was to add a space 
to username_chars. The slightly longer fix was a pretty simple patch to 
Dovecot. I put the trimming in auth_request_fix_username. I didn't think 
it warranted a full strfuncs function.

If there is a better way to do this I'm all ears. I don't really like 
patching with my own code, even if I did essentially steal if from the 
kernel's strstrip().


diff -u dovecot-1.1.rc5/src/auth/auth-request.c 
dovecot-1.1.rc5-patched/src/auth/auth-request.c
--- dovecot-1.1.rc5/src/auth/auth-request.c     2008-05-04 
15:01:52.000000000 -0700
+++ dovecot-1.1.rc5-patched/src/auth/auth-request.c     2008-05-16 
00:44:15.000000000 -0700
@@ -22,6 +22,7 @@

  #include <stdlib.h>
  #include <sys/stat.h>
+#include <ctype.h>

  struct auth_request *
  auth_request_new(struct auth *auth, const struct mech_module *mech,
@@ -750,6 +751,7 @@
  {
         unsigned char *p;
          char *user;
+       size_t size;

         if (strchr(username, '@') == NULL &&
             request->auth->default_realm != NULL) {
@@ -759,6 +761,16 @@
                 user = p_strdup(request->pool, username);
         }

+       /* Trim trailing whitespace from the username */
+       size = strlen((unsigned char*)user);
+       if(size) {
+               p = user + size - 1;
+               while (p != user && isspace(*p))
+                       p--;
+               *(p + 1) = '\0';
+               p = NULL;
+       }
+
          for (p = (unsigned char *)user; *p != '\0'; p++) {
                 if (request->auth->username_translation[*p & 0xff] != 0)
                         *p = request->auth->username_translation[*p & 
0xff];


More information about the dovecot mailing list