荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: 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软件 网络书店