荔园在线
荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀
[回到开始]
[上一篇][下一篇]
发信人: icefire (懒懒的心懒懒的我), 信区: Program
标 题: [转寄] [转载] 范文cgi:调用cgiparse.c的例子: chgpwd.c
发信站: BBS 荔园晨风站 (Sun Nov 22 19:16:10 1998), 站内信件
【 以下文字转载自 icefire 的信箱 】
【 原文由 icefire.bbs@melon.gznet.edu.cn 所发表 】
发信人: italina (欣儿 — 忙于论文), 信区: CGI
标 题: [转载] 范文cgi:调用cgiparse.c的例子: chgpwd.c
发信站: 华南网木棉站 (Mon Nov 16 22:50:20 1998), 站内信件
/* 本CGI程序是根据用户传来的用户名、旧口令、新口令、确认新口令来修改本机用
* 户的口令,客户端必须为post方法。所调用的get_salt()和chgpwd()函数定义在
* shadowio.c中,见"共享模块: 处理/etc/passwd,shadow"目录下的文章。以下是
* 发出post请求的html样本:
<title>改变口令</title>
<center>
<H1>改变用户口令</H1>
</center>
<left>
<FORM METHOD="POST" ACTION="/cgi-bin/chgpwd"><p>
输入用户名: <input type="text" name="username" SIZE=12><p>
输入旧口令: <input type="password" name="oldpwd" SIZE=8><p>
输入新口令: <input type="password" name="newpwd_one" SIZE=8><p>
确认新口令: <input type="password" name="newpwd_two" SIZE=8><p>
<input type="submit" value="输入">
<input type="reset" value="清除">
</FORM>
</left>
*************************************************************************/
/* chgpwd.c, by Digger, cc -o chgpwd chgpwd.c shadowio.c */
#include "cgiparse.h"
#include <stdio.h>
#include <shadow.h>
#include <crypt.h>
#define TRUE 0
#define FALSE -1
int parmnum; /* cgi parameter number */
char *username;
char *oldpwd;
char *newpwd_one;
char *newpwd_two;
char salt[3];
struct spwd *p_spwd;
extern input inputs[]; /* parameter structure */
extern void get_salt(char *); /* defined in shadowio.c */
extern int chgpwd(char *, char *); /* defined in shadowio.c */
void success(void);
void fail(char *);
void main( )
{
int i, parmnum;
parmnum = CGI_get_inputs( ); /* get stdin inputs */
if (parmnum != 4) {
fail("invalid parameter parsing");
CGI_end_inputs( );
exit(-1);
}
username = inputs[0].val;
oldpwd = inputs[1].val;
newpwd_one = inputs[2].val;
newpwd_two = inputs[3].val;
if (strlen(username) == 0 || strcmp(newpwd_one, newpwd_two) != 0) {
fail("invalid input");
CGI_end_inputs( );
exit(-1);
}
if ((p_spwd = getspnam(username)) == NULL) {
fail("invalid username");
CGI_end_inputs( );
exit(-1);
}
salt[0] = p_spwd->sp_pwdp[0];
salt[1] = p_spwd->sp_pwdp[1];
salt[2] = '\0';
if (strcmp(p_spwd->sp_pwdp, crypt(oldpwd, salt)) != 0) {
fail("invalid passwd");
CGI_end_inputs( );
exit(-1);
}
if (strlen(newpwd_one) < 6) {
fail("at least 6 characters");
CGI_end_inputs( );
exit(-1);
}
if (lckpwdf( ) == TRUE) {
get_salt(salt);
if (chgpwd(username, crypt(newpwd_one, salt)) == TRUE)
success();
else
fail("changing passwd error unknown");
} else
fail("get lock error");
ulckpwdf( );
CGI_end_inputs( );
}
void success()
{
printf("Content-type:text/html\n\n");
printf("<title>password changing successed</title>\n");
printf("<H1>%s changed password successfully</H1>\n", username);
}
void fail(char * msg)
{
printf("Content-type:text/html\n\n");
printf("<title>authentication failed</title>\n");
printf("<H1>%s</H1>\n", msg);
}
--
※ 转载:.华南网木棉站 bbs.gznet.edu.cn.[FROM: 202.38.214.40]
--
※ 转寄:.华南网木棉站 bbs.gznet.edu.cn.[FROM: linux.szu.edu.cn]
--
※ 转载:.BBS 荔园晨风站 bbs.szu.edu.cn.[FROM: 192.168.0.22]
[回到开始]
[上一篇][下一篇]
荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店