summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFrederic Peters <fpeters@entrouvert.com>2006-11-07 12:44:32 +0000
committerFrederic Peters <fpeters@entrouvert.com>2006-11-07 12:44:32 +0000
commitaec4544976d306992ece769faeb55f8850b51dcb (patch)
tree16b663f41bcf4e1a5e94976af388d22e88cb7f79
parent0b9baa3518d5cac61d17d3c475ad68f79ba22b93 (diff)
downloadlasso-aec4544976d306992ece769faeb55f8850b51dcb.tar.gz
lasso-aec4544976d306992ece769faeb55f8850b51dcb.tar.xz
lasso-aec4544976d306992ece769faeb55f8850b51dcb.zip
fixed url/query construction for endpoints with query part (zxid)
-rw-r--r--lasso/id-ff/defederation.c7
-rw-r--r--lasso/id-ff/login.c14
-rw-r--r--lasso/id-ff/logout.c6
-rw-r--r--lasso/id-ff/name_registration.c4
-rw-r--r--lasso/saml-2.0/login.c11
-rw-r--r--lasso/saml-2.0/logout.c5
-rw-r--r--lasso/saml-2.0/name_id_management.c4
-rw-r--r--lasso/xml/private.h2
-rw-r--r--lasso/xml/tools.c10
9 files changed, 42 insertions, 21 deletions
diff --git a/lasso/id-ff/defederation.c b/lasso/id-ff/defederation.c
index ec770135..b5b74c40 100644
--- a/lasso/id-ff/defederation.c
+++ b/lasso/id-ff/defederation.c
@@ -113,7 +113,7 @@ lasso_defederation_build_notification_msg(LassoDefederation *defederation)
return critical_error(LASSO_PROFILE_ERROR_BUILDING_QUERY_FAILED);
}
- profile->msg_url = g_strdup_printf("%s?%s", url, query);
+ profile->msg_url = lasso_concat_url_query(url, query);
profile->msg_body = NULL;
g_free(url);
g_free(query);
@@ -375,9 +375,10 @@ lasso_defederation_validate_notification(LassoDefederation *defederation)
/* if a relay state, then build the query part */
if (profile->msg_relayState) {
gchar *url;
- url = g_strdup_printf("%s?RelayState=%s",
- profile->msg_url, profile->msg_relayState);
+ gchar *query = g_strdup_printf("RelayState=%s", profile->msg_relayState);
+ url = lasso_concat_url_query(profile->msg_url, query);
g_free(profile->msg_url);
+ g_free(query);
profile->msg_url = url;
}
}
diff --git a/lasso/id-ff/login.c b/lasso/id-ff/login.c
index 6f11fa4f..871e420c 100644
--- a/lasso/id-ff/login.c
+++ b/lasso/id-ff/login.c
@@ -752,13 +752,17 @@ lasso_login_build_artifact_msg(LassoLogin *login, LassoHttpMethod http_method)
if (http_method == LASSO_HTTP_METHOD_REDIRECT) {
xmlChar *escaped_artifact = xmlURIEscapeStr(b64_samlArt, NULL);
+ gchar *query;
+
if (relayState == NULL) {
- profile->msg_url = g_strdup_printf("%s?SAMLart=%s", url, escaped_artifact);
+ query = g_strdup_printf("SAMLart=%s", escaped_artifact);
} else {
- profile->msg_url = g_strdup_printf(
- "%s?SAMLart=%s&RelayState=%s",
- url, escaped_artifact, relayState);
+ query = g_strdup_printf("SAMLart=%s&RelayState=%s",
+ escaped_artifact, relayState);
}
+ profile->msg_url = lasso_concat_url_query(url, query);
+ g_free(query);
+
xmlFree(escaped_artifact);
}
@@ -878,7 +882,7 @@ lasso_login_build_authn_request_msg(LassoLogin *login)
return critical_error(LASSO_PROFILE_ERROR_UNKNOWN_PROFILE_URL);
}
- profile->msg_url = g_strdup_printf("%s?%s", url, query);
+ profile->msg_url = lasso_concat_url_query(url, query);
profile->msg_body = NULL;
g_free(query);
g_free(url);
diff --git a/lasso/id-ff/logout.c b/lasso/id-ff/logout.c
index f62b2ee5..23468f9a 100644
--- a/lasso/id-ff/logout.c
+++ b/lasso/id-ff/logout.c
@@ -120,7 +120,7 @@ lasso_logout_build_request_msg(LassoLogout *logout)
return critical_error(LASSO_PROFILE_ERROR_BUILDING_QUERY_FAILED);
}
/* build the msg_url */
- profile->msg_url = g_strdup_printf("%s?%s", url, query);
+ profile->msg_url = lasso_concat_url_query(url, query);
g_free(url);
g_free(query);
profile->msg_body = NULL;
@@ -231,7 +231,7 @@ lasso_logout_build_response_msg(LassoLogout *logout)
g_free(url);
return critical_error(LASSO_PROFILE_ERROR_BUILDING_QUERY_FAILED);
}
- profile->msg_url = g_strdup_printf("%s?%s", url, query);
+ profile->msg_url = lasso_concat_url_query(url, query);
profile->msg_body = NULL;
g_free(url);
g_free(query);
@@ -651,7 +651,7 @@ lasso_logout_process_response_msg(LassoLogout *logout, gchar *response_msg)
g_free(url);
return critical_error(LASSO_PROFILE_ERROR_BUILDING_QUERY_FAILED);
}
- profile->msg_url = g_strdup_printf("%s?%s", url, query);
+ profile->msg_url = lasso_concat_url_query(url, query);
g_free(url);
g_free(query);
profile->msg_body = NULL;
diff --git a/lasso/id-ff/name_registration.c b/lasso/id-ff/name_registration.c
index 79db2910..eeb21a01 100644
--- a/lasso/id-ff/name_registration.c
+++ b/lasso/id-ff/name_registration.c
@@ -103,7 +103,7 @@ lasso_name_registration_build_request_msg(LassoNameRegistration *name_registrati
return critical_error(LASSO_PROFILE_ERROR_BUILDING_QUERY_FAILED);
}
/* build the msg_url */
- profile->msg_url = g_strdup_printf("%s?%s", url, query);
+ profile->msg_url = lasso_concat_url_query(url, query);
profile->msg_body = NULL;
g_free(url);
g_free(query);
@@ -186,7 +186,7 @@ lasso_name_registration_build_response_msg(LassoNameRegistration *name_registrat
return critical_error(LASSO_PROFILE_ERROR_BUILDING_QUERY_FAILED);
}
/* build the msg_url */
- profile->msg_url = g_strdup_printf("%s?%s", url, query);
+ profile->msg_url = lasso_concat_url_query(url, query);
g_free(url);
g_free(query);
profile->msg_body = NULL;
diff --git a/lasso/saml-2.0/login.c b/lasso/saml-2.0/login.c
index e4b00066..e3a1ba85 100644
--- a/lasso/saml-2.0/login.c
+++ b/lasso/saml-2.0/login.c
@@ -126,7 +126,7 @@ lasso_saml20_login_build_authn_request_msg(LassoLogin *login, LassoProvider *rem
return critical_error(LASSO_PROFILE_ERROR_UNKNOWN_PROFILE_URL);
}
- profile->msg_url = g_strdup_printf("%s?%s", url, query);
+ profile->msg_url = lasso_concat_url_query(url, query);
profile->msg_body = NULL;
g_free(query);
g_free(url);
@@ -150,8 +150,9 @@ lasso_saml20_login_build_authn_request_msg(LassoLogin *login, LassoProvider *rem
url = lasso_provider_get_metadata_one(
remote_provider, "SingleSignOnService HTTP-Artifact");
if (login->http_method == LASSO_HTTP_METHOD_ARTIFACT_GET) {
- profile->msg_url = g_strdup_printf("%s?SAMLart=%s",
- url, artifact);
+ gchar *query = g_strdup_printf("SAMLart=%s", artifact);
+ profile->msg_url = lasso_concat_url_query(url, query);
+ g_free(query);
} else {
/* TODO: ARTIFACT POST */
}
@@ -522,7 +523,9 @@ lasso_saml20_login_build_artifact_msg(LassoLogin *login, LassoHttpMethod http_me
artifact = lasso_saml20_profile_generate_artifact(profile, 1);
login->assertionArtifact = g_strdup(artifact);
if (http_method == LASSO_HTTP_METHOD_ARTIFACT_GET) {
- profile->msg_url = g_strdup_printf("%s?SAMLart=%s", url, artifact);
+ gchar *query = g_strdup_printf("SAMLart=%s", artifact);
+ profile->msg_url = lasso_concat_url_query(url, query);
+ g_free(query);
/* XXX: RelayState */
} else {
/* XXX: ARTIFACT POST */
diff --git a/lasso/saml-2.0/logout.c b/lasso/saml-2.0/logout.c
index 319494b1..6b4998ca 100644
--- a/lasso/saml-2.0/logout.c
+++ b/lasso/saml-2.0/logout.c
@@ -184,9 +184,10 @@ lasso_saml20_logout_build_request_msg(LassoLogout *logout, LassoProvider *remote
g_free(url);
return critical_error(LASSO_PROFILE_ERROR_BUILDING_QUERY_FAILED);
}
- profile->msg_url = g_strdup_printf("%s?%s", url, query);
+ profile->msg_url = lasso_concat_url_query(url, query);
profile->msg_body = NULL;
g_free(url);
+ g_free(query);
return 0;
}
@@ -484,7 +485,7 @@ lasso_saml20_logout_build_response_msg(LassoLogout *logout)
g_free(url);
return critical_error(LASSO_PROFILE_ERROR_BUILDING_QUERY_FAILED);
}
- profile->msg_url = g_strdup_printf("%s?%s", url, query);
+ profile->msg_url = lasso_concat_url_query(url, query);
profile->msg_body = NULL;
g_free(url);
g_free(query);
diff --git a/lasso/saml-2.0/name_id_management.c b/lasso/saml-2.0/name_id_management.c
index 41b52570..4df6a75d 100644
--- a/lasso/saml-2.0/name_id_management.c
+++ b/lasso/saml-2.0/name_id_management.c
@@ -165,7 +165,7 @@ lasso_name_id_management_build_request_msg(LassoNameIdManagement *name_id_manage
g_free(url);
return critical_error(LASSO_PROFILE_ERROR_BUILDING_QUERY_FAILED);
}
- profile->msg_url = g_strdup_printf("%s?%s", url, query);
+ profile->msg_url = lasso_concat_url_query(url, query);
profile->msg_body = NULL;
g_free(url);
g_free(query);
@@ -403,7 +403,7 @@ lasso_name_id_management_build_response_msg(LassoNameIdManagement *name_id_manag
g_free(url);
return critical_error(LASSO_PROFILE_ERROR_BUILDING_QUERY_FAILED);
}
- profile->msg_url = g_strdup_printf("%s?%s", url, query);
+ profile->msg_url = lasso_concat_url_query(url, query);
profile->msg_body = NULL;
g_free(url);
g_free(query);
diff --git a/lasso/xml/private.h b/lasso/xml/private.h
index e614d954..267bde4b 100644
--- a/lasso/xml/private.h
+++ b/lasso/xml/private.h
@@ -119,6 +119,8 @@ gchar* lasso_node_build_deflated_query(LassoNode *node);
gboolean lasso_node_init_from_deflated_query_part(LassoNode *node, char *deflate_string);
+char* lasso_concat_url_query(char *url, char *query);
+
void _debug(GLogLevelFlags level, const char *filename, int line,
const char *function, const char *format, ...);
diff --git a/lasso/xml/tools.c b/lasso/xml/tools.c
index 56c89438..de00d20c 100644
--- a/lasso/xml/tools.c
+++ b/lasso/xml/tools.c
@@ -785,3 +785,13 @@ lasso_node_init_from_deflated_query_part(LassoNode *node, char *deflate_string)
return TRUE;
}
+char*
+lasso_concat_url_query(char *url, char *query)
+{
+ if (strchr(url, '?')) {
+ return g_strdup_printf("%s&%s", url, query);
+ } else {
+ return g_strdup_printf("%s?%s", url, query);
+ }
+}
+