From 5b52a9c6c3cf3fbf2dd69e4a13791ad723e67183 Mon Sep 17 00:00:00 2001 From: Michael Polyntsov Date: Mon, 27 Nov 2023 10:28:04 +0000 Subject: [PATCH] Fix warnings found when compilling with glibc --- bbfdmd/ubus/bbfdmd.c | 4 ++-- bbfdmd/ubus/common.c | 28 --------------------------- bbfdmd/ubus/common.h | 1 - libbbfdm-api/dmcommon.c | 26 +++++++++++++++++++++++++ libbbfdm-api/dmcommon.h | 1 + libbbfdm/dmcommon.c | 1 - libbbfdm/dmtree/tr143/diagnostics.c | 18 +++-------------- libbbfdm/dmtree/tr181/deviceinfo.c | 4 +++- libbbfdm/dmtree/tr181/packetcapture.c | 6 +----- libbbfdm/dmtree/tr181/selftest.c | 7 +------ libbbfdm/dmtree/tr181/ssh.c | 4 +++- libbbfdm/dmtree/tr181/userinterface.c | 5 ++--- libbbfdm/dmtree/tr471/iplayercap.c | 6 +----- 13 files changed, 43 insertions(+), 68 deletions(-) diff --git a/bbfdmd/ubus/bbfdmd.c b/bbfdmd/ubus/bbfdmd.c index 7f394c33..42182e85 100644 --- a/bbfdmd/ubus/bbfdmd.c +++ b/bbfdmd/ubus/bbfdmd.c @@ -623,7 +623,7 @@ static int bbfdm_operate_handler(struct ubus_context *ctx, struct ubus_object *o struct blob_attr *msg) { struct blob_attr *tb[__DM_OPERATE_MAX] = {NULL}; - char path[MAX_DM_PATH] = {0}; + char path[PATH_MAX] = {0}; bbfdm_data_t data; memset(&data, 0, sizeof(bbfdm_data_t)); @@ -958,7 +958,7 @@ static void service_list(struct blob_buf *bb) blobmsg_add_string(bb, NULL, "list"); blobmsg_close_array(bb, array); - run_cmd(cmd, val, 32); + run_cmd(cmd, val, sizeof(val)); blobmsg_add_u32(bb, "expected_services_num", atoi(val)); array = blobmsg_open_array(bb, "registered_service"); get_list_of_registered_service(&head_registered_service, bb); diff --git a/bbfdmd/ubus/common.c b/bbfdmd/ubus/common.c index c0562cea..868cab7f 100644 --- a/bbfdmd/ubus/common.c +++ b/bbfdmd/ubus/common.c @@ -209,34 +209,6 @@ int get_instance_mode(int instance_mode) return instance_mode; } - -int run_cmd(const char *cmd, char *output, size_t out_len) -{ - int ret = -1; - FILE *pp; - - if (cmd == NULL) - return 0; - - if (output == NULL || out_len == 0) { - return ret; - } - - memset(output, 0, out_len); - - pp = popen(cmd, "r"); - if (pp != NULL) { - char line[512] = {0}; - - fgets(line, sizeof(line), pp); - strncpyt(output, line, out_len); - pclose(pp); - ret = 0; - } - - return ret; -} - // glibc doesn't guarantee a 0 termianted string on strncpy // strncpy with always 0 terminated string void strncpyt(char *dst, const char *src, size_t n) diff --git a/bbfdmd/ubus/common.h b/bbfdmd/ubus/common.h index cc36320d..e24c7655 100644 --- a/bbfdmd/ubus/common.h +++ b/bbfdmd/ubus/common.h @@ -75,7 +75,6 @@ int get_instance_mode(int instance_mode); print_warning("[%s:%d] " fmt, __func__, __LINE__, ##args) int get_resolved_paths(struct dmctx *bbf_ctx, char *qpath, struct list_head *resolved_paths); -int run_cmd(const char *cmd, char *output, size_t out_len); void strncpyt(char *dst, const char *src, size_t n); #endif /* COMMON_H */ diff --git a/libbbfdm-api/dmcommon.c b/libbbfdm-api/dmcommon.c index 7b750c02..aeaabd08 100644 --- a/libbbfdm-api/dmcommon.c +++ b/libbbfdm-api/dmcommon.c @@ -336,6 +336,32 @@ int dmcmd_no_wait(char *cmd, int n, ...) return 0; } +int run_cmd(const char *cmd, char *output, size_t out_len) +{ + int ret = -1; + FILE *pp; + + if (cmd == NULL) { + return 0; + } + + if (output == NULL || out_len == 0) { + return ret; + } + + memset(output, 0, out_len); + + pp = popen(cmd, "r"); + if (pp != NULL) { + if (!(fgets(output, out_len, pp) == NULL && ferror(pp) != 0)) { + ret = 0; + } + pclose(pp); + } + + return ret; +} + void hex_to_ip(char *address, char *ret, size_t size) { unsigned int ip[4] = {0}; diff --git a/libbbfdm-api/dmcommon.h b/libbbfdm-api/dmcommon.h index ee2588ca..bf3788e6 100644 --- a/libbbfdm-api/dmcommon.h +++ b/libbbfdm-api/dmcommon.h @@ -229,6 +229,7 @@ bool is_strword_in_optionvalue(char *optionvalue, char *str); void remove_new_line(char *buf); int dmcmd(char *cmd, int n, ...); int dmcmd_no_wait(char *cmd, int n, ...); +int run_cmd(const char *cmd, char *output, size_t out_len); void hex_to_ip(char *address, char *ret, size_t size); void add_dmmap_config_dup_list(struct list_head *dup_list, struct uci_section *config_section, struct uci_section *dmmap_section); void free_dmmap_config_dup_list(struct list_head *dup_list); diff --git a/libbbfdm/dmcommon.c b/libbbfdm/dmcommon.c index bc2e9211..34649fd9 100644 --- a/libbbfdm/dmcommon.c +++ b/libbbfdm/dmcommon.c @@ -958,4 +958,3 @@ char *ethernet___get_ethernet_interface_name(char *device_name) return dev_name; } - diff --git a/libbbfdm/dmtree/tr143/diagnostics.c b/libbbfdm/dmtree/tr143/diagnostics.c index 67f1feb5..1631b729 100644 --- a/libbbfdm/dmtree/tr143/diagnostics.c +++ b/libbbfdm/dmtree/tr143/diagnostics.c @@ -1852,11 +1852,7 @@ static int operate_IPDiagnostics_TraceRoute(char *refparam, struct dmctx *ctx, v snprintf(cmd, sizeof(cmd), "sh %s %s", TRACEROUTE_DIAGNOSTIC_PATH, input); - FILE *pp = popen(cmd, "r"); - if (pp != NULL) { - fgets(output, sizeof(output) , pp); - pclose(pp); - } else { + if (run_cmd(cmd, output, sizeof(output)) != 0) { bbfdm_set_fault_message(ctx, "TraceRoute: 'sh %s {input}' command failed to run", TRACEROUTE_DIAGNOSTIC_PATH); return USP_FAULT_COMMAND_FAILURE; } @@ -1990,11 +1986,7 @@ static int operate_IPDiagnostics_DownloadDiagnostics(char *refparam, struct dmct snprintf(cmd, sizeof(cmd), "sh %s %s", DOWNLOAD_DIAGNOSTIC_PATH, input); - FILE *pp = popen(cmd, "r"); - if (pp != NULL) { - fgets(output, sizeof(output) , pp); - pclose(pp); - } else { + if (run_cmd(cmd, output, sizeof(output)) != 0) { bbfdm_set_fault_message(ctx, "DownloadDiagnostics: 'sh %s {input}' command failed to run", DOWNLOAD_DIAGNOSTIC_PATH); return USP_FAULT_COMMAND_FAILURE; } @@ -2136,11 +2128,7 @@ static int operate_IPDiagnostics_UploadDiagnostics(char *refparam, struct dmctx snprintf(cmd, sizeof(cmd), "sh %s %s", UPLOAD_DIAGNOSTIC_PATH, input); - FILE *pp = popen(cmd, "r"); - if (pp != NULL) { - fgets(output, sizeof(output) , pp); - pclose(pp); - } else { + if (run_cmd(cmd, output, sizeof(output)) != 0) { bbfdm_set_fault_message(ctx, "UploadDiagnostics: 'sh %s {input}' command failed to run", UPLOAD_DIAGNOSTIC_PATH); return USP_FAULT_COMMAND_FAILURE; } diff --git a/libbbfdm/dmtree/tr181/deviceinfo.c b/libbbfdm/dmtree/tr181/deviceinfo.c index 63b9efcd..0890ee41 100644 --- a/libbbfdm/dmtree/tr181/deviceinfo.c +++ b/libbbfdm/dmtree/tr181/deviceinfo.c @@ -1193,7 +1193,9 @@ static int operate_DeviceInfoVendorLogFile_Upload(char *refparam, struct dmctx * vlf_file_path = DEF_VENDOR_LOG_FILE; char cmd[64] = {0}; snprintf(cmd, sizeof(cmd), "logread > %s", DEF_VENDOR_LOG_FILE); - system(cmd); + if (system(cmd) == -1) { + return USP_FAULT_COMMAND_FAILURE; + } } int res = bbf_upload_log(url, user, pass, vlf_file_path, upload_command, upload_path); diff --git a/libbbfdm/dmtree/tr181/packetcapture.c b/libbbfdm/dmtree/tr181/packetcapture.c index caaf37fc..87b138c7 100644 --- a/libbbfdm/dmtree/tr181/packetcapture.c +++ b/libbbfdm/dmtree/tr181/packetcapture.c @@ -117,11 +117,7 @@ int operate_Device_packetCapture(char *refparam, struct dmctx *ctx, void *data, snprintf(cmd, sizeof(cmd), "sh %s %s", PACKET_CAPTURE_DIAGNOSTIC_PATH, input); - FILE *pp = popen(cmd, "r"); - if (pp != NULL) { - fgets(output, sizeof(output), pp); - pclose(pp); - } else { + if (run_cmd(cmd, output, sizeof(output)) != 0) { bbfdm_set_fault_message(ctx, "PacketCapture: 'sh %s {input}' command failed to run", PACKET_CAPTURE_DIAGNOSTIC_PATH); return USP_FAULT_COMMAND_FAILURE; } diff --git a/libbbfdm/dmtree/tr181/selftest.c b/libbbfdm/dmtree/tr181/selftest.c index bf9d7eda..40946369 100644 --- a/libbbfdm/dmtree/tr181/selftest.c +++ b/libbbfdm/dmtree/tr181/selftest.c @@ -59,13 +59,8 @@ int operate_Device_SelfTest(char *refparam, struct dmctx *ctx, void *data, char snprintf(cmd, sizeof(cmd), "sh %s", DIAG_BIN); - FILE *pp = popen(cmd, "r"); - if (pp != NULL) { - fgets(output, sizeof(output), pp); - pclose(pp); - } else { + if (run_cmd(cmd, output, sizeof(output)) != 0) goto err; - } // truncate the new line char from end remove_new_line(output); diff --git a/libbbfdm/dmtree/tr181/ssh.c b/libbbfdm/dmtree/tr181/ssh.c index 47c59fa2..db005455 100644 --- a/libbbfdm/dmtree/tr181/ssh.c +++ b/libbbfdm/dmtree/tr181/ssh.c @@ -283,7 +283,9 @@ static void close_active_sessions(struct uci_section *s) continue; snprintf(cmd, sizeof(cmd), "kill -15 %s", line); - system(cmd); + if (system(cmd) == -1) { + break; + } } pclose(pp); diff --git a/libbbfdm/dmtree/tr181/userinterface.c b/libbbfdm/dmtree/tr181/userinterface.c index 18e8dd78..1f2939f2 100644 --- a/libbbfdm/dmtree/tr181/userinterface.c +++ b/libbbfdm/dmtree/tr181/userinterface.c @@ -212,7 +212,7 @@ static void add_new_host(char **list, char *host) *end = '\0'; if (*list == NULL) { - asprintf(list, "%s", tmp); + dmasprintf(list, "%s", tmp); return; } else { prev = dmstrdup(*list); @@ -220,7 +220,7 @@ static void add_new_host(char **list, char *host) *list = NULL; } - asprintf(list, "%s,%s", prev, tmp); + dmasprintf(list, "%s,%s", prev, tmp); } /************************************************************* @@ -604,7 +604,6 @@ static int get_http_access_hosts(char *refparam, struct dmctx *ctx, void *data, if (res) { *value = dmstrdup(res); - free(res); } return 0; diff --git a/libbbfdm/dmtree/tr471/iplayercap.c b/libbbfdm/dmtree/tr471/iplayercap.c index d59d7248..c0fb5c48 100644 --- a/libbbfdm/dmtree/tr471/iplayercap.c +++ b/libbbfdm/dmtree/tr471/iplayercap.c @@ -1075,11 +1075,7 @@ int operate_IPDiagnostics_IPLayerCapacity(char *refparam, struct dmctx *ctx, voi snprintf(cmd, sizeof(cmd), "sh %s %s", IPLAYER_CAP_DIAGNOSTIC_PATH, input); - FILE *pp = popen(cmd, "r"); - if (pp != NULL) { - fgets(output, sizeof(output), pp); - pclose(pp); - } else { + if (run_cmd(cmd, output, sizeof(output)) != 0) { bbfdm_set_fault_message(ctx, "IPLayerCapacity: 'sh %s {input}' command failed to run", IPLAYER_CAP_DIAGNOSTIC_PATH); return USP_FAULT_COMMAND_FAILURE; }