Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: C - Login or Password прошло или нет.  (Прочитано 173 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн victor00000

  • Автор темы
  • Старожил
  • *
  • Сообщений: 15428
  • Я не слышу.
    • Просмотр профиля
C - Login or Password прошло или нет.
« : 05 Декабрь 2018, 18:51:24 »
// test_login_password.c
// victor00000 (c) 2018
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <pwd.h>
#include <shadow.h>

// ~$ gcc test_login_password.c -o test_login_password -lcrypt
// ~$ ./test_login_password username password
// ~$ sudo ./test_login_password username password

int main (int ia, char **ca){
if (ia != 3) return 1;
struct passwd *pw;
struct spwd *spw;
pw = getpwnam (ca[1]);
if (pw == 0){
fputs ("err: no users\n",stderr);
return 1;
}
spw = getspnam (ca[1]);
if (spw == 0 && errno == EACCES){
perror (ca[1]);
return 1;
}
if (spw != 0)
pw->pw_passwd = spw->sp_pwdp;

char *enc = crypt ( ca[2], pw->pw_passwd);
if (enc == 0){
fputs ("err: crypt\n",stderr);
return 1;
}
if (strcmp(enc,pw->pw_passwd) != 0){
fputs ("err: password\n",stderr);
return 1;
}
puts ("Ok");
return 0;
}

http://paste.ubuntu.com/p/BYCtr3shqN/
~.o

 

Страница сгенерирована за 0.058 секунд. Запросов: 24.