ます’s Blog - どうでもいい記事100選

どうでもいい記事100選

mod_auth_mysql-2.20

レガシーな環境でハマったのでメモ。
全てはココ()に集約されていると言っても過言ではない。
「本来、PASSWORD() は MySQL ユーザのパスワード管理専用なので、アプリケーションでこれを実行すべきではありません。」って書いてあるじゃん。使った方の責任だろー、コレは。ぷんぷん。
というか、mod_auth_mysql-2.20って古い環境のママ、DBだけ新しいのに差し替えようとしている時点で終わってるんだね。ははっ。
そんな状況でもお守りをしないといけない悲しい現実。。。_| ̄|○
Segmentation Faultになるのは悲しいので(今年最後になりそうな予感の)タコさんパッチ。
一応、新旧フォーマットのパスワードが混在している状況でも認証できるようになりました。
事前に「mod_auth_mysql-2.20.patch5」を適用してから以下を適用してください。
やっつけで作成したので、あちこちに手抜きが散見しますが。(w
その辺は、ご容赦、という事で。

diff -u mod_auth_mysql-2.20,orig/mod_auth_mysql.c mod_auth_mysql-2.20/mod_auth_mysql.c
--- mod_auth_mysql-2.20,orig/mod_auth_mysql.c	2007-12-28 10:47:46.000000000 +0900
+++ mod_auth_mysql-2.20/mod_auth_mysql.c	2007-12-28 11:10:13.000000000 +0900
@@ -81,10 +81,23 @@
 
 static int check_mysql_encryption(const char *passwd, char *enc_passwd)
 {
+#if MYSQL_VERSION_ID > 32358
+	char scrambled_passwd[82];
+	char scrambled_passwd_323[32];
+
+	if (enc_passwd && strlen(enc_passwd) > 16) {
+		make_scrambled_password(scrambled_passwd, passwd);
+		return (!strcmp(scrambled_passwd, enc_passwd));
+	} else {
+		make_scrambled_password_323(scrambled_passwd_323, passwd);
+		return (!strcmp(scrambled_passwd_323, enc_passwd));
+	}
+#else
 	char scrambled_passwd[32];
 	
 	make_scrambled_password(scrambled_passwd, passwd);
 	return (!strcmp(scrambled_passwd, enc_passwd));
+#endif
 }
 
 typedef struct {