From: Arvid Requate Date: Mon, 7 Jul 2014 16:15:37 +0000 (+0200) Subject: s4-backupkey: de-duplicate error handling X-Git-Tag: samba-4.2.0~32 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0dd6cfa91ec65ae7c6f1a6f541c737cac3fb866c;p=thirdparty%2Fsamba.git s4-backupkey: de-duplicate error handling Signed-off-by: Arvid Requate Reviewed-by: Andrew Bartlett Reviewed-by: Garming Sam (cherry picked from commit 525c93caa6c264de7c0cb463d005d3dcda7e45af) --- diff --git a/source4/rpc_server/backupkey/dcesrv_backupkey.c b/source4/rpc_server/backupkey/dcesrv_backupkey.c index 4d75b02bae0..5db7685e67e 100644 --- a/source4/rpc_server/backupkey/dcesrv_backupkey.c +++ b/source4/rpc_server/backupkey/dcesrv_backupkey.c @@ -849,77 +849,58 @@ static WERROR self_sign_cert(TALLOC_CTX *ctx, hx509_context *hctx, hx509_request ret = hx509_request_get_name(*hctx, *req, &subject); if (ret !=0) { - talloc_free(uniqueid.data); - return WERR_INTERNAL_ERROR; + goto fail_subject; } ret = hx509_request_get_SubjectPublicKeyInfo(*hctx, *req, &spki); if (ret !=0) { - talloc_free(uniqueid.data); - hx509_name_free(&subject); - return WERR_INTERNAL_ERROR; + goto fail_spki; } ret = hx509_ca_tbs_init(*hctx, &tbs); if (ret !=0) { - talloc_free(uniqueid.data); - hx509_name_free(&subject); - free_SubjectPublicKeyInfo(&spki); - return WERR_INTERNAL_ERROR; + goto fail_tbs; } ret = hx509_ca_tbs_set_spki(*hctx, tbs, &spki); if (ret !=0) { - talloc_free(uniqueid.data); - hx509_name_free(&subject); - free_SubjectPublicKeyInfo(&spki); - hx509_ca_tbs_free(&tbs); - return WERR_INTERNAL_ERROR; + goto fail; } ret = hx509_ca_tbs_set_subject(*hctx, tbs, subject); if (ret !=0) { - talloc_free(uniqueid.data); - hx509_name_free(&subject); - free_SubjectPublicKeyInfo(&spki); - hx509_ca_tbs_free(&tbs); - return WERR_INTERNAL_ERROR; + goto fail; } ret = hx509_ca_tbs_set_ca(*hctx, tbs, 1); if (ret !=0) { - talloc_free(uniqueid.data); - hx509_name_free(&subject); - free_SubjectPublicKeyInfo(&spki); - hx509_ca_tbs_free(&tbs); - return WERR_INTERNAL_ERROR; + goto fail; } ret = hx509_ca_tbs_set_notAfter_lifetime(*hctx, tbs, lifetime); if (ret !=0) { - talloc_free(uniqueid.data); - hx509_name_free(&subject); - free_SubjectPublicKeyInfo(&spki); - hx509_ca_tbs_free(&tbs); - return WERR_INTERNAL_ERROR; + goto fail; } ret = hx509_ca_tbs_set_unique(*hctx, tbs, &uniqueid, &uniqueid); if (ret !=0) { - talloc_free(uniqueid.data); - hx509_name_free(&subject); - free_SubjectPublicKeyInfo(&spki); - hx509_ca_tbs_free(&tbs); - return WERR_INTERNAL_ERROR; + goto fail; } ret = hx509_ca_sign_self(*hctx, tbs, *private_key, cert); if (ret !=0) { - talloc_free(uniqueid.data); - hx509_name_free(&subject); - free_SubjectPublicKeyInfo(&spki); - hx509_ca_tbs_free(&tbs); - return WERR_INTERNAL_ERROR; + goto fail; } hx509_name_free(&subject); free_SubjectPublicKeyInfo(&spki); hx509_ca_tbs_free(&tbs); return WERR_OK; + +fail: + hx509_ca_tbs_free(&tbs); +fail_tbs: + free_SubjectPublicKeyInfo(&spki); +fail_spki: + hx509_name_free(&subject); +fail_subject: + talloc_free(uniqueid.data); + talloc_free(serialnumber.data); + return WERR_INTERNAL_ERROR; } static WERROR create_req(TALLOC_CTX *ctx, hx509_context *hctx, hx509_request *req,