2 ** Copyright 1998 - 2008 Double Precision, Inc. See COPYING for
3 ** distribution information.
7 #include "courier_auth_config.h"
17 #include "courierauthdebug.h"
19 static const char rcsid
[]="$Id: checkpassword.c,v 1.19 2008/12/18 12:08:25 mrsam Exp $";
22 #if NEED_CRYPT_PROTOTYPE
23 extern char *crypt(const char *, const char *);
27 extern int authcheckpasswordmd5(const char *, const char *);
28 extern int authcheckpasswordsha1(const char *, const char *);
30 static int do_authcheckpassword(const char *password
, const char *encrypted_password
)
32 if (strncmp(encrypted_password
, "$1$", 3) == 0
33 || strncasecmp(encrypted_password
, "{MD5}", 5) == 0
34 || strncasecmp(encrypted_password
, "{MD5RAW}", 8) == 0
36 return (authcheckpasswordmd5(password
, encrypted_password
));
38 if (strncasecmp(encrypted_password
, "{SHA}", 5) == 0 ||
39 strncasecmp(encrypted_password
, "{SHA256}", 8) == 0 ||
40 strncasecmp(encrypted_password
, "{SHA512}", 8) == 0 ||
41 strncasecmp(encrypted_password
, "{SSHA}", 6) == 0)
42 return (authcheckpasswordsha1(password
, encrypted_password
));
46 if (strncasecmp(encrypted_password
, "{CRYPT}", 7) == 0)
47 encrypted_password
+= 7;
52 strcmp(encrypted_password
,
53 crypt(password
, encrypted_password
))
55 strcmp(encrypted_password
, password
)
60 int authcheckpassword(const char *password
, const char *encrypted_password
)
64 rc
=do_authcheckpassword(password
, encrypted_password
);
67 DPRINTF("password matches successfully");
69 else if (courier_authdebug_login_level
>= 2)
71 DPRINTF("supplied password '%s' does not match encrypted password '%s'",
72 password
, encrypted_password
);
76 DPRINTF("supplied password does not match encrypted password");