summaryrefslogtreecommitdiffstats
path: root/lasso/id-ff
diff options
context:
space:
mode:
authorValery Febvre <vfebvre at easter-eggs.com>2004-08-11 21:16:29 +0000
committerValery Febvre <vfebvre at easter-eggs.com>2004-08-11 21:16:29 +0000
commitf223b6a9b2d9705b538e8ae2c9cd1cb90b8dc134 (patch)
tree5b241f0a3cfa1e3289e9f5be9c90b30e824f7c3b /lasso/id-ff
parente356eaec446a6af0713d5db6352c1df5482d3d52 (diff)
downloadlasso-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.c4
-rw-r--r--lasso/id-ff/lecp.c7
-rw-r--r--lasso/id-ff/logout.c15
-rw-r--r--lasso/id-ff/name_identifier_mapping.c8
-rw-r--r--lasso/id-ff/register_name_identifier.c8
-rw-r--r--lasso/id-ff/server.c78
-rw-r--r--lasso/id-ff/server.h10
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);