summaryrefslogtreecommitdiffstats
path: root/lasso
diff options
context:
space:
mode:
authorValery Febvre <vfebvre at easter-eggs.com>2004-08-09 15:33:16 +0000
committerValery Febvre <vfebvre at easter-eggs.com>2004-08-09 15:33:16 +0000
commit769bcc8ff1d9744a1c6ba46f82f90bae2a1ec756 (patch)
treed7de5c37cde128a19fb2b6c70fb2e06237bf0eaf /lasso
parent486b4d97ab8154aad74133ab08e2c0842675fa06 (diff)
downloadlasso-769bcc8ff1d9744a1c6ba46f82f90bae2a1ec756.tar.gz
lasso-769bcc8ff1d9744a1c6ba46f82f90bae2a1ec756.tar.xz
lasso-769bcc8ff1d9744a1c6ba46f82f90bae2a1ec756.zip
Server objects can now be created without metadata
Diffstat (limited to 'lasso')
-rw-r--r--lasso/id-ff/server.c48
1 files changed, 27 insertions, 21 deletions
diff --git a/lasso/id-ff/server.c b/lasso/id-ff/server.c
index 02ff6587..44511ddf 100644
--- a/lasso/id-ff/server.c
+++ b/lasso/id-ff/server.c
@@ -353,35 +353,39 @@ lasso_server_new(gchar *metadata,
LassoServer *server;
xmlDocPtr doc;
xmlNodePtr root;
- LassoNode *md_node;
- gchar *providerID;
+ LassoNode *md_node = NULL;
+ gchar *providerID = NULL;
GError *err = NULL;
- g_return_val_if_fail(metadata != NULL, NULL);
+ /* metadata can be NULL (if server is a LECP) */
/* put server metadata in a LassoNode */
- doc = xmlParseFile(metadata);
- root = xmlCopyNode(xmlDocGetRootElement(doc), 1);
- xmlFreeDoc(doc);
- md_node = lasso_node_new();
- LASSO_NODE_GET_CLASS(md_node)->set_xmlNode(md_node, root);
- /* md_node = lasso_node_new_from_xmlNode(root); */
+ if (metadata) {
+ doc = xmlParseFile(metadata);
+ root = xmlCopyNode(xmlDocGetRootElement(doc), 1);
+ xmlFreeDoc(doc);
+ md_node = lasso_node_new();
+ 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);
- if (providerID == NULL) {
- message(G_LOG_LEVEL_ERROR, err->message);
- g_error_free(err);
- lasso_node_destroy(md_node);
- return (NULL);
+ /* get ProviderID in metadata */
+ providerID = lasso_node_get_attr_value(md_node, "ProviderID", &err);
+ if (providerID == NULL) {
+ message(G_LOG_LEVEL_ERROR, err->message);
+ g_error_free(err);
+ lasso_node_destroy(md_node);
+ return (NULL);
+ }
}
/* Ok, we can create server */
server = LASSO_SERVER(g_object_new(LASSO_TYPE_SERVER, NULL));
- LASSO_PROVIDER(server)->metadata = md_node;
-
- server->providerID = providerID;
+ if (md_node != NULL) {
+ LASSO_PROVIDER(server)->metadata = md_node;
+ }
+ if (providerID != NULL) {
+ server->providerID = providerID;
+ }
server->private_key = g_strdup(private_key);
server->certificate = g_strdup(certificate);
server->signature_method = signature_method;
@@ -429,8 +433,10 @@ lasso_server_new_from_dump(gchar *dump)
/* metadata */
server_metadata_node = lasso_node_get_child(server_node, "EntityDescriptor", NULL, NULL);
- LASSO_PROVIDER(server)->metadata = lasso_node_copy(server_metadata_node);
- lasso_node_destroy(server_metadata_node);
+ if (server_metadata_node != NULL) {
+ LASSO_PROVIDER(server)->metadata = lasso_node_copy(server_metadata_node);
+ lasso_node_destroy(server_metadata_node);
+ }
/* public key */
LASSO_PROVIDER(server)->public_key = lasso_node_get_attr_value(server_node, LASSO_PROVIDER_PUBLIC_KEY_NODE, NULL);