summaryrefslogtreecommitdiffstats
path: root/auth_mellon_handler.c
diff options
context:
space:
mode:
Diffstat (limited to 'auth_mellon_handler.c')
-rw-r--r--auth_mellon_handler.c25
1 files changed, 22 insertions, 3 deletions
diff --git a/auth_mellon_handler.c b/auth_mellon_handler.c
index 2148c7d..cfb3327 100644
--- a/auth_mellon_handler.c
+++ b/auth_mellon_handler.c
@@ -293,11 +293,30 @@ static int am_handle_logout_request(request_rec *r, LassoLogout *logout)
*/
static int am_handle_logout_response(request_rec *r, LassoLogout *logout)
{
- ap_log_rerror(APLOG_MARK, APLOG_WARNING, 0, r,
- "TODO: Handle logout response.");
+ gint res;
+ am_cache_entry_t *session;
+
+ res = lasso_logout_process_response_msg(logout, r->args);
+ if(res != 0) {
+ ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
+ "Unable to process logout response."
+ " Lasso error: [%i] %s", res, lasso_strerror(res));
+
+ lasso_logout_destroy(logout);
+ return HTTP_BAD_REQUEST;
+ }
lasso_logout_destroy(logout);
- return HTTP_INTERNAL_SERVER_ERROR;
+
+ /* Delete the session. */
+ session = am_get_request_session(r);
+ if(session != NULL) {
+ am_delete_request_session(r, session);
+ }
+
+ /* TODO: Customizable logout location. */
+ apr_table_setn(r->headers_out, "Location", "/");
+ return HTTP_SEE_OTHER;
}