diff -ur courier-authlib-0.56.orig/checkpasswordmd5.c courier-authlib-0.56/checkpasswordmd5.c --- courier-authlib-0.56.orig/checkpasswordmd5.c 2004-10-21 02:10:49.000000000 +0200 +++ courier-authlib-0.56/checkpasswordmd5.c 2005-08-09 12:27:03.000000000 +0200 @@ -25,7 +25,11 @@ if (strncasecmp(encrypted_password, "{MD5}", 5) == 0) { - return (strcmp(encrypted_password+5, md5_hash_courier(password))); + int a = strcmp(encrypted_password+5, md5_hash_courier(password)); + if (a != 0) + return (strcasecmp(encrypted_password+5, md5_hash_hex(password))); + else + return(a); } return (-1); } diff -ur courier-authlib-0.56.orig/md5/md5.h courier-authlib-0.56/md5/md5.h --- courier-authlib-0.56.orig/md5/md5.h 2002-12-12 05:23:58.000000000 +0100 +++ courier-authlib-0.56/md5/md5.h 2005-08-09 12:26:27.000000000 +0200 @@ -56,6 +56,7 @@ const char *md5_hash_courier(const char *); const char *md5_hash_raw(const char *); +const char *md5_hash_hex(const char *); #ifdef __cplusplus } ; diff -ur courier-authlib-0.56.orig/md5/md5_hash.c courier-authlib-0.56/md5/md5_hash.c --- courier-authlib-0.56.orig/md5/md5_hash.c 2002-12-12 05:23:58.000000000 +0100 +++ courier-authlib-0.56/md5/md5_hash.c 2005-08-09 12:24:05.000000000 +0200 @@ -11,6 +11,8 @@ static const char base64tab[]= "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; +static const char hextab[] = "0123456789abcdef"; + const char *md5_hash_courier(const char *passw) { MD5_DIGEST md5buf; @@ -44,3 +46,19 @@ hash_buffer[j]=0; return (hash_buffer); } + +const char *md5_hash_hex(const char *passw) { + MD5_DIGEST md5buf; + static char hash_buffer[2*sizeof(md5buf)+1]; + int i, j = 0; + + md5_digest(passw, strlen(passw), md5buf); + + for (i=0; i> 4]; + hash_buffer[j++] = hextab[md5buf[i] & 0x0F]; + } + + hash_buffer[j]=0; + return (hash_buffer); +}