uhttpd: make it work without shadow password support

SVN-Revision: 23897
This commit is contained in:
Jo-Philipp Wich 2010-11-06 16:19:04 +00:00
parent cf313b63bc
commit fa644368ed
3 changed files with 18 additions and 2 deletions

View File

@ -13,6 +13,12 @@ LIB = -Wl,--export-dynamic -lcrypt -ldl
TLSLIB = TLSLIB =
LUALIB = 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 world: compile

View File

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

View File

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