From ff94d815415874872a0ffe3aa02d580dbf3ede47 Mon Sep 17 00:00:00 2001 From: pups Date: Wed, 31 Jul 2024 13:58:31 +0300 Subject: [PATCH] fixed pw_check, cryptpw --- configs/config.h | 6 ------ libmu/pw_check.c | 35 ++++++++--------------------------- libmu/pw_check.h | 3 --- src/cryptpw.c | 23 +++++++++++++++++++---- src/dmesg.c | 5 ++--- 5 files changed, 29 insertions(+), 43 deletions(-) diff --git a/configs/config.h b/configs/config.h index 5959897..7acf35d 100644 --- a/configs/config.h +++ b/configs/config.h @@ -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" diff --git a/libmu/pw_check.c b/libmu/pw_check.c index 37805f6..e8f91d1 100644 --- a/libmu/pw_check.c +++ b/libmu/pw_check.c @@ -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; diff --git a/libmu/pw_check.h b/libmu/pw_check.h index 5554617..5b545e8 100644 --- a/libmu/pw_check.h +++ b/libmu/pw_check.h @@ -2,8 +2,5 @@ #define _PW_CHECK_H #include -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 diff --git a/src/cryptpw.c b/src/cryptpw.c index ce2f32b..daf68ff 100644 --- a/src/cryptpw.c +++ b/src/cryptpw.c @@ -1,5 +1,20 @@ #include -#include "pw_check.h" +#include +#include + +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; diff --git a/src/dmesg.c b/src/dmesg.c index e30d283..3d5c3be 100644 --- a/src/dmesg.c +++ b/src/dmesg.c @@ -7,8 +7,8 @@ #include 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; } -