From f537dafa775307255019df9a119c8f81a52607ca Mon Sep 17 00:00:00 2001 From: Roberto Hueso Gómez Date: Tue, 6 Oct 2020 14:19:06 +0200 Subject: #941 Use fixed length strings in og_computer and og_dbi_get_computer_info This patch is a refactor for og_computer and og_dbi_get_computer_info. It now uses fixed lenght strings to make it more reliable and avoid errors if the DB is not returning a null ended string. --- src/dbi.c | 41 +++++++++++++++++++---------------------- 1 file changed, 19 insertions(+), 22 deletions(-) (limited to 'src/dbi.c') diff --git a/src/dbi.c b/src/dbi.c index 7d7ba64..3c4ae51 100644 --- a/src/dbi.c +++ b/src/dbi.c @@ -13,6 +13,7 @@ #include "dbi.h" #include #include +#include struct og_dbi *og_dbi_open(struct og_dbi_config *config) { @@ -93,19 +94,28 @@ int og_dbi_get_computer_info(struct og_dbi *dbi, struct og_computer *computer, } computer->id = dbi_result_get_uint(result, "idordenador"); - computer->name = strdup(dbi_result_get_string(result, "nombreordenador")); - computer->serial_number = strdup(dbi_result_get_string(result, "numserie")); - computer->ip = strdup(dbi_result_get_string(result, "ip")); - computer->mac = strdup(dbi_result_get_string(result, "mac")); + snprintf(computer->name, sizeof(computer->name), "%s", + dbi_result_get_string(result, "nombreordenador")); + snprintf(computer->serial_number, sizeof(computer->serial_number), "%s", + dbi_result_get_string(result, "numserie")); + snprintf(computer->ip, sizeof(computer->ip), "%s", + dbi_result_get_string(result, "ip")); + snprintf(computer->mac, sizeof(computer->mac), "%s", + dbi_result_get_string(result, "mac")); computer->room = dbi_result_get_uint(result, "idaula"); computer->hardware_id = dbi_result_get_uint(result, "idperfilhard"); computer->repo_id = dbi_result_get_uint(result, "idrepositorio"); - computer->netmask = strdup(dbi_result_get_string(result, "mascara")); - computer->boot = strdup(dbi_result_get_string(result, "arranque")); - computer->netiface = strdup(dbi_result_get_string(result, "netiface")); - computer->netdriver = strdup(dbi_result_get_string(result, "netdriver")); + snprintf(computer->netmask, sizeof(computer->netmask), "%s", + dbi_result_get_string(result, "mascara")); + snprintf(computer->boot, sizeof(computer->boot), "%s", + dbi_result_get_string(result, "arranque")); + snprintf(computer->netiface, sizeof(computer->netiface), "%s", + dbi_result_get_string(result, "netiface")); + snprintf(computer->netdriver, sizeof(computer->netdriver), "%s", + dbi_result_get_string(result, "netdriver")); computer->procedure_id = dbi_result_get_uint(result, "idproautoexec"); - computer->livedir = strdup(dbi_result_get_string(result, "oglivedir")); + snprintf(computer->livedir, sizeof(computer->livedir), "%s", + dbi_result_get_string(result, "oglivedir")); computer->remote = dbi_result_get_uint(result, "inremotepc") != 0; computer->maintenance = dbi_result_get_uint(result, "maintenance") != 0; @@ -113,16 +123,3 @@ int og_dbi_get_computer_info(struct og_dbi *dbi, struct og_computer *computer, return 0; } - -void og_dbi_free_computer_info(struct og_computer *computer) -{ - free(computer->serial_number); - free(computer->netdriver); - free(computer->netiface); - free(computer->netmask); - free(computer->livedir); - free(computer->name); - free(computer->boot); - free(computer->mac); - free(computer->ip); -} -- cgit v1.2.3-18-g5258