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的登录口令修改设计的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电脑桌面伤感图片女生(伤感电脑壁纸高清图
- 下一篇: 谜题6:多重转型