From 44bcb3e74a85b4a53a0dc626db13c3d03d925538 Mon Sep 17 00:00:00 2001 From: David Sommerseth Date: Mon, 10 Jan 2011 01:19:22 +0100 Subject: Fixed several memleaks in the eurephiadm related code paths Signed-off-by: David Sommerseth --- database/sqlite/administration/certificates.c | 1 + eurephiadm/commands/adminaccess.c | 18 ++++++++++++------ eurephiadm/commands/certificates.c | 2 ++ eurephiadm/commands/usercerts.c | 1 + eurephiadm/commands/users.c | 1 + 5 files changed, 17 insertions(+), 6 deletions(-) diff --git a/database/sqlite/administration/certificates.c b/database/sqlite/administration/certificates.c index b283624..78be97e 100644 --- a/database/sqlite/administration/certificates.c +++ b/database/sqlite/administration/certificates.c @@ -173,6 +173,7 @@ static xmlDoc *certificate_add(eurephiaCTX *ctx, eDBfieldMap *crtinf_map) { res_d = eurephiaXML_ResultMsg(ctx, exmlRESULT, info_n, "Certificate registered (certid %ld)", res->last_insert_id); + free_nullsafe(ctx, certid); xmlFreeNode(info_n); } sqlite_free_results(res); diff --git a/eurephiadm/commands/adminaccess.c b/eurephiadm/commands/adminaccess.c index 4b19c05..cb6078d 100644 --- a/eurephiadm/commands/adminaccess.c +++ b/eurephiadm/commands/adminaccess.c @@ -275,11 +275,13 @@ int grant_revoke(eurephiaCTX *ctx, eurephiaSESSION *sess, eurephiaVALUES *cfg, i case 'i': if( f_uid > 0 ) { fprintf(stderr, "%s: User id can only be set once\n", MODULE); - return 1; + rc = 1; + goto error; } if( atoi_nullsafe(optargs[0]) < 1 ) { fprintf(stderr, "%s: User ID must be a positive number (>0)\n", MODULE); - return 1; + rc = 1; + goto error; } f_uid++; xmlNewChild(fmap_n, NULL, (xmlChar *) "uid", (xmlChar *) optargs[0]); @@ -288,7 +290,8 @@ int grant_revoke(eurephiaCTX *ctx, eurephiaSESSION *sess, eurephiaVALUES *cfg, i case 'a': if( f_acl > 0 ) { fprintf(stderr, "%s: Access level can only be set once\n", MODULE); - return 1; + rc = 1; + goto error; } f_acl++; xmlNewChild(fmap_n, NULL, (xmlChar *) "accesslevel", (xmlChar *) optargs[0]); @@ -297,7 +300,8 @@ int grant_revoke(eurephiaCTX *ctx, eurephiaSESSION *sess, eurephiaVALUES *cfg, i case 'I': if( f_intf > 0 ) { fprintf(stderr, "%s: Admin interface indicator can only be set once\n", MODULE); - return 1; + rc = 1; + goto error; } f_intf++; xmlNewChild(fmap_n, NULL, (xmlChar *) "interface", (xmlChar *) optargs[0]); @@ -305,10 +309,12 @@ int grant_revoke(eurephiaCTX *ctx, eurephiaSESSION *sess, eurephiaVALUES *cfg, i case 'h': display_adminaccess_help(actmode); - return 0; + rc = 0; + goto error; default: - return 1; + rc = 1; + goto error; } } diff --git a/eurephiadm/commands/certificates.c b/eurephiadm/commands/certificates.c index 859da4f..a3b875e 100644 --- a/eurephiadm/commands/certificates.c +++ b/eurephiadm/commands/certificates.c @@ -218,6 +218,7 @@ int register_certificate(eurephiaCTX *ctx, int depth, const char *digest, certid = 0; } free_nullsafe(ctx, res); + xmlFreeDoc(res_xml); } xmlFreeDoc(cert_xml); free_nullsafe(ctx, cname_cp); @@ -525,6 +526,7 @@ int delete_cert(eurephiaCTX *ctx, eurephiaSESSION *sess, eurephiaVALUES *cfg, in rc = 0; } free_nullsafe(ctx, res); + xmlFreeDoc(res_xml); } xmlFreeDoc(delete_xml); diff --git a/eurephiadm/commands/usercerts.c b/eurephiadm/commands/usercerts.c index 3ca8be5..553e16e 100644 --- a/eurephiadm/commands/usercerts.c +++ b/eurephiadm/commands/usercerts.c @@ -215,6 +215,7 @@ int list_usercerts(eurephiaCTX *ctx, eurephiaSESSION *sess, eurephiaVALUES *cfg, xslt_print_xmldoc(stdout, cfg, list_xml, "usercerts.xsl", xsltparams); xmlFreeDoc(list_xml); + xmlFreeDoc(srch_xml); return 0; } diff --git a/eurephiadm/commands/users.c b/eurephiadm/commands/users.c index 7d514ba..033e6d2 100644 --- a/eurephiadm/commands/users.c +++ b/eurephiadm/commands/users.c @@ -729,6 +729,7 @@ int account_activation(eurephiaCTX *ctx, eurephiaSESSION *sess, eurephiaVALUES * rc = rc ? 1 : 0; } free_nullsafe(ctx, res); + free_nullsafe(ctx, acclvl_res); xmlFreeDoc(acclvl_res_xml); xmlFreeDoc(acclvl_d); } -- cgit