From c0c06ac51a8ff6195725e4936209b090a401eea4 Mon Sep 17 00:00:00 2001 From: cantor Date: Wed, 12 Jan 2011 17:06:00 +0000 Subject: [PATCH] https://bugs.internet2.edu/jira/browse/SSPCPP-334 git-svn-id: https://svn.shibboleth.net/cpp-sp/branches/REL_2@3391 cb58f699-b61c-0410-a6fe-9272a202ed29 --- shibsp/impl/XMLRequestMapper.cpp | 44 ++++++++++++++++++++++------------------ 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/shibsp/impl/XMLRequestMapper.cpp b/shibsp/impl/XMLRequestMapper.cpp index 9059491..fabfa0d 100644 --- a/shibsp/impl/XMLRequestMapper.cpp +++ b/shibsp/impl/XMLRequestMapper.cpp @@ -446,30 +446,34 @@ const Override* Override::locate(const HTTPRequest& request) const } // Finally, check for query string matches. This is another "unrolled" recursive descent in a loop. - bool descended; - do { - descended = false; - for (vector< pair< pair,Override*> >::const_iterator q = o->m_queries.begin(); !descended && q != o->m_queries.end(); ++q) { - vector vals; - if (request.getParameters(q->first.first.c_str(), vals)) { - if (q->first.second) { - // We have to match one of the values. - for (vector::const_iterator v = vals.begin(); v != vals.end(); ++v) { - if (q->first.second->matches(*v)) { - o = q->second; - descended = true; - break; + // For now, only check if the method is GET, to avoid consuming POST data. Will need to revise the + // CGIParser API to fix this. + if (strcmp(request.getMethod(), "POST")) { + bool descended; + do { + descended = false; + for (vector< pair< pair,Override*> >::const_iterator q = o->m_queries.begin(); !descended && q != o->m_queries.end(); ++q) { + vector vals; + if (request.getParameters(q->first.first.c_str(), vals)) { + if (q->first.second) { + // We have to match one of the values. + for (vector::const_iterator v = vals.begin(); v != vals.end(); ++v) { + if (q->first.second->matches(*v)) { + o = q->second; + descended = true; + break; + } } } - } - else { - // The simple presence of the parameter is sufficient to match. - o = q->second; - descended = true; + else { + // The simple presence of the parameter is sufficient to match. + o = q->second; + descended = true; + } } } - } - } while (descended); + } while (descended); + } return o; } -- 2.1.4