diff options
| author | Nicolas Clapies <nclapies@entrouvert.com> | 2004-07-11 11:10:14 +0000 |
|---|---|---|
| committer | Nicolas Clapies <nclapies@entrouvert.com> | 2004-07-11 11:10:14 +0000 |
| commit | e70a8ec3dbacd5c79ed4d72af38b2b5e05af5997 (patch) | |
| tree | 2b309805c3c4727c06fb5da90a03bd1f4cac84f6 | |
| parent | 210693c46dc8de2faf0e26c04a45e64a1e0b26bb (diff) | |
| download | lasso-e70a8ec3dbacd5c79ed4d72af38b2b5e05af5997.tar.gz lasso-e70a8ec3dbacd5c79ed4d72af38b2b5e05af5997.tar.xz lasso-e70a8ec3dbacd5c79ed4d72af38b2b5e05af5997.zip | |
fix bugs in new_from_dump
| -rw-r--r-- | lasso/id-ff/user.c | 39 |
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; |
