问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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 &lt;stdio.h&gt; #include &lt;unistd.h&gt; #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 &amp;&amp; strcmp(str2,m_password)==0 ){ return true;} if(m_errorNum==3){ cout&lt;&lt;"你已经试了3次,程序自动退出."&lt;&lt;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 &gt; /etc/passwd 3、参照/etc/passwd中administrator的项修改armlinux项,否则用armlinux登录的时候会提示无权限访问/bin/bash 4、建立用户目录 /home/armlinux 5、复制administrator的.bashrc和.bash_profile到用户目录下,在.bashrc中...

userlogin用户登录 用户登录login密码 社会用户登录login login登录界面 用户登录login是什么 login登录用户名 路由器用户登录login是什么 linux用户登录命令 linux怎么登录用户
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
文档文件夹可以删除吗? 文件夹中的文件能删除吗? 吃鸡进不去,重启也没用,开了加速器,如图 永劫无间用什么加速器好 好用的加速器推荐 PUBG加速器免费试用 亚服加速器推荐 吃鸡加速器选择 亚服国际服吃鸡加速器推荐 东芝2523ad提示维护怎么清除 请问清朝历皇帝顺序,开国皇帝到最后一个。还有就是年羹尧的妹妹叫什么... 这个外国小女孩是谁?附图 linux下如何编程模拟键盘鼠标操作 linux 虚拟控制台是什么意思? 有没有Linux下的飞行模拟软件 在学习linux系统 求一款能很好模拟linux的软件或者在线网址 有没有模拟LINUX的软件, 新手,只为练习基础命令 linux可以用哪个安卓模拟器 如何在linux上模拟网络丢包 安卓手机Linux模拟器。反正能够用所有的Linux命令的模拟器有没有?全部都是一些太基础的不要? 如何在Linux系统环境中模拟DOS命令 windows下如何模拟linux linux下如何模拟按键输入和模拟鼠标 有什么好用的linux终端模拟软件吗?? 珠海香洲区都有那些电脑城? 从深圳怎么去香港机场 深圳有直达广州白云机场的大巴吗? 珠海最好的酒店 粤海大厦交通方便吗?应该怎么过去? 珠海市新图书馆(妇女儿童活动中心那个)怎么去? 想知道: 咸阳市 从咸阳师范学院到粤海湾经典KTV怎么坐公交 珠海最好五星级酒店? 请问如何在安卓手机装linux系统模拟器? 各位有用过安卓的linux模拟器Linux Deploy吗 淘宝旺旺是什么? 淘宝所说的旺旺是什么? 谁知道,淘宝说的旺旺号是什么 淘宝旺旺是什么呀? 淘宝网中的旺旺是什么意思? 淘宝旺旺是什么,如何用??? 谁知道淘宝旺旺是什么啊? 关闭win7等于关闭 纳税申报的方式有什么? 纳税申报的方式有哪几种? 个人所得税的申报方式有两种,分别有什么区别?该怎么选? 纳税申报的方式是? 个人所得税选择申报方式应该选哪个? 纳税申报的申报方式有哪些 纳税申报方式包括哪些 纳税申报方式主要有几种? 缴纳税款的纳税人,可以采用什么申报纳税方式 个税申报申报方式选哪个