FinalTest 基於web的登陸口令修改設計

本次任務主要實現登陸口令的修改,當用戶修改了登陸名和登錄密碼之後,下一次登陸將會使用新的登陸名和登陸密碼。html

FT.1 頁面設計

登陸的頁面主要使用了原來的pass.htm文件,主要是由於我本身作了一個相差不大的界面,以下圖所示,可是沒有加入「#」這個標誌,使得底層代碼獲取不到表單裏的內容。對比了一下原來的界面,並無增長更多的新功能,因此將專一點就放在了功能的實現上。linux

 

最終的登陸界面以下圖,瀏覽器

 

 

在第11課網絡服務的基礎上,添加框架,將4-Menu&frame文件夾裏的內容複製到/work/uClinux-dist/user/cgi_generic裏,此時若是編譯之後下載到開發板之後只能打開lan頁面,咱們要打開的是pass頁面,因此按照lan頁面來修改,網絡

首先,打開template.c文件,新增兩個函數passWebPageInput()和passWebPageOutput()函數,還有一個頭文件,程序代碼以下:框架

#include<crypt.h>函數

#define PATH "/etc/passwd"post

static char oldname[256];學習

static char oldpassword[256];spa

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,並無正確解掛,所以,不得不採起在命令行輸入的模式,因此從此須要在增強這方面的學習,讓這個程序可以自動的執行,而不是還要手動輸入命令。最後,本學期的課就到此爲止了,感謝老師的教導和陪伴,祝您生活愉快,闔家幸福。

相關文章
相關標籤/搜索