summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBenjamin Dauvergne <bdauvergne@entrouvert.com>2008-08-01 14:11:49 +0000
committerBenjamin Dauvergne <bdauvergne@entrouvert.com>2008-08-01 14:11:49 +0000
commitd82175f9939f97669c242f8cfd8b47bb4842be0d (patch)
treecb9876b9be35b6daf17a6d7ac1493c51c048489d
parent4a8ba28e2bcde906bf76f7f2fd760eb5d3676701 (diff)
downloadlasso-d82175f9939f97669c242f8cfd8b47bb4842be0d.tar.gz
lasso-d82175f9939f97669c242f8cfd8b47bb4842be0d.tar.xz
lasso-d82175f9939f97669c242f8cfd8b47bb4842be0d.zip
Match is:RedirectRequest and set msg_url to the url to redirect to
-rw-r--r--lasso/id-wsf/wsf_profile.c30
1 files changed, 25 insertions, 5 deletions
diff --git a/lasso/id-wsf/wsf_profile.c b/lasso/id-wsf/wsf_profile.c
index 608d66d6..6d6dc623 100644
--- a/lasso/id-wsf/wsf_profile.c
+++ b/lasso/id-wsf/wsf_profile.c
@@ -50,6 +50,10 @@
#include <lasso/xml/ds_key_info.h>
#include <lasso/xml/ds_key_value.h>
#include <lasso/xml/ds_rsa_key_value.h>
+#include <lasso/xml/soap_fault.h>
+#include <lasso/xml/soap_detail.h>
+#include <lasso/xml/is_redirect_request.h>
+
#include <lasso/id-ff/server.h>
#include <lasso/id-ff/providerprivate.h>
@@ -813,9 +817,9 @@ exit:
gint
lasso_wsf_profile_process_soap_response_msg(LassoWsfProfile *profile, const gchar *message)
{
- xmlDoc *doc;
- xmlNode *root;
- LassoSoapEnvelope *envelope;
+ xmlDoc *doc = NULL;
+ xmlNode *root = NULL;
+ LassoSoapEnvelope *envelope = NULL;
gint rc = 0;
g_return_val_if_fail(LASSO_IS_WSF_PROFILE(profile),
@@ -842,9 +846,25 @@ lasso_wsf_profile_process_soap_response_msg(LassoWsfProfile *profile, const gcha
rc = LASSO_PROFILE_ERROR_MISSING_RESPONSE;
}
/* XXX: Validate MessageID */
- /* Signal soap fault specifically */
+ /* Signal soap fault specifically,
+ * find soap redirects. */
if (LASSO_IS_SOAP_FAULT(profile->response)) {
- rc = LASSO_WSF_PROFILE_ERROR_SOAP_FAULT;
+ LassoSoapFault *fault = LASSO_SOAP_FAULT(profile->response);
+ if (LASSO_IS_SOAP_DETAIL(fault->Detail)) {
+ LassoSoapDetail *detail = LASSO_SOAP_DETAIL(fault->Detail);
+ GList *iter = detail->any;
+ for (; iter; iter = g_list_next(iter)) {
+ if (LASSO_IS_IS_REDIRECT_REQUEST(iter->data)) {
+ LassoIsRedirectRequest *redirect = LASSO_IS_REDIRECT_REQUEST(iter->data);
+ g_assign_string(profile->msg_url, redirect->redirectURL);
+ rc = LASSO_SOAP_FAULT_REDIRECT_REQUEST;
+ }
+ }
+
+ }
+ if (rc == 0) {
+ rc = LASSO_WSF_PROFILE_ERROR_SOAP_FAULT;
+ }
}
exit:
if (envelope) {