diff options
author | Benjamin Dauvergne <bdauvergne@entrouvert.com> | 2008-11-04 01:58:53 +0000 |
---|---|---|
committer | Benjamin Dauvergne <bdauvergne@entrouvert.com> | 2008-11-04 01:58:53 +0000 |
commit | 7103e81888652aa46f28ee0aee29bbcc94c088b2 (patch) | |
tree | dca71492d43a4aab8b69e632093a9497e5003e5f /lasso | |
parent | c5249bab79cda68c44565e030076e4c0a78a5868 (diff) | |
download | lasso-7103e81888652aa46f28ee0aee29bbcc94c088b2.tar.gz lasso-7103e81888652aa46f28ee0aee29bbcc94c088b2.tar.xz lasso-7103e81888652aa46f28ee0aee29bbcc94c088b2.zip |
Change style of error and dellocation handling
- lasso/id-ff/provider.c:
- in lasso_provider_verify_signature use standardised memory and
error handling macros, and also standard return code variable name
and exit label.
- in lasso_providerl_load_metadata_from_buffer and
lasso_provider_load_metadata use the standardised macros, exit
labels and return code variable.
- lasso/id-ff/server.c:
- in lasso_server_load_affiliation use standardised allocation and
error handling macros.
- lasso/id-wsf/wsf_profile.c:
- use standardised memory and error handling macros in
lasso_wsf_profile_build_soap_request_msg.
Diffstat (limited to 'lasso')
-rw-r--r-- | lasso/id-ff/provider.c | 123 | ||||
-rw-r--r-- | lasso/id-ff/server.c | 12 | ||||
-rw-r--r-- | lasso/id-wsf/wsf_profile.c | 4 |
3 files changed, 46 insertions, 93 deletions
diff --git a/lasso/id-ff/provider.c b/lasso/id-ff/provider.c index c06d8cc1..eb012ab4 100644 --- a/lasso/id-ff/provider.c +++ b/lasso/id-ff/provider.c @@ -696,20 +696,16 @@ gboolean lasso_provider_load_metadata_from_buffer(LassoProvider *provider, const gchar *metadata) { xmlDoc *doc; - gboolean ret; + gboolean rc; g_return_val_if_fail(LASSO_IS_PROVIDER(provider), FALSE); doc = xmlParseDoc((xmlChar*)metadata); - if (doc == NULL) { - lasso_release_doc(doc); - return FALSE; - } - ret = lasso_provider_load_metadata_from_doc(provider, doc); - if (ret == TRUE) { - lasso_assign_string(provider->metadata_filename, metadata); - } + goto_exit_if_fail (doc != NULL, FALSE); + goto_exit_if_fail (lasso_provider_load_metadata_from_doc(provider, doc), FALSE); + lasso_assign_string(provider->metadata_filename, metadata); +exit: lasso_release_doc(doc); - return ret; + return rc; } @@ -726,22 +722,20 @@ gboolean lasso_provider_load_metadata(LassoProvider *provider, const gchar *path) { xmlDoc *doc; - gboolean ret; + gboolean rc; g_return_val_if_fail(LASSO_IS_PROVIDER(provider), FALSE); if (access(path, R_OK) != 0) { return FALSE; } doc = xmlParseFile(path); - if (doc == NULL) { - return FALSE; - } - ret = lasso_provider_load_metadata_from_doc(provider, doc); - if (ret == TRUE) { - lasso_assign_string(provider->metadata_filename, path); - } + goto_exit_if_fail(doc != NULL, FALSE); + goto_exit_if_fail(lasso_provider_load_metadata_from_doc(provider, doc), FALSE); + /** Conserve metadata path for future dump/reload */ + lasso_assign_string(provider->metadata_filename, path); +exit: lasso_release_doc(doc); - return ret; + return rc; } static gboolean @@ -1069,12 +1063,12 @@ lasso_provider_verify_signature(LassoProvider *provider, /* this duplicates some code from lasso_node_init_from_message; * reflection about code reuse is under way... */ - char *msg; - xmlDoc *doc; - xmlNode *xmlnode = NULL, *sign, *x509data; + char *msg = NULL; + xmlDoc *doc = NULL; + xmlNode *xmlnode = NULL, *sign = NULL, *x509data = NULL; xmlSecKeysMngr *keys_mngr = NULL; - xmlSecDSigCtx *dsigCtx; - int rc; + xmlSecDSigCtx *dsigCtx = NULL; + int rc = 0; xmlXPathContext *xpathCtx = NULL; xmlXPathObject *xpathObj = NULL; @@ -1098,17 +1092,15 @@ lasso_provider_verify_signature(LassoProvider *provider, } if (format == LASSO_MESSAGE_FORMAT_BASE64) { + int len; msg = g_malloc(strlen(message)); - rc = xmlSecBase64Decode((xmlChar*)message, (xmlChar*)msg, strlen(message)); - if (rc < 0) { - g_free(msg); - return LASSO_PROFILE_ERROR_INVALID_MSG; + len = xmlSecBase64Decode((xmlChar*)message, (xmlChar*)msg, strlen(message)); + if (len < 0) { + goto_exit_with_rc(LASSO_PROFILE_ERROR_INVALID_MSG); } - } - - doc = xmlParseMemory(msg, strlen(msg)); - if (format == LASSO_MESSAGE_FORMAT_BASE64) { - g_free(msg); + doc = xmlParseMemory(msg, strlen(msg)); + } else { + doc = xmlParseMemory(msg, strlen(msg)); msg = NULL; } @@ -1119,12 +1111,7 @@ lasso_provider_verify_signature(LassoProvider *provider, if (xpathObj->nodesetval && xpathObj->nodesetval->nodeNr ) { xmlnode = xpathObj->nodesetval->nodeTab[0]; } - if (xmlnode == NULL) { - lasso_release_doc(doc); - xmlXPathFreeContext(xpathCtx); - xmlXPathFreeObject(xpathObj); - return LASSO_PROFILE_ERROR_INVALID_MSG; - } + goto_exit_if_fail (xmlnode != NULL, LASSO_PROFILE_ERROR_INVALID_MSG); } else { xmlnode = xmlDocGetRootElement(doc); } @@ -1151,18 +1138,12 @@ lasso_provider_verify_signature(LassoProvider *provider, } } - - if (sign == NULL) { - lasso_release_doc(doc); - xmlXPathFreeContext(xpathCtx); - xmlXPathFreeObject(xpathObj); - return LASSO_DS_ERROR_SIGNATURE_NOT_FOUND; - } + goto_exit_if_fail (sign != NULL, LASSO_DS_ERROR_SIGNATURE_NOT_FOUND); if (id_attr_name) { xmlChar *id_value = xmlGetProp(xmlnode, (xmlChar*)id_attr_name); xmlAttr *id_attr = xmlHasProp(xmlnode, (xmlChar*)id_attr_name); - if (id_value) { + if (id_value != NULL) { xmlAddID(NULL, doc, id_value, id_attr); xmlFree(id_value); } @@ -1172,52 +1153,32 @@ lasso_provider_verify_signature(LassoProvider *provider, if (x509data != NULL && provider->ca_cert_chain != NULL) { keys_mngr = lasso_load_certs_from_pem_certs_chain_file( provider->ca_cert_chain); - if (keys_mngr == NULL) { - lasso_release_doc(doc); - xmlXPathFreeContext(xpathCtx); - xmlXPathFreeObject(xpathObj); - return LASSO_DS_ERROR_CA_CERT_CHAIN_LOAD_FAILED; - } + goto_exit_if_fail (keys_mngr != NULL, LASSO_DS_ERROR_CA_CERT_CHAIN_LOAD_FAILED); } dsigCtx = xmlSecDSigCtxCreate(keys_mngr); if (keys_mngr == NULL) { dsigCtx->signKey = xmlSecKeyDuplicate(lasso_provider_get_public_key(provider)); - if (dsigCtx->signKey == NULL) { - /* XXX: should this be detected on lasso_provider_new ? */ - xmlSecDSigCtxDestroy(dsigCtx); - xmlXPathFreeContext(xpathCtx); - xmlXPathFreeObject(xpathObj); - lasso_release_doc(doc); - return LASSO_DS_ERROR_PUBLIC_KEY_LOAD_FAILED; - } + goto_exit_if_fail (dsigCtx->signKey != NULL, LASSO_DS_ERROR_PUBLIC_KEY_LOAD_FAILED); } - if (xmlSecDSigCtxVerify(dsigCtx, sign) < 0) { - xmlSecDSigCtxDestroy(dsigCtx); - if (keys_mngr) - xmlSecKeysMngrDestroy(keys_mngr); - lasso_release_doc(doc); - xmlXPathFreeContext(xpathCtx); - xmlXPathFreeObject(xpathObj); - return LASSO_DS_ERROR_SIGNATURE_VERIFICATION_FAILED; - } - if (keys_mngr) - xmlSecKeysMngrDestroy(keys_mngr); + goto_exit_if_fail (xmlSecDSigCtxVerify(dsigCtx, sign) >= 0, LASSO_DS_ERROR_SIGNATURE_VERIFICATION_FAILED); if (dsigCtx->status != xmlSecDSigStatusSucceeded) { - xmlSecDSigCtxDestroy(dsigCtx); - lasso_release_doc(doc); - xmlXPathFreeContext(xpathCtx); - xmlXPathFreeObject(xpathObj); - return LASSO_DS_ERROR_INVALID_SIGNATURE; + rc = LASSO_DS_ERROR_INVALID_SIGNATURE; + goto exit; } - xmlSecDSigCtxDestroy(dsigCtx); - xmlXPathFreeContext(xpathCtx); - xmlXPathFreeObject(xpathObj); +exit: + lasso_release_string(msg); + lasso_release_key_manager(keys_mngr); + lasso_release_signature_context(dsigCtx); + if (xpathCtx) + xmlXPathFreeContext(xpathCtx); + if (xpathObj) + xmlXPathFreeObject(xpathObj); lasso_release_doc(doc); - return 0; + return rc; } /** diff --git a/lasso/id-ff/server.c b/lasso/id-ff/server.c index 16d9da9a..e4e29ae5 100644 --- a/lasso/id-ff/server.c +++ b/lasso/id-ff/server.c @@ -319,15 +319,10 @@ lasso_server_load_affiliation(LassoServer *server, const gchar *filename) int rc; doc = xmlParseFile(filename); - if (doc == NULL) { - return LASSO_XML_ERROR_INVALID_FILE; - } + goto_exit_if_fail (doc != NULL, LASSO_XML_ERROR_INVALID_FILE); node = xmlDocGetRootElement(doc); - if (node == NULL || node->ns == NULL) { - lasso_release_doc(doc); - return LASSO_XML_ERROR_NODE_NOT_FOUND; - } + goto_exit_if_fail (node != NULL && node->ns != NULL, LASSO_XML_ERROR_NODE_NOT_FOUND); if (provider->private_data->conformance == LASSO_PROTOCOL_SAML_2_0) { rc = lasso_saml20_server_load_affiliation(server, node); @@ -335,9 +330,8 @@ lasso_server_load_affiliation(LassoServer *server, const gchar *filename) /* affiliations are not supported in ID-FF 1.2 mode */ rc = LASSO_ERROR_UNIMPLEMENTED; } - +exit: lasso_release_doc(doc); - return rc; } diff --git a/lasso/id-wsf/wsf_profile.c b/lasso/id-wsf/wsf_profile.c index 3e8768c1..dc1ea141 100644 --- a/lasso/id-wsf/wsf_profile.c +++ b/lasso/id-wsf/wsf_profile.c @@ -690,9 +690,7 @@ lasso_wsf_profile_build_soap_request_msg(LassoWsfProfile *profile) xmlOutputBufferFlush(buf); profile->msg_body = g_strdup( (char*)(buf->conv ? buf->conv->content : buf->buffer->content)); - if (buf) { - xmlOutputBufferClose(buf); - } + lasso_release_output_buffer(buf); exit: lasso_release_doc(doc); |