diff options
| -rw-r--r-- | lasso/id-ff/logout.c | 47 |
1 files changed, 34 insertions, 13 deletions
diff --git a/lasso/id-ff/logout.c b/lasso/id-ff/logout.c index e006c23f..661fbf1f 100644 --- a/lasso/id-ff/logout.c +++ b/lasso/id-ff/logout.c @@ -133,6 +133,7 @@ lasso_logout_init_request(LassoLogout *logout, xmlChar *content, *nameQualifier, *format; g_return_val_if_fail(LASSO_IS_LOGOUT(logout), -1); + g_return_val_if_fail(remote_providerID!=NULL, -2); profileContext = LASSO_PROFILE_CONTEXT(logout); @@ -142,27 +143,32 @@ lasso_logout_init_request(LassoLogout *logout, identity = lasso_user_get_identity(profileContext->user, profileContext->remote_providerID); if(identity==NULL){ debug(ERROR, "error, identity not found\n"); - return(-2); + return(-3); } /* get the name identifier (!!! depend on the provider type : SP or IDP !!!)*/ switch(profileContext->provider_type){ case lassoProfileContextServiceProviderType: + printf("service provider\n"); nameIdentifier = LASSO_NODE(lasso_identity_get_local_nameIdentifier(identity)); if(!nameIdentifier) nameIdentifier = LASSO_NODE(lasso_identity_get_remote_nameIdentifier(identity)); break; case lassoProfileContextIdentityProviderType: + printf("identity provider\n"); /* get the next assertion ( next authenticated service provider ) */ nameIdentifier = LASSO_NODE(lasso_identity_get_remote_nameIdentifier(identity)); if(!nameIdentifier) nameIdentifier = LASSO_NODE(lasso_identity_get_local_nameIdentifier(identity)); break; + default: + debug(ERROR, "Unknown provider type\n"); + return(-4); } if(!nameIdentifier){ debug(ERROR, "error, name identifier not found\n"); - return(-3); + return(-5); } debug(DEBUG, "name identifier : %s\n", lasso_node_export(nameIdentifier)); @@ -175,6 +181,8 @@ lasso_logout_init_request(LassoLogout *logout, nameQualifier, format); + g_return_val_if_fail(profileContext->request!=NULL, -6); + return(0); } @@ -190,6 +198,9 @@ lasso_logout_handle_request_msg(LassoLogout *logout, LassoNodeClass *statusCode_class; xmlChar *remote_providerID; + g_return_val_if_fail(LASSO_IS_LOGOUT(logout), -1); + g_return_val_if_fail(request_msg!=NULL, -2); + profileContext = LASSO_PROFILE_CONTEXT(logout); switch(request_method){ @@ -206,7 +217,7 @@ lasso_logout_handle_request_msg(LassoLogout *logout, break; default: debug(ERROR, "Unknown request method\n"); - return(-1); + return(-3); } /* set the remote provider id from the request */ @@ -218,13 +229,15 @@ lasso_logout_handle_request_msg(LassoLogout *logout, lassoSamlStatusCodeSuccess, profileContext->request); + g_return_val_if_fail(profileContext->response!=NULL, -4); + statusCode = lasso_node_get_child(profileContext->response, "StatusCode", NULL); statusCode_class = LASSO_NODE_GET_CLASS(statusCode); nameIdentifier = lasso_node_get_child(profileContext->request, "NameIdentifier", NULL); if(nameIdentifier==NULL){ statusCode_class->set_prop(statusCode, "Value", lassoLibStatusCodeFederationDoesNotExist); - return(-2); + return(-5); } remote_providerID = lasso_node_get_child_content(profileContext->request, "ProviderID", NULL); @@ -233,45 +246,51 @@ lasso_logout_handle_request_msg(LassoLogout *logout, identity = lasso_user_get_identity(profileContext->user, remote_providerID); if(identity==NULL){ statusCode_class->set_prop(statusCode, "Value", lassoLibStatusCodeFederationDoesNotExist); - return(-3); + return(-6); } if(lasso_identity_verify_nameIdentifier(identity, nameIdentifier)==FALSE){ statusCode_class->set_prop(statusCode, "Value", lassoLibStatusCodeFederationDoesNotExist); - return(-4); + return(-7); } /* verify authentication (if ok, delete assertion) */ assertion = lasso_user_get_assertion(profileContext->user, remote_providerID); if(assertion==NULL){ statusCode_class->set_prop(statusCode, "Value", lassoSamlStatusCodeRequestDenied); - return(-5); + return(-8); } return(0); } gint -lasso_logout_handle_response_msg(LassoLogout *logout, - gchar *response_msg, - lassoHttpMethods response_method) +lasso_logout_handle_response_msg(LassoLogout *logout, + gchar *response_msg, + lassoHttpMethods response_method) { LassoProfileContext *profileContext; xmlChar *statusCodeValue; LassoNode *statusCode; + g_return_val_if_fail(LASSO_IS_LOGOUT(logout), -1); + g_return_val_if_fail(response_msg!=NULL, -2); + profileContext = LASSO_PROFILE_CONTEXT(logout); /* parse LogoutResponse */ switch(response_method){ case lassoHttpMethodSoap: profileContext->response = lasso_logout_response_new_from_soap(response_msg); + default: + debug(ERROR, "Unknown response method\n"); + return(-3); } statusCode = lasso_node_get_child(profileContext->response, "StatusCode", NULL); statusCodeValue = lasso_node_get_attr_value(statusCode, "Value"); if(!xmlStrEqual(statusCodeValue, lassoSamlStatusCodeSuccess)){ - return(-1); + return(-4); } return(0); @@ -282,11 +301,13 @@ lasso_logout_handle_response_msg(LassoLogout *logout, /*****************************************************************************/ static void -lasso_logout_instance_init(LassoLogout *logout){ +lasso_logout_instance_init(LassoLogout *logout) +{ } static void -lasso_logout_class_init(LassoLogoutClass *klass) { +lasso_logout_class_init(LassoLogoutClass *klass) +{ } GType lasso_logout_get_type() { |
