summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFrederic Peters <fpeters@entrouvert.com>2005-08-24 16:28:46 +0000
committerFrederic Peters <fpeters@entrouvert.com>2005-08-24 16:28:46 +0000
commit1601b3ecc5229ad6d371d5dd2b48efd0cccbceef (patch)
tree970eb3fe5538aad8a37fed3b3c1e4f7916242643
parent6f6b0d66c10bc2be861fa1dddaaa26c3470178c7 (diff)
downloadlasso-1601b3ecc5229ad6d371d5dd2b48efd0cccbceef.tar.gz
lasso-1601b3ecc5229ad6d371d5dd2b48efd0cccbceef.tar.xz
lasso-1601b3ecc5229ad6d371d5dd2b48efd0cccbceef.zip
don't output xmlsec errors when trying to get a working public key but fails
with a message if it can't find a key.
-rw-r--r--lasso/id-ff/provider.c17
-rw-r--r--lasso/id-ff/server.c10
2 files changed, 21 insertions, 6 deletions
diff --git a/lasso/id-ff/provider.c b/lasso/id-ff/provider.c
index ab816844..04abe1f9 100644
--- a/lasso/id-ff/provider.c
+++ b/lasso/id-ff/provider.c
@@ -698,12 +698,17 @@ lasso_provider_new(LassoProviderRole role, const char *metadata,
provider->public_key = g_strdup(public_key);
provider->ca_cert_chain = g_strdup(ca_cert_chain);
- lasso_provider_load_public_key(provider);
+ if (lasso_provider_load_public_key(provider) == FALSE) {
+ message(G_LOG_LEVEL_CRITICAL, "Failed to load public key for %s.",
+ provider->ProviderID);
+ lasso_node_destroy(LASSO_NODE(provider));
+ return NULL;
+ }
return provider;
}
-void
+gboolean
lasso_provider_load_public_key(LassoProvider *provider)
{
LassoPemFileType file_type;
@@ -721,7 +726,7 @@ lasso_provider_load_public_key(LassoProvider *provider)
int i;
if (provider->public_key == NULL && provider->private_data->signing_key_descriptor == NULL)
- return;
+ return FALSE;
if (provider->public_key == NULL) {
xmlNode *t = provider->private_data->signing_key_descriptor->children;
@@ -755,15 +760,17 @@ lasso_provider_load_public_key(LassoProvider *provider)
xmlFree(b64_value);
g_free(value);
}
+ xmlSecErrorsDefaultCallbackEnableOutput(FALSE);
for (i=0; key_formats[i] && pub_key == NULL; i++) {
pub_key = xmlSecCryptoAppKeyLoadMemory(value, rc,
key_formats[i], NULL, NULL, NULL);
}
+ xmlSecErrorsDefaultCallbackEnableOutput(TRUE);
xmlFree(b64_value);
g_free(value);
provider->private_data->public_key = pub_key;
if (pub_key) {
- return;
+ return TRUE;
}
}
@@ -783,6 +790,8 @@ lasso_provider_load_public_key(LassoProvider *provider)
break; /* with a warning ? */
}
provider->private_data->public_key = pub_key;
+
+ return (pub_key != NULL);
}
diff --git a/lasso/id-ff/server.c b/lasso/id-ff/server.c
index 6e3e8ec9..77f20d99 100644
--- a/lasso/id-ff/server.c
+++ b/lasso/id-ff/server.c
@@ -207,8 +207,14 @@ init_from_xml(LassoNode *node, xmlNode *xmlnode)
}
p = g_object_new(LASSO_TYPE_PROVIDER, NULL);
LASSO_NODE_GET_CLASS(p)->init_from_xml(LASSO_NODE(p), t2);
- lasso_provider_load_public_key(p);
- g_hash_table_insert(server->providers, g_strdup(p->ProviderID), p);
+ if (lasso_provider_load_public_key(p) == TRUE) {
+ g_hash_table_insert(server->providers,
+ g_strdup(p->ProviderID), p);
+ } else {
+ message(G_LOG_LEVEL_CRITICAL,
+ "Failed to load public key for %s.",
+ p->ProviderID);
+ }
t2 = t2->next;
}
}