summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNicolas Clapies <nclapies@entrouvert.com>2004-07-23 16:11:06 +0000
committerNicolas Clapies <nclapies@entrouvert.com>2004-07-23 16:11:06 +0000
commit15673bbca7f948145304232ec154c0d74694e65e (patch)
tree93fd2625cfacb3027f38d13edb437334f4ab1b6d
parent7e0e90827a4e74ec7fc1379f0230954a298fabda (diff)
downloadlasso-15673bbca7f948145304232ec154c0d74694e65e.tar.gz
lasso-15673bbca7f948145304232ec154c0d74694e65e.tar.xz
lasso-15673bbca7f948145304232ec154c0d74694e65e.zip
fix : process of a logout request at idp
-rw-r--r--lasso/id-ff/logout.c26
1 files changed, 17 insertions, 9 deletions
diff --git a/lasso/id-ff/logout.c b/lasso/id-ff/logout.c
index 34685ebb..1e30214f 100644
--- a/lasso/id-ff/logout.c
+++ b/lasso/id-ff/logout.c
@@ -254,6 +254,7 @@ lasso_logout_process_request_msg(LassoLogout *logout,
LassoNode *statusCode;
LassoNodeClass *statusCode_class;
xmlChar *remote_providerID;
+ int nb_remote_providers;
g_return_val_if_fail(LASSO_IS_LOGOUT(logout), -1);
g_return_val_if_fail(request_msg!=NULL, -2);
@@ -344,15 +345,18 @@ lasso_logout_process_request_msg(LassoLogout *logout,
lasso_user_remove_assertion(profileContext->user, profileContext->remote_providerID);
break;
case lassoProviderTypeIdp:
- /* at idp, backup original infos of the sp requester */
- logout->first_request = profileContext->request;
- profileContext->request = NULL;
+ /* if more than one sp registered, backup original infos of the sp requester */
+ nb_remote_providers = profileContext->user->assertion_providerIDs->len;
+ if(nb_remote_providers>1){
+ logout->first_request = profileContext->request;
+ profileContext->request = NULL;
- logout->first_response = profileContext->response;
- profileContext->response = NULL;
-
- logout->first_remote_providerID = profileContext->remote_providerID;
- profileContext->remote_providerID = NULL;
+ logout->first_response = profileContext->response;
+ profileContext->response = NULL;
+
+ logout->first_remote_providerID = profileContext->remote_providerID;
+ profileContext->remote_providerID = NULL;
+ }
break;
default:
@@ -416,10 +420,14 @@ lasso_logout_process_response_msg(LassoLogout *logout,
lasso_user_remove_assertion(profileContext->user, profileContext->remote_providerID);
debug(INFO, "Remove assertion for %s\n", profileContext->remote_providerID);
- /* if no more assertion for other providers, remove assertion of the original provider */
+ /* if no more assertion for other providers, remove assertion of the original provider and restore the original requester infos */
if(profileContext->user->assertion_providerIDs->len == 1){
debug(WARNING, "remove assertion of the original provider\n");
lasso_user_remove_assertion(profileContext->user, logout->first_remote_providerID);
+
+ profileContext->remote_providerID = logout->first_remote_providerID;
+ profileContext->request = logout->first_request;
+ profileContext->response = logout->first_response;
}
break;