summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNicolas Clapies <nclapies@entrouvert.com>2004-09-22 15:57:51 +0000
committerNicolas Clapies <nclapies@entrouvert.com>2004-09-22 15:57:51 +0000
commit679b13568e33fa2a283cc1382c06f9df487a97e9 (patch)
treea71428eab19a53cd994f4a6fe6c8e009afc2e8c6
parentf5ab5917e49e70b3a82174d6885f34ce1b907730 (diff)
downloadlasso-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.c9
-rw-r--r--lasso/Attic/protocols/name_identifier_mapping_request.h3
-rw-r--r--lasso/id-ff/name_identifier_mapping.c81
-rw-r--r--lasso/id-ff/name_identifier_mapping.h7
-rw-r--r--lasso/xml/lib_name_identifier_mapping_request.c12
-rw-r--r--lasso/xml/lib_name_identifier_mapping_request.h15
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 */