diff options
| author | Frederic Peters <fpeters@entrouvert.com> | 2004-11-29 10:50:59 +0000 |
|---|---|---|
| committer | Frederic Peters <fpeters@entrouvert.com> | 2004-11-29 10:50:59 +0000 |
| commit | c4a9c11466ee2662bf8fe796feb5daaaf814219b (patch) | |
| tree | 8f25b1071621498c8107ecfa3ed4cddc98679005 | |
| parent | 9d0a08ba1723804f04edd1ba5739767fbba7e5b4 (diff) | |
added RelayState support in federation termination notification (used only in
redirect mode)
| -rw-r--r-- | lasso/id-ff/defederation.c | 10 | ||||
| -rw-r--r-- | lasso/xml/lib_federation_termination_notification.c | 7 | ||||
| -rw-r--r-- | lasso/xml/lib_federation_termination_notification.h | 2 |
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 { |
