summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNicolas Clapies <nclapies@entrouvert.com>2004-07-11 11:10:14 +0000
committerNicolas Clapies <nclapies@entrouvert.com>2004-07-11 11:10:14 +0000
commite70a8ec3dbacd5c79ed4d72af38b2b5e05af5997 (patch)
tree2b309805c3c4727c06fb5da90a03bd1f4cac84f6
parent210693c46dc8de2faf0e26c04a45e64a1e0b26bb (diff)
downloadlasso-e70a8ec3dbacd5c79ed4d72af38b2b5e05af5997.tar.gz
lasso-e70a8ec3dbacd5c79ed4d72af38b2b5e05af5997.tar.xz
lasso-e70a8ec3dbacd5c79ed4d72af38b2b5e05af5997.zip
fix bugs in new_from_dump
-rw-r--r--lasso/id-ff/user.c39
1 files changed, 31 insertions, 8 deletions
diff --git a/lasso/id-ff/user.c b/lasso/id-ff/user.c
index af3f5afd..e945e25e 100644
--- a/lasso/id-ff/user.c
+++ b/lasso/id-ff/user.c
@@ -223,6 +223,7 @@ lasso_user_new_from_dump(gchar *dump)
LassoNodeClass *identities_class, *assertions_class;
LassoIdentity *identity;
xmlNodePtr identities_xmlNode, identity_xmlNode, assertions_xmlNode, assertion_xmlNode, nameIdentifier_xmlNode;
+ xmlNodePtr localNameIdentifier_xmlNode, remoteNameIdentifier_xmlNode;
LassoUser *user;
xmlChar *remote_providerID;
@@ -230,7 +231,6 @@ lasso_user_new_from_dump(gchar *dump)
user = LASSO_USER(g_object_new(LASSO_TYPE_USER, NULL));
/* get user */
- debug(DEBUG, "LassoUser node\n");
user_node = lasso_node_new_from_dump(dump);
/* get assertions */
@@ -254,9 +254,10 @@ lasso_user_new_from_dump(gchar *dump)
/* set lasso identities */
identities_node = lasso_node_get_child(user_node, LASSO_USER_IDENTITIES_NODE, NULL);
- identities_class = LASSO_NODE_GET_CLASS(identities_node);
- identities_xmlNode = identities_class->get_xmlNode(identities_node);
- if(identities_xmlNode){
+ if(identities_node){
+ identities_class = LASSO_NODE_GET_CLASS(identities_node);
+ identities_xmlNode = identities_class->get_xmlNode(identities_node);
+
/* get the identities */
debug(DEBUG, "LassoIdentities node found\n");
identity_xmlNode = identities_xmlNode->children;
@@ -264,21 +265,41 @@ lasso_user_new_from_dump(gchar *dump)
if(identity_xmlNode->type==XML_ELEMENT_NODE && xmlStrEqual(identity_xmlNode->name, LASSO_USER_IDENTITY_NODE)){
/* a new identity */
debug(DEBUG, "LassoIdentity found\n");
- identity = lasso_identity_new(xmlGetProp(identity_xmlNode, LASSO_USER_REMOTE_PROVIDERID_NODE));
+
+ remote_providerID = xmlGetProp(identity_xmlNode, LASSO_USER_REMOTE_PROVIDERID_NODE);
+ if(!remote_providerID){
+ debug(ERROR, "LassoRemoteProviderID attribute not found\n");
+ return(NULL);
+ }
+ identity = lasso_identity_new(remote_providerID);
nameIdentifier_xmlNode = identity_xmlNode->children;
while(nameIdentifier_xmlNode){
if(nameIdentifier_xmlNode->type==XML_ELEMENT_NODE){
if(xmlStrEqual(nameIdentifier_xmlNode->name, LASSO_IDENTITY_LOCAL_NAME_IDENTIFIER_NODE)){
/* a new local name identifier */
debug(DEBUG, "LassoLocalNameIdentifier found\n");
- local_nameIdentifier = lasso_node_new_from_xmlNode(nameIdentifier_xmlNode);
+ localNameIdentifier_xmlNode = nameIdentifier_xmlNode->children;
+ while(localNameIdentifier_xmlNode){
+ if(localNameIdentifier_xmlNode->type==XML_ELEMENT_NODE && xmlStrEqual(localNameIdentifier_xmlNode->name,
+ "NameIdentifier"))
+ break;
+ localNameIdentifier_xmlNode = localNameIdentifier_xmlNode->next;
+ }
+ local_nameIdentifier = lasso_node_new_from_xmlNode(localNameIdentifier_xmlNode);
lasso_identity_set_local_nameIdentifier(identity, local_nameIdentifier);
}
else if(xmlStrEqual(nameIdentifier_xmlNode->name, LASSO_IDENTITY_REMOTE_NAME_IDENTIFIER_NODE)){
/* a new remote name identifier */
debug(DEBUG, "LassoRemoteNameIdentifier found\n");
- remote_nameIdentifier = lasso_node_new_from_xmlNode(nameIdentifier_xmlNode);
- lasso_identity_set_local_nameIdentifier(identity, remote_nameIdentifier);
+ remoteNameIdentifier_xmlNode = nameIdentifier_xmlNode->children;
+ while(remoteNameIdentifier_xmlNode){
+ if(remoteNameIdentifier_xmlNode->type==XML_ELEMENT_NODE && xmlStrEqual(remoteNameIdentifier_xmlNode->name,
+ "NameIdentifier"))
+ break;
+ remoteNameIdentifier_xmlNode = remoteNameIdentifier_xmlNode->next;
+ }
+ local_nameIdentifier = lasso_node_new_from_xmlNode(remoteNameIdentifier_xmlNode);
+ lasso_identity_set_local_nameIdentifier(identity, local_nameIdentifier);
} /* end if */
@@ -287,6 +308,8 @@ lasso_user_new_from_dump(gchar *dump)
nameIdentifier_xmlNode = nameIdentifier_xmlNode->next;
} /* end while */
+ lasso_user_add_identity(user, remote_providerID, identity);
+
}
identity_xmlNode = identity_xmlNode->next;