X-Git-Url: https://git.armaanb.net/?p=opendoas.git;a=blobdiff_plain;f=shadow.c;h=01509f03df15d25315b0de364fd40341bd2d51bb;hp=2569b586635646a79fe0d818c9ff5c66e08a1e24;hb=HEAD;hpb=e8e8713b26723d2daf3de50b51d2ac209ad65716 diff --git a/shadow.c b/shadow.c index 2569b58..01509f0 100644 --- a/shadow.c +++ b/shadow.c @@ -41,7 +41,7 @@ #define HOST_NAME_MAX _POSIX_HOST_NAME_MAX #endif -void +int shadowauth(const char *myname, int persist) { const char *hash; @@ -67,11 +67,12 @@ shadowauth(const char *myname, int persist) hash = pw->pw_passwd; if (hash[0] == 'x' && hash[1] == '\0') { struct spwd *sp; - if ((sp = getspnam(myname)) == NULL) - errx(1, "Authentication failed"); + if ((sp = getspnam(myname)) == NULL) { + return(5); + } hash = sp->sp_pwdp; } else if (hash[0] != '*') { - errx(1, "Authentication failed"); + return(5); } char host[HOST_NAME_MAX + 1]; @@ -91,12 +92,13 @@ shadowauth(const char *myname, int persist) err(1, "readpassphrase"); if ((encrypted = crypt(response, hash)) == NULL) { explicit_bzero(rbuf, sizeof(rbuf)); - errx(1, "Authentication failed"); + printf(getinsult()); + return(5); } explicit_bzero(rbuf, sizeof(rbuf)); if (strcmp(encrypted, hash) != 0) { syslog(LOG_AUTHPRIV | LOG_NOTICE, "failed auth for %s", myname); - errx(1, "Authentication failed"); + return(5); } #ifdef USE_TIMESTAMP @@ -106,4 +108,5 @@ good: close(fd); } #endif + return(0); }