Merge branch 'master' of git.komect.net:ISG/secogateway

This commit is contained in:
黄昕 2019-09-11 08:56:23 +08:00
commit d00a31c369
11 changed files with 269 additions and 448 deletions

View File

@ -468,7 +468,7 @@ static ret_code user_config_add_proc(uint source, uint config_type,
char *ret_char = NULL;
char *temp_begin_time, *temp_end_time, *temp_udesp, *temp_pwd;
int temp_multi, temp_valid, temp_output_len;
char *message[] = {"新增成功","用户组名不存在","用户名长度不符合","用户名中包含特殊字符","用户名重名","用户数已达到最大(最大用户数100)","数据库操作失败","系统错误"};
char *message[] = {"新增成功","用户组名不存在","用户名或描述长度不符合","用户名中包含特殊字符","用户名重名","用户数已达到最大(最大用户数100)","数据库操作失败","系统错误"};
/* 解析json串 */
root = cJSON_Parse(input);
@ -723,13 +723,29 @@ static ret_code user_config_mod_web_proc(uint source, uint config_type,
cJSON_Delete(root);
return ret;
}
cJSON * temp_udes_json = cJSON_GetObjectItem(data, "udescription");
if(!temp_udes_json)
{
ret = RET_INPUTERR;
cJSON_Delete(root);
return ret;
}
if(UDESIZE < strlen(temp_udes_json->valuestring))
{
ret = RET_INPUTERR;
cJSON_Delete(root);
return ret;
}
s2j_create_struct_obj(input_data, USERLIST);
s2j_struct_get_basic_element(input_data, data, int, ID);
s2j_struct_get_basic_element(input_data, data, int, GID);
S2J_STRUCT_GET_STRING_ELEMENT_N(input_data, data, uname,UNAMESIZE);
S2J_STRUCT_GET_STRING_ELEMENT_N(input_data, data, gname, GNAMESIZE);
S2J_STRUCT_GET_STRING_ELEMENT_N(input_data, data, passwd, UPWDSIZE);
S2J_STRUCT_GET_STRING_ELEMENT_N(input_data, data, udescription, UDESIZE);
S2J_STRUCT_GET_STRING_ELEMENT_N(input_data, data, udescription, UDESIZE+1);
s2j_struct_get_basic_element(input_data, data, int, resetpwd);
s2j_struct_get_basic_element(input_data, data, int, multi);
s2j_struct_get_basic_element(input_data, data, int, valid);

View File

@ -95,15 +95,30 @@ do{ \
/* 去除字符串前后空格 */
#define TRIM_NAME(in, out) \
do { \
char * c; \
int i; \
size_t nLen = strlen(in); \
i = 0; \
while(in[i] == ' ') {i++;} \
c = &in[i]; \
i = nLen - 1; \
while(in[i] == ' ') {i--;} \
memcpy(out, c, i + 1 - (c - in)); \
char * c;\
int i;\
int len;\
size_t nLen = strlen(in);\
i = 0;\
while(in[i] == ' ')\
{\
i++; \
}\
if (i != nLen)\
{\
c = &in[i];\
i = nLen - 1;\
while(in[i] == ' ') \
{\
i--;\
}\
len = i + 1 - (c - in);\
memcpy(out, c, i + 1 - (c - in));\
}\
else\
{\
memset(out, 0 ,strlen(out));\
}\
} while (0)
#endif

View File

@ -21,6 +21,7 @@
#define ADDUSER_FAIL_USERFULL 5 //用户已满
#define ADDUSER_FAIL_DATABASE 6 //存数据库失败
#define ADDUSER_ERROR 7 //系统错误
#define ADDUSER_FAIL_TIME 8 //有效时间错误
#define DELUSER_SUCCESS 0

View File

@ -73,6 +73,12 @@ void usermanager_add_user(char* uname_in, char* gname, char* udesp, char* pwd, i
/* 去除用户名前后空格 */
TRIM_NAME(uname_in, uname);
if(0 == strlen(uname))
{
uaddres->result = ADDUSER_FAIL_LENGTH;
return;
}
if (NULL == pwd || 0 == strcmp("",pwd))
{
pwd = "A31as%4Gb";
@ -87,24 +93,43 @@ void usermanager_add_user(char* uname_in, char* gname, char* udesp, char* pwd, i
{
valid = 0;
}
if(NULL == valid_begin_time)
if(NULL == valid_begin_time || "" == valid_begin_time)
{
valid_begin_time = "";
begin_time = 0;
}else
}
else
{
STRING2TIME_T(valid_begin_time, begin_time);
}
if(NULL == valid_end_time)
if(NULL == valid_end_time || "" == valid_end_time)
{
valid_end_time = "";
end_time = 0;
}else
}
else
{
STRING2TIME_T(valid_end_time, end_time);
}
/* 校验开始、结束时间 */
if(1 == valid)
{
if(begin_time >= end_time)
{
uaddres->result = ADDUSER_FAIL_TIME;
return;
}
time_t time_now = time(NULL);
if(time_now >= end_time)
{
uaddres->result = ADDUSER_FAIL_TIME;
return;
}
}
/* 连接数据库 */
re_connect();
if(NULL == um_hdbc)
@ -236,7 +261,7 @@ bool get_user_detail_by_user_uuid(int user_uuid, char ** user_detail)
bool mod_user_web(USERLIST* ulist)
{
int ret_release;
time_t cur_time;
time_t cur_time, begin_time, end_time;
char *temp_begin_time, *temp_end_time, *temp_pwd, *temp_udes, *temp_user_json;
/* 可以修改的数据用户组ID、描述、密码、公用账号、永久有效、有效期开始时间、有效期结束时间 */
@ -274,6 +299,29 @@ bool mod_user_web(USERLIST* ulist)
temp_end_time = "";
}
/* 校验开始、结束时间 */
cur_time = time(NULL);
if(1 == ulist->valid)
{
if(NULL == ulist->valid_begin_time || "" == ulist->valid_begin_time || NULL == ulist->valid_end_time || "" == ulist->valid_end_time)
{
return false;
}
STRING2TIME_T(ulist->valid_begin_time, begin_time);
STRING2TIME_T(ulist->valid_end_time, end_time);
if(begin_time >= end_time)
{
return false;
}
if(cur_time >= end_time)
{
return false;
}
}
if(0 == ulist->resetpwd)
{
if(NULL == ulist->passwd)
@ -287,7 +335,7 @@ bool mod_user_web(USERLIST* ulist)
bool ret_getuser = get_user_detail_by_user_uuid(ulist->ID, &temp_user_json);
if (!ret_getuser)
{
UCHAR_FREE(temp_user_json);
//UCHAR_FREE(temp_user_json); //多余释放
return false;
}
@ -405,8 +453,8 @@ bool mod_user_web(USERLIST* ulist)
if (1 == ulist->valid)
{
//if(判断是否符合格式)
STRING2TIME_T(ulist->valid_begin_time, g_user_table[user_id].valid_begin_time);
STRING2TIME_T(ulist->valid_end_time, g_user_table[user_id].valid_end_time);
g_user_table[user_id].valid_begin_time = begin_time;
g_user_table[user_id].valid_end_time = end_time;
}
/* 查询该用户是否有在线IP */
@ -442,7 +490,6 @@ bool mod_user_web(USERLIST* ulist)
/* 当前时间不在有效期内,下线用户 */
if (1 == ulist->valid)
{
cur_time = time(NULL);
if (cur_time < g_user_table[user_id].valid_begin_time || cur_time > g_user_table[user_id].valid_end_time)
{
//offline_force_one_user(user_id);

View File

@ -59,6 +59,11 @@ int add_group(char* name_in, char* description)
/* 去除用户组名前后空格 */
TRIM_NAME(name_in, name);
if(0 == strlen(name))
{
return ADDGROUP_FAIL_LENGTH;
}
/* 连接数据库 */
re_connect();
if(NULL == um_hdbc)

View File

@ -32,7 +32,7 @@ int authparInit()
if(NULL == auth_para) {
return 1;
}
memset(auth_para, 0, sizeof(auth_parameters_t));
/*设置默认值*/
auth_para->port = 8081;
@ -116,7 +116,7 @@ int set_agingtimecfg_waitack(int *agingtime)
/*检查IP地址是否有效端口号是否被占用 */
int _valid_port(int port)
{
{
int fd;
int i;
struct sockaddr_in addr;
@ -125,7 +125,7 @@ int _valid_port(int port)
if(fd == -1) { /*检查是否正常初始化socket */
return -1;
}
addr.sin_family = AF_INET; /*地址结构的协议簇 */
addr.sin_port = htons(port); /*地址结构的端口地址,网络字节序 */
inet_pton(AF_INET, "127.0.0.1", &addr.sin_addr);
@ -240,7 +240,7 @@ ret_code authpara_config_json_parse(pointer input, uint *conf_type, auth_paramet
return RET_OK;
}
#if 0
#if 0
/* 发布配置的本地Portal server 的port*/
void local_portal_port(char *port)
{
@ -277,8 +277,8 @@ ret_code authpara_config_chk(uint source, uint *config_type,
ret_code authpara_config_mod_proc(uint source, uint config_type,
pointer input, int input_len,
pointer output, int *output_len)
pointer input, int input_len,
pointer output, int *output_len)
{
configure_result_t configure_result;
cJSON *res;
@ -289,27 +289,39 @@ ret_code authpara_config_mod_proc(uint source, uint config_type,
char *ret_char = NULL;
unsigned int ret_int = 0;
int portresult = 0;
char* err_msg = NULL;
auth_parameters = (auth_parameters_t *)malloc(sizeof(auth_parameters_t));
if(auth_parameters == NULL) {
return RET_NOMEM;
}
authpara_config_json_parse(input, &conf_type, auth_parameters);
/*判断长度*/
if(input_len < sizeof(auth_parameters_t)) {
free(auth_parameters);
return RET_INPUTERR;
}
/*判断认证范围是否有效*/
if((auth_parameters->timehorizon < HORIZON_MIN_VALUE) || (auth_parameters->timehorizon > HORIZON_MAX_VALUE)) {
err_msg = "认证时间范围无效";
} else if((auth_parameters->failcount < FAIL_MIN_NUM) || (auth_parameters->failcount > FAIL_MAX_NUM)) {
err_msg = "失败次数无效";
} else if((auth_parameters->locktime < LOCK_MIN_TIME) || (auth_parameters->locktime > LOCK_MAX_TIME)) {
err_msg = "锁定时间无效";
} else if((auth_parameters->aging_time < AGINGTIME_MIN_NUM) || (auth_parameters->aging_time > AGINGTIME_MAX_NUM)) {
err_msg = "老化时间无效";
} else if((auth_parameters->port < PARA_DPORT_MIN_NUM) || (auth_parameters->port > PARA_DPORT_MAX_NUM)) {
err_msg = "认证端口无效";
}
if(err_msg != NULL) {
char *ret_char = NULL;
unsigned int ret_int = 0;
cJSON *res;
printf("timehorizon is not vaild\n");
/*创建json对象 */
res = cJSON_CreateObject();
@ -320,7 +332,7 @@ ret_code authpara_config_mod_proc(uint source, uint config_type,
/*将json对象转换成json字符串 返回处理结果*/
cJSON_AddNumberToObject(res, "resultcode", 1);
cJSON_AddStringToObject(res, "message", "timehorizon is not vaild");
cJSON_AddStringToObject(res, "message", err_msg);
ret_char = cJSON_PrintUnformatted(res);
ret_int = strlen(ret_char);
@ -344,209 +356,6 @@ ret_code authpara_config_mod_proc(uint source, uint config_type,
return RET_INPUTERR;
}
/*判断认证失败次数是否有效*/
if((auth_parameters->failcount < FAIL_MIN_NUM) || (auth_parameters->timehorizon > FAIL_MAX_NUM)) {
char *ret_char = NULL;
unsigned int ret_int = 0;
cJSON *res;
printf("failcount is not vaild\n");
/*创建json对象 */
res = cJSON_CreateObject();
if(!res) {
ret = RET_ERR;
return ret;
}
/*将json对象转换成json字符串 返回处理结果*/
cJSON_AddNumberToObject(res, "resultcode", 1);
cJSON_AddStringToObject(res, "message", "failcount is not vaild");
ret_char = cJSON_PrintUnformatted(res);
ret_int = strlen(ret_char);
if(output_len) {
*output_len = ret_int + 1;
}
/*超出2k的内存报错 */
if(ret_int >= 1024 * 2) {
free(ret_char);
cJSON_Delete(res);
return RET_NOMEM;
}
memcpy(output, ret_char, ret_int);
free(auth_parameters);
free(ret_char);
cJSON_Delete(res);
return RET_INPUTERR;
}
/*判断锁定次数是否有效*/
if((auth_parameters->locktime < LOCK_MIN_TIME) || (auth_parameters->locktime > LOCK_MAX_TIME)) {
char *ret_char = NULL;
unsigned int ret_int = 0;
cJSON *res;
printf("locktime is not vaild\n");
/*创建json对象 */
res = cJSON_CreateObject();
if(!res) {
ret = RET_ERR;
return ret;
}
/*将json对象转换成json字符串 返回处理结果*/
cJSON_AddNumberToObject(res, "resultcode", 1);
cJSON_AddStringToObject(res, "message", "locktime is not vaild");
ret_char = cJSON_PrintUnformatted(res);
ret_int = strlen(ret_char);
if(output_len) {
*output_len = ret_int + 1;
}
/*超出2k的内存报错 */
if(ret_int >= 1024 * 2) {
free(ret_char);
cJSON_Delete(res);
return RET_NOMEM;
}
memcpy(output, ret_char, ret_int);
free(auth_parameters);
free(ret_char);
cJSON_Delete(res);
return RET_INPUTERR;
}
/*判断老化时间是否有效*/
if((auth_parameters->aging_time < AGINGTIME_MIN_NUM) || (auth_parameters->aging_time > AGINGTIME_MAX_NUM)) {
char *ret_char = NULL;
unsigned int ret_int = 0;
cJSON *res;
printf("aging_time is not vaild\n");
/*创建json对象 */
res = cJSON_CreateObject();
if(!res) {
ret = RET_ERR;
return ret;
}
/*将json对象转换成json字符串 返回处理结果*/
cJSON_AddNumberToObject(res, "resultcode", 1);
cJSON_AddStringToObject(res, "message", "aging_time is not vaild");
ret_char = cJSON_PrintUnformatted(res);
ret_int = strlen(ret_char);
if(output_len) {
*output_len = ret_int + 1;
}
/*超出2k的内存报错 */
if(ret_int >= 1024 * 2) {
free(ret_char);
cJSON_Delete(res);
return RET_NOMEM;
}
memcpy(output, ret_char, ret_int);
free(auth_parameters);
free(ret_char);
cJSON_Delete(res);
return RET_INPUTERR;
}
/*校验端口号*/
if((auth_parameters->port < PARA_DPORT_MIN_NUM) || (auth_parameters->port > PARA_DPORT_MAX_NUM)) {
char *ret_char = NULL;
unsigned int ret_int = 0;
cJSON *res;
printf("the port is error\n");
/*创建json对象 */
res = cJSON_CreateObject();
if(!res) {
ret = RET_ERR;
return ret;
}
/*将json对象转换成json字符串 返回处理结果*/
cJSON_AddNumberToObject(res, "resultcode", 1);
cJSON_AddStringToObject(res, "message", "the port is error");
ret_char = cJSON_PrintUnformatted(res);
ret_int = strlen(ret_char);
if(output_len) {
*output_len = ret_int + 1;
}
/*超出2k的内存报错 */
if(ret_int >= 1024 * 2) {
free(ret_char);
cJSON_Delete(res);
return RET_NOMEM;
}
memcpy(output, ret_char, ret_int);
free(auth_parameters);
free(ret_char);
cJSON_Delete(res);
return RET_IPINVALID;
}
/*判断端口号是否占用*/
portresult = _valid_port(auth_parameters->port);
printf("portresult:%d\n", portresult);
if(portresult != 0) {
cJSON *port;
char *ret_port;
unsigned int port_int = 0;
/*创建json对象 */
port = cJSON_CreateObject();
if(!port) {
ret = RET_ERR;
return ret;
}
cJSON_AddNumberToObject(port, "resultcode", 1);
cJSON_AddStringToObject(port, "message", "port occupied");
ret_port = cJSON_PrintUnformatted(port);
port_int = strlen(ret_port);
if(output_len) {
*output_len = port_int + 1;
}
/*超出2k的内存报错 */
if(port_int >= 1024 * 2) {
free(ret_port);
cJSON_Delete(port);
return RET_NOMEM;
}
memcpy(output, ret_port, port_int);
free(ret_port);
cJSON_Delete(port);
return RET_CHKERR;
}
mod_authpara(auth_parameters->port, auth_parameters->timehorizon, auth_parameters->failcount,
auth_parameters->locktime, auth_parameters->aging_time, &configure_result);
@ -556,6 +365,7 @@ ret_code authpara_config_mod_proc(uint source, uint config_type,
/*存数据库成功则下发到内核态auth_hook*/
int r = -1;
if(0 == configure_result->resultcode) {
/*用户态下发到内核态auth_hook */
printf("cfgchannel main begin:\r\n");
@ -582,14 +392,14 @@ ret_code authpara_config_mod_proc(uint source, uint config_type,
}
#endif
#if 0
#if 0
/*Portal server的port通过redis消息队列接口发布给web server*/
memset(auth_port, 0, 20);
sprintf(auth_port, "%d ", auth_parameters.port);
printf("The number 'port' is %d and the string 'port' is %s. \n", auth_parameters.port, auth_port);
local_portal_port(auth_port);
#endif
#endif
/*创建json对象 */
res = cJSON_CreateObject();
@ -628,8 +438,8 @@ ret_code authpara_config_mod_proc(uint source, uint config_type,
ret_code authpara_config_get_proc(uint source, uint config_type,
pointer input, int input_len,
pointer output, int *output_len)
pointer input, int input_len,
pointer output, int *output_len)
{
cJSON *res;
cJSON *data;

View File

@ -44,6 +44,21 @@ int isIpV4Addr(const char *ipAddr)
}
#endif
/*组播报文的目的地址使用D类IP地址范围是从224.0.0.0到239.255.255.255*/
int isMulticastAddr(uint32_t address)
{
uint32_t addressInNetwork = htonl(address);
printf("%ld\n", addressInNetwork);
if((addressInNetwork > 0xE00000FF) && (addressInNetwork <= 0xEFFFFFFF))
{
printf("ip is multicast\n");
return 0;
}
printf("ip is not multicast\n");
return 1;
}
/*判断ip地址是广播地址 255.255.255.255*/
int isBroadcastIpV4Addr(const char *ipAddr)
{
@ -59,13 +74,14 @@ int isBroadcastIpV4Addr(const char *ipAddr)
if(4 == sscanf(ipAddr,"%d.%d.%d.%d", &ip_part_1, &ip_part_2, &ip_part_3, &ip_part_4))
{
if((ip_part_1 = 255) &&(ip_part_2 = 255) &&
(ip_part_3 = 255) &&(ip_part_4 = 255))
if((ip_part_1 == 255) &&(ip_part_2 == 255) &&
(ip_part_3 == 255) &&(ip_part_4 == 255))
{
return 1;
printf("ip is broadcast\n");
return 1;
}
}
printf("ip is not broadcast\n");
return 0;
}
@ -363,7 +379,7 @@ ret_code authfree_config_json_parse_array(pointer input, uint *conf_type, freeau
return RET_INPUTERR;
}
rpc_json_print(cjson);
rpc_log_info("json input:%s \n", cJSON_Print(cjson));
/*获取免认证规则的data部分 */
data = cJSON_GetObjectItem(cjson, "data");
@ -487,6 +503,7 @@ ret_code freeauth_config_add_proc(uint source, uint config_type,
char *ret_char = NULL;
unsigned int ret_int = 0;
authfree_result_t authfree_result;
char* err_msg = NULL;
char str[INET_ADDRSTRLEN];
char dtr[INET_ADDRSTRLEN];
@ -506,26 +523,48 @@ ret_code freeauth_config_add_proc(uint source, uint config_type,
return RET_INPUTERR;
}
/* 校验用户名中不含特殊字符 */
memset(str, 0, INET_ADDRSTRLEN);
inet_ntop(AF_INET,&freeauth_configure->sip, str, sizeof(str));
memset(dtr, 0, INET_ADDRSTRLEN);
inet_ntop(AF_INET,&freeauth_configure->dip, dtr, sizeof(dtr));
/*判断输入参数是否有效*/
if(SPECHAR(freeauth_configure->name)) {
err_msg = "免认证规则名称含有特殊字符";
} else if ( 1 == isIpV4Addr(str)) {
err_msg = "源IP地址无效";
} else if( 1 == isBroadcastIpV4Addr(str)) {
err_msg = "源IP地址是广播地址";
} else if(0 == isMulticastAddr(freeauth_configure->sip)) {
err_msg = "源IP地址是组播地址";
}else if ( 1 == isIpV4Addr(dtr)) {
err_msg = "目的IP地址无效";
} else if( 1 == isBroadcastIpV4Addr(dtr)) {
err_msg = "目的IP地址是广播地址";
} else if(0 == isMulticastAddr(freeauth_configure->dip)) {
err_msg = "目的IP地址是组播地址";
}else if((freeauth_configure->dport < DPORT_MIN_NUM) || (freeauth_configure->dport > DPORT_MAX_NUM)) {
err_msg = "免认证规则端口无效";
}
if(err_msg != NULL) {
char *ret_char = NULL;
unsigned int ret_int = 0;
cJSON *res;
printf("username 含有特殊字符\n");
/*创建json对象 */
res = cJSON_CreateObject();
if(!res) {
free(freeauth_configure);
return RET_ERR;
return RET_ERR;
}
/*将json对象转换成json字符串 返回处理结果*/
cJSON_AddNumberToObject(res, "resultcode", 2);
cJSON_AddStringToObject(res, "message", "username 含有特殊字符");
cJSON_AddStringToObject(res, "message", err_msg);
ret_char = cJSON_PrintUnformatted(res);
ret_int = strlen(ret_char);
ret_int = strlen(ret_char);
if(output_len) {
*output_len = ret_int + 1;
@ -543,139 +582,11 @@ ret_code freeauth_config_add_proc(uint source, uint config_type,
free(ret_char);
cJSON_Delete(res);
free(freeauth_configure);
return RET_INPUTERR;
}
memset(str, 0, INET_ADDRSTRLEN);
inet_ntop(AF_INET,&freeauth_configure->sip, str, sizeof(str));
printf("%s\n", str);
/*校验源ip地址 两种错误情况:ip地址不符合返回值为1 ip地址为255.255.255.255 返回值为1*/
if((1 == isIpV4Addr(str)) || (0 == isBroadcastIpV4Addr(str)) ) {
char *ret_char = NULL;
unsigned int ret_int = 0;
cJSON *res;
printf("sip is not vaild\n");
/*创建json对象 */
res = cJSON_CreateObject();
if(!res) {
free(freeauth_configure);
return RET_ERR;
}
/*将json对象转换成json字符串 返回处理结果*/
cJSON_AddNumberToObject(res, "resultcode", 2);
cJSON_AddStringToObject(res, "message", "sip is not vaild");
ret_char = cJSON_PrintUnformatted(res);
ret_int = strlen(ret_char);
if(output_len) {
*output_len = ret_int + 1;
}
/*超出2k的内存报错 */
if(ret_int >= 1024 * 2) {
free(ret_char);
cJSON_Delete(res);
return RET_NOMEM;
}
memcpy(output, ret_char, ret_int);
free(ret_char);
cJSON_Delete(res);
free(freeauth_configure);
return RET_INPUTERR;
}
memset(dtr, 0, INET_ADDRSTRLEN);
inet_ntop(AF_INET,&freeauth_configure->dip, dtr, sizeof(dtr));
/*校验目的ip地址*/
if((1 == isIpV4Addr(dtr)) || (0 == isBroadcastIpV4Addr(dtr))) {
char *ret_char = NULL;
unsigned int ret_int = 0;
cJSON *res;
printf("dip is not vaild\n");
/*创建json对象 */
res = cJSON_CreateObject();
if(!res) {
free(freeauth_configure);
return RET_ERR;
}
/*将json对象转换成json字符串 返回处理结果*/
cJSON_AddNumberToObject(res, "resultcode", 2);
cJSON_AddStringToObject(res, "message", "dip is not vaild");
ret_char = cJSON_PrintUnformatted(res);
ret_int = strlen(ret_char);
if(output_len) {
*output_len = ret_int + 1;
}
/*超出2k的内存报错 */
if(ret_int >= 1024 * 2) {
free(ret_char);
cJSON_Delete(res);
return RET_NOMEM;
}
memcpy(output, ret_char, ret_int);
free(ret_char);
cJSON_Delete(res);
free(freeauth_configure);
return RET_INPUTERR;
}
/*校验端口号*/
if((freeauth_configure->dport < DPORT_MIN_NUM) || (freeauth_configure->dport > DPORT_MAX_NUM)) {
char *ret_char = NULL;
unsigned int ret_int = 0;
cJSON *res;
printf("the port is not vaild\n");
/*创建json对象 */
res = cJSON_CreateObject();
if(!res) {
free(freeauth_configure);
return RET_ERR;
}
/*将json对象转换成json字符串 返回处理结果*/
cJSON_AddNumberToObject(res, "resultcode", 2);
cJSON_AddStringToObject(res, "message", "port is not vaild");
ret_char = cJSON_PrintUnformatted(res);
ret_int = strlen(ret_char);
if(output_len) {
*output_len = ret_int + 1;
}
/*超出2k的内存报错 */
if(ret_int >= 1024 * 2) {
free(ret_char);
cJSON_Delete(res);
return RET_NOMEM;
}
memcpy(output, ret_char, ret_int);
free(ret_char);
cJSON_Delete(res);
free(freeauth_configure);
return RET_IPINVALID;
}
/*查找要增加的未认证权限是否重名 该名字已存在 则退出程序 */
for(i = 0; i < RULE_MAX_NUM; i++) {
/*两个字符串相等 strcmp值为0*/
@ -693,7 +604,7 @@ ret_code freeauth_config_add_proc(uint source, uint config_type,
/*将json对象转换成json字符串 返回处理结果*/
cJSON_AddNumberToObject(res, "resultcode", 2);
cJSON_AddStringToObject(res, "message", "rule existed");
cJSON_AddStringToObject(res, "message", "免认证规则名已存在");
ret_char = cJSON_PrintUnformatted(res);
ret_int = strlen(ret_char);
@ -886,80 +797,82 @@ ret_code freeauth_config_del_proc(uint source, uint config_type,
cJSON *res;
authfree_result_t authfree_result;
freeauth_configure_t *freeauth_configure = NULL;
uint conf_type = FREEAUTH_CONFIG_GET;
char *ret_char = NULL;
unsigned int ret_int = 0;
uint conf_type = FREEAUTH_CONFIG_GET;
char *ret_char = NULL;
unsigned int ret_int = 0;
cJSON *pJsonArry, *pJsonsub;
char name[256];
authfree_config_json_parse_array(input, &conf_type, &freeauth_configure, &cnt);
if(input_len < sizeof(freeauth_configure_t)) {
return RET_INPUTERR;
}
printf("打印全局数组内全部元素\n");
/*打印数组内全部元素*/
for(i = 0; i < RULE_MAX_NUM; 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].flag, i);
freeauth_array[i].dip, freeauth_array[i].dport, freeauth_array[i].flag, i);
}
printf("打印传过来的json串\n");
for(int j = 0; j < cnt; j++)
for(int j = 0; j < cnt; j++)
{
printf("[%s %d]\n", freeauth_configure[j].name, j);
}
pJsonArry= cJSON_CreateArray(); /*创建数组*/
pJsonArry = cJSON_CreateArray(); /*创建数组*/
/*数据库删除 存入全局变量*/
for(int j = 0; j < cnt; j++) {
for(int j = 0; j < cnt; j++)
{
memset(name, 0, 256);
strncpy(name, freeauth_configure[j].name, 31);
del_authfree(freeauth_configure[j].name, &authfree_result);
cJSON_AddItemToArray(pJsonArry, pJsonsub=cJSON_CreateObject()); /* 给创建的数组增加对象*/
/*在json对象上添加键值对*/
char *result_message = malloc(strlen(freeauth_configure[j].name)+strlen(authfree_result.message)+1);//+1 for the zero-terminator
//in real code you would check for errors in malloc here
if (result_message == NULL)
if(6 == authfree_result.resultcode)
{
return RET_NOMEM;
cJSON_AddItemToArray(pJsonArry, pJsonsub = cJSON_CreateObject()); /* 给创建的数组增加对象*/
cJSON_AddStringToObject(pJsonsub, "name", name);
}
strcpy(result_message, freeauth_configure[j].name);
strcat(result_message, authfree_result.message);
printf("%s\n", result_message);
cJSON_AddNumberToObject(pJsonsub, "resultcode", authfree_result.resultcode);
cJSON_AddStringToObject(pJsonsub, "message", result_message);
ret_char = cJSON_Print(pJsonArry);
ret_int = strlen(ret_char);
if(output_len)
{
*output_len = ret_int + 1;
}
/*超出2k的内存报错 */
if(ret_int >= 1024 * 2)
{
free(ret_char);
cJSON_Delete(pJsonArry);
return RET_NOMEM;
}
memcpy(output, ret_char, ret_int);
}
free(ret_char);
/*创建json对象 */
res = cJSON_CreateObject();
if(!res)
{
return RET_ERR;
}
/*将json对象转换成json字符串 返回处理结果*/
cJSON_AddNumberToObject(res, "resultcode", authfree_result.resultcode);
cJSON_AddStringToObject(res, "message", authfree_result.message);
cJSON_AddItemToObject(res, "data", pJsonArry);
ret_char = cJSON_PrintUnformatted(res);
ret_int = strlen(ret_char);
if(output_len)
{
*output_len = ret_int + 1;
}
/*超出2k的内存报错 */
if(ret_int >= 1024 * 2)
{
free(ret_char);
cJSON_Delete(res);
return RET_NOMEM;
}
memcpy(output, ret_char, ret_int);
free(ret_char);
cJSON_Delete(res);
return RET_OK;
}
/*修改未认证权限规则*/
ret_code freeauth_config_mod_proc(uint source, uint config_type,
pointer input, int input_len,
@ -1120,9 +1033,6 @@ ret_code freeauth_config_get_proc(uint source, uint config_type,
}
}
char *ret_arry = cJSON_PrintUnformatted(pJsonArry);
printf("%s\n", ret_arry);
/*创建json对象 */
res = cJSON_CreateObject();
@ -1132,8 +1042,8 @@ ret_code freeauth_config_get_proc(uint source, uint config_type,
/*将json对象转换成json字符串 返回处理结果*/
cJSON_AddNumberToObject(res, "resultcode", 11);
cJSON_AddStringToObject(res, "message", "get success");
cJSON_AddStringToObject(res, "data", ret_arry);
cJSON_AddStringToObject(res, "message", "查询规则成功");
cJSON_AddItemToObject(res, "data", pJsonArry);
ret_char = cJSON_PrintUnformatted(res);
ret_int = strlen(ret_char);
@ -1288,4 +1198,3 @@ ret_code freeauth_config_proc(uint source, uint config_type,

View File

@ -10,9 +10,9 @@ extern int rule_order[];
extern void * auth_hdbc;
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","mov success" , "get success","allrule del success"
static char *authfreemes[] = {"添加规则成功", "添加规则失败", "规则名已存在", "修改规则成功",
"修改规则失败", "未发现规则名称", "删除规则成功", "删除规则失败", "免认证规则数量达到最大值",
"内存数据已满","移动规则成功" , "查询规则成功","删除所有规则成功"
};
static char *get_sql_ret_message(SQL_RET_CODE code)

View File

@ -14,7 +14,7 @@
extern auth_parameters_t *auth_para;
extern void * auth_hdbc;
char * mes[]={"mod success", "mod failure", "get success", "get failure"};
char * mes[]={"修改成功", "修改失败", "查询成功", "查询失败"};
/*前端type类型只有修改修改数据库中的内容返回值为code message——修改成功 修改失败*/
void mod_authpara(int port, int timehorizon, int failcount, int locktime, int aging_time, configure_result_t *configure_result)

View File

@ -126,23 +126,34 @@ int main5(void)
return 0;
}
void trim(char *out, char *in)
void trim(char *in, char *out)
{
char * c;
int i;
int len;
size_t nLen = strlen(in);
i = 0;
while(in[i] == ' ')
{
i++;
}
c = &in[i]; // 找到第一个非空字符指针
i = nLen - 1;
while(in[i] == ' ')
if (i != nLen)
{
i--; // 找到最后一个非空字符
c = &in[i]; // 找到第一个非空字符指针
i = nLen - 1;
while(in[i] == ' ')
{
i--; // 找到最后一个非空字符
}
len = i + 1 - (c - in);
memcpy(out, c, i + 1 - (c - in));
}
memcpy(out, c, i + 1 - (c - in));
else
{
memset(out, 0 ,strlen(out));
}
return;
}
@ -151,12 +162,15 @@ int main(void)
{
char *name1 = " xi阿斯蒂芬就aom ig ";
char *name1 = "a a ";
int len = strlen(name1);
char name2[100] = {0};
printf("name2 len=%ld.\n",strlen(name2));
printf("name1=%s.\n",name1);
TRIM_NAME(name1, name2);
printf("name1=%s.\n",name2);
printf("name2 len=%ld.\n",strlen(name2));
return 0;

View File

@ -14,6 +14,7 @@
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include "http_header.h"
#include "json.h"
#include "../../../../Common/config_manager.h"
@ -786,7 +787,10 @@ static handler_t mod_webm_uri_handler(server *srv, connection *con, void *p_d)
}
buffer_free(content_buffer);
}
http_header_response_set(con, HTTP_HEADER_CONTENT_TYPE,
CONST_STR_LEN("Content-Type"),
CONST_STR_LEN("text/xml; charset=\"utf-8\""));
con->mode = DIRECT;
con->http_status = 200;
con->file_finished = 1;
return HANDLER_FINISHED;