📄 authserver.cc
字号:
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <signal.h>#include <unistd.h>#include <netdb.h>#include <sys/types.h>#include <sys/socket.h>#include <sys/socket.h>#include <arpa/inet.h>#include "authserver.h"#include "sssutil.h"#include "utility.h"int packerr(char *, char *);int packsucc(char *, char*, char *);int writelog(char *, int);struct logonauth{ char userid[11]; char passwd[17]; char usbkeycode[25]; char usercode[17];}LOGONAUTH;int main(int argc, char **argv){ int listenfd, connfd; char buf[BUFFSIZE]; struct sockaddr_in servaddr, cliaddr; struct hostent *hp; struct in_addr **pptr; struct logonauth logonauth; int len; int authret; char pin[11]; char url[1024]; if(argc < 2) { printf("Usage: ./logonserver serveraddress\n"); return -1; } if((hp = gethostbyname(argv[1])) == NULL) printf("Get hp data error!!!\n"); pptr = (struct in_addr **)hp->h_addr_list; listenfd = socket(AF_INET, SOCK_STREAM, 0); bzero(&servaddr, sizeof(servaddr)); servaddr.sin_family = AF_INET; memcpy(&servaddr.sin_addr, *pptr, sizeof(servaddr)); servaddr.sin_port = htons(portnum); bind(listenfd, (struct sockaddr *)&servaddr, sizeof(servaddr)); listen(listenfd, listenqueuenum); for(;;) { len = sizeof(cliaddr); if((connfd = accept(listenfd, (struct sockaddr*)&cliaddr, (socklen_t *)&len)) < 0) { if(connfd == -1) continue; else printf("accept error!!!"); } printf("client %s connected!!!\n", inet_ntop(AF_INET, &cliaddr.sin_addr, buf, sizeof(buf))); if(fork()>0) { close(listenfd); char head[2]; head[2]=0; read(connfd, head, sizeof(head)); bzero(buf, sizeof(buf)); if(memcmp(head, "01", 2) != 0) { char *err = "Error data head"; if( packerr(buf, err) > 0) write(connfd, buf, strlen(buf)); close(connfd); exit(-1); } bzero(url, sizeof(url)); bzero(&logonauth, sizeof(struct logonauth)); read(connfd, logonauth.userid, USERIDLEN); read(connfd, logonauth.passwd, PASSWDLEN); read(connfd, logonauth.usbkeycode, USBKEYCODELEN); read(connfd, logonauth.usercode, USERCODELEN); writelog(logonauth.userid, USERIDLEN); writelog(logonauth.passwd, PASSWDLEN); writelog(logonauth.usbkeycode, USBKEYCODELEN); writelog(logonauth.usercode, USERCODELEN); writelog("\n", 1); int ret=LogonUserInfoCheck(logonauth.userid, logonauth.passwd); if(ret == -1) { char *err = "db opertion error!!!"; if( packerr(buf, err) > 0) write(connfd, buf, strlen(buf)); close(connfd); exit(-1); } else if(ret == -2) { char *err = "user or passed error!!!"; if( packerr(buf, err) > 0) write(connfd, buf, strlen(buf)); close(connfd); exit(-1); } ret=USBKeyInfoCheck(logonauth.userid, logonauth.usbkeycode, logonauth.usercode); if(ret == -1) { char *err = "db opertion error!!!"; if( packerr(buf, err) > 0) write(connfd, buf, strlen(buf)); close(connfd); exit(-1); } else if(ret == -2) { char *err = "userid and usbkey not match!!!"; if( packerr(buf, err) > 0) write(connfd, buf, strlen(buf)); close(connfd); exit(-1); } bzero(buf, sizeof(buf)); bzero(pin, sizeof(pin)); sprintf(url, "%s", URL); SidGen(pin, sizeof(pin), 10); ret = InsertUserPin(logonauth.usercode, pin); if(ret == -1) { char *err = "db opertion error!!!"; if( packerr(buf, err) > 0) write(connfd, buf, strlen(buf)); close(connfd); exit(-1); } else if(ret == -2) { char *err = "insert pin error!!!"; if( packerr(buf, err) > 0) write(connfd, buf, strlen(buf)); close(connfd); exit(-1); } if(packsucc(buf, pin, url) > 0) write(connfd, buf, 14 + strlen(url)); close(connfd); exit(0); } } return 0;}int packerr( char *buf, char *errmsg){ char *ptr = buf; ptr[0] = '1'; sprintf(&buf[1], "%03d", strlen(errmsg)); memcpy(&buf[4], errmsg, strlen(errmsg)); return sizeof(errmsg) + 4;}int packsucc(char *buf, char* pin, char*url){ char *ptr = buf; char *ppin = pin; char *purl = url; ptr[0] = '0'; sprintf(&buf[1], "%s%03d%s", pin, strlen(purl), purl); return 1;}ssize_t readbuf(int fd, void *vpter, size_t n){ ssize_t nread; if((nread = read(fd, vpter, n)) < 0) if(nread == -1) return -1; return 0;}int writelog(char *buf, int len){ FILE *fp; if((fp = fopen("auth.log", "a+")) == NULL) return -1; fwrite(buf, len, 1, fp); fclose(fp); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -