diff options
author | Valery Febvre <vfebvre at easter-eggs.com> | 2004-08-11 21:16:29 +0000 |
---|---|---|
committer | Valery Febvre <vfebvre at easter-eggs.com> | 2004-08-11 21:16:29 +0000 |
commit | f223b6a9b2d9705b538e8ae2c9cd1cb90b8dc134 (patch) | |
tree | 5b241f0a3cfa1e3289e9f5be9c90b30e824f7c3b /lasso/id-ff | |
parent | e356eaec446a6af0713d5db6352c1df5482d3d52 (diff) | |
download | lasso-f223b6a9b2d9705b538e8ae2c9cd1cb90b8dc134.tar.gz lasso-f223b6a9b2d9705b538e8ae2c9cd1cb90b8dc134.tar.xz lasso-f223b6a9b2d9705b538e8ae2c9cd1cb90b8dc134.zip |
Added a param 'err' in 2 methods of LassoServer class:
lasso_server_get_provider,
lasso_server_get_provider_ref
for errors reporting
Diffstat (limited to 'lasso/id-ff')
-rw-r--r-- | lasso/id-ff/federation_termination.c | 4 | ||||
-rw-r--r-- | lasso/id-ff/lecp.c | 7 | ||||
-rw-r--r-- | lasso/id-ff/logout.c | 15 | ||||
-rw-r--r-- | lasso/id-ff/name_identifier_mapping.c | 8 | ||||
-rw-r--r-- | lasso/id-ff/register_name_identifier.c | 8 | ||||
-rw-r--r-- | lasso/id-ff/server.c | 78 | ||||
-rw-r--r-- | lasso/id-ff/server.h | 10 |
7 files changed, 90 insertions, 40 deletions
diff --git a/lasso/id-ff/federation_termination.c b/lasso/id-ff/federation_termination.c index be50c5d4..e052b2dc 100644 --- a/lasso/id-ff/federation_termination.c +++ b/lasso/id-ff/federation_termination.c @@ -42,7 +42,9 @@ lasso_federation_termination_build_notification_msg(LassoFederationTermination * profile = LASSO_PROFILE(defederation); - provider = lasso_server_get_provider_ref(profile->server, profile->remote_providerID); + provider = lasso_server_get_provider_ref(profile->server, + profile->remote_providerID, + NULL); if (provider == NULL) { debug("Provider %s not found\n", profile->remote_providerID); ret = -1; diff --git a/lasso/id-ff/lecp.c b/lasso/id-ff/lecp.c index 2451f756..726bc2e7 100644 --- a/lasso/id-ff/lecp.c +++ b/lasso/id-ff/lecp.c @@ -84,7 +84,8 @@ lasso_lecp_build_authn_request_msg(LassoLecp *lecp, LASSO_PROFILE(lecp)->remote_providerID = g_strdup(remote_providerID); remote_provider = lasso_server_get_provider_ref(LASSO_PROFILE(lecp)->server, - LASSO_PROFILE(lecp)->remote_providerID); + LASSO_PROFILE(lecp)->remote_providerID, + NULL); profile->msg_url = lasso_provider_get_singleSignOnServiceURL(remote_provider, NULL); profile->msg_body = lasso_node_export_to_soap(profile->request); @@ -137,7 +138,9 @@ lasso_lecp_build_authn_response_envelope_msg(LassoLecp *lecp, return(-1); } - provider = lasso_server_get_provider_ref(profile->server, profile->remote_providerID); + provider = lasso_server_get_provider_ref(profile->server, + profile->remote_providerID, + NULL); if (provider == NULL) { message(G_LOG_LEVEL_CRITICAL, "Provider %s not found\n", profile->remote_providerID); return(-1); diff --git a/lasso/id-ff/logout.c b/lasso/id-ff/logout.c index 6e15c551..ad5b2883 100644 --- a/lasso/id-ff/logout.c +++ b/lasso/id-ff/logout.c @@ -71,7 +71,9 @@ lasso_logout_build_request_msg(LassoLogout *logout) profile = LASSO_PROFILE(logout); - provider = lasso_server_get_provider_ref(profile->server, profile->remote_providerID); + provider = lasso_server_get_provider_ref(profile->server, + profile->remote_providerID, + NULL); if (provider == NULL) { message(G_LOG_LEVEL_CRITICAL, "Provider %s not found\n", profile->remote_providerID); return(-2); @@ -134,7 +136,9 @@ lasso_logout_build_response_msg(LassoLogout *logout) profile = LASSO_PROFILE(logout); - provider = lasso_server_get_provider_ref(profile->server, profile->remote_providerID); + provider = lasso_server_get_provider_ref(profile->server, + profile->remote_providerID, + NULL); if (provider == NULL) { message(G_LOG_LEVEL_CRITICAL, "Provider not found %s\n", profile->remote_providerID); return(-2); @@ -316,7 +320,9 @@ gint lasso_logout_process_request_msg(LassoLogout *logout, ret = -1; goto done; } - provider = lasso_server_get_provider(profile->server, remote_providerID); + provider = lasso_server_get_provider_ref(profile->server, + remote_providerID, + NULL); if (provider == NULL) { message(G_LOG_LEVEL_CRITICAL, "Provider %s not found\n", remote_providerID); ret = -1; @@ -361,9 +367,6 @@ gint lasso_logout_process_request_msg(LassoLogout *logout, NULL, NULL); done: - if (provider != NULL) { - lasso_provider_destroy(provider); - } if (remote_providerID != NULL ) { xmlFree(remote_providerID); } diff --git a/lasso/id-ff/name_identifier_mapping.c b/lasso/id-ff/name_identifier_mapping.c index 2cc55a3c..e2851d82 100644 --- a/lasso/id-ff/name_identifier_mapping.c +++ b/lasso/id-ff/name_identifier_mapping.c @@ -53,7 +53,9 @@ lasso_name_identifier_mapping_build_request_msg(LassoNameIdentifierMapping *mapp profile = LASSO_PROFILE(mapping); /* get the prototocol profile of the name_identifier_mapping */ - provider = lasso_server_get_provider_ref(profile->server, profile->remote_providerID); + provider = lasso_server_get_provider_ref(profile->server, + profile->remote_providerID, + NULL); if(provider == NULL) { message(G_LOG_LEVEL_ERROR, "Provider %s not found\n", profile->remote_providerID); return(-2); @@ -102,7 +104,9 @@ lasso_name_identifier_mapping_build_response_msg(LassoNameIdentifierMapping *map profile = LASSO_PROFILE(mapping); - provider = lasso_server_get_provider_ref(profile->server, profile->remote_providerID); + provider = lasso_server_get_provider_ref(profile->server, + profile->remote_providerID, + NULL); if(provider == NULL) { message(G_LOG_LEVEL_ERROR, "Provider %s not found\n", profile->remote_providerID); return(-2); diff --git a/lasso/id-ff/register_name_identifier.c b/lasso/id-ff/register_name_identifier.c index 26b885d5..8343df6a 100644 --- a/lasso/id-ff/register_name_identifier.c +++ b/lasso/id-ff/register_name_identifier.c @@ -54,7 +54,9 @@ lasso_register_name_identifier_build_request_msg(LassoRegisterNameIdentifier *re profile = LASSO_PROFILE(register_name_identifier); - provider = lasso_server_get_provider_ref(profile->server, profile->remote_providerID); + provider = lasso_server_get_provider_ref(profile->server, + profile->remote_providerID, + NULL); if (provider == NULL) { message(G_LOG_LEVEL_CRITICAL, "Provider %s not found\n", profile->remote_providerID); return(-2); @@ -107,7 +109,9 @@ lasso_register_name_identifier_build_response_msg(LassoRegisterNameIdentifier *r profile = LASSO_PROFILE(register_name_identifier); - provider = lasso_server_get_provider_ref(profile->server, profile->remote_providerID); + provider = lasso_server_get_provider_ref(profile->server, + profile->remote_providerID, + NULL); if (provider == NULL) { message(G_LOG_LEVEL_CRITICAL, "Provider not found (ProviderID = %s)\n", profile->remote_providerID); return(-2); diff --git a/lasso/id-ff/server.c b/lasso/id-ff/server.c index 87222290..186193c4 100644 --- a/lasso/id-ff/server.c +++ b/lasso/id-ff/server.c @@ -23,6 +23,7 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +#include <lasso/xml/errors.h> #include <lasso/environs/server.h> #define LASSO_SERVER_NODE "Server" @@ -137,15 +138,15 @@ lasso_server_dump(LassoServer *server) g_free(signature_method_str); /* providerID */ - if (server->providerID) { + if (server->providerID != NULL) { server_class->set_prop(server_node, LASSO_SERVER_PROVIDERID_NODE, server->providerID); } /* private key */ - if (server->private_key) { + if (server->private_key != NULL) { server_class->set_prop(server_node, LASSO_SERVER_PRIVATE_KEY_NODE, server->private_key); } /* certificate */ - if (server->certificate) { + if (server->certificate != NULL) { server_class->set_prop(server_node, LASSO_SERVER_CERTIFICATE_NODE, server->certificate); } /* metadata */ @@ -156,11 +157,11 @@ lasso_server_dump(LassoServer *server) lasso_node_destroy(metadata_copy); } /* public key */ - if (provider->public_key) { + if (provider->public_key != NULL) { server_class->set_prop(server_node, LASSO_PROVIDER_PUBLIC_KEY_NODE, provider->public_key); } /* ca_certificate */ - if (provider->ca_certificate) { + if (provider->ca_certificate != NULL) { server_class->set_prop(server_node, LASSO_PROVIDER_CA_CERTIFICATE_NODE, provider->ca_certificate); } /* providers */ @@ -184,46 +185,77 @@ lasso_server_dump(LassoServer *server) } LassoProvider* -lasso_server_get_provider(LassoServer *server, - gchar *providerID) +lasso_server_get_provider(LassoServer *server, + gchar *providerID, + GError **err) { LassoProvider *provider; - - provider = lasso_server_get_provider_ref(server, providerID); + GError *tmp_err = NULL; + + g_return_val_if_fail (err == NULL || *err == NULL, NULL); + + provider = lasso_server_get_provider_ref(server, providerID, &tmp_err); if (provider != NULL) { return (lasso_provider_copy(provider)); } else { - return (NULL); + g_propagate_error (err, tmp_err); } + + return (NULL); } LassoProvider* -lasso_server_get_provider_ref(LassoServer *server, - gchar *providerID) +lasso_server_get_provider_ref(LassoServer *server, + gchar *providerID, + GError **err) { LassoProvider *provider; xmlChar *id; int index, len; - g_return_val_if_fail(LASSO_IS_SERVER(server), NULL); - g_return_val_if_fail(providerID != NULL, NULL); - - /* debug(INFO, "Get information of provider id %s\n", providerID); */ + if (err != NULL && *err != NULL) { + g_set_error(err, g_quark_from_string("Lasso"), + LASSO_PARAM_ERROR_ERR_CHECK_FAILED, + lasso_strerror(LASSO_PARAM_ERROR_ERR_CHECK_FAILED)); + g_return_val_if_fail (err == NULL || *err == NULL, NULL); + } + if (LASSO_IS_SERVER(server) == FALSE) { + g_set_error(err, g_quark_from_string("Lasso"), + LASSO_PARAM_ERROR_BADTYPE_OR_NULL_OBJ, + lasso_strerror(LASSO_PARAM_ERROR_BADTYPE_OR_NULL_OBJ)); + g_return_val_if_fail(LASSO_IS_SERVER(server), NULL); + } + if (providerID == NULL) { + g_set_error(err, g_quark_from_string("Lasso"), + LASSO_PARAM_ERROR_INVALID_VALUE, + lasso_strerror(LASSO_PARAM_ERROR_INVALID_VALUE)); + g_return_val_if_fail(providerID != NULL, NULL); + } len = server->providers->len; for (index = 0; index<len; index++) { provider = g_ptr_array_index(server->providers, index); - - id = lasso_provider_get_providerID(provider, NULL); - if (xmlStrEqual(providerID, id)) { + + id = lasso_provider_get_providerID(provider); + if (id != NULL) { + if (xmlStrEqual(providerID, id)) { + xmlFree(id); + return(provider); + } xmlFree(id); - return(provider); } - xmlFree(id); } + /* no provider was found */ + g_set_error(err, g_quark_from_string("Lasso"), + LASSO_SERVER_ERROR_PROVIDER_NOTFOUND, + lasso_strerror(LASSO_SERVER_ERROR_PROVIDER_NOTFOUND), + providerID); + /* print error msg here so that caller just check err->code */ + message(G_LOG_LEVEL_CRITICAL, err[0]->message); + return(NULL); } @@ -238,7 +270,7 @@ lasso_server_get_providerID_from_hash(LassoServer *server, for (i=0; i<server->providers->len; i++) { provider = g_ptr_array_index(server->providers, i); - providerID = lasso_provider_get_providerID(provider, NULL); + providerID = lasso_provider_get_providerID(provider); /* hash_providerID = lasso_str_hash(providerID, server->private_key); */ hash_providerID = lasso_sha1(providerID); b64_hash_providerID = xmlSecBase64Encode(hash_providerID, 20, 0); @@ -370,7 +402,7 @@ lasso_server_new(gchar *metadata, LASSO_NODE_GET_CLASS(md_node)->set_xmlNode(md_node, root); /* get ProviderID in metadata */ - providerID = lasso_node_get_attr_value(md_node, "ProviderID", &err); + providerID = lasso_node_get_attr_value(md_node, "providerID", &err); if (providerID == NULL) { message(G_LOG_LEVEL_ERROR, err->message); g_error_free(err); diff --git a/lasso/id-ff/server.h b/lasso/id-ff/server.h index 699b9560..34737316 100644 --- a/lasso/id-ff/server.h +++ b/lasso/id-ff/server.h @@ -81,11 +81,13 @@ LASSO_EXPORT void lasso_server_destroy (LassoServer * LASSO_EXPORT gchar* lasso_server_dump (LassoServer *server); -LASSO_EXPORT LassoProvider* lasso_server_get_provider (LassoServer *server, - gchar *providerID); +LASSO_EXPORT LassoProvider* lasso_server_get_provider (LassoServer *server, + gchar *providerID, + GError **err); -LASSO_EXPORT LassoProvider* lasso_server_get_provider_ref (LassoServer *server, - gchar *providerID); +LASSO_EXPORT LassoProvider* lasso_server_get_provider_ref (LassoServer *server, + gchar *providerID, + GError **err); LASSO_EXPORT gchar* lasso_server_get_providerID_from_hash (LassoServer *server, gchar *b64_hash); |