diff options
| author | Nicolas Clapies <nclapies@entrouvert.com> | 2004-09-22 15:57:51 +0000 |
|---|---|---|
| committer | Nicolas Clapies <nclapies@entrouvert.com> | 2004-09-22 15:57:51 +0000 |
| commit | 679b13568e33fa2a283cc1382c06f9df487a97e9 (patch) | |
| tree | a71428eab19a53cd994f4a6fe6c8e009afc2e8c6 | |
| parent | f5ab5917e49e70b3a82174d6885f34ce1b907730 (diff) | |
| download | lasso-679b13568e33fa2a283cc1382c06f9df487a97e9.tar.gz lasso-679b13568e33fa2a283cc1382c06f9df487a97e9.tar.xz lasso-679b13568e33fa2a283cc1382c06f9df487a97e9.zip | |
Added method lasso_lib_name_identifier_mapping_request_set_targetNameSpace() in lib_name_identifier_mapping_reques.c / h files. Added support of target name space in lasso_name_identifier_mapping_new() in name_identifier_mapping_request.c / h files. Added support of target name space in lasso_name_identifier_init_request() in name_identifier_mapping.c / h files
| -rw-r--r-- | lasso/Attic/protocols/name_identifier_mapping_request.c | 9 | ||||
| -rw-r--r-- | lasso/Attic/protocols/name_identifier_mapping_request.h | 3 | ||||
| -rw-r--r-- | lasso/id-ff/name_identifier_mapping.c | 81 | ||||
| -rw-r--r-- | lasso/id-ff/name_identifier_mapping.h | 7 | ||||
| -rw-r--r-- | lasso/xml/lib_name_identifier_mapping_request.c | 12 | ||||
| -rw-r--r-- | lasso/xml/lib_name_identifier_mapping_request.h | 15 |
6 files changed, 87 insertions, 40 deletions
diff --git a/lasso/Attic/protocols/name_identifier_mapping_request.c b/lasso/Attic/protocols/name_identifier_mapping_request.c index 6271f5da..a6fde0da 100644 --- a/lasso/Attic/protocols/name_identifier_mapping_request.c +++ b/lasso/Attic/protocols/name_identifier_mapping_request.c @@ -71,7 +71,8 @@ LassoNode* lasso_name_identifier_mapping_request_new(const xmlChar *providerID, const xmlChar *nameIdentifier, const xmlChar *nameQualifier, - const xmlChar *format) + const xmlChar *format, + const xmlChar *targetNameSpace) { LassoNode *request, *identifier; xmlChar *id, *time; @@ -80,6 +81,7 @@ lasso_name_identifier_mapping_request_new(const xmlChar *providerID, g_return_val_if_fail(nameIdentifier != NULL, NULL); g_return_val_if_fail(nameQualifier != NULL, NULL); g_return_val_if_fail(format != NULL, NULL); + g_return_val_if_fail(targetNameSpace != NULL, NULL); request = LASSO_NODE(g_object_new(LASSO_TYPE_NAME_IDENTIFIER_MAPPING_REQUEST, NULL)); @@ -104,6 +106,7 @@ lasso_name_identifier_mapping_request_new(const xmlChar *providerID, lasso_lib_name_identifier_mapping_request_set_providerID(LASSO_LIB_NAME_IDENTIFIER_MAPPING_REQUEST(request), providerID); + /* NameIdentifier */ identifier = lasso_saml_name_identifier_new(nameIdentifier); lasso_saml_name_identifier_set_nameQualifier(LASSO_SAML_NAME_IDENTIFIER(identifier), nameQualifier); @@ -114,6 +117,10 @@ lasso_name_identifier_mapping_request_new(const xmlChar *providerID, LASSO_SAML_NAME_IDENTIFIER(identifier)); lasso_node_destroy(identifier); + /* Target name space */ + lasso_lib_name_identifier_mapping_request_set_targetNameSpace(LASSO_LIB_NAME_IDENTIFIER_MAPPING_REQUEST(request), + targetNameSpace); + return request; } diff --git a/lasso/Attic/protocols/name_identifier_mapping_request.h b/lasso/Attic/protocols/name_identifier_mapping_request.h index 86733447..40e2eb26 100644 --- a/lasso/Attic/protocols/name_identifier_mapping_request.h +++ b/lasso/Attic/protocols/name_identifier_mapping_request.h @@ -56,7 +56,8 @@ LASSO_EXPORT GType lasso_name_identifier_mapping_request_get_type LASSO_EXPORT LassoNode *lasso_name_identifier_mapping_request_new (const xmlChar *providerID, const xmlChar *nameIdentifier, const xmlChar *nameQualifier, - const xmlChar *format); + const xmlChar *format, + const xmlChar *targetNameSpace); LASSO_EXPORT LassoNode *lasso_name_identifier_mapping_request_new_from_query (const gchar *query); diff --git a/lasso/id-ff/name_identifier_mapping.c b/lasso/id-ff/name_identifier_mapping.c index 90b96265..b2dda977 100644 --- a/lasso/id-ff/name_identifier_mapping.c +++ b/lasso/id-ff/name_identifier_mapping.c @@ -147,7 +147,8 @@ lasso_name_identifier_mapping_destroy(LassoNameIdentifierMapping *mapping) gint lasso_name_identifier_mapping_init_request(LassoNameIdentifierMapping *mapping, - gchar *remote_providerID) + gchar *remote_providerID, + gchar *targetNameSpace) { LassoProfile *profile; LassoNode *nameIdentifier; @@ -160,7 +161,26 @@ lasso_name_identifier_mapping_init_request(LassoNameIdentifierMapping *mapping, profile = LASSO_PROFILE(mapping); - profile->remote_providerID = remote_providerID; + /* verify if the identity exists */ + if (profile->identity == NULL) { + message(G_LOG_LEVEL_CRITICAL, "Identity not found\n"); + ret = -1; + goto done; + } + + /* get the remote provider id */ + /* If remote_providerID is NULL, then get the first remote provider id in session */ + if (remote_providerID == NULL) { + profile->remote_providerID = lasso_identity_get_first_providerID(profile->identity); + } + else { + profile->remote_providerID = g_strdup(remote_providerID); + } + if (profile->remote_providerID == NULL) { + message(G_LOG_LEVEL_CRITICAL, "No provider id for init request\n"); + ret = -1; + goto done; + } /* get federation */ federation = lasso_identity_get_federation(profile->identity, profile->remote_providerID); @@ -170,33 +190,23 @@ lasso_name_identifier_mapping_init_request(LassoNameIdentifierMapping *mapping, goto done; } - /* get the name identifier (!!! depend on the provider type : SP or IDP !!!)*/ - switch(profile->provider_type) { - case lassoProviderTypeSp: - nameIdentifier = LASSO_NODE(lasso_federation_get_local_nameIdentifier(federation)); - if(!nameIdentifier) - nameIdentifier = LASSO_NODE(lasso_federation_get_remote_nameIdentifier(federation)); - break; - case lassoProviderTypeIdp: - /* get the next assertion (next authenticated service provider) */ + /* get the name identifier */ + nameIdentifier = LASSO_NODE(lasso_federation_get_local_nameIdentifier(federation)); + if(nameIdentifier == NULL) { nameIdentifier = LASSO_NODE(lasso_federation_get_remote_nameIdentifier(federation)); - if(nameIdentifier == NULL) { - nameIdentifier = LASSO_NODE(lasso_federation_get_local_nameIdentifier(federation)); - } - break; - default: - message(G_LOG_LEVEL_ERROR, "Invalid provider type\n"); - ret = -1; - goto done; } - lasso_federation_destroy(federation); if(nameIdentifier == NULL) { - message(G_LOG_LEVEL_ERROR, "Name identifier not found\n"); + nameIdentifier = LASSO_NODE(lasso_federation_get_remote_nameIdentifier(federation)); + } + if (nameIdentifier != NULL) { + message(G_LOG_LEVEL_CRITICAL, "Name identifier not found\n"); ret = -1; goto done; } + lasso_federation_destroy(federation); + /* build the request */ content = lasso_node_get_content(nameIdentifier, NULL); nameQualifier = lasso_node_get_attr_value(nameIdentifier, "NameQualifier", NULL); @@ -204,7 +214,8 @@ lasso_name_identifier_mapping_init_request(LassoNameIdentifierMapping *mapping, profile->request = lasso_name_identifier_mapping_request_new(profile->server->providerID, content, nameQualifier, - format); + format, + targetNameSpace); if (LASSO_IS_NAME_IDENTIFIER_MAPPING_REQUEST(profile->request) == FALSE) { ret = -1; @@ -415,20 +426,34 @@ GType lasso_name_identifier_mapping_get_type() { } LassoNameIdentifierMapping * -lasso_name_identifier_mapping_new(LassoServer *server, - LassoIdentity *identity, - lassoProviderType provider_type) +lasso_name_identifier_mapping_new(LassoServer *server) { LassoNameIdentifierMapping *mapping; g_return_val_if_fail(LASSO_IS_SERVER(server), NULL); - g_return_val_if_fail(LASSO_IS_IDENTITY(identity), NULL); /* set the name_identifier_mapping object */ mapping = g_object_new(LASSO_TYPE_NAME_IDENTIFIER_MAPPING, "server", lasso_server_copy(server), - "identity", lasso_identity_copy(identity), - "provider_type", provider_type, NULL); return mapping; } + +LassoNameIdentifierMapping * +lasso_name_identifier_mapping_new_from_dump(LassoServer *server, + gchar *dump) +{ + LassoNameIdentifierMapping *mapping; + LassoNode *node_dump; + + g_return_val_if_fail(LASSO_IS_SERVER(server), NULL); + g_return_val_if_fail(dump != NULL, NULL); + + mapping = g_object_new(LASSO_TYPE_NAME_IDENTIFIER_MAPPING, + "server", lasso_server_copy(server), + NULL); + + node_dump = lasso_node_new_from_dump(dump); + + return mapping; +} diff --git a/lasso/id-ff/name_identifier_mapping.h b/lasso/id-ff/name_identifier_mapping.h index 3f7f06a5..e1113960 100644 --- a/lasso/id-ff/name_identifier_mapping.h +++ b/lasso/id-ff/name_identifier_mapping.h @@ -58,9 +58,7 @@ struct _LassoNameIdentifierMappingClass { LASSO_EXPORT GType lasso_name_identifier_mapping_get_type (void); -LASSO_EXPORT LassoNameIdentifierMapping* lasso_name_identifier_mapping_new (LassoServer *server, - LassoIdentity *identity, - lassoProviderType provider_type); +LASSO_EXPORT LassoNameIdentifierMapping* lasso_name_identifier_mapping_new (LassoServer *server); LASSO_EXPORT gint lasso_name_identifier_mapping_build_request_msg (LassoNameIdentifierMapping *mapping); @@ -69,7 +67,8 @@ LASSO_EXPORT gint lasso_name_identifier_mapping_build_res LASSO_EXPORT void lasso_name_identifier_mapping_destroy (LassoNameIdentifierMapping *mapping); LASSO_EXPORT gint lasso_name_identifier_mapping_init_request (LassoNameIdentifierMapping *mapping, - gchar *remote_providerID); + gchar *remote_providerID, + gchar *targetNameSpace); LASSO_EXPORT gint lasso_name_identifier_mapping_process_request_msg (LassoNameIdentifierMapping *mapping, gchar *request_msg, diff --git a/lasso/xml/lib_name_identifier_mapping_request.c b/lasso/xml/lib_name_identifier_mapping_request.c index b43e69e9..91ffc366 100644 --- a/lasso/xml/lib_name_identifier_mapping_request.c +++ b/lasso/xml/lib_name_identifier_mapping_request.c @@ -94,6 +94,18 @@ lasso_lib_name_identifier_mapping_request_set_nameIdentifier(LassoLibNameIdentif class->add_child(LASSO_NODE (node), LASSO_NODE (nameIdentifier), FALSE); } +void +lasso_lib_name_identifier_mapping_request_set_targetNameSpace(LassoLibNameIdentifierMappingRequest *node, + const xmlChar *targetNameSpace) +{ + LassoNodeClass *class; + g_assert(LASSO_IS_LIB_NAME_IDENTIFIER_MAPPING_REQUEST(node)); + g_assert(targetNameSpace != NULL); + + class = LASSO_NODE_GET_CLASS(node); + class->new_child(LASSO_NODE (node), "TargetNameSpace", targetNameSpace, FALSE); +} + /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ diff --git a/lasso/xml/lib_name_identifier_mapping_request.h b/lasso/xml/lib_name_identifier_mapping_request.h index e9ceb174..561b7b9c 100644 --- a/lasso/xml/lib_name_identifier_mapping_request.h +++ b/lasso/xml/lib_name_identifier_mapping_request.h @@ -53,17 +53,20 @@ struct _LassoLibNameIdentifierMappingRequestClass { }; LASSO_EXPORT GType lasso_lib_name_identifier_mapping_request_get_type(void); + LASSO_EXPORT LassoNode* lasso_lib_name_identifier_mapping_request_new(void); -LASSO_EXPORT void lasso_lib_name_identifier_mapping_request_set_consent (LassoLibNameIdentifierMappingRequest *, - const xmlChar *); +LASSO_EXPORT void lasso_lib_name_identifier_mapping_request_set_consent (LassoLibNameIdentifierMappingRequest *, + const xmlChar *); -LASSO_EXPORT void lasso_lib_name_identifier_mapping_request_set_providerID (LassoLibNameIdentifierMappingRequest *, - const xmlChar *); +LASSO_EXPORT void lasso_lib_name_identifier_mapping_request_set_providerID (LassoLibNameIdentifierMappingRequest *, + const xmlChar *); -LASSO_EXPORT void lasso_lib_name_identifier_mapping_request_set_nameIdentifier (LassoLibNameIdentifierMappingRequest *, - LassoSamlNameIdentifier *); +LASSO_EXPORT void lasso_lib_name_identifier_mapping_request_set_nameIdentifier (LassoLibNameIdentifierMappingRequest *, + LassoSamlNameIdentifier *); +LASSO_EXPORT void lasso_lib_name_identifier_mapping_request_set_targetNameSpace (LassoLibNameIdentifierMappingRequest *node, + const xmlChar *targetNameSpace); #ifdef __cplusplus } #endif /* __cplusplus */ |
