summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFrederic Peters <fpeters@entrouvert.com>2006-12-06 09:26:45 +0000
committerFrederic Peters <fpeters@entrouvert.com>2006-12-06 09:26:45 +0000
commitc888519f1e20b7fff1726d1051e4e80a5e5d3cb0 (patch)
tree13dc2fe8f5561e38e4ba6207fb0e2347ae6a4ebb
parent6c39cf413b56383ad1c83999a1c79095b91f0e15 (diff)
relaystate handling
-rw-r--r--lasso/xml/saml-2.0/samlp2_authn_request.c5
-rw-r--r--lasso/xml/saml-2.0/samlp2_authn_request.h3
-rw-r--r--lasso/xml/saml-2.0/samlp2_logout_request.c5
-rw-r--r--lasso/xml/saml-2.0/samlp2_logout_request.h2
-rw-r--r--lasso/xml/saml-2.0/samlp2_logout_response.c9
-rw-r--r--lasso/xml/saml-2.0/samlp2_logout_response.h1
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;
};