From 77cab60f27b0af0ae332454a4c64faa448d07e30 Mon Sep 17 00:00:00 2001 From: alopex9527 <1710066191@qq.com> Date: Thu, 18 May 2023 12:05:50 +0800 Subject: [PATCH] new --- client/main | Bin 53208 -> 53248 bytes threadPool.c | 39 ++++++++++++++++++++++++++++++--------- 2 files changed, 30 insertions(+), 9 deletions(-) diff --git a/client/main b/client/main index 20846b3c1e27b0e82675479519967fd03904bcb9..5ce8624a7f380029d8829896b957d789f934ca6d 100755 GIT binary patch literal 53248 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 literal 53208 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 diff --git a/threadPool.c b/threadPool.c index 59e80ac..795929b 100644 --- a/threadPool.c +++ b/threadPool.c @@ -64,16 +64,19 @@ int checkusr(const char* usrName,const char* password, MYSQL* usrSql){ // 从数据库找到对应的盐值 char sqlCommand[1024]; bzero(sqlCommand,sizeof(sqlCommand)); - sprintf(sqlCommand,"select salt, code from password where usrname = %s",usrName); + sprintf(sqlCommand,"select salt, code from password where usrname = '%s'",usrName); int ret = mysql_query(usrSql, sqlCommand); MYSQL_RES *result = mysql_store_result(usrSql); MYSQL_ROW row = mysql_fetch_row(result); + LOGRECORD(INFO,"mysql_fetch_row"); if(row == NULL){ // 服务端用户表中没有此用户,就注册 ret = insertUsr(usrName,password,usrSql); + LOGRECORD(INFO,"insertUsr"); return ret ; } // 从服务端的password表中获取盐值 + LOGRECORD(INFO,"get salt from password"); char salt[24] = {0}; strncpy(salt,row[0],strlen(row[1])); // 从服务端的password表中获取密码 @@ -81,7 +84,7 @@ int checkusr(const char* usrName,const char* password, MYSQL* usrSql){ strncpy(storecode,row[1],strlen(row[0])); // 本地加密密码 char code[128] = {0}; - strncpy(code,crypt(salt,password),13); + strcpy(code,crypt(password,salt)); // 比较本地 和 云端加密密码 ret = strncmp(code,storecode,strlen(code)); return ret; @@ -91,11 +94,18 @@ int checkusr(const char* usrName,const char* password, MYSQL* usrSql){ int insertUsr(const char* usrName,const char* password,MYSQL* usrSql){ char sqlCommand[1024] = {0}; char* salt = GenerateStr(); - char code[13] = {0}; - strcpy(code,crypt(salt,password)); - sprintf(sqlCommand,"INSERT INTO password (usrname,salt,code) VALUES (%s,%s,%s)", + printf("%s\n",salt); + char code[40] = {0}; + LOGRECORD(INFO,"generateStr finish"); + char* encode = crypt(password, salt); + LOGRECORD(INFO,"crypt"); + strcpy(code,encode); + printf("%s\n",code); + LOGRECORD(INFO,"strcpy"); + sprintf(sqlCommand,"insert into password (usrname,salt,code) VALUES ('%s','%s','%s')", usrName,salt,code); int ret = mysql_query(usrSql, sqlCommand); + LOGRECORD(INFO,"insertUsr finish"); return ret; } @@ -150,6 +160,7 @@ void *threadFunc(void* arg){ bzero(&usr,sizeof(usr)); MYSQL *usrsql = mysql_init(NULL); MYSQL *pret = mysql_real_connect(usrsql, "localhost", "root", "root", "disk", 0, NULL, 0); + LOGRECORD(INFO,"mysql_real_connect"); if(pret == NULL){ LOGRECORD(ERROR,"mysql disconnect !!"); continue; @@ -165,34 +176,43 @@ void *threadFunc(void* arg){ bzero(&usrName,sizeof(usrName)); bzero(&usrPassword,sizeof(usrPassword)); flag = getUsrNameAndPassword(netfd, &usrName, &usrPassword); + LOGRECORD(INFO,"getUsrNameAndPassword"); if(flag == 0){ close(netfd); goto finish; } + LOGRECORD(INFO,"flag"); } + LOGRECORD(INFO,"getusrname and password finish"); // 检查该用户名 和 密码 是否正确,是否存在 int retcheck = checkusr(usrName.data, usrPassword.data, usrsql); - if(retcheck == 0){ + LOGRECORD(INFO,"checkusr"); + if(retcheck == 0){ send(netfd, &retcheck,sizeof(int),MSG_NOSIGNAL); strncpy(usr.username, usrName.data, strlen(usrName.data)); + LOGRECORD(INFO,"send finish"); break; }else{ retcheck = -1; send(netfd, &retcheck, sizeof(int),MSG_NOSIGNAL); + LOGRECORD(INFO,"send finish"); } } + strcpy(usr.username,usrName.data); // 将usr表中用户id,复制到usr结构体中,方便使用 char sqlCommand[1024] = {0}; - sprintf(sqlCommand,"select id from usr where usrname = %s AND path = '\'",usr.username); + sprintf(sqlCommand,"select id from vfsystem where usrname = '%s' and path = '\'",usr.username); int ret = mysql_query(usrsql, sqlCommand); - ERROR_CHECK(ret, -1, "mysql_query"); + printf("%d",ret); + LOGRECORD(INFO,"get usr id"); MYSQL_RES *result = mysql_store_result(usrsql); MYSQL_ROW row = mysql_fetch_row(result); - mysql_free_resuslt(result); + mysql_free_result(result); memcpy(&usr.initid,&row[0],sizeof(int)); memcpy(&usr.curid,&usr.initid,sizeof(int)); + LOGRECORD(INFO,"usr initiaze finish!"); while(1){ int ret = execCommand(netfd,&usr,usrsql); @@ -201,6 +221,7 @@ void *threadFunc(void* arg){ } } finish: + LOGRECORD(INFO,"finish"); continue; } -- Gitee