uhttpd: make it work without shadow password support
SVN-Revision: 23897
This commit is contained in:
parent
cf313b63bc
commit
fa644368ed
3 changed files with 18 additions and 2 deletions
|
@ -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
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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))
|
||||
|
||||
|
|
Loading…
Reference in a new issue