--- mod_auth_mysql.c.orig	Sat Oct  3 13:41:41 1998
+++ mod_auth_mysql.c	Tue Jul 11 07:43:36 2006
@@ -55,8 +55,14 @@
 
 static int check_mysql_encryption(const char *passwd, char *enc_passwd)
 {
-	char scrambled_passwd[32];
+	/* Make more then big enough */
+	char scrambled_passwd[256];
 	
+#if MYSQL_VERSION_ID >= 40000
+	make_scrambled_password_323(scrambled_passwd, passwd);
+	if (strcmp(scrambled_passwd, enc_passwd) == 0) return 1;
+#endif /* MYSQL_VERSION_ID >= 40000 */
+
 	make_scrambled_password(scrambled_passwd, passwd);
 	return (!strcmp(scrambled_passwd, enc_passwd));
 }
@@ -372,7 +378,12 @@
 	}
 	if (name != NULL) {			/* open an SQL link */
 		/* link to the MySQL database and register its cleanup!@$ */
+#if MYSQL_VERSION_ID >= 40000
+		mysql_init(&auth_sql_server);
+		mysql_auth = mysql_real_connect(&auth_sql_server, auth_db_host, user, pwd, name, 0, NULL, 0);
+#else /* MYSQL_VERSION_ID < 40000 */
 		mysql_auth = mysql_connect(&auth_sql_server, auth_db_host, user, pwd);
+#endif /* MYSQL_VERSION_ID < 40000 */
 		if (sec->non_persistent && mysql_auth) {
 			note_cleanups_for_mysql_auth(r->pool, mysql_auth);
 		}
@@ -559,6 +570,10 @@
 
 	switch (mysql_check_user_password(r, c->user, sent_pw, sec)) {
 		case 0:
+			ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, r,
+				"user %s: authentication failure for \"%s\": %s",
+				c->user, r->uri);
+			ap_note_basic_auth_failure(r);
 			note_basic_auth_failure(r);
 			return AUTH_REQUIRED;
 			break;
@@ -582,6 +597,7 @@
 {
 	mysql_auth_config_rec *sec = (mysql_auth_config_rec *) get_module_config(r->per_dir_config, &auth_mysql_module);
 	char *user = r->connection->user;
+	conn_rec *c = r->connection;
 	int m = r->method_number;
 	int method_restricted = 0;
 	register int x;
@@ -653,6 +669,10 @@
 	if (!(sec->assume_authoritative)) {
 		return DECLINED;
 	}
+	ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, r,
+		"user %s: authentication failure for \"%s\": %s",
+		c->user, r->uri);
+	ap_note_basic_auth_failure(r);
 	note_basic_auth_failure(r);
 	return AUTH_REQUIRED;
 }