diff options
| author | Frederic Peters <fpeters@entrouvert.com> | 2006-12-06 09:26:45 +0000 |
|---|---|---|
| committer | Frederic Peters <fpeters@entrouvert.com> | 2006-12-06 09:26:45 +0000 |
| commit | c888519f1e20b7fff1726d1051e4e80a5e5d3cb0 (patch) | |
| tree | 13dc2fe8f5561e38e4ba6207fb0e2347ae6a4ebb | |
| parent | 6c39cf413b56383ad1c83999a1c79095b91f0e15 (diff) | |
relaystate handling
| -rw-r--r-- | lasso/xml/saml-2.0/samlp2_authn_request.c | 5 | ||||
| -rw-r--r-- | lasso/xml/saml-2.0/samlp2_authn_request.h | 3 | ||||
| -rw-r--r-- | lasso/xml/saml-2.0/samlp2_logout_request.c | 5 | ||||
| -rw-r--r-- | lasso/xml/saml-2.0/samlp2_logout_request.h | 2 | ||||
| -rw-r--r-- | lasso/xml/saml-2.0/samlp2_logout_response.c | 9 | ||||
| -rw-r--r-- | lasso/xml/saml-2.0/samlp2_logout_response.h | 1 |
6 files changed, 22 insertions, 3 deletions
diff --git a/lasso/xml/saml-2.0/samlp2_authn_request.c b/lasso/xml/saml-2.0/samlp2_authn_request.c index ce6e2e33..9a92695e 100644 --- a/lasso/xml/saml-2.0/samlp2_authn_request.c +++ b/lasso/xml/saml-2.0/samlp2_authn_request.c @@ -105,9 +105,11 @@ init_from_query(LassoNode *node, char **query_fields) { gboolean rc; char *relay_state = NULL; + LassoSamlp2AuthnRequest *request = LASSO_SAMLP2_AUTHN_REQUEST(node); + rc = lasso_node_init_from_saml2_query_fields(node, query_fields, &relay_state); if (rc && relay_state != NULL) { - /* XXX: support RelayState? */ + request->relayState = relay_state; } return rc; } @@ -132,6 +134,7 @@ instance_init(LassoSamlp2AuthnRequest *node) node->AssertionConsumerServiceURL = NULL; node->AttributeConsumingServiceIndex = -1; node->ProviderName = NULL; + node->relayState = NULL; } static void diff --git a/lasso/xml/saml-2.0/samlp2_authn_request.h b/lasso/xml/saml-2.0/samlp2_authn_request.h index f1b70250..9c0bd007 100644 --- a/lasso/xml/saml-2.0/samlp2_authn_request.h +++ b/lasso/xml/saml-2.0/samlp2_authn_request.h @@ -73,6 +73,9 @@ struct _LassoSamlp2AuthnRequest { char *AssertionConsumerServiceURL; int AttributeConsumingServiceIndex; char *ProviderName; + + /* out of schema */ + char *relayState; }; diff --git a/lasso/xml/saml-2.0/samlp2_logout_request.c b/lasso/xml/saml-2.0/samlp2_logout_request.c index 8f1d29a8..87ae5056 100644 --- a/lasso/xml/saml-2.0/samlp2_logout_request.c +++ b/lasso/xml/saml-2.0/samlp2_logout_request.c @@ -88,9 +88,11 @@ init_from_query(LassoNode *node, char **query_fields) { gboolean rc; char *relay_state = NULL; + LassoSamlp2LogoutRequest *request = LASSO_SAMLP2_LOGOUT_REQUEST(node); + rc = lasso_node_init_from_saml2_query_fields(node, query_fields, &relay_state); if (rc && relay_state != NULL) { - /* XXX: support RelayState? */ + request->relayState = relay_state; } return rc; } @@ -109,6 +111,7 @@ instance_init(LassoSamlp2LogoutRequest *node) node->SessionIndex = NULL; node->Reason = NULL; node->NotOnOrAfter = NULL; + node->relayState = NULL; } static void diff --git a/lasso/xml/saml-2.0/samlp2_logout_request.h b/lasso/xml/saml-2.0/samlp2_logout_request.h index 572f738e..31de50bb 100644 --- a/lasso/xml/saml-2.0/samlp2_logout_request.h +++ b/lasso/xml/saml-2.0/samlp2_logout_request.h @@ -65,6 +65,8 @@ struct _LassoSamlp2LogoutRequest { /* attributes */ char *Reason; char *NotOnOrAfter; + + char *relayState; }; diff --git a/lasso/xml/saml-2.0/samlp2_logout_response.c b/lasso/xml/saml-2.0/samlp2_logout_response.c index 12c775ec..b2e44b4e 100644 --- a/lasso/xml/saml-2.0/samlp2_logout_response.c +++ b/lasso/xml/saml-2.0/samlp2_logout_response.c @@ -46,9 +46,15 @@ static gchar* build_query(LassoNode *node) { char *ret, *deflated_message; + LassoSamlp2LogoutResponse *response = LASSO_SAMLP2_LOGOUT_RESPONSE(node); deflated_message = lasso_node_build_deflated_query(node); - ret = g_strdup_printf("SAMLResponse=%s", deflated_message); + if (response->relayState) { + ret = g_strdup_printf("SAMLResponse=%s&RelayState=%s", + deflated_message, response->relayState); + } else { + ret = g_strdup_printf("SAMLResponse=%s", deflated_message); + } /* XXX: must support RelayState (which profiles?) */ g_free(deflated_message); return ret; @@ -75,6 +81,7 @@ init_from_query(LassoNode *node, char **query_fields) static void instance_init(LassoSamlp2LogoutResponse *node) { + node->relayState = NULL; /* XXX: free me sometimes */ } static void diff --git a/lasso/xml/saml-2.0/samlp2_logout_response.h b/lasso/xml/saml-2.0/samlp2_logout_response.h index 77a7adf1..fcc47fbf 100644 --- a/lasso/xml/saml-2.0/samlp2_logout_response.h +++ b/lasso/xml/saml-2.0/samlp2_logout_response.h @@ -54,6 +54,7 @@ struct _LassoSamlp2LogoutResponse { LassoSamlp2StatusResponse parent; /*< public >*/ + char *relayState; }; |
