From: Felix Fietkau <nbd@openwrt.org>
Date: Thu, 28 Aug 2008 12:58:59 +0000 (+0000)
Subject: add back busybox httpd password auth support - fixes x-wrt
X-Git-Tag: reboot~25688
X-Git-Url: http://git.cdn.openwrt.org/?a=commitdiff_plain;h=20054336c020c5addb469855237b4228bc5aaf48;p=openwrt%2Fopenwrt.git

add back busybox httpd password auth support - fixes x-wrt

SVN-Revision: 12422
---

diff --git a/package/busybox/patches/310-passwd_access.patch b/package/busybox/patches/310-passwd_access.patch
new file mode 100644
index 0000000000..78a43d7782
--- /dev/null
+++ b/package/busybox/patches/310-passwd_access.patch
@@ -0,0 +1,41 @@
+
+	Copyright (C) 2006 OpenWrt.org
+
+--- a/networking/httpd.c
++++ b/networking/httpd.c
+@@ -1697,21 +1697,32 @@
+ 
+ 		if (ENABLE_FEATURE_HTTPD_AUTH_MD5) {
+ 			char *md5_passwd;
++			int user_len_p1;
+ 
+ 			md5_passwd = strchr(cur->after_colon, ':');
+-			if (md5_passwd && md5_passwd[1] == '$' && md5_passwd[2] == '1'
++			user_len_p1 = md5_passwd + 1 - cur->after_colon;
++			if (md5_passwd && !strncmp(md5_passwd + 1, "$p$", 3)) {
++				struct passwd *pwd = NULL;
++
++				pwd = getpwnam(&md5_passwd[4]);
++				if(!pwd->pw_passwd || !pwd->pw_passwd[0] || pwd->pw_passwd[0] == '!')
++					continue;
++
++				md5_passwd = pwd->pw_passwd;
++				goto check_md5_pw;
++			} else if (md5_passwd && md5_passwd[1] == '$' && md5_passwd[2] == '1'
+ 			 && md5_passwd[3] == '$' && md5_passwd[4]
+ 			) {
+ 				char *encrypted;
+-				int r, user_len_p1;
++				int r;
+ 
+ 				md5_passwd++;
+-				user_len_p1 = md5_passwd - cur->after_colon;
+ 				/* comparing "user:" */
+ 				if (strncmp(cur->after_colon, user_and_passwd, user_len_p1) != 0) {
+ 					continue;
+ 				}
+ 
++check_md5_pw:
+ 				encrypted = pw_encrypt(
+ 					user_and_passwd + user_len_p1 /* cleartext pwd from user */,
+ 					md5_passwd /*salt */, 1 /* cleanup */);