FinalTest 基于web的登录口令修改设计
本次任务主要实现登录口令的修改,当用户修改了登录名和登陆密码以后,下一次登录将会使用新的登录名和登录密码。
FT.1 页面设计
登录的页面主要使用了原来的pass.htm文件,主要是因为我自己做了一个相差不大的界面,如下图所示,但是没有加入“#”这个标志,使得底层代码获取不到表单里的内容。对比了一下原来的界面,并没有增加更多的新功能,所以将专注点就放在了功能的实现上。
最终的登录界面如下图,
在第11课网络服务的基础上,添加框架,将4-Menu&frame文件夹里的内容复制到/work/uClinux-dist/user/cgi_generic里,此时如果编译以后下载到开发板以后只能打开lan页面,我们要打开的是pass页面,所以按照lan页面来修改,
首先,打开template.c文件,新增两个函数passWebPageInput()和passWebPageOutput()函数,还有一个头文件,程序代码如下:
#include<crypt.h>
#define PATH "/etc/passwd"
static char oldname[256];
static char oldpassword[256];
static char newname[256];
static char newpassword[256];
static char newpassword2[256];
void passWebPageInput(char **postvars,int form_method)
{
int ret;
int i;
char *intf_oldname = (char *)NULL;
char *intf_oldpassword = (char *)NULL;
char *intf_newname = (char *)NULL;
char *intf_newpassword = (char *)NULL;
char *intf_newpassword2 = (char *)NULL;
TagConvert intfSelectedTag[] =
{
{ "text", "oldname", CTYPE_STRING, &intf_oldname },
{ "password", "oldpassword", CTYPE_STRING, &intf_oldpassword },
{ "text", "newname", CTYPE_STRING, &intf_newname },
{ "password", "newpassword", CTYPE_STRING, &intf_newpassword },
{ "password", "newpassword2", CTYPE_STRING, &intf_newpassword2 },
};
int intfTagNum = sizeof(intfSelectedTag)/sizeof(intfSelectedTag[0]);
for( i=0; i<intfTagNum; i++ )
{
ret = cgi_itemval_get(&intfSelectedTag[i]);
if( ret != 0 )
{
return;
}
}
strcpy( oldname, intf_oldname );
strcpy( oldpassword, intf_oldpassword );
strcpy( newname, intf_newname );
strcpy( newpassword, intf_newpassword );
strcpy( newpassword2, intf_newpassword2 );
}
void passWebPageOutput(char **postvars,int form_method)
{
char *key="ab";
char user[128]="user ";
char passwd[128]="passwd ";
char *name1;
char *passwd1;
char str_oldname[40]="", str_oldpassword[40]="" ,str_newname[40]="", str_newpassword[40]="",str_newpassword2[40]="";
char *argv[]={str_oldname,str_oldpassword,str_newname,str_newpassword,str_newpassword2};
int itemNum=5;
FILE *f;
f=fopen(PATH,"w");
fclose(f);
f=fopen(PATH,"a++");
fflush(stdout);
name1=crypt(newname,key);
strcat(user,name1);
fputs(user,f);
fputs("\n",f)
fflush(stdout);
passwd1=crypt(newpassword2,key);
strcat(passwd,passwd1);
fputs(passwd,f);
fputs("\n",f);
fclose(f);
if( oldname[0] )
sprintf( str_oldname, "%s", oldname );
if( oldpassword[0] )
sprintf( str_oldpassword, "%s", oldpassword );
if( newname[0] )
sprintf( str_newname, "%s", newname );
if( newpassword[0] )
sprintf( str_newpassword, "%s", newpassword );
if( newpassword2[0] )
sprintf(str_newpassword2, "%s", newpassword2 );
output_html( "passwd.htm", itemNum, argv);
}
在函数passWebPageInput()里可以获得页面表单上的输入数据,包括:旧用户名,旧密码,新用户名,新密码和确认新密码五个数据。
在函数passWebPageOutput()里将获得的数据写入/etc/passwd文件里,这样可以使关闭浏览器以后,可以使用新用户名和密码登录。
FT.2 用户名和密码保存
在FT.1里实现了修改密码和用户名的功能,但是,在开机重启以后,用户名和密码又恢复到了admin,也就是说,修改以后的密码和用户名并没有保存下来。所以,接下来就实现保存功能。
具体思路:
能够实现保存的在第六课MTD的内容里有介绍,使用mtdblock0来保存用户名和密码,将mtdblock0挂载到/mnt目录下,将修改好的用户名和密码复制到/mnt里,开机的时候,程序通过将/mnt里的内容复制到/etc下,覆盖passwd的内容,此时再登录192.168.0.1,用原来的密码登录就不行了,只能用新的用户名和密码登录。
实现步骤:
修改文件/work/uClinux-dist/vendors/Marvell/Firefox/rc,在尾行加入:
mount -t ext2 /dev/mtdblock0 /mnt
cp /mnt/passwd /etc
如图:
修改/work/uClinux-dist/user/cgi_generic/ template.c文件,带代码中实现文件的复制操作:
编译,下载进入开发板,登录192.168.0.1,输入初始登录密码和用户名:admin,然后进入修改登录口令,将用户名改为admin1,登录密码改为123,如下图:
点击保存,关闭浏览器,然后查看etc/passwd和mnt/passwd里的内容是否被修改了,可以看到已经改为了新的用户名和密码了。
在命令行使用umount解挂,命令:umount /mnt,此时,保留在/mnt里的数据就会被保留下来,重启也不会丢失。
接下来重启开发板,再一次的查看/etc/passwd的内容是不是改过之后的密码用户名。
经过对比发现,的确保留了修改后的密码,
再重新登录浏览器,使用旧密码登录已经不行了,必须使用新密码
FT.3 总结
本次实验并不是完美的,因为还有一个比较难以解决的问题,就是没法在程序中umount,只能在外部命令行输入umount,在程序中试验了无数次umount,并没有正确解挂,因此,不得不采取在命令行输入的模式,所以今后需要在加强这方面的学习,让这个程序能够自动的执行,而不是还要手动输入命令。最后,本学期的课就到此为止了,感谢老师的教导和陪伴,祝您生活愉快,阖家幸福。
转载于:https://www.cnblogs.com/LiuFarrell/p/9836998.html
FinalTest 基于web的登录口令修改设计相关推荐
- 关于测试的一篇论文, 基于web端selenium的自动化测试设计与实现(有需要的联系我 此论文内容缺失,不要直接用 一经发现,后果自负)
论文题目:基于web端selenium的自动化测试设计与实现 学科(专业):计算机科学与技术 申请人: 指导教师: 摘 要 随着我国科学技术的飞速发展,软件应用技术的更新速度日新月异,规模不断扩大.普 ...
- 基于Web的仓库管理系统的设计与实现(论文+PPT+源码)
摘 要 仓库物品的管理是与我们的日常生活息息相关的一个重大问题.随着我国经济飞速的发展,改革开放的不断深入,企业要想在激烈的市场竞争中立于不败之地,要想继续的发展与生存,没有现代化的管理方式与方法是万 ...
- 基于Web的一站式养老院的设计与实现(论文+源码)_kaic
XXXX大学 毕业(设计)论文 (校徽) 论文题目: 基于Web的一站式养老院的设计与实现 专业班级: 学 号: 学生姓名: 指导教师: 电 话: 学院名称: 完成日期: 年 ...
- 基于web的校园论坛的设计与实现-计算机毕设 附源码92291
基于web的校园论坛的设计与实现 摘 要 随着计算机科学技术的高速发展,计算机成了人们日常生活的必需品,从而也带动了一系列与此相关产业,是人们的生活发生了翻天覆地的变化,而网络化的出现也在改变着人们 ...
- (附源码)基于web的校园论坛的设计与实现-计算机毕设92291
基于web的校园论坛的设计与实现 摘 要 随着计算机科学技术的高速发展,计算机成了人们日常生活的必需品,从而也带动了一系列与此相关产业,是人们的生活发生了翻天覆地的变化,而网络化的出现也在改变着人们 ...
- 1.0 java_Mybatis_oracle基于WEB的仓库管理系统的设计与实现(源码+数据库sql+论文+视频齐全)----库管理系统---源码在底部
基于Web的仓库管理系统的设计与实现 摘 要 仓库物品的管理是与我们的日常生活息息相关的一个重大问题.随着我国经济飞速的发展,改革开放的不断深入,企业要想在激烈的市场竞争中立于不败之地,要想继续的发展 ...
- java毕业设计基于Web的人事管理系统的设计与实现mybatis+源码+调试部署+系统+数据库+lw
java毕业设计基于Web的人事管理系统的设计与实现mybatis+源码+调试部署+系统+数据库+lw java毕业设计基于Web的人事管理系统的设计与实现mybatis+源码+调试部署+系统+数据库 ...
- java毕业设计_基于web的游泳馆管理系统的设计与实现
基于web的游泳馆管理系统的设计与实现 基于web的游泳馆管理系统的设计与实现mysql数据库创建语句 基于web的游泳馆管理系统的设计与实现oracle数据库创建语句 基于web的游泳馆管理系统的设 ...
- 基于java基于Web的人事管理系统的设计与实现计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署
基于java基于Web的人事管理系统的设计与实现计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署 基于java基于Web的人事管理系统的设计与实现计算机毕业设计源码+系统+lw文档+my ...
最新文章
- shell的最大命令行长度
- 网络推广方法中浅谈网站中的内容如何优化好?
- python详细安装教程3.7.0-python 3.7.0 安装配置方法图文教程
- @RequestMapping中method的默认值是什么?
- Markdown设置字体大小、颜色...,CSDN博客编写设置字体大小、颜色、粗细。字体,文字背景设置。
- mootools 简介
- 变,从南到北,从北到南...
- FJUT3703 这还是一道数论题(二分 + hash + manacher 或者 STL + hash 或者 后缀数组 + hash)题解...
- 3-2:类与对象上篇——类的对象模型和计算类的大小以及this指针问题
- 音乐播放器界面如何设计?
- php-fpm nginx 关系,nginx 和php-fpm关系
- javascript版购物网站图片轮转
- (解决办法)Windows Server 2003安装sp1时说产品密钥无效
- 通俗讲解光线追踪原理,一文理清各类光线追踪
- vb可以开发用c语言,c语言和vb语言的区别是什么?_后端开发
- 网络中的“大禹”—防水墙是怎么工作的?
- python 贪吃蛇小游戏代码
- 【装机】将mbr硬盘转换为gpt
- 三、Echart图表 之 X轴(xAxis)与 Y轴(yAxis)配置项大全
- 2022年中国互联网数据中心(IDC)行业产业链及市场现状分析(附国家绿色数据中心公示名单)[图]
热门文章
- linux临时文件创建失败,-bash: 无法为立即文档创建临时文件: 设备上没有空间
- win10录屏工具_win10怎么录屏?这才是最长情陪伴你的录屏工具
- centos rpm安装mysql5.5_CentOS下以RPM方式安装MySQL5.5
- 凯立德地图导航2020年最新版车载_明明有车载导航,为什么很多人还是选择用手机导航?有5个原因...
- java arraylist 常用方法_分享ArrayList中的几个常用方法的源码
- Python3 反转一个单链表
- linux源码安装apache2,CentOS7编译安装Apache2
- 配置多个git账号_docker随手笔记第七节 jenkins通过git部署java微服务插件安装
- 购买台式计算机方案,购买电脑的注意事项有哪些?
- pitr 原理_PostgreSQL热备原理研究及流复制运用