Mod aaa-12 修改配置-未认证权限

RCA:
SOL:
修改人:chenling
检视人:
This commit is contained in:
ChenLing 2019-08-20 15:46:36 +08:00
parent 52041d6270
commit 16399fce82
3 changed files with 464 additions and 667 deletions

File diff suppressed because it is too large Load Diff

View File

@ -4,37 +4,54 @@
#include "../include/user_authfree.h"
#include "string.h"
#define AUTHFREE_DATABASE_ID 16
#define AUTHFREE_DATABASE_ID (16)
#define AUTHFREE_TABLE "authfree"
extern freeauth_configure_t freeauth_array[];
#define ADDAUTFREE_SUCCESS 0 //增加未认证权限成功
#define ADDAUTFREE_FAIL_DATABASE 1 //增加未认证权限成功失败
#define AUTHFREE_NAME_EXISTED 2 //未认证权限名称已存在
#define MODAUTHFREE_SUCCESS 3 //修改未认证权限成功
#define MODAUTHFREE_FAIL_DATABASE 4 //修改未认证权限失败
#define AUTHFREE_NAME_NOTFOUND 5 //未认证权限名称不存在
#define DELAUTHFREE_SUCCESS 6 //删除未认证权限成功
#define DELAUTHFREE_FAIL_DATABASE 7 //删除未认证权限失败
#define RULENUM_EXCEED 8 //未认证权限数量超过最大值
static char *authfreemes[] = {"addrule success", "addrule fail", "rule existed", "modrule success",
"modrule failure", "rule not found", "delrule success", "delrule fail", "rulenum exceed maxnum",
"rule full"
};
char * authfreemes[] = {"addrule success", "addrule fail", "rule existed", "modrule success",
"modrule failure", "rule not found", "delrule success", "delrule fail", "rulenum exceed maxnum"};
static char *get_sql_ret_message(SQL_RET_CODE code)
{
if(code >= 0 && code < CODE_MAX) {
return authfreemes[code];
}
return "Unknown code";
}
static int is_rule_full(void)
{
for(int i = 0; i < RULE_MAX_NUM; i++) {
if(strlen(freeauth_array[i].name) == 0) {
return 0;
}
}
return 1;
}
/*增加未认证权限规则*/
void add_authfree(int rule_priority, char *name, uint32_t sip, uint32_t dip, int dport, int flag, authfree_result_t *authfree_result)
{
void * authfree_hdbc;
char * ret_sql = NULL;
void *authfree_hdbc;
char *ret_sql = NULL;
int ret_add;
int ret;
int num;
int i;
int num_sql;
if (NULL == authfree_result)
{
if(NULL == authfree_result) {
return;
}
if(is_rule_full()) {
authfree_result->resultcode = RULE_FULL;
authfree_result->message = get_sql_ret_message(authfree_result->resultcode);
return;
}
@ -42,8 +59,8 @@ void add_authfree(int rule_priority, char *name, uint32_t sip, uint32_t dip, int
/* 连接数据库 */
authfree_hdbc = connect_database(AUTHFREE_DATABASE_ID);
if(NULL == authfree_hdbc)
{
if(NULL == authfree_hdbc) {
printf("connetc failure\n");
return;
}
@ -51,40 +68,38 @@ void add_authfree(int rule_priority, char *name, uint32_t sip, uint32_t dip, int
/*长整型bigint 浮点型double 字符串character(10)*/
printf("authfree_hdbc = %p\n", authfree_hdbc);
ret = create_database_table(AUTHFREE_DATABASE_ID, authfree_hdbc, "authfree", "create table authfree(rule_priority bigint, name character(32), sip bigint, dip bigint, dport bigint, flag bigint)");
printf("%d \n",ret);
printf("%d \n", ret);
/*查询数据库是否存在该权限规则*/
char * select_sql = "SELECT rule_priority, name, sip, dip, dport, flag FROM `authfree` WHERE name = ?";
char *select_sql = "SELECT rule_priority, name, sip, dip, dport, flag FROM `authfree` WHERE name = ?";
ret_sql = select_datebase_by_number(AUTHFREE_DATABASE_ID, authfree_hdbc, "authfree", select_sql, 1, 0, &num, 1,
DB_DATA_STRING_TYPE, strlen(name)+1, name);
if(NULL != ret_sql)
{
DB_DATA_STRING_TYPE, strlen(name) + 1, name);
if(NULL != ret_sql) {
/*用户名已存在*/
disconnect_database(AUTHFREE_DATABASE_ID , authfree_hdbc);
authfree_result->resultcode = 2;
authfree_result->message = authfreemes[authfree_result->resultcode];
disconnect_database(AUTHFREE_DATABASE_ID, authfree_hdbc);
authfree_result->resultcode = RULE_EXISTED;
authfree_result->message = get_sql_ret_message(authfree_result->resultcode);
return;
}
else
{
} else {
/* 根据指定信息查询数据库的获取的结果的条目数 条目数大于10 则不能再添加 */
char * select_num = "SELECT rule_priority, name, sip, dip, dport, flag FROM `authfree`";
ret = get_select_datebase_number(AUTHFREE_DATABASE_ID, authfree_hdbc, "authfree", select_num , &num_sql, 6,
char *select_num = "SELECT rule_priority, name, sip, dip, dport, flag FROM `authfree`";
ret = get_select_datebase_number(AUTHFREE_DATABASE_ID, authfree_hdbc, "authfree", select_num, &num_sql, 6,
DB_DATA_INT_TYPE, sizeof(rule_priority), rule_priority,
DB_DATA_STRING_TYPE, strlen(name)+1, name,
DB_DATA_STRING_TYPE, strlen(name) + 1, name,
DB_DATA_INT_TYPE, sizeof(sip), sip,
DB_DATA_INT_TYPE, sizeof(dip), dip,
DB_DATA_INT_TYPE, sizeof(dport), dport,
DB_DATA_INT_TYPE, sizeof(flag), flag);
printf("num_sql = %d \n", num_sql);
printf("ret = %d \n", ret);
if (num_sql > RULE_MAX_NUM)
{
if(num_sql > RULE_MAX_NUM) {
/*添加失败*/
disconnect_database(AUTHFREE_DATABASE_ID , authfree_hdbc); // ret_release记录日志
authfree_result->resultcode = 8;
authfree_result->message = authfreemes[authfree_result->resultcode];
disconnect_database(AUTHFREE_DATABASE_ID, authfree_hdbc); // ret_release记录日志
authfree_result->resultcode = RULE_ID_MAX;
authfree_result->message = get_sql_ret_message(authfree_result->resultcode);
return;
}
@ -92,64 +107,62 @@ void add_authfree(int rule_priority, char *name, uint32_t sip, uint32_t dip, int
char *addfree_sql = "INSERT INTO `authfree` SET rule_priority = ?, name = ?, sip = ?, dip = ?, dport = ?, flag = ?";
ret_add = update_database(AUTHFREE_DATABASE_ID, authfree_hdbc, DB_OP_INSERT, AUTHFREE_TABLE, addfree_sql, 6,
DB_DATA_INT_TYPE, sizeof(rule_priority), rule_priority,
DB_DATA_STRING_TYPE, strlen(name)+1, name,
DB_DATA_STRING_TYPE, strlen(name) + 1, name,
DB_DATA_INT_TYPE, sizeof(sip), sip,
DB_DATA_INT_TYPE, sizeof(dip), dip,
DB_DATA_INT_TYPE, sizeof(dport), dport,
DB_DATA_INT_TYPE, sizeof(flag), flag);
printf("the value of ret:%d\n", ret_add);
if(0 != ret_add)
{
if(0 != ret_add) {
/*添加失败*/
disconnect_database(AUTHFREE_DATABASE_ID , authfree_hdbc); // ret_release记录日志
authfree_result->resultcode = 1;
authfree_result->message = authfreemes[authfree_result->resultcode];
disconnect_database(AUTHFREE_DATABASE_ID, authfree_hdbc); // ret_release记录日志
authfree_result->resultcode = ADD_RULE_ERR;
authfree_result->message = get_sql_ret_message(authfree_result->resultcode);
return;
}
}
disconnect_database(AUTHFREE_DATABASE_ID , authfree_hdbc);
disconnect_database(AUTHFREE_DATABASE_ID, authfree_hdbc);
/*存未认证权限数数组*/
for(i = 0; i < RULE_MAX_NUM; i++)
{
printf("the name is :%s\n", freeauth_array[i].name );
for(i = 0; i < RULE_MAX_NUM; i++) {
printf("the name is :%s\n", freeauth_array[i].name);
/*两个字符串相等 strcmp值为0*/
int a = strlen(freeauth_array[i].name);
printf("%d\n", a);
if (0 == strlen(freeauth_array[i].name))
{
if(0 == strlen(freeauth_array[i].name)) {
printf("%s(%d) freeauth_array[%d] = %p\n", __FUNCTION__, __LINE__, i, &freeauth_array[i]);
memset(&freeauth_array[i], 0, sizeof(freeauth_configure_t));
freeauth_array[i].rule_priority = rule_priority;
memcpy(freeauth_array[i].name, name, sizeof(char)*32);
strncpy(freeauth_array[i].name, name, 32);
freeauth_array[i].sip = sip;
freeauth_array[i].dip = dip;
freeauth_array[i].dport = dport;
freeauth_array[i].flag = flag;
printf("[%d %s %d %d %d %d %d]\n",freeauth_array[i].rule_priority,freeauth_array[i].name, freeauth_array[i].sip,
freeauth_array[i].dip ,freeauth_array[i].dport, freeauth_array[i].dport, i);
printf("[%d %s %d %d %d %d %d]\n", freeauth_array[i].rule_priority, freeauth_array[i].name, freeauth_array[i].sip,
freeauth_array[i].dip, freeauth_array[i].dport, freeauth_array[i].dport, i);
break;
}
}
/*添加成功*/
authfree_result->resultcode = 0;
authfree_result->message = authfreemes[authfree_result->resultcode];
authfree_result->resultcode = ADD_RULE_OK;
authfree_result->message = get_sql_ret_message(authfree_result->resultcode);
}
/*修改未认证权限*/
void mod_authfree(int rule_priority, char *name, uint32_t sip, uint32_t dip, int dport, int flag, authfree_result_t *authfree_result)
{
void * authfree_hdbc;
char * ret_sql = NULL;
void *authfree_hdbc;
char *ret_sql = NULL;
int ret_mod;
int ret;
int num;
int i;
if (NULL == authfree_result)
{
if(NULL == authfree_result) {
return;
}
@ -157,8 +170,8 @@ void mod_authfree(int rule_priority, char *name, uint32_t sip, uint32_t dip, int
/* 连接数据库 */
authfree_hdbc = connect_database(AUTHFREE_DATABASE_ID);
if(NULL == authfree_hdbc)
{
if(NULL == authfree_hdbc) {
printf("connetc failure\n");
return;
}
@ -166,22 +179,20 @@ void mod_authfree(int rule_priority, char *name, uint32_t sip, uint32_t dip, int
/*长整型bigint 浮点型double 字符串character(10)*/
printf("authfree_hdbc = %p\n", authfree_hdbc);
ret = create_database_table(AUTHFREE_DATABASE_ID, authfree_hdbc, "authfree", "create table authfree(name character(32), sip bigint, dip bigint, dport bigint)");
printf("%d \n",ret);
printf("%d \n", ret);
/*查询数据库是否存在该权限规则*/
char * select_sql = "SELECT name, sip, dip, dport FROM `authfree`WHERE name = ?";
char *select_sql = "SELECT name, sip, dip, dport FROM `authfree`WHERE name = ?";
ret_sql = select_datebase_by_number(AUTHFREE_DATABASE_ID, authfree_hdbc, "authfree", select_sql, 1, 0, &num, 1,
DB_DATA_STRING_TYPE, strlen(name)+1, name);
if(NULL == ret_sql)
{
DB_DATA_STRING_TYPE, strlen(name) + 1, name);
if(NULL == ret_sql) {
/*未认证权限用户名不存在*/
disconnect_database(AUTHFREE_DATABASE_ID , authfree_hdbc);
authfree_result->resultcode = 5;
authfree_result->message = authfreemes[authfree_result->resultcode];
disconnect_database(AUTHFREE_DATABASE_ID, authfree_hdbc);
authfree_result->resultcode = RULE_NOT_FOUNT;
authfree_result->message = get_sql_ret_message(authfree_result->resultcode);
return;
}
else
{
} else {
/*修改authfree表中内部源IP地址、目的IP地址、目的端口号 未认证权限名称不能修改 */
char *modfree_sql = "UPDATE `authfree` SET rule_priority = ?, sip = ?, dip = ?, dport = ? ,flag = ? WHERE name = ?";
ret_mod = update_database(AUTHFREE_DATABASE_ID, authfree_hdbc, DB_OP_UPDATE, AUTHFREE_TABLE, modfree_sql, 6,
@ -190,65 +201,62 @@ void mod_authfree(int rule_priority, char *name, uint32_t sip, uint32_t dip, int
DB_DATA_INT_TYPE, sizeof(dip), dip,
DB_DATA_INT_TYPE, sizeof(dport), dport,
DB_DATA_INT_TYPE, sizeof(flag), flag,
DB_DATA_STRING_TYPE, strlen(name)+1, name);
DB_DATA_STRING_TYPE, strlen(name) + 1, name);
printf("the value of ret:%d\n", ret_mod);
if(0 != ret_mod)
{
if(0 != ret_mod) {
/*修改失败*/
disconnect_database(AUTHFREE_DATABASE_ID , authfree_hdbc); // ret_release记录日志
authfree_result->resultcode = 4;
authfree_result->message = authfreemes[authfree_result->resultcode];
disconnect_database(AUTHFREE_DATABASE_ID, authfree_hdbc); // ret_release记录日志
authfree_result->resultcode = MOD_RULE_ERR;
authfree_result->message = get_sql_ret_message(authfree_result->resultcode);
return;
}
}
disconnect_database(AUTHFREE_DATABASE_ID , authfree_hdbc);
disconnect_database(AUTHFREE_DATABASE_ID, authfree_hdbc);
/*修改对应未认证权限数数组*/
for (i = 0; i < RULE_MAX_NUM; i++)
{
for(i = 0; i < RULE_MAX_NUM; i++) {
/*两个字符串相等 strcmp值为0*/
if (0 == strcmp(freeauth_array[i].name, name))
{
if(0 == strcmp(freeauth_array[i].name, name)) {
printf("%s(%d) freeauth_array[%d] = %p\n", __FUNCTION__, __LINE__, i, &freeauth_array[i]);
freeauth_array[i].rule_priority = rule_priority;
freeauth_array[i].sip = sip;
freeauth_array[i].dip = dip;
freeauth_array[i].dport = dport;
freeauth_array[i].flag = flag;
printf("[%d %s %d %d %d %d %d]\n",freeauth_array[i].rule_priority,freeauth_array[i].name, freeauth_array[i].sip,
freeauth_array[i].dip ,freeauth_array[i].dport, freeauth_array[i].dport, i);
printf("[%d %s %d %d %d %d %d]\n", freeauth_array[i].rule_priority, freeauth_array[i].name, freeauth_array[i].sip,
freeauth_array[i].dip, freeauth_array[i].dport, freeauth_array[i].dport, i);
break;
}
}
#if 0
#if 0
/*打印数组内全部元素*/
for (i = 0; i < RULE_MAX_NUM; i++)
{
printf("%s %d %d %d %d\n",freeauth_array[i].name, freeauth_array[i].sip,freeauth_array[i].dip ,freeauth_array[i].dport, i);
for(i = 0; i < RULE_MAX_NUM; i++) {
printf("%s %d %d %d %d\n", freeauth_array[i].name, freeauth_array[i].sip, freeauth_array[i].dip, freeauth_array[i].dport, i);
}
#endif
#endif
/*修改成功*/
authfree_result->resultcode = 3;
authfree_result->message = authfreemes[authfree_result->resultcode];
return;
authfree_result->resultcode = MOD_RULE_OK;
authfree_result->message = get_sql_ret_message(authfree_result->resultcode);
}
/*删除未认证权限*/
void del_authfree(char *name, authfree_result_t *authfree_result)
{
void * authfree_hdbc;
char * ret_sql = NULL;
void *authfree_hdbc;
char *ret_sql = NULL;
int ret_del;
int ret;
int num;
int i;
if (NULL == authfree_result)
{
if(NULL == authfree_result) {
return;
}
@ -256,8 +264,8 @@ void del_authfree(char *name, authfree_result_t *authfree_result)
/* 连接数据库 */
authfree_hdbc = connect_database(AUTHFREE_DATABASE_ID);
if(NULL == authfree_hdbc)
{
if(NULL == authfree_hdbc) {
printf("connetc failure\n");
return;
}
@ -265,67 +273,58 @@ void del_authfree(char *name, authfree_result_t *authfree_result)
/*长整型bigint 浮点型double 字符串character(10)*/
printf("authfree_hdbc = %p\n", authfree_hdbc);
ret = create_database_table(AUTHFREE_DATABASE_ID, authfree_hdbc, "authfree", "create table authfree(name character(32), sip bigint, dip bigint, dport bigint)");
printf("%d \n",ret);
printf("%d \n", ret);
/*查询数据库是否存在该权限规则*/
char * select_sql = "SELECT rule_priority, name, sip, dip, dport, flag FROM `authfree`WHERE name = ?";
char *select_sql = "SELECT rule_priority, name, sip, dip, dport, flag FROM `authfree`WHERE name = ?";
ret_sql = select_datebase_by_number(AUTHFREE_DATABASE_ID, authfree_hdbc, "authfree", select_sql, 1, 0, &num, 1,
DB_DATA_STRING_TYPE, strlen(name)+1, name);
if(NULL == ret_sql)
{
DB_DATA_STRING_TYPE, strlen(name) + 1, name);
if(NULL == ret_sql) {
/*未认证权限用户名不存在*/
authfree_result->resultcode = 5;
authfree_result->message = authfreemes[authfree_result->resultcode];
authfree_result->resultcode = RULE_NOT_FOUNT;
authfree_result->message = get_sql_ret_message(authfree_result->resultcode);
return;
}
else
{
} else {
/*删除authfree表中未认证权限名称、内部源IP地址、目的IP地址、目的端口号 */
char* delfree_sql = "DELETE FROM authfree WHERE name = ?";
char *delfree_sql = "DELETE FROM authfree WHERE name = ?";
int ret_del = update_database(AUTHFREE_DATABASE_ID, authfree_hdbc, DB_OP_DEL, AUTHFREE_TABLE, delfree_sql, 1,
DB_DATA_STRING_TYPE, strlen(name)+1, name);
DB_DATA_STRING_TYPE, strlen(name) + 1, name);
printf("the value of ret:%d\n", ret_del);
if(0 != ret_del)
{
disconnect_database(AUTHFREE_DATABASE_ID , authfree_hdbc); // ret_release记录日志
authfree_result->resultcode = 7; /*删除失败*/
authfree_result->message = authfreemes[authfree_result->resultcode];
if(0 != ret_del) {
disconnect_database(AUTHFREE_DATABASE_ID, authfree_hdbc); // ret_release记录日志
authfree_result->resultcode = DEL_RULE_ERR; /*删除失败*/
authfree_result->message = get_sql_ret_message(authfree_result->resultcode);
return;
}
}
disconnect_database(AUTHFREE_DATABASE_ID , authfree_hdbc);
disconnect_database(AUTHFREE_DATABASE_ID, authfree_hdbc);
/*修改对应未认证权限数数组*/
for (i = 0; i < RULE_MAX_NUM; i++)
{
for(i = 0; i < RULE_MAX_NUM; i++) {
/*两个字符串相等 strcmp值为0*/
if (0 == strcmp(freeauth_array[i].name, name))
{
if(0 == strcmp(freeauth_array[i].name, name)) {
printf("%s(%d) freeauth_array[%d] = %p\n", __FUNCTION__, __LINE__, i, &freeauth_array[i]);
freeauth_array[i].rule_priority = 0;
memcpy(freeauth_array[i].name, "0" , sizeof(char)*32);
freeauth_array[i].sip = 0;
freeauth_array[i].dip = 0;
freeauth_array[i].dport = 0;
freeauth_array[i].flag = 0;
printf("[%d %s %d %d %d %d %d]\n",freeauth_array[i].rule_priority,freeauth_array[i].name, freeauth_array[i].sip,
freeauth_array[i].dip ,freeauth_array[i].dport, freeauth_array[i].dport, i);
memset(&freeauth_array[i], 0, sizeof(freeauth_configure_t));
printf("[%d %s %d %d %d %d %d]\n", freeauth_array[i].rule_priority, freeauth_array[i].name, freeauth_array[i].sip,
freeauth_array[i].dip, freeauth_array[i].dport, freeauth_array[i].dport, i);
break;
}
}
#if 0
#if 0
/*打印数组内全部元素*/
for (i = 0; i < RULE_MAX_NUM; i++)
{
printf("[%d %s %d %d %d %d %d]\n",freeauth_array[i].rule_priority,freeauth_array[i].name, freeauth_array[i].sip,
freeauth_array[i].dip ,freeauth_array[i].dport, freeauth_array[i].dport, i);
for(i = 0; i < RULE_MAX_NUM; i++) {
printf("[%d %s %d %d %d %d %d]\n", freeauth_array[i].rule_priority, freeauth_array[i].name, freeauth_array[i].sip,
freeauth_array[i].dip, freeauth_array[i].dport, freeauth_array[i].dport, i);
}
#endif
#endif
/*删除成功*/
authfree_result->resultcode = 6;
authfree_result->message = authfreemes[authfree_result->resultcode];
return;
authfree_result->resultcode = DEL_RUL_OK;
authfree_result->message = get_sql_ret_message(authfree_result->resultcode);
}

View File

@ -1,14 +1,30 @@
#ifndef USER_AUTHFREE_H_
#define USER_AUTHFREE_H_
#define ADDAUTFREE_SUCCESS 0 //增加未认证权限成功
#define ADDAUTFREE_FAIL_DATABASE 1 //增加未认证权限成功失败
#define AUTHFREE_NAME_EXISTED 2 //未认证权限名称已存在
#define MODAUTHFREE_SUCCESS 3 //修改未认证权限成功
#define MODAUTHFREE_FAIL_DATABASE 4 //修改未认证权限失败
#define AUTHFREE_NAME_NOTFOUND 5 //未认证权限名称不存在
#define DELAUTHFREE_SUCCESS 6 //删除未认证权限成功
#define DELAUTHFREE_FAIL_DATABASE 7 //删除未认证权限失败
#define ADDAUTFREE_SUCCESS (0) //增加未认证权限成功
#define ADDAUTFREE_FAIL_DATABASE (1) //增加未认证权限成功失败
#define AUTHFREE_NAME_EXISTED (2) //未认证权限名称已存在
#define MODAUTHFREE_SUCCESS (3) //修改未认证权限成功
#define MODAUTHFREE_FAIL_DATABASE (4) //修改未认证权限失败
#define AUTHFREE_NAME_NOTFOUND (5) //未认证权限名称不存在
#define DELAUTHFREE_SUCCESS (6) //删除未认证权限成功
#define DELAUTHFREE_FAIL_DATABASE (7) //删除未认证权限失败
#define RULENUM_EXCEED (8) //未认证权限数量超过最大值
typedef enum {
ADD_RULE_OK = 0,
ADD_RULE_ERR = 1,
RULE_EXISTED = 2,
MOD_RULE_OK = 3,
MOD_RULE_ERR = 4,
RULE_NOT_FOUNT = 5,
DEL_RUL_OK = 6,
DEL_RULE_ERR = 7,
RULE_ID_MAX = 8,
RULE_FULL = 9,
CODE_MAX,
} SQL_RET_CODE;
/*增加未认证权限规则*/
void add_authfree(int rule_priority, char *name, uint32_t sip, uint32_t dip, int dport, int flag, authfree_result_t *authfree_result);