freebsd-ports/www/mod_auth_mysql/files/patch-ad
James E. Housley 45e671eb26 The buffer for creating a scrambled password is too small for newer
versions of MySQL and was causing segfaults
2006-07-11 11:49:01 +00:00

62 lines
2.0 KiB
Plaintext

--- 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;
}