summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNicolas Clapies <nclapies@entrouvert.com>2004-08-23 14:07:13 +0000
committerNicolas Clapies <nclapies@entrouvert.com>2004-08-23 14:07:13 +0000
commit2b6c10a47ac0f3c5ebbc7da96fac93261aeab304 (patch)
treed8561609a11d85fc46b6695bf9e2b1749e1ae25b
parent4fb5358591677388e15c62ef3b428bae62317afe (diff)
downloadlasso-2b6c10a47ac0f3c5ebbc7da96fac93261aeab304.tar.gz
lasso-2b6c10a47ac0f3c5ebbc7da96fac93261aeab304.tar.xz
lasso-2b6c10a47ac0f3c5ebbc7da96fac93261aeab304.zip
updpated process of protocol profile
-rw-r--r--lasso/Attic/protocols/federation_termination_notification.c13
-rw-r--r--lasso/Attic/protocols/federation_termination_notification.h10
-rw-r--r--lasso/id-ff/federation_termination.c68
-rw-r--r--lasso/id-ff/federation_termination.h4
-rw-r--r--lasso/id-ff/register_name_identifier.h22
5 files changed, 89 insertions, 28 deletions
diff --git a/lasso/Attic/protocols/federation_termination_notification.c b/lasso/Attic/protocols/federation_termination_notification.c
index 77168979..ce17faca 100644
--- a/lasso/Attic/protocols/federation_termination_notification.c
+++ b/lasso/Attic/protocols/federation_termination_notification.c
@@ -71,7 +71,9 @@ LassoNode*
lasso_federation_termination_notification_new(const xmlChar *providerID,
const xmlChar *nameIdentifier,
const xmlChar *nameQualifier,
- const xmlChar *format)
+ const xmlChar *format,
+ lassoSignatureType sign_type,
+ lassoSignatureMethod sign_method)
{
LassoNode *request, *identifier;
xmlChar *id, *time;
@@ -95,6 +97,15 @@ lasso_federation_termination_notification_new(const xmlChar *providerID,
lasso_samlp_request_abstract_set_issueInstant(LASSO_SAMLP_REQUEST_ABSTRACT(request),
(const xmlChar *)time);
xmlFree(time);
+
+ /* set the signature template */
+ if (sign_type != lassoSignatureTypeNone) {
+ lasso_samlp_request_abstract_set_signature_tmpl(LASSO_SAMLP_REQUEST_ABSTRACT(request),
+ sign_type,
+ sign_method,
+ id);
+ }
+
/* ProviderID */
lasso_lib_federation_termination_notification_set_providerID(LASSO_LIB_FEDERATION_TERMINATION_NOTIFICATION(request),
providerID);
diff --git a/lasso/Attic/protocols/federation_termination_notification.h b/lasso/Attic/protocols/federation_termination_notification.h
index 1882b4fa..6d4edc3c 100644
--- a/lasso/Attic/protocols/federation_termination_notification.h
+++ b/lasso/Attic/protocols/federation_termination_notification.h
@@ -54,10 +54,12 @@ struct _LassoFederationTerminationNotificationClass {
LASSO_EXPORT GType lasso_federation_termination_notification_get_type (void);
-LASSO_EXPORT LassoNode* lasso_federation_termination_notification_new (const xmlChar *providerID,
- const xmlChar *nameIdentifier,
- const xmlChar *nameQualifier,
- const xmlChar *format);
+LASSO_EXPORT LassoNode* lasso_federation_termination_notification_new (const xmlChar *providerID,
+ const xmlChar *nameIdentifier,
+ const xmlChar *nameQualifier,
+ const xmlChar *format,
+ lassoSignatureType sign_type,
+ lassoSignatureMethod sign_method);
LASSO_EXPORT LassoNode* lasso_federation_termination_notification_new_from_export (const gchar *export,
lassoNodeExportType export_type);
diff --git a/lasso/id-ff/federation_termination.c b/lasso/id-ff/federation_termination.c
index c8f2b3d1..0963e11f 100644
--- a/lasso/id-ff/federation_termination.c
+++ b/lasso/id-ff/federation_termination.c
@@ -65,14 +65,14 @@ lasso_federation_termination_build_notification_msg(LassoFederationTermination *
/* get the protocol profile of the remote provider ( if the notifier is a IDP, then get with IDP type else if IDP, SP ) */
if (profile->provider_type == lassoProviderTypeSp) {
- protocolProfile = lasso_provider_get_federationTerminationNotificationProtocolProfile(provider,
- lassoProviderTypeIdp,
- NULL);
+ protocolProfile = lasso_provider_get_federationTerminationNotificationProtocolProfile(provider,
+ lassoProviderTypeIdp,
+ NULL);
}
else if (profile->provider_type == lassoProviderTypeIdp) {
- protocolProfile = lasso_provider_get_federationTerminationNotificationProtocolProfile(provider,
- lassoProviderTypeSp,
- NULL);
+ protocolProfile = lasso_provider_get_federationTerminationNotificationProtocolProfile(provider,
+ lassoProviderTypeSp,
+ NULL);
}
else {
message(G_LOG_LEVEL_CRITICAL, "Invalid provider type\n");
@@ -173,9 +173,11 @@ lasso_federation_termination_init_notification(LassoFederationTermination *defed
gchar *remote_providerID)
{
LassoProfile *profile;
+ LassoProvider *provider;
LassoFederation *federation;
LassoNode *nameIdentifier = NULL;
xmlChar *content = NULL, *nameQualifier = NULL, *format = NULL;
+ xmlChar *federationTerminationProtocolProfile;
gint ret = 0;
g_return_val_if_fail(LASSO_IS_FEDERATION_TERMINATION(defederation), -1);
@@ -233,10 +235,56 @@ lasso_federation_termination_init_notification(LassoFederationTermination *defed
content = lasso_node_get_content(nameIdentifier, NULL);
nameQualifier = lasso_node_get_attr_value(nameIdentifier, "NameQualifier", NULL);
format = lasso_node_get_attr_value(nameIdentifier, "Format", NULL);
- profile->request = lasso_federation_termination_notification_new(profile->server->providerID,
- content,
- nameQualifier,
- format);
+
+ /* get the protocol profile and set a new federation termination notification object */
+ provider = lasso_server_get_provider_ref(profile->server, profile->remote_providerID, NULL);
+ if (provider == NULL) {
+ message(G_LOG_LEVEL_CRITICAL, "Provider %s not found\n", profile->remote_providerID);
+ ret = -1;
+ goto done;
+ }
+
+ if (profile->provider_type == lassoProviderTypeIdp) {
+ federationTerminationProtocolProfile = lasso_provider_get_federationTerminationNotificationProtocolProfile(provider,
+ lassoProviderTypeSp,
+ NULL);
+ }
+ else if (profile->provider_type == lassoProviderTypeSp) {
+ federationTerminationProtocolProfile = lasso_provider_get_federationTerminationNotificationProtocolProfile(provider,
+ lassoProviderTypeIdp,
+ NULL);
+
+ }
+
+ if (federationTerminationProtocolProfile == NULL) {
+ message(G_LOG_LEVEL_CRITICAL, "Federation termination notification protocol profile not found\n");
+ ret = -1;
+ goto done;
+ }
+
+ if (xmlStrEqual(federationTerminationProtocolProfile, lassoLibProtocolProfileFedTermSpSoap) || \
+ xmlStrEqual(federationTerminationProtocolProfile, lassoLibProtocolProfileFedTermIdpSoap)) {
+ profile->request = lasso_federation_termination_notification_new(profile->server->providerID,
+ content,
+ nameQualifier,
+ format,
+ lassoSignatureTypeWithX509,
+ lassoSignatureMethodRsaSha1);
+ }
+ else if (xmlStrEqual(federationTerminationProtocolProfile, lassoLibProtocolProfileFedTermSpHttp) || \
+ xmlStrEqual(federationTerminationProtocolProfile, lassoLibProtocolProfileFedTermIdpHttp)) {
+ profile->request = lasso_federation_termination_notification_new(profile->server->providerID,
+ content,
+ nameQualifier,
+ format,
+ lassoSignatureTypeNone,
+ 0);
+ }
+ else {
+ message(G_LOG_LEVEL_CRITICAL, "Invalid federation termination notification protocol profile\n");
+ ret = -1;
+ goto done;
+ }
if (profile->request == NULL) {
message(G_LOG_LEVEL_CRITICAL, "Error while creating the notification\n");
diff --git a/lasso/id-ff/federation_termination.h b/lasso/id-ff/federation_termination.h
index e28e6441..5a253049 100644
--- a/lasso/id-ff/federation_termination.h
+++ b/lasso/id-ff/federation_termination.h
@@ -68,8 +68,8 @@ LASSO_EXPORT gint lasso_federation_termination_init_notification (LassoFe
gchar *remote_providerID);
LASSO_EXPORT gint lasso_federation_termination_process_notification_msg (LassoFederationTermination *defederation,
- gchar *request_msg,
- lassoHttpMethod request_method);
+ gchar *notification_msg,
+ lassoHttpMethod notification_method);
LASSO_EXPORT gint lasso_federation_termination_validate_notification (LassoFederationTermination *defederation);
diff --git a/lasso/id-ff/register_name_identifier.h b/lasso/id-ff/register_name_identifier.h
index bf4ac1e8..7784319f 100644
--- a/lasso/id-ff/register_name_identifier.h
+++ b/lasso/id-ff/register_name_identifier.h
@@ -61,24 +61,24 @@ LASSO_EXPORT GType lasso_register_name_identifier_get_typ
LASSO_EXPORT LassoRegisterNameIdentifier* lasso_register_name_identifier_new (LassoServer *server,
lassoProviderType provider_type);
-LASSO_EXPORT gint lasso_register_name_identifier_build_request_msg (LassoRegisterNameIdentifier *register_name_identifier);
+LASSO_EXPORT gint lasso_register_name_identifier_build_request_msg (LassoRegisterNameIdentifier *register_name_identifier);
-LASSO_EXPORT gint lasso_register_name_identifier_build_response_msg (LassoRegisterNameIdentifier *register_name_identifier);
+LASSO_EXPORT gint lasso_register_name_identifier_build_response_msg (LassoRegisterNameIdentifier *register_name_identifier);
-LASSO_EXPORT void lasso_register_name_identifier_destroy (LassoRegisterNameIdentifier *register_name_identifier);
+LASSO_EXPORT void lasso_register_name_identifier_destroy (LassoRegisterNameIdentifier *register_name_identifier);
-LASSO_EXPORT gint lasso_register_name_identifier_init_request (LassoRegisterNameIdentifier *register_name_identifier,
- gchar *remote_providerID);
+LASSO_EXPORT gint lasso_register_name_identifier_init_request (LassoRegisterNameIdentifier *register_name_identifier,
+ gchar *remote_providerID);
-LASSO_EXPORT gint lasso_register_name_identifier_process_request_msg (LassoRegisterNameIdentifier *register_name_identifier,
- gchar *request_msg,
- lassoHttpMethod request_method);
+LASSO_EXPORT gint lasso_register_name_identifier_process_request_msg (LassoRegisterNameIdentifier *register_name_identifier,
+ gchar *request_msg,
+ lassoHttpMethod request_method);
LASSO_EXPORT gint lasso_register_name_identifier_validate_request (LassoRegisterNameIdentifier *register_name_identifier);
-LASSO_EXPORT gint lasso_register_name_identifier_process_response_msg (LassoRegisterNameIdentifier *register_name_identifier,
- gchar *response_msg,
- lassoHttpMethod response_method);
+LASSO_EXPORT gint lasso_register_name_identifier_process_response_msg (LassoRegisterNameIdentifier *register_name_identifier,
+ gchar *response_msg,
+ lassoHttpMethod response_method);
#ifdef __cplusplus
}