diff options
| author | Frederic Peters <fpeters@entrouvert.com> | 2006-11-07 12:44:32 +0000 |
|---|---|---|
| committer | Frederic Peters <fpeters@entrouvert.com> | 2006-11-07 12:44:32 +0000 |
| commit | aec4544976d306992ece769faeb55f8850b51dcb (patch) | |
| tree | 16b663f41bcf4e1a5e94976af388d22e88cb7f79 | |
| parent | 0b9baa3518d5cac61d17d3c475ad68f79ba22b93 (diff) | |
| download | lasso-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.c | 7 | ||||
| -rw-r--r-- | lasso/id-ff/login.c | 14 | ||||
| -rw-r--r-- | lasso/id-ff/logout.c | 6 | ||||
| -rw-r--r-- | lasso/id-ff/name_registration.c | 4 | ||||
| -rw-r--r-- | lasso/saml-2.0/login.c | 11 | ||||
| -rw-r--r-- | lasso/saml-2.0/logout.c | 5 | ||||
| -rw-r--r-- | lasso/saml-2.0/name_id_management.c | 4 | ||||
| -rw-r--r-- | lasso/xml/private.h | 2 | ||||
| -rw-r--r-- | lasso/xml/tools.c | 10 |
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); + } +} + |
