You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-commits@axis.apache.org by am...@apache.org on 2012/02/14 13:16:18 UTC

svn commit: r1243894 - in /axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart: PolicyBasedResultsValidator.java RampartMessageData.java policy/builders/RampartConfigBuilder.java policy/model/RampartConfig.java

Author: amilaj
Date: Tue Feb 14 12:16:18 2012
New Revision: 1243894

URL: http://svn.apache.org/viewvc?rev=1243894&view=rev
Log:
Fixing issue RAMPART-357. Applying the patch provided

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/RampartMessageData.java
    axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/policy/builders/RampartConfigBuilder.java
    axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/policy/model/RampartConfig.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=1243894&r1=1243893&r2=1243894&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 Tue Feb 14 12:16:18 2012
@@ -196,8 +196,9 @@ public class PolicyBasedResultsValidator
          * Perform further checks on the timestamp that was transmitted in the
          * header. 
          * In the following implementation the timestamp is valid if :
-         * Timestamp->Created < 'now' < Timestamp->Expires (Last test already handled by WSS4J)
-         * 
+         * Timestamp->Created < 'now' < Timestamp->Expires.
+         * (Last test handled by WSS4J also if timeStampStrict enabled)
+         *
          * Note: the method verifyTimestamp(Timestamp) allows custom
          * implementations with other validation algorithms for subclasses.
          */
@@ -648,27 +649,45 @@ public class PolicyBasedResultsValidator
                         ((rpd.getInitiatorToken() != null && rmd.isInitiator())
                                 || rpd.getRecipientToken() != null && !rmd.isInitiator()));
     }
-    
+
 
     /*
-     * Verify that ts->Created is before 'now'
-     * - testing that timestamp has not expired ('now' is before ts->Expires) is handled earlier by WSS4J
-     * TODO must write unit tests
-     */
+    * Verify whether timestamp of the message is valid.
+    * If timeStampStrict is enabled in rampartConfig; testing of timestamp has not expired
+    * ('now' is before ts->Expires) is also handled earlier by WSS4J without timeskew.
+    * TODO must write unit tests
+    */
     protected boolean verifyTimestamp(Timestamp timestamp, RampartMessageData rmd) throws RampartException {
 
+        long maxSkew = RampartUtil.getTimestampMaxSkew(rmd);
+
+        //Verify that ts->Created is before 'now'
         Date createdTime = timestamp.getCreated();
         if (createdTime != null) {
             long now = Calendar.getInstance().getTimeInMillis();
 
-            // adjust 'now' with allowed timeskew 
-            long maxSkew = RampartUtil.getTimestampMaxSkew( rmd );
-            if( maxSkew > 0 ) {
+            //calculate the tolerance limit for timeskew of the 'Created' in timestamp
+            if (maxSkew > 0) {
                 now += (maxSkew * 1000);
             }
-            
+
             // fail if ts->Created is after 'now'
-            if( createdTime.getTime() > now ) {
+            if (createdTime.getTime() > now) {
+                return false;
+            }
+        }
+
+        //Verify that ts->Expires is after now.
+        Date expires = timestamp.getExpires();
+
+        if (expires != null) {
+            long now = Calendar.getInstance().getTimeInMillis();
+            //calculate the tolerance limit for timeskew of the 'Expires' in timestamp
+            if (maxSkew > 0) {
+                now -= (maxSkew * 1000);
+            }
+            //fail if ts->Expires is before 'now'
+            if (expires.getTime() < now) {
                 return false;
             }
         }

Modified: axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/RampartMessageData.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/RampartMessageData.java?rev=1243894&r1=1243893&r2=1243894&view=diff
==============================================================================
--- axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/RampartMessageData.java (original)
+++ axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/RampartMessageData.java Tue Feb 14 12:16:18 2012
@@ -170,6 +170,9 @@ public class RampartMessageData {
         this.msgContext = msgCtx;
         
         try {
+
+            // Set the WSSConfig
+            this.config = WSSConfig.getNewInstance();
             
             // First obtain the axis service as we have to do a null check, there can be situations 
             // where Axis Service is null
@@ -339,27 +342,23 @@ public class RampartMessageData {
                     msgContext.setProperty(SCT_ID, outMsgCtx.getProperty(SCT_ID));
                 }
             }
-            
-           // Check whether RampartConfig is present 
-           if (this.policyData != null && this.policyData.getRampartConfig() != null) {
-               
-               boolean timestampPrecisionInMilliseconds = Boolean.valueOf(this.policyData
-                       .getRampartConfig().getTimestampPrecisionInMilliseconds()).booleanValue();
-               
-               // This is not the default behavior, we clone the default WSSConfig to prevent this 
-               // affecting globally 
-               if (timestampPrecisionInMilliseconds == WSSConfig.getNewInstance()
-                                                           .isPrecisionInMilliSeconds()) {
-                   this.config = WSSConfig.getNewInstance();
-               } else {
-                   this.config = RampartUtil.getWSSConfigInstance();
-                   this.config.setPrecisionInMilliSeconds(timestampPrecisionInMilliseconds);               
-               }
-           } else {
-               this.config = WSSConfig.getNewInstance();
-           }
-            
-           // To handle scenarios where password type is not set by default.
+
+            // Check whether RampartConfig is present
+            if (this.policyData != null && this.policyData.getRampartConfig() != null) {
+
+                boolean timestampPrecisionInMilliseconds = this.policyData
+                        .getRampartConfig().isDefaultTimestampPrecisionInMs();
+                boolean timestampStrict = this.policyData.getRampartConfig().isTimeStampStrict();
+
+
+                // We do not need earlier logic as now WSS4J returns a new instance of WSSConfig, rather
+                // than a singleton instance. Therefore modifying logic as follows,
+                this.config.setTimeStampStrict(timestampStrict);
+                this.config.setPrecisionInMilliSeconds(timestampPrecisionInMilliseconds);
+
+            }
+
+            // To handle scenarios where password type is not set by default.
             this.config.setHandleCustomPasswordTypes(true);
 
             if (axisService != null) { 

Modified: axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/policy/builders/RampartConfigBuilder.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/policy/builders/RampartConfigBuilder.java?rev=1243894&r1=1243893&r2=1243894&view=diff
==============================================================================
--- axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/policy/builders/RampartConfigBuilder.java (original)
+++ axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/policy/builders/RampartConfigBuilder.java Tue Feb 14 12:16:18 2012
@@ -154,6 +154,12 @@ public class RampartConfigBuilder implem
         	rampartConfig.setOptimizeParts(config);
         }
 
+        childElement = element.getFirstChildWithName(new QName(
+                RampartConfig.NS, RampartConfig.TIMESTAMP_STRICT_LN));
+        if (childElement != null) {
+            rampartConfig.setTimeStampStrict(childElement.getText().trim());
+        }
+
         return rampartConfig;
     }
 

Modified: axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/policy/model/RampartConfig.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/policy/model/RampartConfig.java?rev=1243894&r1=1243893&r2=1243894&view=diff
==============================================================================
--- axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/policy/model/RampartConfig.java (original)
+++ axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/policy/model/RampartConfig.java Tue Feb 14 12:16:18 2012
@@ -106,6 +106,8 @@ public class RampartConfig implements As
 
     public final static String TOKEN_STORE_CLASS_LN = "tokenStoreClass";
 
+    public final static String TIMESTAMP_STRICT_LN = "timestampStrict";
+
     public final static String NONCE_LIFE_TIME = "nonceLifeTime";
     
     public final static String OPTIMISE_PARTS = "optimizeParts";
@@ -135,6 +137,7 @@ public class RampartConfig implements As
     private CryptoConfig stsCryptoConfig;
 
     private String timestampPrecisionInMilliseconds = Boolean.toString(DEFAULT_TIMESTAMP_PRECISION_IN_MS);
+    private boolean isTimestampPrecisionInMs = DEFAULT_TIMESTAMP_PRECISION_IN_MS;
     
     private String timestampTTL = Integer.toString(DEFAULT_TIMESTAMP_TTL);
     
@@ -147,6 +150,9 @@ public class RampartConfig implements As
     private String nonceLifeTime = Integer.toString(DEFAULT_NONCE_LIFE_TIME);
     
     private SSLConfig sslConfig;
+
+    /*To set timeStampStrict in WSSConfig through rampartConfig - default value is false*/
+    private boolean timeStampStrict = false;
     
     public SSLConfig getSSLConfig() {
         return sslConfig;
@@ -326,15 +332,13 @@ public class RampartConfig implements As
         if (getRampartConfigCbClass() != null) {
             writer.writeStartElement(NS, RAMPART_CONFIG_CB_CLASS_LN);
             writer.writeCharacters(getRampartConfigCbClass());
-            writer.writeEndElement();     
-        }
-        
-        if (getTimestampPrecisionInMilliseconds() != null) {
-            writer.writeStartElement(NS, TS_PRECISION_IN_MS_LN);
-            writer.writeCharacters(getTimestampPrecisionInMilliseconds());
             writer.writeEndElement();
         }
-        
+
+        writer.writeStartElement(NS, TS_PRECISION_IN_MS_LN);
+        writer.writeCharacters(Boolean.toString(isDefaultTimestampPrecisionInMs()));
+        writer.writeEndElement();
+
         if (getTimestampTTL() != null) {
             writer.writeStartElement(NS, TS_TTL_LN);
             writer.writeCharacters(getTimestampTTL());
@@ -347,6 +351,10 @@ public class RampartConfig implements As
             writer.writeEndElement();
         }
 
+        writer.writeStartElement(NS, TIMESTAMP_STRICT_LN);
+        writer.writeCharacters(Boolean.toString(isTimeStampStrict()));
+        writer.writeEndElement();
+
         if (getTokenStoreClass() != null) {
             writer.writeStartElement(NS, TOKEN_STORE_CLASS_LN);
             writer.writeCharacters(getTokenStoreClass());
@@ -396,12 +404,26 @@ public class RampartConfig implements As
         return Constants.TYPE_ASSERTION;
     }
 
+    /**
+     * @deprecated  As of version 1.7.0, replaced by isDefaultTimestampPrecisionInMs
+     * @see #isDefaultTimestampPrecisionInMs()
+     * @return Returns "true" or "false".
+     */
+    @Deprecated
     public String getTimestampPrecisionInMilliseconds() {
     	return timestampPrecisionInMilliseconds;
     }
+
+    public boolean isDefaultTimestampPrecisionInMs() {
+    	return this.isTimestampPrecisionInMs;
+    }
     
     public void setTimestampPrecisionInMilliseconds(String timestampPrecisionInMilliseconds) {
-        this.timestampPrecisionInMilliseconds = timestampPrecisionInMilliseconds;
+
+        if (timestampPrecisionInMilliseconds != null) {
+            this.timestampPrecisionInMilliseconds = timestampPrecisionInMilliseconds;
+            this.isTimestampPrecisionInMs = Boolean.valueOf(timestampPrecisionInMilliseconds);
+        }
     }
     
     /**
@@ -457,5 +479,13 @@ public class RampartConfig implements As
     public void setStsCryptoConfig(CryptoConfig stsCryptoConfig) {
         this.stsCryptoConfig = stsCryptoConfig;
     }
+
+    public boolean isTimeStampStrict() {
+        return timeStampStrict;
+    }
+
+    public void setTimeStampStrict(String timeStampStrict) {
+        this.timeStampStrict = Boolean.valueOf(timeStampStrict);
+    }
     
 }