From 4f1443ec94b100be53b3f7b73efbc75057b675f1 Mon Sep 17 00:00:00 2001 From: rd235 Date: Wed, 16 Nov 2011 18:02:17 +0000 Subject: [PATCH] sha1passwd - openssl library function instead of fork/exec sha1sum. git-svn-id: https://vde.svn.sourceforge.net/svnroot/vde/trunk@510 d37a7db1-d92d-0410-89df-f68f52f87b57 --- vdetelweb/configure.ac | 1 + vdetelweb/vdetelweb.c | 62 ++++++++++++-------------------------------------- 2 files changed, 16 insertions(+), 47 deletions(-) diff --git a/vdetelweb/configure.ac b/vdetelweb/configure.ac index 2ec596b..81cddde 100644 --- a/vdetelweb/configure.ac +++ b/vdetelweb/configure.ac @@ -26,6 +26,7 @@ AC_CHECK_FUNCS([atexit bzero getcwd memset socket strdup strerror strndup strstr # Checks for libraries. AC_CHECK_LIB([lwipv6], [lwip_init],, AC_MSG_ERROR([liblwipv6 missing]), [-lpthread]) +AC_CHECK_LIB([ssl], [SHA1_Init],, AC_MSG_ERROR([libssl (openssl) missing]), [-lssl]) AC_CONFIG_FILES([Makefile]) AC_OUTPUT diff --git a/vdetelweb/vdetelweb.c b/vdetelweb/vdetelweb.c index 9be6fb2..0d7853b 100644 --- a/vdetelweb/vdetelweb.c +++ b/vdetelweb/vdetelweb.c @@ -53,6 +53,7 @@ #include "vdetelweb.h" #include #include +#include int daemonize; int telnet; @@ -105,36 +106,21 @@ static void cleanup(void) } } +static char hex[]="0123456789abcdef"; int sha1passwdok(const char *pw) { - char buf[HASH_SIZE + 1]; - int pfd_fc[2]; - int pfd_cf[2]; - pid_t pid; - - pipe(pfd_fc); - pipe(pfd_cf); - pid = fork(); - - if (!pid) { - close(pfd_fc[1]); - close(pfd_cf[0]); - dup2(pfd_fc[0], STDIN_FILENO); - dup2(pfd_cf[1], STDOUT_FILENO); - - execl("/usr/bin/sha1sum", "/usr/bin/sha1sum", NULL); - exit(1); - } else { - close(pfd_cf[1]); - close(pfd_fc[0]); - - write(pfd_fc[1], pw, strlen(pw)); - close(pfd_fc[1]); - read(pfd_cf[0], buf, sizeof(buf)); - close(pfd_cf[0]); - - waitpid(pid, NULL, 0); - return (strncmp(buf,passwd,strlen(passwd))==0); - } + unsigned char out[SHA_DIGEST_LENGTH]; + char outstr[SHA_DIGEST_LENGTH*2+1]; + int i; + SHA_CTX c; + SHA1_Init(&c); + SHA1_Update(&c, pw, strlen(pw)); + SHA1_Final(out, &c); + for (i=0; i> 4]; + outstr[2*i+1]=hex[out[i] & 0xf]; + } + outstr[2*i]=0; + return (memcmp(outstr,passwd,SHA_DIGEST_LENGTH)==0); } static void sig_handler(int sig) @@ -695,23 +681,6 @@ int main(int argc, char *argv[]) printlog(LOG_INFO,"VDETELWEB started"); } -#if 0 - while (1) - { - int n,m,i; - fd_set rds,exc; - int max=setfds(&rds,&exc); - m=lwip_select(max,&rds,NULL,&exc,NULL); - for(i=0; m>0 && i