summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBenjamin Dauvergne <bdauvergne@entrouvert.com>2009-03-27 15:05:39 +0000
committerBenjamin Dauvergne <bdauvergne@entrouvert.com>2009-03-27 15:05:39 +0000
commit96594a8edefd223b69392e361c8d943bb5332f2b (patch)
tree78844b85bfd8f3ac62b11eb5a9f8c4c476de971a
parentd0d71abe2c88af7c4bdd06af447730d51d719b08 (diff)
downloadlasso-96594a8edefd223b69392e361c8d943bb5332f2b.tar.gz
lasso-96594a8edefd223b69392e361c8d943bb5332f2b.tar.xz
lasso-96594a8edefd223b69392e361c8d943bb5332f2b.zip
XML: Tool function to extract relaystate from query
* lasso/xml/tools.c, lasso/xml/private.h: new function lasso_get_relaystate_from_query to help in relaystate handling.
-rw-r--r--lasso/xml/private.h2
-rw-r--r--lasso/xml/tools.c30
2 files changed, 32 insertions, 0 deletions
diff --git a/lasso/xml/private.h b/lasso/xml/private.h
index fe3da380..b13315e3 100644
--- a/lasso/xml/private.h
+++ b/lasso/xml/private.h
@@ -210,6 +210,8 @@ static inline void message(GLogLevelFlags level, const char *format, ...)
if (lasso_provider_get_protocol_conformance(LASSO_PROVIDER(profile->server)) == \
LASSO_PROTOCOL_SAML_2_0)
+char * lasso_get_relaystate_from_query(const char *query);
+
#ifdef __cplusplus
}
#endif /* __cplusplus */
diff --git a/lasso/xml/tools.c b/lasso/xml/tools.c
index 61c51a58..6f9ae73b 100644
--- a/lasso/xml/tools.c
+++ b/lasso/xml/tools.c
@@ -1464,3 +1464,33 @@ xmlDetectSAX2(xmlParserCtxtPtr ctxt) {
ctxt->errNo = XML_ERR_NO_MEMORY;
}
}
+
+char *
+lasso_get_relaystate_from_query(const char *query) {
+ char *start, *end;
+ char *result = NULL;
+
+ if (query == NULL)
+ return NULL;
+ start = strstr(query, "?RelayState=");
+ if (! start) {
+ start = strstr(query, "&RelayState=");
+ }
+ if (start) {
+ ptrdiff_t length;
+
+ start += sizeof("&RelayState=") - 1;
+ end = strchr(start, '&');
+ if (end) {
+ length = end-start;
+ } else {
+ length = strlen(start);
+ }
+ if (length > 240) {
+ g_warning("Refused to parse a RelayState of size %ti > 240", length);
+ } else {
+ result = xmlURIUnescapeString(start, length, NULL);
+ }
+ }
+ return result;
+}