Browse Source

uhttpd: make it work without shadow password support

SVN-Revision: 23897
Jo-Philipp Wich 15 years ago
parent
commit
fa644368ed

+ 6 - 0
package/uhttpd/src/Makefile

@@ -13,6 +13,12 @@ LIB = -Wl,--export-dynamic -lcrypt -ldl
 TLSLIB =
 LUALIB =
 
+HAVE_SHADOW=$(shell echo 'int main(void){ return !getspnam("root"); }' | \
+	$(CC) -include shadow.h -xc -o/dev/null - 2>/dev/null && echo yes)
+
+ifeq ($(HAVE_SHADOW),yes)
+  CFLAGS += -DHAVE_SHADOW
+endif
 
 world: compile
 

+ 8 - 1
package/uhttpd/src/uhttpd-utils.c

@@ -610,7 +610,10 @@ struct auth_realm * uh_auth_add(char *path, char *user, char *pass)
 {
 	struct auth_realm *new = NULL;
 	struct passwd *pwd;
+
+#ifdef HAVE_SHADOW
 	struct spwd *spwd;
+#endif
 
 	if((new = (struct auth_realm *)malloc(sizeof(struct auth_realm))) != NULL)
 	{
@@ -625,6 +628,7 @@ struct auth_realm * uh_auth_add(char *path, char *user, char *pass)
 		/* given password refers to a passwd entry */
 		if( (strlen(pass) > 3) && !strncmp(pass, "$p$", 3) )
 		{
+#ifdef HAVE_SHADOW
 			/* try to resolve shadow entry */
 			if( ((spwd = getspnam(&pass[3])) != NULL) && spwd->sp_pwdp )
 			{
@@ -632,8 +636,11 @@ struct auth_realm * uh_auth_add(char *path, char *user, char *pass)
 					min(strlen(spwd->sp_pwdp), sizeof(new->pass) - 1));
 			}
 
+			else
+#endif
+
 			/* try to resolve passwd entry */
-			else if( ((pwd = getpwnam(&pass[3])) != NULL) && pwd->pw_passwd &&
+			if( ((pwd = getpwnam(&pass[3])) != NULL) && pwd->pw_passwd &&
 				(pwd->pw_passwd[0] != '!') && (pwd->pw_passwd[0] != 0)
 			) {
 				memcpy(new->pass, pwd->pw_passwd,

+ 4 - 1
package/uhttpd/src/uhttpd-utils.h

@@ -21,9 +21,12 @@
 #include <stdarg.h>
 #include <fcntl.h>
 #include <pwd.h>
-#include <shadow.h>
 #include <sys/stat.h>
 
+#ifdef HAVE_SHADOW
+#include <shadow.h>
+#endif
+
 #define min(x, y) (((x) < (y)) ? (x) : (y))
 #define max(x, y) (((x) > (y)) ? (x) : (y))