linux编写一个用户登录程序login.c模拟Linux的登录界面
发布网友
发布时间:2022-04-23 01:36
我来回答
共1个回答
热心网友
时间:2023-07-01 06:15
/* 简单点,uname信息、主机名以及一些返回值判断都没管,登录成功后要做什么就自己加吧 */
/* 缩进全完了,好在代码不长,就不管了 */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define _XOPEN_SOURCE
#include <unistd.h>
#include <sys/types.h>
#include <pwd.h>
#include <shadow.h>
#include <errno.h>
#define USER_LEN16
#define PW_LEN64
void banner (void)
{
fprintf(stdout, "[uname ent]\n");
fflush(stdout);
}
/* 检查username是否存在,不判断密码 */
struct passwd *get_input (char *buf, int type)
{
int retval = 0;
int len = type?PW_LEN:USER_LEN;
struct passwd *pw_st = NULL;
char *retry_info = type?"Password: ":"[host] login: ";
fprintf(stdout, retry_info);
fflush(stdout);
while(retval < 2) {
retval = read(0, buf, len);
if (retval > 1) {
buf[retval - 1] = 0;
if (type == 0) {
pw_st = getpwnam(buf);
if (pw_st == NULL)
retval = 0;
}
}
if (retval < 2) {
fprintf(stdout, "\nLogin incorrect\n%s", retry_info);
fflush(stdout);
}
}
return type?NULL:pw_st;
}
int check_pass (char *pw_str, struct passwd *pw)
{
char *stored_pw;
char *salt;
char *enc_pw_str;
char *delim;
struct spwd *shadow_entry;
if (pw->pw_passwd[0] == 0) {// 无密码
return 0;
} else if (!strncmp(pw->pw_passwd, "x", 2)) {// 影子密码
shadow_entry = getspnam(pw->pw_name);
if (shadow_entry != NULL)
stored_pw = shadow_entry->sp_pwdp;
else
perror("[Not Root?]");
} else {// passwd直接密码
stored_pw = pw->pw_passwd;
}
if ((stored_pw[0] == '!') || (stored_pw[0] == '*'))
return -1;
/* 截出 salt 值 */
delim = strrchr(stored_pw, '$');
delim[0] = 0;
salt = stored_pw;
enc_pw_str = crypt(pw_str, salt);
delim[0] = '$';/* 恢复 stored_pw */
if (strcmp(enc_pw_str, stored_pw))
return -1;
else
return 0;
}
int main (void)
{
int retval;
char user_str[USER_LEN];
char pw_str[PW_LEN];
struct passwd *pw;
banner();
pw = get_input(user_str, 0);
get_input(pw_str, 1);
retval = check_pass(pw_str, pw);
if (retval == 0)
printf("Login succeeded.\n");
else
printf("Login failed.\n");
return retval;
}
linux如何登录用户linux如何登录
1.用普通用户登录。2.在终端执行sudo-s,然后输入当前登录的普通用户密码,进入到root用户模式。3.执行gedit/etc/lightdm/lightdm.conf。4.添加如下两行代码。greeter-show-manual-login=true#手工录入系统的用户名和密码。allow-guest=false#不允许guest登录。5.执行sudopasswdroot设置root用户密码。6.重...
...编写程序,实现简单的用户登录页面 (1)制作login.html用户登录页面...
用户名: 登陆密码: 确认密码:
如何实现自动登录Linux
1、/etc/sysconfig/autologin配置文件的实现: #config for autologin USER=root EXEC=/usr/X11R6/bin/startx 说明,USER指定自动登录时的用户名;EXEC指定启动X要运行的程序。 2、/usr/sbin/autologin可执行文件的实现: /*** *** autologin.c *** ***/ #include <stdio.h> #include <unistd.h> #incl...
怎样让linux启动后不运行桌面而是运行自己写的图形界面程序?
Login程序主要可以分为以下几个主要部分:1.Login首先检查登录者是否为超级用户,如果不是超级用户,并且存在/etc/nologin文件,则输出该文件内容,并中止登录过程;主要由checknologin()实现; 2.如果登录用户是超级用户,那么login必须在/etc/securetty/中指定的tty列表中实现登录,否则将导致登录失败。同样可以不指定/etc/s...
dockerlogin命令in命令linux
Linux开机的界面怎么退出?退出命令界面:ctrl+altl+F7 进入命令界面:ctrl+altl+F1-F6 或打开一个终端,输入命令:init3,回车;再输入命令:init5,回车;稍等片刻图形界面就会推到选择用户登录界面,该界面上有restart和shutdown选择,选择shutdown,系统就会关闭图形界面服务,进入命令行界面。
写程序1.完成一个用户登录界面用户名和密码均为(11001)要求有五次...
void error();//对用户输入的错误操作提示 void loader(); //第一个画面 void welcome();//第二个画面 void message_to();//第三个画面 //=== void main(){ //int number;int i;int ch2;char ch;loader(); //开机载入模式第一屏 system("cls");loader();system("cls");welcome(...
用C++设计一个类模拟windows用户登录界面
Login(){ m_errorNum=1;strcpy(m_username,"admin");strcpy(m_password,"123");} bool IsLogin(char *str1, char *str2){ if(strcmp(str1,m_username)==0 && strcmp(str2,m_password)==0 ){ return true;} if(m_errorNum==3){ cout<<"你已经试了3次,程序自动退出."<<endl;e...
linux命令行用户登录数据库linux命令行用户
1、首先,连接相应linux主机,进入到linux命令行状态下,等待输入shell指令。2、其次,在linux命令行中输入:w|cat。3、最后,按下回车键执行shell指令,此时会看到当前所有连接该linux主机的用户。linux怎么进入#命令,行?可以使用startx命令。1、在login:下输入root回车,然后是密码(密码是不回显的,也...
编写登录程序,包含Login.htm和LoginServlet.java两个文件
public String getPassword(String username){ String pass="";String sql="select password from users where username ='"+username+"'";conn=SqlUtil.getConnection();try { st = (Statement) conn.createStatement(); //创建用于执行静态sql语句的Statement对象,st属局部变量 ResultSet rs = st...
如何让cygwin象类似linux多用户登录
1、建立一个window用户,如armlinux,2、进入cygwin,运行mkpasswd -l > /etc/passwd 3、参照/etc/passwd中administrator的项修改armlinux项,否则用armlinux登录的时候会提示无权限访问/bin/bash 4、建立用户目录 /home/armlinux 5、复制administrator的.bashrc和.bash_profile到用户目录下,在.bashrc中...