From 9a00deb81dc236312e6c6bda314883299f5ae965 Mon Sep 17 00:00:00 2001 From: zhanglianghy Date: Thu, 18 Jul 2019 09:21:03 +0800 Subject: [PATCH] =?UTF-8?q?MOD=20aaa-12=20=E8=A7=A3=E5=86=B3json=E8=BD=AC?= =?UTF-8?q?=E6=8D=A2=E6=88=90=E7=BB=93=E6=9E=84=E4=BD=93=E7=9A=84=E6=97=B6?= =?UTF-8?q?=E5=80=99=EF=BC=8C=E5=AD=97=E7=AC=A6=E4=B8=B2=E5=8F=AF=E8=83=BD?= =?UTF-8?q?=E8=B6=8A=E7=95=8C=E7=9A=84=E9=97=AE=E9=A2=98=20SOL=20=20?= =?UTF-8?q?=E8=A7=A3=E5=86=B3json=E8=BD=AC=E6=8D=A2=E6=88=90=E7=BB=93?= =?UTF-8?q?=E6=9E=84=E4=BD=93=E7=9A=84=E6=97=B6=E5=80=99=EF=BC=8C=E5=AD=97?= =?UTF-8?q?=E7=AC=A6=E4=B8=B2=E5=8F=AF=E8=83=BD=E8=B6=8A=E7=95=8C=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98=20=E4=BF=AE=E6=94=B9=E4=BA=BA=EF=BC=9Azhangl?= =?UTF-8?q?iang=20=E6=A3=80=E8=A7=86=E4=BA=BA=EF=BC=9Azhangliang?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Common/s2j/s2jdef.h | 4 ++ .../user/configm/config-server/configserver.c | 13 +++++-- .../configm/config-server/ipconfig/ipconfig.c | 38 +++++++++---------- 3 files changed, 32 insertions(+), 23 deletions(-) diff --git a/Common/s2j/s2jdef.h b/Common/s2j/s2jdef.h index 5d77d9e95..7e15737e7 100644 --- a/Common/s2j/s2jdef.h +++ b/Common/s2j/s2jdef.h @@ -49,6 +49,10 @@ typedef struct { #define S2J_STRUCT_GET_string_ELEMENT(to_struct, from_json, _element) \ json_temp = cJSON_GetObjectItem(from_json, #_element); \ if (json_temp) strcpy((to_struct)->_element, json_temp->valuestring); + +#define S2J_STRUCT_GET_STRING_ELEMENT_N(to_struct, from_json, _element, n) \ + json_temp = cJSON_GetObjectItem(from_json, #_element); \ + if (json_temp && n > 1) strncpy((to_struct)->_element, json_temp->valuestring, n-1); #define S2J_STRUCT_GET_double_ELEMENT(to_struct, from_json, _element) \ json_temp = cJSON_GetObjectItem(from_json, #_element); \ diff --git a/Platform/user/configm/config-server/configserver.c b/Platform/user/configm/config-server/configserver.c index a56fbedb0..b69062be1 100644 --- a/Platform/user/configm/config-server/configserver.c +++ b/Platform/user/configm/config-server/configserver.c @@ -165,7 +165,7 @@ ret_code cm_config_get_allconfig(uint source, config_len = strlen(json_str) + 1; memset(config_buff, 0, CM_BUFF_SIZE); - strncpy(config_buff, json_str, CM_BUFF_SIZE); + strncpy(config_buff, json_str, CM_BUFF_SIZE - 1); free(json_str); @@ -279,7 +279,7 @@ void cm_config_process(rpc_conn *conn, pointer input, int input_len, void* data) config_msg = (config_msg_t *)input; config_len = input_len - sizeof(config_msg_t); - rpc_log_info("recv config from %d, config type is %d config id is 0x%llx ,len is %x\r\n", + rpc_log_info("recv config from %d, config type is %d config id is 0x%llx ,len is %d\r\n", config_msg->source, config_msg->config_type, config_msg->config_id, config_len); @@ -349,8 +349,9 @@ void cm_config_process(rpc_conn *conn, pointer input, int input_len, void* data) &buff_len); } break; - - default: + case CM_CONFIG_ADD: + case CM_CONFIG_DEL: + case CM_CONFIG_SET: if(config_svr->proc_callback) { ret = config_svr->proc_callback(config_msg->source, @@ -361,6 +362,10 @@ void cm_config_process(rpc_conn *conn, pointer input, int input_len, void* data) &buff_len); } break; + default: + ret = RET_INPUTERR; + break; + } if(buff_len > CM_BUFF_SIZE) diff --git a/Platform/user/configm/config-server/ipconfig/ipconfig.c b/Platform/user/configm/config-server/ipconfig/ipconfig.c index 0cd12c63e..5e0fa8396 100644 --- a/Platform/user/configm/config-server/ipconfig/ipconfig.c +++ b/Platform/user/configm/config-server/ipconfig/ipconfig.c @@ -106,7 +106,7 @@ ret_code ip_config_json_parse(pointer input, uint *conf_type, ip_config_t *confi return RET_INPUTERR; } - rpc_log_info("json input锛歕n %s \n", cJSON_Print(json_obj)); + rpc_log_info("json input:\n %s \n", cJSON_Print(json_obj)); s2j_create_struct_obj(ip_config, ip_config_string_t); @@ -117,12 +117,12 @@ ret_code ip_config_json_parse(pointer input, uint *conf_type, ip_config_t *confi } s2j_struct_get_basic_element(ip_config, json_obj, int, config_type); - s2j_struct_get_basic_element(ip_config, json_obj, string, ifname); + S2J_STRUCT_GET_STRING_ELEMENT_N(ip_config, json_obj, ifname, INTERFACE_NAMSIZ); s2j_struct_get_basic_element(ip_config, json_obj, int, family); - s2j_struct_get_basic_element(ip_config, json_obj, string, ipaddr); + S2J_STRUCT_GET_STRING_ELEMENT_N(ip_config, json_obj, ipaddr, DOT_IP_STR); s2j_struct_get_basic_element(ip_config, json_obj, int, prefixlen); - strncpy(config_buff->ifname, ip_config->ifname, INTERFACE_NAMSIZ); + strncpy(config_buff->ifname, ip_config->ifname, INTERFACE_NAMSIZ - 1); config_buff->family = (uchar)ip_config->family; config_buff->prefixlen = (uchar)ip_config->prefixlen; @@ -150,12 +150,12 @@ ret_code ip_config_json_parse_array(pointer input, uint *conf_type, return RET_INPUTERR; } - rpc_log_info("json input %s \n", cJSON_Print(json_obj)); + rpc_log_info("json input:%s \n", cJSON_Print(json_obj)); iCount = cJSON_GetArraySize(json_obj); /*获取数组长度*/ - config_buff = rpc_new(ip_config_t, iCount); - conf_type = rpc_new(uint, iCount); + config_buff = rpc_new0(ip_config_t, iCount); + conf_type = rpc_new0(uint, iCount); if(!config_buff || !conf_type) { return RET_NOMEM; @@ -183,7 +183,7 @@ ret_code ip_config_json_parse_array(pointer input, uint *conf_type, s2j_struct_get_basic_element(ip_config, json_obj, string, ipaddr); s2j_struct_get_basic_element(ip_config, json_obj, int, prefixlen); - strncpy(config_buff[*cnt].ifname, ip_config->ifname, INTERFACE_NAMSIZ); + strncpy(config_buff[*cnt].ifname, ip_config->ifname, INTERFACE_NAMSIZ - 1); config_buff[*cnt].family = (uchar)ip_config->family; config_buff[*cnt].prefixlen = (uchar)ip_config->prefixlen; config_buff[*cnt].prefix.s_addr = inet_addr(ip_config->ipaddr); @@ -212,8 +212,8 @@ ret_code ip_config_format_json(int config_type, ip_config_t *config_buff, ip_config->family = AF_INET; ip_config->prefixlen = config_buff->prefixlen; - strncpy(ip_config->ifname, config_buff->ifname, INTERFACE_NAMSIZ); - strncpy(ip_config->ipaddr, inet_ntoa(config_buff->prefix), DOT_IP_STR); + strncpy(ip_config->ifname, config_buff->ifname, INTERFACE_NAMSIZ - 1); + strncpy(ip_config->ipaddr, inet_ntoa(config_buff->prefix), DOT_IP_STR - 1); /* create Student JSON object */ s2j_create_json_obj(json_obj); @@ -261,8 +261,8 @@ ret_code ip_config_format_json_array(int config_type, ip_config_t *config_buff, ip_config->config_type = config_type; ip_config->family = AF_INET; ip_config->prefixlen = config_buff[i].prefixlen; - strncpy(ip_config->ifname, config_buff[i].ifname, INTERFACE_NAMSIZ); - strncpy(ip_config->ipaddr, inet_ntoa(config_buff[i].prefix), DOT_IP_STR); + strncpy(ip_config->ifname, config_buff[i].ifname, INTERFACE_NAMSIZ - 1); + strncpy(ip_config->ipaddr, inet_ntoa(config_buff[i].prefix), DOT_IP_STR - 1); /* create Student JSON object */ s2j_create_json_obj(json_obj); @@ -294,11 +294,11 @@ ret_code ip_config_format_json_array(int config_type, ip_config_t *config_buff, ret_code if_set_prefix(ip_config_t *ip_conf, int *code) { ret_code ret; - struct ifreq ifreq; + struct ifreq ifreq = {0}; struct sockaddr_in addr; struct sockaddr_in mask; - strncpy(ifreq.ifr_name, ip_conf->ifname, sizeof(ifreq.ifr_name)); + strncpy(ifreq.ifr_name, ip_conf->ifname, sizeof(ifreq.ifr_name) - 1); addr.sin_addr = ip_conf->prefix; addr.sin_family = ip_conf->family; memcpy(&ifreq.ifr_addr, &addr, sizeof(struct sockaddr_in)); @@ -362,12 +362,12 @@ ret_code if_get_prefix_all(pointer output, int *output_len, int *code) for(i = 0; i < if_count; i++) { rpc_log_info("get interface %s info\n", ifreq[i].ifr_name); - strncpy(ip_conf[i].ifname, ifreq[i].ifr_name, INTERFACE_NAMSIZ); + strncpy(ip_conf[i].ifname, ifreq[i].ifr_name, INTERFACE_NAMSIZ - 1); ip_conf[i].family = AF_INET; ip_conf[i].prefix = ((struct sockaddr_in *)&(ifreq[i].ifr_addr))->sin_addr; memset(&netmask, 0, sizeof(netmask)); - strncpy(netmask.ifr_name, ifreq[i].ifr_name, sizeof(netmask.ifr_name)); + strncpy(netmask.ifr_name, ifreq[i].ifr_name, sizeof(netmask.ifr_name) - 1); ret = if_ioctl(SIOCGIFNETMASK, (caddr_t)&netmask, &mask_ret); ASSERT_RET_NO(ret); @@ -402,7 +402,7 @@ ret_code if_get_prefix(ip_config_t *ip_conf, int *code) rpc_log_info("get interface %s info\n", ip_conf->ifname); - strncpy(ifreq.ifr_name, ip_conf->ifname, sizeof(ifreq.ifr_name)); + strncpy(ifreq.ifr_name, ip_conf->ifname, sizeof(ifreq.ifr_name) - 1); ret = if_ioctl(SIOCGIFADDR, (caddr_t)&ifreq, code); ASSERT_RET(ret); @@ -411,7 +411,7 @@ ret_code if_get_prefix(ip_config_t *ip_conf, int *code) ip_conf->prefix = ((struct sockaddr_in *)&(ifreq.ifr_addr))->sin_addr; memset(&ifreq, 0, sizeof(ifreq)); - strncpy(ifreq.ifr_name, ip_conf->ifname, sizeof(ifreq.ifr_name)); + strncpy(ifreq.ifr_name, ip_conf->ifname, sizeof(ifreq.ifr_name) - 1); ret = if_ioctl(SIOCGIFNETMASK, (caddr_t)&ifreq, &mask_ret); ASSERT_RET_NO(ret); @@ -543,7 +543,7 @@ ret_code ip_config_proc(uint source, uint config_type, pointer input, int input_len, pointer output, int *output_len) { - uint conf_type = CM_CONFIG_SET; + uint conf_type = config_type; ip_config_t conf_buff = {0}; ip_config_t *ip_conf = &conf_buff; ret_code ret = RET_OK;