Changes with Apache 2.0.41
+ *) Add ability to htpasswd (via -5) to produce non-obfuscated MD5 hashes.
+ [Justin Erenkrantz]
+
*) Rewrite of aaa modules to an authn/authz model.
[Dirk-Willem van Gulik, Justin Erenkrantz]
#define ALG_CRYPT 1
#define ALG_APMD5 2
#define ALG_APSHA 3
+#define ALG_APMD5_TRUE 4
#define ERR_FILEPERM 1
#define ERR_SYNTAX 2
apr_md5_encode((const char *)pw, (const char *)salt,
cpw, sizeof(cpw));
break;
+ case ALG_APMD5_TRUE:
+ {
+ const char *hex = "0123456789abcdef";
+ unsigned char hash[MD5_DIGESTSIZE];
+ char *r;
+ int i;
+
+ /* Take the MD5 hash of the string argument. */
+ apr_md5(hash, pw, strlen(pw));
+
+ for (i = 0, r = cpw; i < MD5_DIGESTSIZE; i++) {
+ *r++ = hex[hash[i] >> 4];
+ *r++ = hex[hash[i] & 0xF];
+ }
+ *r = '\0';
+ break;
+ }
case ALG_PLAIN:
/* XXX this len limitation is not in sync with any HTTPd len. */
" (default)"
#endif
".\n");
+ apr_file_printf(errfile, " -5 Force true MD5 encryption of the "
+ "password.\n");
apr_file_printf(errfile, " -d Force CRYPT encryption of the password"
#if (!(defined(WIN32) || defined(TPF) || defined(NETWARE)))
" (default)"
else if (*arg == 'm') {
*alg = ALG_APMD5;
}
+ else if (*arg == '5') {
+ *alg = ALG_APMD5_TRUE;
+ }
else if (*arg == 's') {
*alg = ALG_APSHA;
}