企业网站制作公司,wordpress十大必备插件,视频网站开发价格,新闻报道最新消息今天本次任务主要实现登录口令的修改#xff0c;当用户修改了登录名和登陆密码以后#xff0c;下一次登录将会使用新的登录名和登录密码。 FT.1 页面设计 登录的页面主要使用了原来的pass.htm文件#xff0c;主要是因为我自己做了一个相差不大的界面#xff0c;如下图所示…本次任务主要实现登录口令的修改当用户修改了登录名和登陆密码以后下一次登录将会使用新的登录名和登录密码。 FT.1 页面设计 登录的页面主要使用了原来的pass.htm文件主要是因为我自己做了一个相差不大的界面如下图所示但是没有加入“#”这个标志使得底层代码获取不到表单里的内容。对比了一下原来的界面并没有增加更多的新功能所以将专注点就放在了功能的实现上。 最终的登录界面如下图 在第11课网络服务的基础上添加框架将4-Menuframe文件夹里的内容复制到/work/uClinux-dist/user/cgi_generic里此时如果编译以后下载到开发板以后只能打开lan页面我们要打开的是pass页面所以按照lan页面来修改 首先打开template.c文件新增两个函数passWebPageInput()和passWebPageOutput函数还有一个头文件程序代码如下 #includecrypt.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( i0; iintfTagNum; 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 *keyab; 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 itemNum5; FILE *f; ffopen(PATH,w); fclose(f); ffopen(PATH,a); fflush(stdout); name1crypt(newname,key); strcat(user,name1); fputs(user,f); fputs(\n,f) fflush(stdout); passwd1crypt(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