From 8e15b011871c185cd67422a47fb6b99cb69b47bf Mon Sep 17 00:00:00 2001 From: zhouzian Date: Mon, 2 Sep 2019 15:37:00 +0800 Subject: [PATCH] =?UTF-8?q?Mod=20aaa-12=20=E6=96=B0=E5=A2=9E=E5=88=9B?= =?UTF-8?q?=E5=BB=BA=E8=A1=A8=EF=BC=8C=E4=BF=AE=E6=94=B9lighttpd=E7=BC=96?= =?UTF-8?q?=E8=AF=91=E6=8A=A5=E8=AD=A6=20RCA=EF=BC=9A=20SOL=EF=BC=9A=20?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=BA=EF=BC=9Azhouzian=20=E6=A3=80?= =?UTF-8?q?=E8=A7=86=E4=BA=BA=EF=BC=9Azhouzian?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../usermanager-server/user.c | 24 ++++++++ .../usermanager-server/user_group.c | 16 ++++++ .../user_manager/usermanager-auth/user_auth.c | 2 +- .../usermanager-test/test_usermanager.c | 52 ++++++++++++++++++ libs/src/lighttpd-1.4.51/src/user_auth.c | 55 ++++++------------- 5 files changed, 109 insertions(+), 40 deletions(-) diff --git a/Platform/user/configm/config-server/user_manager_config/usermanager-server/user.c b/Platform/user/configm/config-server/user_manager_config/usermanager-server/user.c index af7c3522b..c83e8003c 100644 --- a/Platform/user/configm/config-server/user_manager_config/usermanager-server/user.c +++ b/Platform/user/configm/config-server/user_manager_config/usermanager-server/user.c @@ -922,6 +922,7 @@ void um_getuser_db(char ** user_db) { int num = 0; int size = 0; + int ret_create = 0; re_connect(); if(NULL == um_hdbc) @@ -929,6 +930,29 @@ void um_getuser_db(char ** user_db) return; } + char * create_user = "CREATE TABLE IF NOT EXISTS user_account (\ + uuid bigint(11) NOT NULL AUTO_INCREMENT,\ + id bigint(11) NOT NULL,\ + group_id bigint(11) NOT NULL,\ + user_name char(255) NOT NULL,\ + udescription char(255) DEFAULT NULL,\ + password char(255) NOT NULL DEFAULT 'A31as%4Gb',\ + multi_player bigint(8) NOT NULL DEFAULT '0',\ + valid_always bigint(8) NOT NULL DEFAULT '0',\ + valid_begin_time char(255) DEFAULT NULL,\ + valid_end_time char(255) DEFAULT NULL,\ + PRIMARY KEY (uuid,id),\ + UNIQUE KEY id (id) USING BTREE,\ + UNIQUE KEY user_name (user_name) USING BTREE,\ + KEY group_id (group_id) USING BTREE,\ + CONSTRAINT user_account_ibfk_1 FOREIGN KEY (group_id) REFERENCES user_group (id) ON DELETE CASCADE ON UPDATE CASCADE\ + ) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8"; + ret_create = create_database_table(USER_MANAGER_DBID, um_hdbc, USER_TABLE, create_user); + if(DB_RET_OK != ret_create) + { + return; + } + char * select_sql = "SELECT id ID, group_id GID, multi_player multi, valid_always valid, user_name uname, udescription, \ valid_begin_time,valid_end_time FROM user_account"; char * ret_user = select_datebase_by_number(USER_MANAGER_DBID, um_hdbc, USER_TABLE, select_sql, 1, 0, &num, 0); diff --git a/Platform/user/configm/config-server/user_manager_config/usermanager-server/user_group.c b/Platform/user/configm/config-server/user_manager_config/usermanager-server/user_group.c index f122bf5ea..9a7922e56 100644 --- a/Platform/user/configm/config-server/user_manager_config/usermanager-server/user_group.c +++ b/Platform/user/configm/config-server/user_manager_config/usermanager-server/user_group.c @@ -446,6 +446,7 @@ void um_getgroup_db(char ** group_db) { int num = 0; int size = 0; + int ret_create = 0; re_connect(); if(NULL == um_hdbc) @@ -453,6 +454,21 @@ void um_getgroup_db(char ** group_db) return; } + char * create_group = "CREATE TABLE IF NOT EXISTS user_group (\ + uuid bigint(20) NOT NULL AUTO_INCREMENT,\ + id bigint(11) NOT NULL,\ + gname char(255) NOT NULL,\ + gdescription char(255) DEFAULT NULL,\ + PRIMARY KEY (uuid),\ + UNIQUE KEY id (id) USING BTREE,\ + UNIQUE KEY gname (gname) USING BTREE\ + ) ENGINE=InnoDB AUTO_INCREMENT=1059 DEFAULT CHARSET=utf8"; + ret_create = create_database_table(USER_MANAGER_DBID, um_hdbc, USER_GROUP_TABLE, create_group); + if(DB_RET_OK != ret_create) + { + return; + } + char * select_sql = "SELECT user_group.id ID, user_group.gname, user_group.gdescription FROM user_group"; char * ret_group = select_datebase_by_number(USER_MANAGER_DBID, um_hdbc, USER_GROUP_TABLE, select_sql, 1, 0, &num, 0); diff --git a/Product/user/user_manager/usermanager-auth/user_auth.c b/Product/user/user_manager/usermanager-auth/user_auth.c index 664695717..10f5f8e01 100644 --- a/Product/user/user_manager/usermanager-auth/user_auth.c +++ b/Product/user/user_manager/usermanager-auth/user_auth.c @@ -89,7 +89,7 @@ static void empty_fail_time_queue(unsigned short user_id) { if(NULL != AUTH_RECORD.fail_time) { - memset(AUTH_RECORD.fail_time, 0, sizeof(AUTH_RECORD.fail_time)); + memset(AUTH_RECORD.fail_time, 0, sizeof(time_t) * AUTH_RECORD.max_size); } AUTH_RECORD.front = 0; AUTH_RECORD.rear = 0; diff --git a/Product/user/user_manager/usermanager-test/test_usermanager.c b/Product/user/user_manager/usermanager-test/test_usermanager.c index ca8413dda..d75282e5b 100644 --- a/Product/user/user_manager/usermanager-test/test_usermanager.c +++ b/Product/user/user_manager/usermanager-test/test_usermanager.c @@ -28,6 +28,58 @@ void test(int a, int b, int c, int d) } int main(void) +{ + char * testin; //input + char testout[2000]; //output + ret_code ret_pro; //执行结果 + int outlen = 1; //out数据长度 + + void *test_hdbc = connect_database(USER_ACCOUNT_DATABASE_ID); + if(NULL == test_hdbc) + { + printf("fail connect database... \n"); + } + + char * create_group1 = "CREATE TABLE IF NOT EXISTS user_group1 (\ + uuid bigint(20) NOT NULL AUTO_INCREMENT,\ + id bigint(11) NOT NULL,\ + gname char(255) NOT NULL,\ + gdescription char(255) DEFAULT NULL,\ + PRIMARY KEY (uuid),\ + UNIQUE KEY id (id) USING BTREE,\ + UNIQUE KEY gname (gname) USING BTREE\ + ) ENGINE=InnoDB AUTO_INCREMENT=1059 DEFAULT CHARSET=utf8"; + + char * create_user1 = "CREATE TABLE IF NOT EXISTS user_account1 (\ + uuid bigint(11) NOT NULL AUTO_INCREMENT,\ + id bigint(11) NOT NULL,\ + group_id bigint(11) NOT NULL,\ + user_name char(255) NOT NULL,\ + udescription char(255) DEFAULT NULL,\ + password char(255) NOT NULL DEFAULT 'A31as%4Gb',\ + multi_player bigint(8) NOT NULL DEFAULT '0',\ + valid_always bigint(8) NOT NULL DEFAULT '0',\ + valid_begin_time char(255) DEFAULT NULL,\ + valid_end_time char(255) DEFAULT NULL,\ + PRIMARY KEY (uuid,id),\ + UNIQUE KEY id (id) USING BTREE,\ + UNIQUE KEY user_name (user_name) USING BTREE,\ + KEY group_id (group_id) USING BTREE,\ + CONSTRAINT user_account1_ibfk_1 FOREIGN KEY (group_id) REFERENCES user_group1 (id) ON DELETE CASCADE ON UPDATE CASCADE\ + ) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8"; + int rett = 0; + + rett = create_database_table(1, test_hdbc, "user_group1", create_group1); + printf("ret create user_group : %d .\n", rett); + + rett = create_database_table(1, test_hdbc, "user_account1", create_user1); + printf("ret create user_account : %d .\n", rett); + + + return 0; +} + +int main5(void) { char * testrec; int testnum; diff --git a/libs/src/lighttpd-1.4.51/src/user_auth.c b/libs/src/lighttpd-1.4.51/src/user_auth.c index 5051ab13e..95a9511ca 100644 --- a/libs/src/lighttpd-1.4.51/src/user_auth.c +++ b/libs/src/lighttpd-1.4.51/src/user_auth.c @@ -13,9 +13,9 @@ #define AUTH_INIT_SUCCESS 0 #define AUTH_USER_INDEX_MAX (100 + 2) -#define UNAMESIZE (127 + 1) -#define UDESIZE (127 + 1) -#define UPWDSIZE (63 + 1) +#define UNAMESIZE (64) +#define UDESIZE (64) +#define UPWDSIZE (64) typedef struct user_auth { @@ -78,6 +78,7 @@ static int init_fail_time_queue(unsigned short user_id, int max_size) //记录日志,申请内存失败 return AUTH_INIT_FAIL; } + memset(AUTH_RECORD.fail_time, 0, sizeof(time_t) * max_size); AUTH_RECORD.max_size = max_size; return AUTH_INIT_SUCCESS; @@ -88,7 +89,7 @@ static void empty_fail_time_queue(unsigned short user_id) { if(NULL != AUTH_RECORD.fail_time) { - memset(AUTH_RECORD.fail_time, 0, sizeof(AUTH_RECORD.fail_time)); + memset(AUTH_RECORD.fail_time, 0, sizeof(time_t) * AUTH_RECORD.max_size); } AUTH_RECORD.front = 0; AUTH_RECORD.rear = 0; @@ -255,6 +256,7 @@ bool get_user_from_database(char* username, void* hdbc, USERACCOUNT* user_info, "multi_player": 0, "valid_always": 0, "user_name": "用户07", + "password":"123456", "udescription": "", "valid_begin_time": "", "valid_end_time": "" @@ -387,11 +389,11 @@ void user_auth_login(char* username, char* password, USER_AUTH_RET *auth_result) int config_fail_time = 0; //规定时间,失败的时间范围,锁定前 time_t login_time; //登陆时间 time_t remain_lock_time; //锁定剩余时间 - USERACCOUNT *user_info; //临时数据,存储登陆用户名对应的用户信息 + USERACCOUNT user_info; //临时数据,存储登陆用户名对应的用户信息 void * auth_hdbc; int sql_num; - memset(auth_result, 0, sizeof(USER_AUTH_RET)); + //memset(auth_result, 0, sizeof(USER_AUTH_RET)); login_time = time(NULL); //1、校验用户名和密码 @@ -422,40 +424,23 @@ void user_auth_login(char* username, char* password, USER_AUTH_RET *auth_result) /* 校验上述的三个参数都要大于0 */ //3、根据用户名查询用户信息-用户id和用户组id - user_info = (USERACCOUNT*)malloc(sizeof(USERACCOUNT)); - memset(user_info, 0, sizeof(USERACCOUNT)); - if (NULL == user_info) - { - /* 记录日志 */ - //printf("user_auth()->user_auth->user_info:error. \n"); - auth_result->ret = AUTH_ERR; - return; - } - //读取json文件获取数据 - // get_from_json(username, user_info); - // if (NULL == user_info) - // { - // auth_result->ret = AUTH_FAIL_PASSWD; - // xfree(user_info); - // return; - // } /* 数据库查询 */ - bool ret_getuser = get_user_from_database(username, auth_hdbc, user_info, &sql_num); + bool ret_getuser = get_user_from_database(username, auth_hdbc, &user_info, &sql_num); if(!ret_getuser) { auth_result->ret = AUTH_FAIL_DATABASE; return; } - if(0 == sql_num || NULL == user_info) + if(0 == sql_num) { auth_result->ret = AUTH_FAIL_PASSWD; return; } - user_id = user_info->ID; - group_id = user_info->GID; + user_id = user_info.ID; + group_id = user_info.GID; //4、初始化用户认证结果记录表对应id内的循环队列 if (DATA_EMPTY == AUTH_RECORD.max_size) @@ -468,7 +453,6 @@ void user_auth_login(char* username, char* password, USER_AUTH_RET *auth_result) if (AUTH_INIT_FAIL == init_queue_ret) { auth_result->ret = AUTH_ERR; - xfree(user_info); return; } } @@ -486,7 +470,6 @@ void user_auth_login(char* username, char* password, USER_AUTH_RET *auth_result) if (AUTH_INIT_FAIL == init_queue_ret) { auth_result->ret = AUTH_ERR; - xfree(user_info); return; } empty_fail_time_queue(user_id); @@ -499,14 +482,12 @@ void user_auth_login(char* username, char* password, USER_AUTH_RET *auth_result) if (remain_lock_time < 0) { auth_result->ret = AUTH_FAIL_INPUT; - xfree(user_info); return; } - if ((int)(60.0 * config_lock_time) > 60 *remain_lock_time) + if ((int)(60.0 * config_lock_time) > remain_lock_time) { auth_result->ret = AUTH_FAIL_LOCK; auth_result->remain_lock_time = remain_lock_time; - xfree(user_info); return; } //锁定时间已过,解锁,清空该队列 @@ -514,15 +495,14 @@ void user_auth_login(char* username, char* password, USER_AUTH_RET *auth_result) } //6、判断是否在有效期内 - user_valid = AUTH_VALID_GET(user_info->multi_valid); + user_valid = AUTH_VALID_GET(user_info.multi_valid); if (1 == user_valid) { - if (login_time < user_info->valid_begin_time || login_time > user_info->valid_end_time) + if (login_time < user_info.valid_begin_time || login_time > user_info.valid_end_time) { auth_result->ret = AUTH_FAIL_VALID; /* 认证失败处理 */ auth_fail_operate(user_id, login_time, config_fail_time); - xfree(user_info); return; } } @@ -534,18 +514,16 @@ void user_auth_login(char* username, char* password, USER_AUTH_RET *auth_result) /* 认证失败处理 */ auth_fail_operate(user_id, login_time, config_fail_time); - xfree(user_info); return; } //8、匹配密码 - if (0 != strcmp(password, user_info->passwd)) + if (0 != strcmp(password, user_info.passwd)) { auth_result->ret = AUTH_FAIL_PASSWD; /* 认证失败处理 */ auth_fail_operate(user_id, login_time, config_fail_time); - xfree(user_info); return; } @@ -559,7 +537,6 @@ void user_auth_login(char* username, char* password, USER_AUTH_RET *auth_result) auth_result->group_id = group_id; disconnect_database(20, auth_hdbc); - xfree(user_info); return; }