From 6e709160050187f631d622566e19bec77888bd49 Mon Sep 17 00:00:00 2001 From: OpenGnSys Support Team Date: Wed, 22 Dec 2021 16:38:27 +0100 Subject: #915 remove shim code to update database after image restore command Make direct call to dbi API to update database instead. --- src/client.c | 47 ++++++++++++++++++++++++++--------------------- src/ogAdmServer.c | 41 ----------------------------------------- src/ogAdmServer.h | 1 - 3 files changed, 26 insertions(+), 63 deletions(-) (limited to 'src') diff --git a/src/client.c b/src/client.c index a70c9e4..ad4c5d3 100644 --- a/src/client.c +++ b/src/client.c @@ -615,12 +615,12 @@ static int og_resp_image_restore(json_t *data, struct og_client *cli) const char *partition = NULL; const char *image_id = NULL; const char *disk = NULL; - dbi_result query_result; + const char *msglog; struct og_dbi *dbi; + dbi_result result; const char *key; json_t *value; int err = 0; - bool res; if (json_typeof(data) != JSON_OBJECT) return -1; @@ -649,24 +649,23 @@ static int og_resp_image_restore(json_t *data, struct og_client *cli) return -1; } - query_result = dbi_conn_queryf(dbi->conn, - "SELECT idperfilsoft FROM imagenes " - " WHERE idimagen='%s'", - image_id); - if (!query_result) { + result = dbi_conn_queryf(dbi->conn, + "SELECT idperfilsoft FROM imagenes " + " WHERE idimagen='%s'", image_id); + if (!result) { og_dbi_close(dbi); syslog(LOG_ERR, "failed to query database\n"); return -1; } - if (!dbi_result_next_row(query_result)) { - dbi_result_free(query_result); + if (!dbi_result_next_row(result)) { + dbi_result_free(result); og_dbi_close(dbi); syslog(LOG_ERR, "software profile does not exist in database\n"); return -1; } snprintf(img_legacy.software_id, sizeof(img_legacy.software_id), - "%d", dbi_result_get_uint(query_result, "idperfilsoft")); - dbi_result_free(query_result); + "%d", dbi_result_get_uint(result, "idperfilsoft")); + dbi_result_free(result); err = og_dbi_get_computer_info(dbi, &computer, cli->addr.sin_addr); if (err < 0) { @@ -680,18 +679,24 @@ static int og_resp_image_restore(json_t *data, struct og_client *cli) snprintf(img_legacy.disk, sizeof(img_legacy.disk), "%s", disk); snprintf(soft_legacy.id, sizeof(soft_legacy.id), "%d", computer.id); - res = actualizaRestauracionImagen(dbi, - img_legacy.image_id, - img_legacy.disk, - img_legacy.part, - soft_legacy.id, - img_legacy.software_id); - og_dbi_close(dbi); - - if (!res) { - syslog(LOG_ERR, "Problem updating client configuration\n"); + result = dbi_conn_queryf(dbi->conn, + "UPDATE ordenadores_particiones" + " SET idimagen=%s, idperfilsoft=%s, fechadespliegue=NOW()," + " revision=(SELECT revision FROM imagenes WHERE idimagen=%s)," + " idnombreso=IFNULL((SELECT idnombreso FROM perfilessoft WHERE idperfilsoft=%s),0)" + " WHERE idordenador=%s AND numdisk=%s AND numpar=%s", + img_legacy.image_id, img_legacy.software_id, + img_legacy.image_id, img_legacy.software_id, + soft_legacy.id, img_legacy.disk, img_legacy.part); + if (!result) { + dbi_conn_error(dbi->conn, &msglog); + syslog(LOG_ERR, "failed to update database (%s:%d) %s\n", + __func__, __LINE__, msglog); + og_dbi_close(dbi); return -1; } + dbi_result_free(result); + og_dbi_close(dbi); return 0; } diff --git a/src/ogAdmServer.c b/src/ogAdmServer.c index 6f6de54..2b64254 100644 --- a/src/ogAdmServer.c +++ b/src/ogAdmServer.c @@ -451,47 +451,6 @@ bool actualizaCreacionImagen(struct og_dbi *dbi, char *idi, char *dsk, return true; } -// ________________________________________________________________________________________________________ -// Función: actualizaRestauracionImagen -// -// Descripción: -// Esta función actualiza la base de datos con el resultado de la restauración de una imagen -// Parámetros: -// - db: Objeto base de datos (ya operativo) -// - tbl: Objeto tabla -// - idi: Identificador de la imagen -// - dsk: Disco de donde se restauró -// - par: Partición de donde se restauró -// - ido: Identificador del cliente donde se restauró -// - ifs: Identificador del perfil software contenido en la imagen -// Devuelve: -// true: Si el proceso es correcto -// false: En caso de ocurrir algún error -// ________________________________________________________________________________________________________ -bool actualizaRestauracionImagen(struct og_dbi *dbi, char *idi, - char *dsk, char *par, char *ido, char *ifs) -{ - const char *msglog; - dbi_result result; - - /* Actualizar los datos de la imagen */ - result = dbi_conn_queryf(dbi->conn, - "UPDATE ordenadores_particiones" - " SET idimagen=%s, idperfilsoft=%s, fechadespliegue=NOW()," - " revision=(SELECT revision FROM imagenes WHERE idimagen=%s)," - " idnombreso=IFNULL((SELECT idnombreso FROM perfilessoft WHERE idperfilsoft=%s),0)" - " WHERE idordenador=%s AND numdisk=%s AND numpar=%s", idi, ifs, idi, ifs, ido, dsk, par); - - if (!result) { - dbi_conn_error(dbi->conn, &msglog); - syslog(LOG_ERR, "failed to query database (%s:%d) %s\n", - __func__, __LINE__, msglog); - return false; - } - dbi_result_free(result); - - return true; -} // ________________________________________________________________________________________________________ // Función: actualizaHardware // diff --git a/src/ogAdmServer.h b/src/ogAdmServer.h index d818289..0768561 100644 --- a/src/ogAdmServer.h +++ b/src/ogAdmServer.h @@ -25,7 +25,6 @@ struct og_dbi; bool actualizaConfiguracion(struct og_dbi *,char* ,int); bool WakeUp(int, const char *, const char *, const char *, const char *); bool actualizaCreacionImagen(struct og_dbi *,char*,char*,char*,char*,char*,char*); -bool actualizaRestauracionImagen(struct og_dbi *,char*,char*,char*,char*,char*); bool actualizaHardware(struct og_dbi *dbi, char* ,char*,char*,char*); bool cuestionPerfilHardware(struct og_dbi *dbi,char*,char*,int,char*,char*,int *,int); bool actualizaSoftware(struct og_dbi *, char* , char* , char*,char*,char*); -- cgit v1.2.3-18-g5258