diff options
| -rw-r--r-- | lasso/id-ff/server.c | 149 | ||||
| -rw-r--r-- | lasso/id-ff/server.h | 4 |
2 files changed, 78 insertions, 75 deletions
diff --git a/lasso/id-ff/server.c b/lasso/id-ff/server.c index 0a6a6a07..02ff6587 100644 --- a/lasso/id-ff/server.c +++ b/lasso/id-ff/server.c @@ -25,8 +25,8 @@ #include <lasso/environs/server.h> -#define LASSO_SERVER_NODE "LassoServer" -#define LASSO_SERVER_PROVIDERS_NODE "LassoProviders" +#define LASSO_SERVER_NODE "Server" +#define LASSO_SERVER_PROVIDERS_NODE "Providers" #define LASSO_SERVER_PROVIDERID_NODE "ProviderID" #define LASSO_SERVER_PRIVATE_KEY_NODE "PrivateKey" #define LASSO_SERVER_CERTIFICATE_NODE "Certificate" @@ -59,6 +59,61 @@ lasso_server_add_lasso_provider(LassoServer *server, /* public methods */ /*****************************************************************************/ +gint +lasso_server_add_provider(LassoServer *server, + gchar *metadata, + gchar *public_key, + gchar *ca_certificate) +{ + LassoProvider *provider; + + g_return_val_if_fail(LASSO_IS_SERVER(server), -1); + g_return_val_if_fail(metadata != NULL, -2); + + 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); + + return(0); +} + +LassoServer* +lasso_server_copy(LassoServer *server) +{ + LassoServer *copy; + LassoProvider *p; + guint i; + + g_return_val_if_fail(LASSO_IS_SERVER(server), NULL); + + copy = LASSO_SERVER(g_object_new(LASSO_TYPE_SERVER, NULL)); + + /* herited provider attrs */ + LASSO_PROVIDER(copy)->metadata = lasso_node_copy(LASSO_PROVIDER(server)->metadata); + LASSO_PROVIDER(copy)->public_key = g_strdup(LASSO_PROVIDER(server)->public_key); + LASSO_PROVIDER(copy)->ca_certificate = g_strdup(LASSO_PROVIDER(server)->ca_certificate); + /* server attrs */ + copy->providers = g_ptr_array_new(); + for (i=0; i<server->providers->len; i++) { + p = g_ptr_array_index(server->providers, i); + g_ptr_array_add(copy->providers, lasso_provider_copy(p)); + } + copy->providerID = g_strdup(server->providerID); + copy->private_key = g_strdup(server->private_key); + copy->certificate = g_strdup(server->certificate); + copy->signature_method = server->signature_method; + + return(copy); +} + +void +lasso_server_destroy(LassoServer *server) +{ + g_object_unref(G_OBJECT(server)); +} + gchar * lasso_server_dump(LassoServer *server) { @@ -73,6 +128,7 @@ lasso_server_dump(LassoServer *server) server_node = lasso_node_new(); server_class = LASSO_NODE_GET_CLASS(server_node); server_class->set_name(server_node, LASSO_SERVER_NODE); + server_class->set_ns(server_node, lassoLassoHRef, NULL); /* signature method */ signature_method_str = g_new(gchar, 6); @@ -81,15 +137,15 @@ lasso_server_dump(LassoServer *server) g_free(signature_method_str); /* providerID */ - if(server->providerID) { + if (server->providerID) { server_class->set_prop(server_node, LASSO_SERVER_PROVIDERID_NODE, server->providerID); } /* private key */ - if(server->private_key) { + if (server->private_key) { server_class->set_prop(server_node, LASSO_SERVER_PRIVATE_KEY_NODE, server->private_key); } /* certificate */ - if(server->certificate) { + if (server->certificate) { server_class->set_prop(server_node, LASSO_SERVER_CERTIFICATE_NODE, server->certificate); } /* metadata */ @@ -98,18 +154,18 @@ lasso_server_dump(LassoServer *server) server_class->add_child(server_node, metadata_copy, FALSE); lasso_node_destroy(metadata_copy); /* public key */ - if(provider->public_key) { + if (provider->public_key) { server_class->set_prop(server_node, LASSO_PROVIDER_PUBLIC_KEY_NODE, provider->public_key); } /* ca_certificate */ - if(provider->ca_certificate) { + if (provider->ca_certificate) { server_class->set_prop(server_node, LASSO_PROVIDER_CA_CERTIFICATE_NODE, provider->ca_certificate); } /* providers */ providers_node = lasso_node_new(); providers_class = LASSO_NODE_GET_CLASS(providers_node); providers_class->set_name(providers_node, LASSO_SERVER_PROVIDERS_NODE); - for(i = 0; i<server->providers->len; i++){ + for (i = 0; i<server->providers->len; i++) { dump = lasso_provider_dump(g_ptr_array_index(server->providers, i)); provider_node = lasso_node_new_from_dump(dump); xmlFree(dump); @@ -125,61 +181,6 @@ lasso_server_dump(LassoServer *server) return(dump); } -gint -lasso_server_add_provider(LassoServer *server, - gchar *metadata, - gchar *public_key, - gchar *ca_certificate) -{ - LassoProvider *provider; - - g_return_val_if_fail(LASSO_IS_SERVER(server), -1); - g_return_val_if_fail(metadata != NULL, -2); - - 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); - - return(0); -} - -LassoServer* -lasso_server_copy(LassoServer *server) -{ - LassoServer *copy; - LassoProvider *p; - guint i; - - g_return_val_if_fail(LASSO_IS_SERVER(server), NULL); - - copy = LASSO_SERVER(g_object_new(LASSO_TYPE_SERVER, NULL)); - - /* herited provider attrs */ - LASSO_PROVIDER(copy)->metadata = lasso_node_copy(LASSO_PROVIDER(server)->metadata); - LASSO_PROVIDER(copy)->public_key = g_strdup(LASSO_PROVIDER(server)->public_key); - LASSO_PROVIDER(copy)->ca_certificate = g_strdup(LASSO_PROVIDER(server)->ca_certificate); - /* server attrs */ - copy->providers = g_ptr_array_new(); - for(i=0; i<server->providers->len; i++) { - p = g_ptr_array_index(server->providers, i); - g_ptr_array_add(copy->providers, lasso_provider_copy(p)); - } - copy->providerID = g_strdup(server->providerID); - copy->private_key = g_strdup(server->private_key); - copy->certificate = g_strdup(server->certificate); - copy->signature_method = server->signature_method; - - return(copy); -} - -void -lasso_server_destroy(LassoServer *server) -{ - g_object_unref(G_OBJECT(server)); -} - LassoProvider* lasso_server_get_provider(LassoServer *server, gchar *providerID) @@ -210,7 +211,7 @@ lasso_server_get_provider_ref(LassoServer *server, /* debug(INFO, "Get information of provider id %s\n", providerID); */ len = server->providers->len; - for(index = 0; index<len; index++) { + for (index = 0; index<len; index++) { provider = g_ptr_array_index(server->providers, index); id = lasso_provider_get_providerID(provider, NULL); @@ -233,10 +234,11 @@ lasso_server_get_providerID_from_hash(LassoServer *server, xmlChar *b64_hash_providerID; int i; - for(i=0; i<server->providers->len; i++) { + for (i=0; i<server->providers->len; i++) { provider = g_ptr_array_index(server->providers, i); providerID = lasso_provider_get_providerID(provider, NULL); - hash_providerID = lasso_str_hash(providerID, server->private_key); + /* 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)) { @@ -403,7 +405,7 @@ lasso_server_new_from_dump(gchar *dump) server = LASSO_SERVER(g_object_new(LASSO_TYPE_SERVER, NULL)); server_node = lasso_node_new_from_dump(dump); - if(server_node == NULL) { + if (server_node == NULL) { message(G_LOG_LEVEL_ERROR, "Error while loading server dump\n"); return(NULL); } @@ -437,14 +439,15 @@ lasso_server_new_from_dump(gchar *dump) LASSO_PROVIDER(server)->ca_certificate = lasso_node_get_attr_value(server_node, LASSO_PROVIDER_CA_CERTIFICATE_NODE, NULL); /* providers */ - providers_node = lasso_node_get_child(server_node, LASSO_SERVER_PROVIDERS_NODE, NULL, NULL); - if(providers_node != NULL) { + providers_node = lasso_node_get_child(server_node, LASSO_SERVER_PROVIDERS_NODE, lassoLassoHRef, NULL); + if (providers_node != NULL) { providers_class = LASSO_NODE_GET_CLASS(providers_node); providers_xmlNode = providers_class->get_xmlNode(providers_node); provider_xmlNode = providers_xmlNode->children; - while(provider_xmlNode != NULL){ - if(provider_xmlNode->type==XML_ELEMENT_NODE && xmlStrEqual(provider_xmlNode->name, LASSO_PROVIDER_NODE)){ + while (provider_xmlNode != NULL) { + if (provider_xmlNode->type == XML_ELEMENT_NODE && \ + xmlStrEqual(provider_xmlNode->name, LASSO_PROVIDER_NODE)) { /* provider node */ provider_node = lasso_node_new_from_xmlNode(provider_xmlNode); @@ -460,11 +463,11 @@ lasso_server_new_from_dump(gchar *dump) /* add provider */ provider = lasso_provider_new_from_metadata_node(entity_node); lasso_node_destroy(entity_node); - if(public_key != NULL) { + if (public_key != NULL) { lasso_provider_set_public_key(provider, public_key); xmlFree(public_key); } - if(ca_certificate != NULL) { + if (ca_certificate != NULL) { lasso_provider_set_ca_certificate(provider, ca_certificate); xmlFree(ca_certificate); } diff --git a/lasso/id-ff/server.h b/lasso/id-ff/server.h index 895906b5..699b9560 100644 --- a/lasso/id-ff/server.h +++ b/lasso/id-ff/server.h @@ -77,10 +77,10 @@ LASSO_EXPORT gint lasso_server_add_provider (LassoServer * LASSO_EXPORT LassoServer* lasso_server_copy (LassoServer *server); -LASSO_EXPORT gchar* lasso_server_dump (LassoServer *server); - LASSO_EXPORT void lasso_server_destroy (LassoServer *server); +LASSO_EXPORT gchar* lasso_server_dump (LassoServer *server); + LASSO_EXPORT LassoProvider* lasso_server_get_provider (LassoServer *server, gchar *providerID); |
