summaryrefslogtreecommitdiffstats
path: root/lasso
diff options
context:
space:
mode:
authorFrederic Peters <fpeters@entrouvert.com>2004-10-29 13:21:46 +0000
committerFrederic Peters <fpeters@entrouvert.com>2004-10-29 13:21:46 +0000
commita4cd7a5a33c888c1b05fc3d1805c63448f85af80 (patch)
treee3f9417679625a4c97e1b2da3481f90d563a6f8c /lasso
parent7b4f71c992b1f5b81d19ec1c63888c59e0a5566c (diff)
downloadlasso-a4cd7a5a33c888c1b05fc3d1805c63448f85af80.tar.gz
lasso-a4cd7a5a33c888c1b05fc3d1805c63448f85af80.tar.xz
lasso-a4cd7a5a33c888c1b05fc3d1805c63448f85af80.zip
syncing other functions
Diffstat (limited to 'lasso')
-rw-r--r--lasso/id-ff/login.c80
1 files changed, 31 insertions, 49 deletions
diff --git a/lasso/id-ff/login.c b/lasso/id-ff/login.c
index 929bbacb..49798618 100644
--- a/lasso/id-ff/login.c
+++ b/lasso/id-ff/login.c
@@ -770,8 +770,6 @@ gint
lasso_login_build_request_msg(LassoLogin *login)
{
LassoProvider *remote_provider;
- gint ret = 0;
- GError *err = NULL;
g_return_val_if_fail(LASSO_IS_LOGIN(login), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ);
@@ -784,24 +782,15 @@ lasso_login_build_request_msg(LassoLogin *login)
#endif
LASSO_PROFILE(login)->msg_body = lasso_node_export_to_soap(LASSO_PROFILE(login)->request);
- /* get msg_url (SOAP Endpoint) */
remote_provider = g_hash_table_lookup(LASSO_PROFILE(login)->server->providers,
LASSO_PROFILE(login)->remote_providerID);
- if (err != NULL) {
- goto done;
+ if (remote_provider == NULL) {
+ message(G_LOG_LEVEL_CRITICAL, "Remote provider not found");
+ return -1;
}
LASSO_PROFILE(login)->msg_url = lasso_provider_get_metadata_one(
remote_provider, "SoapEndpoint");
- if (err != NULL) {
- goto done;
- }
return 0;
-
-done:
- message(G_LOG_LEVEL_CRITICAL, err->message);
- ret = err->code;
- g_error_free(err);
- return ret;
}
/**
@@ -844,12 +833,14 @@ lasso_login_build_response_msg(LassoLogin *login, gchar *remote_providerID)
/* get assertion in session and add it in response */
assertion = lasso_session_get_assertion(LASSO_PROFILE(login)->session,
LASSO_PROFILE(login)->remote_providerID);
- if (assertion == NULL) {
- /* FIXME should this message output by lasso_session_get_assertion () ? */
+ if (assertion) {
+ LASSO_SAMLP_RESPONSE(LASSO_PROFILE(login)->response)->Assertion =
+ g_object_ref(assertion);
+ } else {
+ /* FIXME should this message output by
+ * lasso_session_get_assertion () ? */
message(G_LOG_LEVEL_CRITICAL, "Assertion not found in session");
}
- LASSO_SAMLP_RESPONSE(LASSO_PROFILE(login)->response)->Assertion =
- g_object_ref(assertion);
}
} else {
lasso_profile_set_response_status(LASSO_PROFILE(login),
@@ -921,38 +912,35 @@ lasso_login_init_request(LassoLogin *login, gchar *response_msg,
gint ret = 0;
int i;
char *artifact_b64, *provider_succint_id_b64;
- char provider_succint_id[21], assertion_handle[21];
+ char provider_succint_id[21];
char artifact[43];
LassoSamlpRequestAbstract *request;
g_return_val_if_fail(LASSO_IS_LOGIN(login), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ);
g_return_val_if_fail(response_msg != NULL, LASSO_PARAM_ERROR_INVALID_VALUE);
+ if (response_http_method != LASSO_HTTP_METHOD_REDIRECT &&
+ response_http_method != LASSO_HTTP_METHOD_POST) {
+ message(G_LOG_LEVEL_CRITICAL,
+ lasso_strerror(LASSO_PROFILE_ERROR_INVALID_HTTP_METHOD));
+ return LASSO_PROFILE_ERROR_INVALID_HTTP_METHOD;
+ }
+
/* rebuild response (artifact) */
- switch (response_http_method) {
- case LASSO_HTTP_METHOD_REDIRECT: /* artifact by REDIRECT */
- query_fields = urlencoded_to_strings(response_msg);
- for (i=0; query_fields[i]; i++) {
- if (strncmp(query_fields[i], "SAMLart=", 8) != 0) {
- free(query_fields[i]);
- continue;
- }
- artifact_b64 = strdup(query_fields[i]+8);
+ if (response_http_method == LASSO_HTTP_METHOD_REDIRECT) {
+ query_fields = urlencoded_to_strings(response_msg);
+ for (i=0; query_fields[i]; i++) {
+ if (strncmp(query_fields[i], "SAMLart=", 8) != 0) {
free(query_fields[i]);
+ continue;
}
- free(query_fields);
- break;
- case LASSO_HTTP_METHOD_POST:
- /* artifact by POST */
- g_assert_not_reached();
- /* XXX: artifact code should be moved in this file
- response = lasso_artifact_new_from_lares(response_msg, NULL);
- */
- break;
- default:
- message(G_LOG_LEVEL_CRITICAL,
- lasso_strerror(LASSO_PROFILE_ERROR_INVALID_HTTP_METHOD));
- return LASSO_PROFILE_ERROR_INVALID_HTTP_METHOD;
+ artifact_b64 = strdup(query_fields[i]+8);
+ free(query_fields[i]);
+ }
+ free(query_fields);
+ }
+ if (response_http_method == LASSO_HTTP_METHOD_POST) {
+ artifact_b64 = strdup(response_msg);
}
i = xmlSecBase64Decode(artifact_b64, artifact, 43);
@@ -968,8 +956,6 @@ lasso_login_init_request(LassoLogin *login, gchar *response_msg,
memcpy(provider_succint_id, artifact+2, 20);
provider_succint_id[20] = 0;
- memcpy(assertion_handle, artifact+22, 20);
- assertion_handle[20] = 0;
provider_succint_id_b64 = xmlSecBase64Encode(provider_succint_id, 20, 0);
@@ -1024,18 +1010,14 @@ lasso_login_init_idp_initiated_authn_request(LassoLogin *login,
}
/* build self-addressed lib:AuthnRequest */
- request = lasso_lib_authn_request_new(); /* XXX */
- LASSO_SAMLP_REQUEST_ABSTRACT(request)->RequestID = lasso_build_unique_id(32);
+ request = lasso_lib_authn_request_new();
+ /* no RequestID attribute or it would be used in response assertion */
LASSO_SAMLP_REQUEST_ABSTRACT(request)->MajorVersion = LASSO_LIB_MAJOR_VERSION_N;
LASSO_SAMLP_REQUEST_ABSTRACT(request)->MinorVersion = LASSO_LIB_MINOR_VERSION_N;
LASSO_SAMLP_REQUEST_ABSTRACT(request)->IssueInstant = lasso_get_current_time();
request->ProviderID = g_strdup(LASSO_PROFILE(login)->remote_providerID);
-
request->NameIDPolicy = LASSO_LIB_NAMEID_POLICY_TYPE_ANY;
- /* remove RequestID attribute else it would be used in response assertion */
- LASSO_SAMLP_REQUEST_ABSTRACT(LASSO_PROFILE(login)->request)->RequestID = NULL;
-
LASSO_PROFILE(login)->request = LASSO_NODE(request);
return ret;