micro-utils/libmu/pw_check.c
2024-07-31 13:58:31 +03:00

35 lines
715 B
C

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include "pw_check.h"
#include "config.h"
int pw_check(const char *prog_name, const struct passwd *pw, const char *pass) {
if (pw->pw_passwd[0] == '\0' && pass[0] == '\0')
return 0;
if (pw->pw_passwd[0] == '!' || pw->pw_passwd[0] == '*') {
if (prog_name)
fprintf(stderr, "%s: Access denied\n", prog_name);
return 1;
}
char *cpass = crypt(pass, pw->pw_passwd);
if (cpass == NULL) {
if (prog_name)
fprintf(stderr, "%s: crypt: %s\n", prog_name, strerror(errno));
return 1;
}
if (!strcmp(pw->pw_passwd, cpass))
return 0;
if (prog_name)
fprintf(stderr, "%s: Incorrect password\n", prog_name);
return 1;
}