[PATCH 04/10] s4-backupkey: de-duplicate error handling
Arvid Requate
requate at univention.de
Mon Jul 7 11:14:48 MDT 2014
Streamline the error handling in self_sign_cert.
Signed-off-by: Arvid Requate <requate at univention.de>
---
source4/rpc_server/backupkey/dcesrv_backupkey.c | 58
+++++++++----------------
1 file changed, 20 insertions(+), 38 deletions(-)
diff --git a/source4/rpc_server/backupkey/dcesrv_backupkey.c
b/source4/rpc_server/backupkey/dcesrv_backupkey.c
index cc3c76b..cf62323 100644
--- a/source4/rpc_server/backupkey/dcesrv_backupkey.c
+++ b/source4/rpc_server/backupkey/dcesrv_backupkey.c
@@ -849,76 +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);
- 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,
--
2.0.0.rc2
More information about the samba-technical
mailing list