Author: nandana
Date: Wed Oct  1 21:09:53 2008
New Revision: 701003

URL: http://svn.apache.org/viewvc?rev=701003&view=rev
Log:
RAMPART-183 Fixing the error in validating signed parts / elements 

Modified:
    
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/PolicyBasedResultsValidator.java
    
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/errors.properties
    
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/util/RampartUtil.java

Modified: 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/PolicyBasedResultsValidator.java
URL: 
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/PolicyBasedResultsValidator.java?rev=701003&r1=701002&r2=701003&view=diff
==============================================================================
--- 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/PolicyBasedResultsValidator.java
 (original)
+++ 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/PolicyBasedResultsValidator.java
 Wed Oct  1 21:09:53 2008
@@ -29,6 +29,8 @@
 import org.apache.ws.secpolicy.model.Token;
 import org.apache.ws.secpolicy.model.UsernameToken;
 import org.apache.ws.secpolicy.model.X509Token;
+import org.apache.ws.security.SOAP11Constants;
+import org.apache.ws.security.SOAP12Constants;
 import org.apache.ws.security.WSConstants;
 import org.apache.ws.security.WSDataRef;
 import org.apache.ws.security.WSEncryptionPart;
@@ -39,6 +41,8 @@
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
 
+import com.ibm.wsdl.extensions.soap.SOAPConstants;
+
 import java.math.BigInteger;
 import java.security.cert.X509Certificate;
 import java.util.ArrayList;
@@ -502,20 +506,44 @@
         for(int i=0; i<signatureParts.size(); i++) {
             WSEncryptionPart wsep = (WSEncryptionPart) signatureParts.get( i );
             
-            Element headerElement = (Element) WSSecurityUtil.findElement(
-                    envelope, wsep.getName(), wsep.getNamespace() );
-            if( headerElement == null ) {
-                // The signedpart header we are checking is not present in 
Soap header - this is allowed
-                continue;
-            }
+            if (wsep.getType() == WSConstants.PART_TYPE_BODY) {
+                
+                Element body;
+                
+                if 
(WSConstants.URI_SOAP11_ENV.equals(envelope.getNamespaceURI())) {
+                    body = WSSecurityUtil.findBodyElement(rmd.getDocument(), 
new SOAP11Constants());
+                } else {
+                    body = WSSecurityUtil.findBodyElement(rmd.getDocument(), 
new SOAP12Constants());
+                }
+                
+                if (!actuallySigned.contains(body)) {
+                    // soap body is not signed
+                    throw new RampartException("bodyNotSigned");
+                }
             
-            // header element present - verify that it is part of signature
-            if( actuallySigned.contains( headerElement) ) {
-                continue;
-            }
+            } else if (wsep.getType() == WSConstants.PART_TYPE_HEADER || 
+                    wsep.getType() == WSConstants.PART_TYPE_ELEMENT) {         
   
+               
+                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
+                    continue;
+                }
+                
+                // header or the element present in soap envelope - verify 
that it is part of signature
+                if( actuallySigned.contains( element) ) {
+                    continue;
+                }
+                
+                String msg = wsep.getType() == WSConstants.PART_TYPE_HEADER ? 
+                        "signedPartHeaderNotSigned" : 
"signedElementNotSigned"; 
+                
+                // header or the element defined in policy is present but not 
signed
+                throw new RampartException(msg, new String[] { 
wsep.getNamespace()+":"+wsep.getName() });
             
-            // header defined in policy is present but not signed
-            throw new RampartException("signedPartHeaderNotSigned", new 
String[] { wsep.getName() });
+            } 
         }
     }
 

Modified: 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/errors.properties
URL: 
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/errors.properties?rev=701003&r1=701002&r2=701003&view=diff
==============================================================================
--- 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/errors.properties
 (original)
+++ 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/errors.properties
 Wed Oct  1 21:09:53 2008
@@ -91,6 +91,8 @@
 unexprectedEncryptedPart = Unexpected encrypted data found, no encryption 
required
 encryptionMissing = Expected encrypted part missing
 signedPartHeaderNotSigned = Soap Header must be signed : {0}
+signedElementNotSigned = Element must be signed : {0}
+bodyNotSigned = Soap Body must be signed 
 unexprectedSignature = Unexpected signature
 invalidTransport = Expected transport is "https" but incoming transport found 
: \"{0}\" 
 requiredElementsMissing = Required Elements not found in the incoming message 
: {0}
\ No newline at end of file

Modified: 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/util/RampartUtil.java
URL: 
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/util/RampartUtil.java?rev=701003&r1=701002&r2=701003&view=diff
==============================================================================
--- 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/util/RampartUtil.java
 (original)
+++ 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/util/RampartUtil.java
 Wed Oct  1 21:09:53 2008
@@ -22,6 +22,8 @@
 import org.apache.axiom.om.OMFactory;
 import org.apache.axiom.om.OMNamespace;
 import org.apache.axiom.om.xpath.AXIOMXPath;
+import org.apache.axiom.soap.SOAP11Constants;
+import org.apache.axiom.soap.SOAP12Constants;
 import org.apache.axiom.soap.SOAPEnvelope;
 import org.apache.axiom.soap.SOAPHeader;
 import org.apache.axiom.soap.SOAPHeaderBlock;
@@ -654,6 +656,8 @@
                 // Set request action
                 client.setAction(action);
                 
+                client.setVersion(rmd.getWstVersion());
+                
                 client.setRstTemplate(rstTemplate);
         
                 // Set crypto information
@@ -694,7 +698,12 @@
                 client.setOptions(options);
                 
                 //Set soap version
-                
client.setSoapVersion(msgContext.getOptions().getSoapVersionURI());
+                if (msgContext.isSOAP11()) {
+                    
client.setSoapVersion(SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI);
+                } else {
+                    
client.setSoapVersion(SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI); 
+                }
+                
                 
                 //Make the request
                 org.apache.rahas.Token rst = 
@@ -922,7 +931,7 @@
         // check body
         if(includeBody) {
             if( sign ) {
-                result.add(new 
WSEncryptionPart(addWsuIdToElement(envelope.getBody())));
+                result.add(new 
WSEncryptionPart(addWsuIdToElement(envelope.getBody()),null,WSConstants.PART_TYPE_BODY));
             } else {
                 result.add(new 
WSEncryptionPart(addWsuIdToElement(envelope.getBody()), "Content", 
WSConstants.PART_TYPE_BODY));
             }
@@ -950,7 +959,7 @@
                         found.add( e );
                         
                         if( sign ) {
-                            result.add(new WSEncryptionPart(e.getLocalName(), 
wsep.getNamespace(), "Content"));
+                            result.add(new WSEncryptionPart(e.getLocalName(), 
wsep.getNamespace(), "Content", WSConstants.PART_TYPE_HEADER));
                         } else {
                             
                             WSEncryptionPart encryptedHeader = new 
WSEncryptionPart(e.getLocalName(), wsep.getNamespace(), "Element", 
WSConstants.PART_TYPE_HEADER);
@@ -1011,10 +1020,10 @@
                                OMElement e = (OMElement)nodesIter.next();
                                
                                if (sign) {
-                                       result.add(new 
WSEncryptionPart(e.getLocalName(), e.getNamespace().getNamespaceURI(), 
"Content"));
+                                       result.add(new 
WSEncryptionPart(e.getLocalName(), e.getNamespace().getNamespaceURI(), 
"Content", WSConstants.PART_TYPE_ELEMENT));
                                } else {
                                        
-                                       WSEncryptionPart encryptedElem = new 
WSEncryptionPart(e.getLocalName(), e.getNamespace().getNamespaceURI(), 
"Element");
+                                       WSEncryptionPart encryptedElem = new 
WSEncryptionPart(e.getLocalName(), e.getNamespace().getNamespaceURI(), 
"Element",WSConstants.PART_TYPE_ELEMENT);
                                        OMAttribute wsuId = e.getAttribute(new 
QName(WSConstants.WSU_NS, "Id"));
                                        
                                        if ( wsuId != null ) {


Reply via email to