本次任务主要实现登录口令的修改,当用户修改了登录名和登陆密码以后,下一次登录将会使用新的登录名和登录密码。

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的登录口令修改设计相关推荐

  1. 关于测试的一篇论文, 基于web端selenium的自动化测试设计与实现(有需要的联系我 此论文内容缺失,不要直接用 一经发现,后果自负)

    论文题目:基于web端selenium的自动化测试设计与实现 学科(专业):计算机科学与技术 申请人: 指导教师: 摘 要 随着我国科学技术的飞速发展,软件应用技术的更新速度日新月异,规模不断扩大.普 ...

  2. 基于Web的仓库管理系统的设计与实现(论文+PPT+源码)

    摘 要 仓库物品的管理是与我们的日常生活息息相关的一个重大问题.随着我国经济飞速的发展,改革开放的不断深入,企业要想在激烈的市场竞争中立于不败之地,要想继续的发展与生存,没有现代化的管理方式与方法是万 ...

  3. 基于Web的一站式养老院的设计与实现(论文+源码)_kaic

    XXXX大学 毕业(设计)论文 (校徽) 论文题目: 基于Web的一站式养老院的设计与实现 专业班级: 学    号: 学生姓名: 指导教师: 电    话: 学院名称: 完成日期:      年   ...

  4. 基于web的校园论坛的设计与实现-计算机毕设 附源码92291

    基于web的校园论坛的设计与实现 摘  要 随着计算机科学技术的高速发展,计算机成了人们日常生活的必需品,从而也带动了一系列与此相关产业,是人们的生活发生了翻天覆地的变化,而网络化的出现也在改变着人们 ...

  5. (附源码)基于web的校园论坛的设计与实现-计算机毕设92291

    基于web的校园论坛的设计与实现 摘  要 随着计算机科学技术的高速发展,计算机成了人们日常生活的必需品,从而也带动了一系列与此相关产业,是人们的生活发生了翻天覆地的变化,而网络化的出现也在改变着人们 ...

  6. 1.0 java_Mybatis_oracle基于WEB的仓库管理系统的设计与实现(源码+数据库sql+论文+视频齐全)----库管理系统---源码在底部

    基于Web的仓库管理系统的设计与实现 摘 要 仓库物品的管理是与我们的日常生活息息相关的一个重大问题.随着我国经济飞速的发展,改革开放的不断深入,企业要想在激烈的市场竞争中立于不败之地,要想继续的发展 ...

  7. java毕业设计基于Web的人事管理系统的设计与实现mybatis+源码+调试部署+系统+数据库+lw

    java毕业设计基于Web的人事管理系统的设计与实现mybatis+源码+调试部署+系统+数据库+lw java毕业设计基于Web的人事管理系统的设计与实现mybatis+源码+调试部署+系统+数据库 ...

  8. java毕业设计_基于web的游泳馆管理系统的设计与实现

    基于web的游泳馆管理系统的设计与实现 基于web的游泳馆管理系统的设计与实现mysql数据库创建语句 基于web的游泳馆管理系统的设计与实现oracle数据库创建语句 基于web的游泳馆管理系统的设 ...

  9. 基于java基于Web的人事管理系统的设计与实现计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署

    基于java基于Web的人事管理系统的设计与实现计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署 基于java基于Web的人事管理系统的设计与实现计算机毕业设计源码+系统+lw文档+my ...

最新文章

  1. shell的最大命令行长度
  2. 网络推广方法中浅谈网站中的内容如何优化好?
  3. python详细安装教程3.7.0-python 3.7.0 安装配置方法图文教程
  4. @RequestMapping中method的默认值是什么?
  5. Markdown设置字体大小、颜色...,CSDN博客编写设置字体大小、颜色、粗细。字体,文字背景设置。
  6. mootools 简介
  7. 变,从南到北,从北到南...
  8. FJUT3703 这还是一道数论题(二分 + hash + manacher 或者 STL + hash 或者 后缀数组 + hash)题解...
  9. 3-2:类与对象上篇——类的对象模型和计算类的大小以及this指针问题
  10. 音乐播放器界面如何设计?
  11. php-fpm nginx 关系,nginx 和php-fpm关系
  12. javascript版购物网站图片轮转
  13. (解决办法)Windows Server 2003安装sp1时说产品密钥无效
  14. 通俗讲解光线追踪原理,一文理清各类光线追踪
  15. vb可以开发用c语言,c语言和vb语言的区别是什么?_后端开发
  16. 网络中的“大禹”—防水墙是怎么工作的?
  17. python 贪吃蛇小游戏代码
  18. 【装机】将mbr硬盘转换为gpt
  19. 三、Echart图表 之 X轴(xAxis)与 Y轴(yAxis)配置项大全
  20. 2022年中国互联网数据中心(IDC)行业产业链及市场现状分析(附国家绿色数据中心公示名单)[图]

热门文章

  1. linux临时文件创建失败,-bash: 无法为立即文档创建临时文件: 设备上没有空间
  2. win10录屏工具_win10怎么录屏?这才是最长情陪伴你的录屏工具
  3. centos rpm安装mysql5.5_CentOS下以RPM方式安装MySQL5.5
  4. 凯立德地图导航2020年最新版车载_明明有车载导航,为什么很多人还是选择用手机导航?有5个原因...
  5. java arraylist 常用方法_分享ArrayList中的几个常用方法的源码
  6. Python3 反转一个单链表
  7. linux源码安装apache2,CentOS7编译安装Apache2
  8. 配置多个git账号_docker随手笔记第七节 jenkins通过git部署java微服务插件安装
  9. 购买台式计算机方案,购买电脑的注意事项有哪些?
  10. pitr 原理_PostgreSQL热备原理研究及流复制运用