summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFrederic Peters <fpeters@entrouvert.com>2004-11-29 10:50:59 +0000
committerFrederic Peters <fpeters@entrouvert.com>2004-11-29 10:50:59 +0000
commitc4a9c11466ee2662bf8fe796feb5daaaf814219b (patch)
tree8f25b1071621498c8107ecfa3ed4cddc98679005
parent9d0a08ba1723804f04edd1ba5739767fbba7e5b4 (diff)
added RelayState support in federation termination notification (used only in
redirect mode)
-rw-r--r--lasso/id-ff/defederation.c10
-rw-r--r--lasso/xml/lib_federation_termination_notification.c7
-rw-r--r--lasso/xml/lib_federation_termination_notification.h2
3 files changed, 14 insertions, 5 deletions
diff --git a/lasso/id-ff/defederation.c b/lasso/id-ff/defederation.c
index 36273524..d6b77254 100644
--- a/lasso/id-ff/defederation.c
+++ b/lasso/id-ff/defederation.c
@@ -309,11 +309,11 @@ lasso_defederation_process_notification_msg(LassoDefederation *defederation, cha
profile->nameIdentifier = g_strdup(LASSO_LIB_FEDERATION_TERMINATION_NOTIFICATION(
profile->request)->NameIdentifier->content);
- /* get the RelayState */
-
- /* XXX: not in schema; some mention in 3.4.1.1.5 (Step 5: Redirecting
- * to the Identity Provider Return URL)
- */
+ /* get the RelayState (only available in redirect mode) */
+ if (LASSO_LIB_FEDERATION_TERMINATION_NOTIFICATION(profile->request)->RelayState)
+ profile->msg_relayState = g_strdup(
+ LASSO_LIB_FEDERATION_TERMINATION_NOTIFICATION(
+ profile->request)->RelayState);
return profile->signature_status;
}
diff --git a/lasso/xml/lib_federation_termination_notification.c b/lasso/xml/lib_federation_termination_notification.c
index 85403268..01623ea2 100644
--- a/lasso/xml/lib_federation_termination_notification.c
+++ b/lasso/xml/lib_federation_termination_notification.c
@@ -120,6 +120,8 @@ build_query(LassoNode *node)
}
if (request->consent)
g_string_append_printf(s, "&consent=%s", request->consent);
+ if (request->RelayState)
+ g_string_append_printf(s, "&RelayState=%s", request->RelayState);
str = s->str;
g_string_free(s, FALSE);
@@ -159,6 +161,10 @@ init_from_query(LassoNode *node, char **query_fields)
request->NameIdentifier->NameQualifier = g_strdup(t+14);
continue;
}
+ if (g_str_has_prefix(t, "RelayState=")) {
+ request->RelayState = g_strdup(t+11);
+ continue;
+ }
}
if (request->ProviderID == NULL ||
@@ -186,6 +192,7 @@ instance_init(LassoLibFederationTerminationNotification *node)
node->ProviderID = NULL;
node->NameIdentifier = NULL;
node->consent = NULL;
+ node->RelayState = NULL;
}
static void
diff --git a/lasso/xml/lib_federation_termination_notification.h b/lasso/xml/lib_federation_termination_notification.h
index eac80eb4..abe37f89 100644
--- a/lasso/xml/lib_federation_termination_notification.h
+++ b/lasso/xml/lib_federation_termination_notification.h
@@ -65,6 +65,8 @@ struct _LassoLibFederationTerminationNotification {
LassoSamlNameIdentifier *NameIdentifier;
/* <xs:attribute ref="consent" use="optional"/> */
char *consent;
+
+ char *RelayState; /* not in schema but allowed in redirects */
};
struct _LassoLibFederationTerminationNotificationClass {