?? login.c
字號:
#include <stdio.h>/*#include "common.h"#include "misc.h"*/#define DEFAULTPASSWD "/tmp/passwd"#define KEYLEN 16#define VALLEN 64#define PWDLINELEN 1024#define POSTMAXLEN 1024typedef struct pair { char key[KEYLEN]; char val[VALLEN];} Pair_t;typedef struct link_node { struct link_node *next; Pair_t data;} Node_t;void htmlerror(char*);void trunc_ret(char*);int addnode(Node_t *, Pair_t *);int dumpnode(Node_t*);char *getvalbykey(Node_t *, char *);intmain(){ char readbuf[POSTMAXLEN]; char *tok; int ret; Node_t inputs={NULL,{"",""}}; Pair_t temp; FILE *fp; char username[VALLEN],password[VALLEN]; int login=0; char pwdline[PWDLINELEN]; printf("Content-type: text/plain\n\n"); ret=fread(readbuf,1,POSTMAXLEN,stdin); if (ret==POSTMAXLEN) { htmlerror("Input is too long."); } readbuf[ret-1]='\0'; /* split the string */ do { tok=strtok(readbuf,"="); if (tok==NULL) { break; } strncpy(temp.key,tok,KEYLEN); tok=strtok(NULL,"&"); if (tok==NULL) { break; } strncpy(temp.val,tok,VALLEN); addnode(&inputs,&temp); while (1) { tok=strtok(NULL,"="); if (tok==NULL) { break; } strncpy(temp.key,tok,KEYLEN); tok=strtok(NULL,"&"); if (tok==NULL) { break; } strncpy(temp.val,tok,VALLEN); addnode(&inputs,&temp); } } while(0); fp=fopen(DEFAULTPASSWD,"r"); if (fp==NULL) { htmlerror("Open password file error."); exit(1); } do { fgets(pwdline,PWDLINELEN,fp); trunc_ret(pwdline); tok=strtok(pwdline,","); strcpy(username,tok); tok=strtok(NULL,","); strcpy(password,tok); if (strcmp(getvalbykey(&inputs,"login"),username)) { continue; } if (strcmp(getvalbykey(&inputs,"secret"),password)) { continue; } login=1; break; } while (!feof(fp)); if (login) { printf("Login OK."); } else { printf("Login Failed."); } exit(0);}voidhtmlerror(char *t){ printf("<font color=\"#ff0000\"><h3>%s</h3></font>",t);}voidtrunc_ret(char *p){ int i=0; while (p[i]!='\0') { if (p[i]=='\n') { p[i]='\0'; return; } i++; }}intaddnode(Node_t *head, Pair_t *data){ Node_t *temp; if (head==NULL || data==NULL) { return -1; } temp=(Node_t*)malloc(sizeof(Node_t)); if (temp==NULL) { return -1; } strcpy(temp->data.key,data->key); strcpy(temp->data.val,data->val); temp->next=head->next; head->next=temp; return 0;}intdumplist(Node_t*p){ while (p->next != NULL) { p=p->next; printf("Key=%s\tVal=%s\n",p->data.key,p->data.val); } return 0;}char*getvalbykey(Node_t *p, char *key){ while (p->next != NULL) { p=p->next; if (!strcmp(p->data.key,key)) { return(p->data.val); } } return 0;}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -