diff options
author | Valery Febvre <vfebvre at easter-eggs.com> | 2004-08-12 00:00:18 +0000 |
---|---|---|
committer | Valery Febvre <vfebvre at easter-eggs.com> | 2004-08-12 00:00:18 +0000 |
commit | 9a3ac1bedf0738db0aac5f8b9d9cd06e4464cdf3 (patch) | |
tree | 69ae4d8dbad0a644370e56a7ab2b82cf02667501 /lasso | |
parent | 52731a4e5a73cce6318bf56e0f4da78cd150754d (diff) | |
download | lasso-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.c | 31 | ||||
-rw-r--r-- | lasso/id-ff/server.c | 52 |
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); } |