如何 return "You have been logged in!" 知道密码但不知道 UserID?
How to return "You have been logged in!" knowing a password but not UserID?
我编译了一个基本的 Linux 身份验证程序,但我不明白 return "You have been logged in!" 需要什么。我知道密码条目,但不知道关联 UID。
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <pwd.h>
#define TRUE 1
#define FALSE 0
#define LENGTH 8
int main(int argc, char *argv[])
{
char user[LENGTH];
char prompt[] = "password: ";
struct passwd *passwddata;
char *user_pass;
while(TRUE)
{
printf("login: ");
fflush(NULL);
if (gets(user) == NULL)
exit(0);
user_pass = getpass(prompt);
passwddata = getpwnam(user);
if (passwddata != NULL)
{
if (!strcmp(user_pass, "login"))
{
printf("You have been logged in! \n");
break;
}
}
printf ("You are not %s, don't try to fool the system.\n", user);
}
return 0 ;
}
您需要有一个名为 "login" 的用户。
键入"login",读取时"login"
if (gets(user) == NULL)
并在提示输入密码时键入 "login"。
这有点令人困惑,因为您正在尝试检索此 "login" 用户密码,但您并未使用此信息。
passwddata = getpwnam(user);
我编译了一个基本的 Linux 身份验证程序,但我不明白 return "You have been logged in!" 需要什么。我知道密码条目,但不知道关联 UID。
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <pwd.h>
#define TRUE 1
#define FALSE 0
#define LENGTH 8
int main(int argc, char *argv[])
{
char user[LENGTH];
char prompt[] = "password: ";
struct passwd *passwddata;
char *user_pass;
while(TRUE)
{
printf("login: ");
fflush(NULL);
if (gets(user) == NULL)
exit(0);
user_pass = getpass(prompt);
passwddata = getpwnam(user);
if (passwddata != NULL)
{
if (!strcmp(user_pass, "login"))
{
printf("You have been logged in! \n");
break;
}
}
printf ("You are not %s, don't try to fool the system.\n", user);
}
return 0 ;
}
您需要有一个名为 "login" 的用户。
键入"login",读取时"login"
if (gets(user) == NULL)
并在提示输入密码时键入 "login"。
这有点令人困惑,因为您正在尝试检索此 "login" 用户密码,但您并未使用此信息。
passwddata = getpwnam(user);