[dovecot-cvs] dovecot/src/auth password-scheme.c,1.5,1.6

cras at procontrol.fi cras at procontrol.fi
Sun May 30 04:40:00 EEST 2004


Update of /home/cvs/dovecot/src/auth
In directory talvi:/tmp/cvs-serv4773/src/auth

Modified Files:
	password-scheme.c 
Log Message:
SHA1 support via OpenSSL



Index: password-scheme.c
===================================================================
RCS file: /home/cvs/dovecot/src/auth/password-scheme.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- a/password-scheme.c	11 Nov 2003 09:59:27 -0000	1.5
+++ b/password-scheme.c	30 May 2004 01:39:58 -0000	1.6
@@ -1,19 +1,25 @@
 /* Copyright (C) 2003 Timo Sirainen */
 
 #include "lib.h"
+#include "base64.h"
 #include "hex-binary.h"
 #include "md5.h"
 #include "mycrypt.h"
 #include "randgen.h"
+#include "str.h"
 #include "password-scheme.h"
 
+#ifdef HAVE_OPENSSL_SHA1
+#  include <openssl/sha.h>
+#endif
+
 static const char *salt_chars =
 	"./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
 
 int password_verify(const char *plaintext, const char *password,
 		    const char *scheme, const char *user)
 {
-	unsigned char digest[16];
+	unsigned char md5_digest[16];
 	const char *realm, *str;
 
 	if (password == NULL)
@@ -26,6 +32,18 @@
                 str = password_generate_md5_crypt(plaintext, password);
 		return strcmp(str, password) == 0;
 	}
+#ifdef HAVE_OPENSSL_SHA1
+	if (strcasecmp(scheme, "SHA1") == 0) {
+		unsigned char sha1_digest[SHA_DIGEST_LENGTH];
+		string_t *str;
+
+		SHA1(plaintext, strlen(plaintext), sha1_digest);
+
+		str = t_str_new(64);
+		base64_encode(sha1_digest, sizeof(sha1_digest), str);
+		return strcasecmp(str_c(str), password) == 0;
+	}
+#endif
 
 	if (strcasecmp(scheme, "PLAIN") == 0)
 		return strcmp(password, plaintext) == 0;
@@ -42,15 +60,15 @@
 
 		str = t_strconcat(t_strcut(user, '@'), ":", realm,  ":",
 				  plaintext, NULL);
-		md5_get_digest(str, strlen(str), digest);
-		str = binary_to_hex(digest, sizeof(digest));
+		md5_get_digest(str, strlen(str), md5_digest);
+		str = binary_to_hex(md5_digest, sizeof(md5_digest));
 
 		return strcasecmp(str, password) == 0;
 	}
 
 	if (strcasecmp(scheme, "PLAIN-MD5") == 0) {
-		md5_get_digest(plaintext, strlen(plaintext), digest);
-		str = binary_to_hex(digest, sizeof(digest));
+		md5_get_digest(plaintext, strlen(plaintext), md5_digest);
+		str = binary_to_hex(md5_digest, sizeof(md5_digest));
 		return strcasecmp(str, password) == 0;
 	}
 



More information about the dovecot-cvs mailing list