Mod aaa-12 修改配置管理-免认证规则配置input格式,进行json格式和结构体的转换
RCA: SOL: 修改人:chenling 检视人:
This commit is contained in:
parent
f21277a07c
commit
8a3c730f7c
|
@ -52,7 +52,6 @@ int isIpV4Addr(const char *ipAddr)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*下发配置到内核态 */
|
/*下发配置到内核态 */
|
||||||
int set_freeauthcfg_waitack(freeauth_configure_t *struct_freeauth)
|
int set_freeauthcfg_waitack(freeauth_configure_t *struct_freeauth)
|
||||||
{
|
{
|
||||||
|
@ -136,17 +135,39 @@ return 0;
|
||||||
|
|
||||||
|
|
||||||
/*判断免认证规则源IP地址、目的IP地址是否有效,判断端口号是否有效 */
|
/*判断免认证规则源IP地址、目的IP地址是否有效,判断端口号是否有效 */
|
||||||
ret_code freeauth_config_chk(uint source, uint *config_type,
|
/*input格式 "{\"type\":0, \"dport\":24, \"name\":\"armink\", \"sip\":1027824, \"dip\":103427824}";*/
|
||||||
pointer input, int *input_len,
|
ret_code freeauth_config_chk(uint source, uint config_type,
|
||||||
|
pointer input, int input_len,
|
||||||
pointer output, int *output_len)
|
pointer output, int *output_len)
|
||||||
{
|
{
|
||||||
ret_code ret = RET_OK;
|
ret_code ret = RET_OK;
|
||||||
freeauth_configure_t *struct_freeauth;
|
cJSON *cjson, *res;
|
||||||
struct_freeauth = (freeauth_configure_t *)input;
|
|
||||||
|
|
||||||
if(*input_len < sizeof(freeauth_configure_t) )
|
/*JSON字符串到JSON格式 */
|
||||||
|
cjson = cJSON_Parse(input);
|
||||||
|
if(!cjson)
|
||||||
{
|
{
|
||||||
ret = RET_INPUTERR;
|
ret = RET_INPUTERR;
|
||||||
|
ASSERT_RET(ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*创建freeauth_configure_t结构体对象 */
|
||||||
|
s2j_create_struct_obj(struct_freeauth, freeauth_configure_t);
|
||||||
|
|
||||||
|
/*反序列化数据到freeauth_configure_t结构体对象 */
|
||||||
|
s2j_struct_get_basic_element(struct_freeauth, cjson, string, name);
|
||||||
|
s2j_struct_get_basic_element(struct_freeauth, cjson, int, sip);
|
||||||
|
s2j_struct_get_basic_element(struct_freeauth, cjson, int, dip);
|
||||||
|
s2j_struct_get_basic_element(struct_freeauth, cjson, int, dport);
|
||||||
|
printf("freeauth configure: name: %s sip: %d dip: %d dport: %d\n",
|
||||||
|
struct_freeauth->name,struct_freeauth->sip, struct_freeauth->dip, struct_freeauth->dport);
|
||||||
|
|
||||||
|
if(input_len < sizeof(freeauth_configure_t) )
|
||||||
|
{
|
||||||
|
ret = RET_INPUTERR;
|
||||||
|
ASSERT_RET(ret);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
char str[32];
|
char str[32];
|
||||||
|
@ -155,6 +176,8 @@ ret_code freeauth_config_chk(uint source, uint *config_type,
|
||||||
if( isIpV4Addr(sip_addr) < 0 )
|
if( isIpV4Addr(sip_addr) < 0 )
|
||||||
{
|
{
|
||||||
ret = RET_IPINVALID;
|
ret = RET_IPINVALID;
|
||||||
|
ASSERT_RET(ret);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
char dtr[32];
|
char dtr[32];
|
||||||
|
@ -163,14 +186,16 @@ ret_code freeauth_config_chk(uint source, uint *config_type,
|
||||||
if( isIpV4Addr(dip_addr) < 0 )
|
if( isIpV4Addr(dip_addr) < 0 )
|
||||||
{
|
{
|
||||||
ret = RET_IPINVALID;
|
ret = RET_IPINVALID;
|
||||||
|
ASSERT_RET(ret);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( (struct_freeauth->dport < DPORT_MIN_NUM) && (struct_freeauth->dport > DPORT_MAX_NUM ))
|
if ( (struct_freeauth->dport < DPORT_MIN_NUM) && (struct_freeauth->dport > DPORT_MAX_NUM ))
|
||||||
{
|
{
|
||||||
ret = RET_IPINVALID; /*先用IPVAILD表示,后面加PORTVAILD */
|
ret = RET_IPINVALID; /*先用IPVAILD表示,后面加PORTVAILD */
|
||||||
}
|
|
||||||
|
|
||||||
ASSERT_RET(ret);
|
ASSERT_RET(ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
return RET_OK;
|
return RET_OK;
|
||||||
}
|
}
|
||||||
|
@ -182,10 +207,27 @@ ret_code freeauth_config_proc(uint source, uint config_type,
|
||||||
pointer output, int *output_len)
|
pointer output, int *output_len)
|
||||||
{
|
{
|
||||||
ret_code ret = RET_OK;
|
ret_code ret = RET_OK;
|
||||||
int code;
|
cJSON *cjson, *res;
|
||||||
freeauth_configure_t *struct_freeauth;
|
char * ret_char = NULL;
|
||||||
|
int * ret_int = NULL;
|
||||||
|
|
||||||
struct_freeauth = (freeauth_configure_t *)input;
|
/*JSON字符串到JSON格式 */
|
||||||
|
cjson = cJSON_Parse(input);
|
||||||
|
if(!cjson)
|
||||||
|
{
|
||||||
|
ret = RET_INPUTERR;
|
||||||
|
ASSERT_RET(ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*创建freeauth_configure_t结构体对象 */
|
||||||
|
s2j_create_struct_obj(struct_freeauth, freeauth_configure_t);
|
||||||
|
|
||||||
|
/*反序列化数据到freeauth_configure_t结构体对象 */
|
||||||
|
s2j_struct_get_basic_element(struct_freeauth, cjson, string, name);
|
||||||
|
s2j_struct_get_basic_element(struct_freeauth, cjson, int, sip);
|
||||||
|
s2j_struct_get_basic_element(struct_freeauth, cjson, int, dip);
|
||||||
|
s2j_struct_get_basic_element(struct_freeauth, cjson, int, dport);
|
||||||
|
|
||||||
char str[32];
|
char str[32];
|
||||||
inet_ntop(AF_INET, (void *)&struct_freeauth->sip, str, 32);
|
inet_ntop(AF_INET, (void *)&struct_freeauth->sip, str, 32);
|
||||||
|
@ -197,20 +239,20 @@ ret_code freeauth_config_proc(uint source, uint config_type,
|
||||||
struct_freeauth->name,sip_addr, dip_addr, struct_freeauth->dport);
|
struct_freeauth->name,sip_addr, dip_addr, struct_freeauth->dport);
|
||||||
|
|
||||||
/*用户态下发到内核态auth_hook */
|
/*用户态下发到内核态auth_hook */
|
||||||
int ret1 = -1;
|
int r = -1;
|
||||||
printf("cfgchannel main begin:\r\n");
|
printf("cfgchannel main begin:\r\n");
|
||||||
|
|
||||||
/*创建通道 */
|
/*创建通道 */
|
||||||
ret1 = commcfgnl_open();
|
r = commcfgnl_open();
|
||||||
if(ret1 < 0)
|
if(r < 0)
|
||||||
{
|
{
|
||||||
printf(" pdlivnl_open fail, exit.\r\n");
|
printf(" pdlivnl_open fail, exit.\r\n");
|
||||||
return RET_ERR;
|
return RET_ERR;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*下发配置到内核态 */
|
/*下发配置到内核态 */
|
||||||
ret1 = set_freeauthcfg_waitack(struct_freeauth);
|
r = set_freeauthcfg_waitack(struct_freeauth);
|
||||||
if(ret1 < 0)
|
if(r < 0)
|
||||||
{
|
{
|
||||||
printf("set_cfg_debug_waitack failed.\r\n");
|
printf("set_cfg_debug_waitack failed.\r\n");
|
||||||
return RET_ERR;
|
return RET_ERR;
|
||||||
|
@ -218,9 +260,27 @@ ret_code freeauth_config_proc(uint source, uint config_type,
|
||||||
|
|
||||||
/*关闭netlink通道 */
|
/*关闭netlink通道 */
|
||||||
commcfgnl_close();
|
commcfgnl_close();
|
||||||
|
|
||||||
printf("cfgchannel main exit!\r\n");
|
printf("cfgchannel main exit!\r\n");
|
||||||
|
|
||||||
|
/*创建json对象 */
|
||||||
|
res = cJSON_CreateObject();
|
||||||
|
if(!res)
|
||||||
|
{
|
||||||
|
ret = RET_ERR;
|
||||||
|
ASSERT_RET(ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
cJSON_AddNumberToObject(res, "result", r);
|
||||||
|
|
||||||
|
/*将json对象转换成json字符串 */
|
||||||
|
ret_char = cJSON_PrintUnformatted(res);
|
||||||
|
ret_int = (int*)ret_char;
|
||||||
|
memcpy(output, ret_int, sizeof(ret_int)+1);
|
||||||
|
|
||||||
|
free(ret_char);
|
||||||
|
cJSON_Delete(res);
|
||||||
|
|
||||||
/*把免认证规则的配置信息存入全局变量 */
|
/*把免认证规则的配置信息存入全局变量 */
|
||||||
localuser = struct_freeauth;
|
localuser = struct_freeauth;
|
||||||
return RET_OK;
|
return RET_OK;
|
||||||
|
@ -229,3 +289,6 @@ ret_code freeauth_config_proc(uint source, uint config_type,
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -37,8 +37,9 @@ int isIpV4Addr(const char *ipAddr);
|
||||||
int set_freeauthcfg_waitack(freeauth_configure_t *struct_freeauth);
|
int set_freeauthcfg_waitack(freeauth_configure_t *struct_freeauth);
|
||||||
|
|
||||||
/*判断免认证规则源IP地址、目的IP地址是否有效,判断端口号是否有效 */
|
/*判断免认证规则源IP地址、目的IP地址是否有效,判断端口号是否有效 */
|
||||||
ret_code freeauth_config_chk(uint source, uint *config_type,
|
/*input格式 "{\"type\":0, \"dport\":24, \"name\":\"armink\", \"sip\":1027824, \"dip\":103427824}";*/
|
||||||
pointer input, int *input_len,
|
ret_code freeauth_config_chk(uint source, uint config_type,
|
||||||
|
pointer input, int input_len,
|
||||||
pointer output, int *output_len);
|
pointer output, int *output_len);
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue