[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