fixed pw_check, cryptpw
This commit is contained in:
parent
1925d32c40
commit
ff94d81541
@ -14,12 +14,6 @@
|
||||
#define HEAD_FMT "==> %s <==\n"
|
||||
#endif
|
||||
|
||||
#ifdef _PW_CHECK_H
|
||||
/* Pw_check. Salt for crypt() */
|
||||
int MU_SALT_ENC[] = {'s', 'a', 'l', 't'};
|
||||
char MU_SALT_BUF[sizeof(MU_SALT_ENC) + 1];
|
||||
#endif
|
||||
|
||||
#ifdef _MOUNT_C
|
||||
/* mount config */
|
||||
#define MOUNT_CFG "/etc/fstab"
|
||||
|
@ -5,48 +5,29 @@
|
||||
#include "pw_check.h"
|
||||
#include "config.h"
|
||||
|
||||
void dec_salt(void) {
|
||||
size_t i;
|
||||
for (i = 0; i < sizeof(MU_SALT_ENC) / sizeof(int); i++)
|
||||
MU_SALT_BUF[i] = (char)MU_SALT_ENC[i];
|
||||
|
||||
MU_SALT_BUF[i + 1] = '\0';
|
||||
}
|
||||
|
||||
char *enc_password(const char *prog_name, const char *pass, const char *salt) {
|
||||
if (salt == NULL)
|
||||
dec_salt();
|
||||
|
||||
char *cpass = crypt(pass, (salt == NULL) ? MU_SALT_BUF : salt);
|
||||
if (cpass == NULL) {
|
||||
if (prog_name != NULL)
|
||||
fprintf(stderr, "%s: %s\n", prog_name, strerror(errno));
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return cpass;
|
||||
}
|
||||
|
||||
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 != NULL)
|
||||
if (prog_name)
|
||||
fprintf(stderr, "%s: Access denied\n", prog_name);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
char *cpass = enc_password(prog_name, pass, NULL);
|
||||
if (cpass == NULL)
|
||||
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 != NULL)
|
||||
if (prog_name)
|
||||
fprintf(stderr, "%s: Incorrect password\n", prog_name);
|
||||
|
||||
return 1;
|
||||
|
@ -2,8 +2,5 @@
|
||||
#define _PW_CHECK_H
|
||||
#include <pwd.h>
|
||||
|
||||
void dec_salt(void);
|
||||
char *enc_password(const char *prog_name, const char *pass, const char *salt);
|
||||
int pw_check(const char *prog_name, const struct passwd *pw, const char *pass);
|
||||
|
||||
#endif
|
||||
|
@ -1,5 +1,20 @@
|
||||
#include <stdio.h>
|
||||
#include "pw_check.h"
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
|
||||
static char *gen_salt(void) {
|
||||
srand(getpid());
|
||||
|
||||
static char salt[15];
|
||||
char abc[] = "asdfghjklzxcvbnmqwertyuiop1234567890";
|
||||
|
||||
size_t i = 0;
|
||||
for (; i < sizeof(salt); i++)
|
||||
salt[i] = abc[rand() % sizeof(abc)];
|
||||
|
||||
salt[i] = '\0';
|
||||
return salt;
|
||||
}
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
if (argc < 2) {
|
||||
@ -7,11 +22,11 @@ int main(int argc, char **argv) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
char *salt = NULL;
|
||||
char *salt_ptr = gen_salt();
|
||||
if (argc > 2)
|
||||
salt = argv[2];
|
||||
salt_ptr = argv[2];
|
||||
|
||||
char *cpass = enc_password("cryptpw", argv[1], salt);
|
||||
char *cpass = crypt(argv[1], salt_ptr);
|
||||
if (cpass == NULL)
|
||||
return 1;
|
||||
|
||||
|
@ -7,8 +7,8 @@
|
||||
#include <sys/klog.h>
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
unsigned int s_size = 0;
|
||||
unsigned int n_level = 0;
|
||||
int s_size = 0;
|
||||
int n_level = 0;
|
||||
|
||||
int opt;
|
||||
while ((opt = getopt(argc, argv, "s:n:")) != -1) {
|
||||
@ -65,4 +65,3 @@ int main(int argc, char **argv) {
|
||||
free(buf);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user