diff options
Diffstat (limited to 'src/analysis/db/server.c')
-rw-r--r-- | src/analysis/db/server.c | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/src/analysis/db/server.c b/src/analysis/db/server.c index bbc7415..d0ce62b 100644 --- a/src/analysis/db/server.c +++ b/src/analysis/db/server.c @@ -552,6 +552,8 @@ static void *g_db_server_listener(GDbServer *server) int ret; /* Bilan d'un appel */ gen_sockaddr_t peer; /* Adresse cliente */ int fd; /* Canal établi vers un client */ + rle_string hash; /* Empreinte du binaire visé */ + rle_string user; /* Nom d'utilisateur du client */ const char *ip; /* Statut de la conversion */ char *peer_name; /* Désignation du correspondant*/ DBError error; /* Validation de la connexion */ @@ -560,8 +562,6 @@ static void *g_db_server_listener(GDbServer *server) bool status; /* Bilan d'une opération */ uint32_t cmd; /* Commande initiale lue */ uint32_t version; /* Version du client lue */ - rle_string hash; /* Empreinte du binaire visé */ - rle_string user; /* Nom d'utilisateur du client */ unsigned char sig[RSA_USED_SIZE]; /* Signature effectuée */ GList *iter; /* Boucle de parcours */ packed_buffer out_pbuf; /* Tampon d'émission */ @@ -587,6 +587,11 @@ static void *g_db_server_listener(GDbServer *server) continue; } + /* Initialisation à vide pour les sorties en erreur */ + + init_dynamic_rle_string(&hash, NULL); + init_dynamic_rle_string(&user, NULL); + /* Construction d'une représentation */ if (*((sa_family_t *)&peer) == AF_UNIX) @@ -607,6 +612,9 @@ static void *g_db_server_listener(GDbServer *server) } + else + goto gdsl_invalid; + error = DBE_NONE; archive = NULL; @@ -747,13 +755,13 @@ static void *g_db_server_listener(GDbServer *server) init_packed_buffer(&out_pbuf); status = extend_packed_buffer(&out_pbuf, (uint32_t []) { DBC_WELCOME }, sizeof(uint32_t), true); - if (!status) goto gdsl_error; + if (!status) goto gdsl_out_error; status = extend_packed_buffer(&out_pbuf, (uint32_t []) { error }, sizeof(uint32_t), true); - if (!status) goto gdsl_error; + if (!status) goto gdsl_out_error; status = send_packed_buffer(&out_pbuf, fd); - if (!status) goto gdsl_error; + if (!status) goto gdsl_out_error; exit_packed_buffer(&out_pbuf); @@ -781,15 +789,19 @@ static void *g_db_server_listener(GDbServer *server) assert(error != DBE_NONE); - gdsl_error: + gdsl_out_error: exit_packed_buffer(&out_pbuf); + gdsl_error: + free(peer_name); exit_rle_string(&hash); exit_rle_string(&user); + gdsl_invalid: + close(fd); } |