分享
 
 
 

用VC实现远程修改NT帐号

王朝vc·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

如果我们在Windows NT Server 4.0上建立一个独立的邮件服务器,那么邮件服务器的用户同时也必须是“从批处理作业登录"权限的NT域用户,因此用户邮件账号密码(亦即NT用户密码)的更改,必须以管理员身份登录到NT才能实现,十分不便。如何才能让普通邮件用户方便自由地更改其账号密码呢?下面,笔者就用VC编写一个CGI程序,来让普通用户通过浏览器访问网页来远程修改自己的个人帐号信息。

调用CGI程序的HTML源代码如下:

……

< form method=“post" action=“/cgi-bin/ChPass.exe" >

< table border=1 >

< tr >< td >用户名:< /td >< td >

< input name=User maxlength=20 >< /td >< /tr >

< tr >< td >口令:< /td >< td >

< input name=Password type=password maxlength=20 >

< /td >< /tr >

< tr >< td >新口令:< /td >< td >

< input name=NewPassword1 type=password maxlegth=20 >

< /td >< /tr >

< tr >< td >确认新口令:< /td >< td >

< input name=NewPassword2 type=password maxlength=20 >

< /td >< /tr >

……

该页面以POST方式调用ChPass.exe CGI程序更改 Windows NT 用户口令。

接下来,我们再来看看实现远程修改帐号功能的VC源程序 ,在本程序中,用户的输入先被转化为Unicode形式,解码后作为调用API函数的参数。首先,在VC中新建Win32控制台应用工程ChPass,部分代码如下。:

……

void PrintMIMEHeader(){

cout < < “Content-Type: text/html\n\n";

}

void PrintHTMLHeader(){

cout < < “< html >< head >< title >

用户口令更改< /title >< /head >< body >";

}

void PrintHTMLTrailer(){

cout < < “< /body >< /html >";

}

void GetPOSTData(){ // 从STDIN中取得表单输入

char* pContentLength;

int iContentLength;

pContentLength=getenv(“CONTENT_LENGTH");

if (pContentLength != NULL)

iContentLength=atoi(pContentLength)

else

iContentLength=0;

if (iContentLength >sizeof(szBuffer)-1)

iContentLength=sizeof(szBuffer)1;

int i=0;

while (i< iContentLength){

WCHAR x=fgetwc(stdin);

if (x == EOF) break;

szBuffer[i ++ ]=x;

}

szBuffer[i]=‘\0';

}

//对URL编码进行解码

void ProcessData(){

PWCHAR p;

PWCHAR sep=(PWCHAR)“&";

User=wcstok(szBuffer,sep);

if (User != NULL)

Password=wcstok(NULL,sep);

if (Password!=NULL)

NewPassword1=wcstok(NULL,sep);

if (NewPassword1!=NULL)

NewPassword2=wcstok(NULL,sep);

p=wcsstr(User,L“User=");

if(p)

wcscpy(User,p+5);

else

User=NULL;

p=wcsstr(Password,L“Password=");

if(p)

wcscpy(Password,p+9);

else

Password=NULL;

p=wcsstr(NewPassword1,L“NewPassword1=");

if(p)

wcscpy(NewPassword1,p+13);

else

NewPassword1=NULL;

p=wcsstr(NewPassword2,L“NewPassword2=");

if(p)

wcscpy(NewPassword2,p+13);

else

NewPassword2=NULL;

}

//调用API函数更改口令

NET_API_STATUS ChangePassword(){

return NetUserChangePassword

(NULL,User,Password,NewPassword1);

//NULL为用户所属服务器

//User为用户账户名

//Password为旧密码

//NewPassword1为新密码

//函数返回值为NET_API_STATUS类型

}

void main(){

char* pRequestMethod;

pRequestMethod=getenv

(“REQUEST_METHOD");

if (pRequestMethod == NULL){

cout < <

“This program is designed to run as a CGI script\n";

return;

}

//限定以表单提交的形式执行CGI程式,

否则将页面重定向到输入表单

if (strcmp(pRequestMethod,“POST") != 0){

cout < < “Location: /changePass.htm\n\n";

return;

}

PrintMIMEHeader();

PrintHTMLHeader();

GetPOSTData();

ProcessData();

if(wcscmp(NewPassword1,NewPassword2)== 0)

{

switch(ChangePassword()){

case NERR_Success:

cout < < “< center >

< h2 >成功更改用户密码。< /h2 >";

break;

case ERROR_ACCESS_DENIED:

cout < < “< center >< h2 >

密码更改失败:拒绝访问。< /h2 >";

break;

case ERROR_INVALID_PASSWORD:

cout < < “< center >< h2 >

密码更改失败:无效的密码。< /h2 >";

break;

case NERR_UserNotFound:

cout < < “< center >< h2 >

密码更改失败:不存在该用户。< /h2 >";

break;

case NERR_PasswordTooShort :

cout < < “< center >< h2 >密码更改失败:

新密码不合要求,请选择新的密码。< /h2 >";

break;

default:

cout < < “< center >< h2 >密码更改失败。< /h2 >";

}

}

else

cout < < “< center >< h2 >密码更改失败:

两次输入新口令不一致。< /h2 >";

PrintHTMLTrailer();

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有