Author: muthulee
Date: Thu Dec 23 05:49:51 2010
New Revision: 1052172

URL: http://svn.apache.org/viewvc?rev=1052172&view=rev
Log:
Applying the patch by Todd Wolff to fix RAMPART-278. Thank you Todd.


Modified:
    
axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/PolicyBasedResultsValidator.java
    
axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/util/Axis2Util.java

Modified: 
axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/PolicyBasedResultsValidator.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/PolicyBasedResultsValidator.java?rev=1052172&r1=1052171&r2=1052172&view=diff
==============================================================================
--- 
axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/PolicyBasedResultsValidator.java
 (original)
+++ 
axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/PolicyBasedResultsValidator.java
 Thu Dec 23 05:49:51 2010
@@ -31,6 +31,7 @@ import org.apache.ws.security.message.to
 import org.apache.ws.security.util.WSSecurityUtil;
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
 import org.jaxen.XPath;
 import org.jaxen.JaxenException;
 
@@ -555,16 +556,34 @@ public class PolicyBasedResultsValidator
         Vector actuallySigned = new Vector();
         if (actionResults != null) {
             for (int j = 0; j < actionResults.length; j++) {
+                
                 WSSecurityEngineResult actionResult = actionResults[j];
-                Set signedIDs = (Set) actionResult
-                        .get(WSSecurityEngineResult.TAG_SIGNED_ELEMENT_IDS);
-                for (Iterator i = signedIDs.iterator(); i.hasNext();) {
-                    String e = (String) i.next();
-
-                    Element element = WSSecurityUtil.findElementById(envelope, 
e,
-                            WSConstants.WSU_NS);
-                    actuallySigned.add(element);
+                List wsDataRefs = 
(List)actionResult.get(WSSecurityEngineResult.TAG_DATA_REF_URIS);
+                
+                // if header was encrypted before it was signed, protected
+                // element is 'EncryptedHeader.' the actual element is
+                // first child element
+
+                for (Iterator k = wsDataRefs.iterator(); k.hasNext();) {
+                    WSDataRef wsDataRef = (WSDataRef)k.next();
+                    Element protectedElement = wsDataRef.getProtectedElement();
+                    if 
(protectedElement.getLocalName().equals("EncryptedHeader")) {
+                        NodeList nodeList = protectedElement.getChildNodes();
+                        for (int x = 0; x < nodeList.getLength(); x++) {
+                            if (nodeList.item(x).getNodeType() == 
Node.ELEMENT_NODE) {
+                                String ns = 
((Element)nodeList.item(x)).getNamespaceURI();
+                                String ln = 
((Element)nodeList.item(x)).getLocalName();
+                                actuallySigned.add(new QName(ns,ln));
+                                break;
+                            }
+                        } 
+                    } else {
+                        String ns = protectedElement.getNamespaceURI();
+                        String ln = protectedElement.getLocalName();
+                        actuallySigned.add(new QName(ns,ln));
+                    }
                 }
+                
             }
         }
         
@@ -573,15 +592,15 @@ public class PolicyBasedResultsValidator
             
             if (wsep.getType() == WSConstants.PART_TYPE_BODY) {
                 
-                Element body;
+                QName bodyQName;
                 
                 if 
(WSConstants.URI_SOAP11_ENV.equals(envelope.getNamespaceURI())) {
-                    body = WSSecurityUtil.findBodyElement(rmd.getDocument(), 
new SOAP11Constants());
+                    bodyQName = new SOAP11Constants().getBodyQName();
                 } else {
-                    body = WSSecurityUtil.findBodyElement(rmd.getDocument(), 
new SOAP12Constants());
+                    bodyQName = new SOAP12Constants().getBodyQName();
                 }
                 
-                if (!actuallySigned.contains(body) && 
!rmd.getPolicyData().isSignBodyOptional()) {
+                if (!actuallySigned.contains(bodyQName) && 
!rmd.getPolicyData().isSignBodyOptional()) {
                     // soap body is not signed
                     throw new RampartException("bodyNotSigned");
                 }
@@ -591,6 +610,7 @@ public class PolicyBasedResultsValidator
                
                 Element element = (Element) WSSecurityUtil.findElement(
                         envelope, wsep.getName(), wsep.getNamespace() );
+                
                 if( element == null ) {
                     // The signedpart header or element we are checking is not 
present in 
                     // soap envelope - this is allowed
@@ -598,7 +618,7 @@ public class PolicyBasedResultsValidator
                 }
                 
                 // header or the element present in soap envelope - verify 
that it is part of signature
-                if( actuallySigned.contains( element) ) {
+                if( actuallySigned.contains( new 
QName(element.getNamespaceURI(), element.getLocalName())) ) {
                     continue;
                 }
                 

Modified: 
axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/util/Axis2Util.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/util/Axis2Util.java?rev=1052172&r1=1052171&r2=1052172&view=diff
==============================================================================
--- 
axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/util/Axis2Util.java
 (original)
+++ 
axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/util/Axis2Util.java
 Thu Dec 23 05:49:51 2010
@@ -205,7 +205,9 @@ public class Axis2Util {
                                        OMNamespace ns =  (OMNamespace) 
nsIter.next();
                                        header.declareNamespace(ns);
                                }
-                               Iterator children = element.getChildElements();
+                               // retrieve all child nodes (including any text 
nodes)
+                               // and re-attach to header block
+                               Iterator children = element.getChildren();
                                while (children.hasNext()) {
                                        OMNode child = (OMNode)children.next();
                                        child.detach();


Reply via email to