summaryrefslogtreecommitdiffstats
path: root/lasso
diff options
context:
space:
mode:
authorValery Febvre <vfebvre at easter-eggs.com>2004-08-12 00:00:18 +0000
committerValery Febvre <vfebvre at easter-eggs.com>2004-08-12 00:00:18 +0000
commit9a3ac1bedf0738db0aac5f8b9d9cd06e4464cdf3 (patch)
tree69ae4d8dbad0a644370e56a7ab2b82cf02667501 /lasso
parent52731a4e5a73cce6318bf56e0f4da78cd150754d (diff)
downloadlasso-9a3ac1bedf0738db0aac5f8b9d9cd06e4464cdf3.tar.gz
lasso-9a3ac1bedf0738db0aac5f8b9d9cd06e4464cdf3.tar.xz
lasso-9a3ac1bedf0738db0aac5f8b9d9cd06e4464cdf3.zip
Added tests for errors reporting and to avoid some malicious segfaults
Diffstat (limited to 'lasso')
-rw-r--r--lasso/Attic/protocols/provider.c31
-rw-r--r--lasso/id-ff/server.c52
2 files changed, 53 insertions, 30 deletions
diff --git a/lasso/Attic/protocols/provider.c b/lasso/Attic/protocols/provider.c
index ef6fecca..2f912470 100644
--- a/lasso/Attic/protocols/provider.c
+++ b/lasso/Attic/protocols/provider.c
@@ -584,9 +584,11 @@ lasso_provider_new(gchar *metadata,
LassoProvider *provider;
provider = lasso_provider_new_metadata_filename(metadata);
- provider->public_key = g_strdup(public_key);
- provider->ca_certificate = g_strdup(ca_certificate);
-
+ if (provider != NULL) {
+ provider->public_key = g_strdup(public_key);
+ provider->ca_certificate = g_strdup(ca_certificate);
+ }
+
return(provider);
}
@@ -605,19 +607,24 @@ lasso_provider_new_from_metadata_node(LassoNode *metadata_node)
LassoProvider*
lasso_provider_new_metadata_filename(gchar *metadata_filename)
{
- LassoProvider *provider;
+ LassoProvider *provider = NULL;
xmlDocPtr doc;
xmlNodePtr root;
- provider = LASSO_PROVIDER(g_object_new(LASSO_TYPE_PROVIDER, NULL));
-
- /* get root element of doc and duplicate it */
doc = xmlParseFile(metadata_filename);
- root = xmlCopyNode(xmlDocGetRootElement(doc), 1);
- xmlFreeDoc(doc);
- provider->metadata = lasso_node_new();
- LASSO_NODE_GET_CLASS(provider->metadata)->set_xmlNode(provider->metadata, root);
- /*provider->metadata = lasso_node_new_from_xmlNode(root); */
+ if (doc != NULL) {
+ /* get root element of doc and duplicate it */
+ root = xmlCopyNode(xmlDocGetRootElement(doc), 1);
+ xmlFreeDoc(doc);
+
+ provider = LASSO_PROVIDER(g_object_new(LASSO_TYPE_PROVIDER, NULL));
+ provider->metadata = lasso_node_new();
+ LASSO_NODE_GET_CLASS(provider->metadata)->set_xmlNode(provider->metadata, root);
+ }
+ else {
+ message(G_LOG_LEVEL_CRITICAL,
+ "Failed to build LassoProvider: invalid metadata file.\n");
+ }
return(provider);
}
diff --git a/lasso/id-ff/server.c b/lasso/id-ff/server.c
index 186193c4..869e650c 100644
--- a/lasso/id-ff/server.c
+++ b/lasso/id-ff/server.c
@@ -68,14 +68,17 @@ lasso_server_add_provider(LassoServer *server,
{
LassoProvider *provider;
- g_return_val_if_fail(LASSO_IS_SERVER(server), -1);
- g_return_val_if_fail(metadata != NULL, -2);
+ g_return_val_if_fail(LASSO_IS_SERVER(server), LASSO_PARAM_ERROR_BADTYPE_OR_NULL_OBJ);
+ g_return_val_if_fail(metadata != NULL, LASSO_PARAM_ERROR_INVALID_VALUE);
provider = lasso_provider_new(metadata, public_key, ca_certificate);
- g_return_val_if_fail(provider != NULL, -5);
-
- /* debug(INFO, "Add a provider(%s)\n", lasso_provider_get_providerID(provider)); */
- g_ptr_array_add(server->providers, provider);
+ if (provider != NULL) {
+ g_ptr_array_add(server->providers, provider);
+ }
+ else {
+ message(G_LOG_LEVEL_CRITICAL, "Failed to add new provider.\n");
+ return (-1);
+ }
return(0);
}
@@ -192,7 +195,12 @@ lasso_server_get_provider(LassoServer *server,
LassoProvider *provider;
GError *tmp_err = NULL;
- g_return_val_if_fail (err == NULL || *err == NULL, NULL);
+ 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);
+ }
provider = lasso_server_get_provider_ref(server, providerID, &tmp_err);
@@ -268,23 +276,31 @@ lasso_server_get_providerID_from_hash(LassoServer *server,
xmlChar *b64_hash_providerID;
int i;
+ g_return_val_if_fail(LASSO_IS_SERVER(server), NULL);
+ g_return_val_if_fail(b64_hash != NULL, NULL);
+
for (i=0; i<server->providers->len; i++) {
provider = g_ptr_array_index(server->providers, i);
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);
- xmlFree(hash_providerID);
- if (xmlStrEqual(b64_hash_providerID, b64_hash)) {
- xmlFree(b64_hash_providerID);
- return(providerID);
- }
- else {
- xmlFree(b64_hash_providerID);
- xmlFree(providerID);
+ if (providerID != NULL) {
+ hash_providerID = lasso_sha1(providerID);
+ b64_hash_providerID = xmlSecBase64Encode(hash_providerID, 20, 0);
+ xmlFree(hash_providerID);
+ if (xmlStrEqual(b64_hash_providerID, b64_hash)) {
+ xmlFree(b64_hash_providerID);
+ return(providerID);
+ }
+ else {
+ xmlFree(b64_hash_providerID);
+ xmlFree(providerID);
+ }
}
}
+ /* failed to get the providerID */
+ message(G_LOG_LEVEL_CRITICAL,
+ "Failed to get a providerID corresponding to the hash.\n")
+
return(NULL);
}