Author: coheigea
Date: Mon Dec 15 06:41:23 2008
New Revision: 726704

URL: http://svn.apache.org/viewvc?rev=726704&view=rev
Log:
[WSS-152] - Problem with processing Username Tokens with no password type
 - Added a test for this as well.
 - Some minor cleanups in the UsernameTokenProcessor.

Modified:
    
webservices/wss4j/trunk/src/org/apache/ws/security/message/token/UsernameToken.java
    
webservices/wss4j/trunk/src/org/apache/ws/security/processor/UsernameTokenProcessor.java
    webservices/wss4j/trunk/test/wssec/TestWSSecurityNew5.java

Modified: 
webservices/wss4j/trunk/src/org/apache/ws/security/message/token/UsernameToken.java
URL: 
http://svn.apache.org/viewvc/webservices/wss4j/trunk/src/org/apache/ws/security/message/token/UsernameToken.java?rev=726704&r1=726703&r2=726704&view=diff
==============================================================================
--- 
webservices/wss4j/trunk/src/org/apache/ws/security/message/token/UsernameToken.java
 (original)
+++ 
webservices/wss4j/trunk/src/org/apache/ws/security/message/token/UsernameToken.java
 Mon Dec 15 06:41:23 2008
@@ -143,8 +143,9 @@
             }
             return;
         }
-        if (elementPassword != null) {
-            passwordType = elementPassword.getAttribute("Type");
+        if (elementPassword != null 
+                && 
elementPassword.hasAttribute(WSConstants.PASSWORD_TYPE_ATTR)) {
+            passwordType = 
elementPassword.getAttribute(WSConstants.PASSWORD_TYPE_ATTR);
         }
         if (passwordType != null
                 && passwordType.equals(WSConstants.PASSWORD_DIGEST)) {

Modified: 
webservices/wss4j/trunk/src/org/apache/ws/security/processor/UsernameTokenProcessor.java
URL: 
http://svn.apache.org/viewvc/webservices/wss4j/trunk/src/org/apache/ws/security/processor/UsernameTokenProcessor.java?rev=726704&r1=726703&r2=726704&view=diff
==============================================================================
--- 
webservices/wss4j/trunk/src/org/apache/ws/security/processor/UsernameTokenProcessor.java
 (original)
+++ 
webservices/wss4j/trunk/src/org/apache/ws/security/processor/UsernameTokenProcessor.java
 Mon Dec 15 06:41:23 2008
@@ -44,7 +44,8 @@
     private UsernameToken ut;
     private boolean handleCustomPasswordTypes;
     
-    public void handleToken(Element elem, Crypto crypto, Crypto decCrypto, 
CallbackHandler cb, WSDocInfo wsDocInfo, Vector returnResults, WSSConfig wsc) 
throws WSSecurityException {
+    public void handleToken(Element elem, Crypto crypto, Crypto decCrypto, 
CallbackHandler cb, 
+        WSDocInfo wsDocInfo, Vector returnResults, WSSConfig wsc) throws 
WSSecurityException {
         if (log.isDebugEnabled()) {
             log.debug("Found UsernameToken list element");
         }
@@ -53,7 +54,7 @@
         Principal lastPrincipalFound = handleUsernameToken((Element) elem, cb);
         returnResults.add(0, new WSSecurityEngineResult(WSConstants.UT,
                 lastPrincipalFound, null, null, null));
-        utId = elem.getAttributeNS(WSConstants.WSU_NS, "Id");
+        utId = ut.getID();
     }
 
     /**
@@ -77,6 +78,12 @@
      */
     public WSUsernameTokenPrincipal handleUsernameToken(Element token, 
CallbackHandler cb) 
         throws WSSecurityException {
+        if (cb == null) {
+            throw new WSSecurityException(WSSecurityException.FAILURE, 
"noCallback");
+        }
+        //
+        // Parse the UsernameToken element
+        //
         ut = new UsernameToken(token);
         String user = ut.getName();
         String password = ut.getPassword();
@@ -97,11 +104,8 @@
         // then delegate authentication to the callback handler
         //
         if (ut.isHashed()) {
-            if (cb == null) {
-                throw new WSSecurityException(WSSecurityException.FAILURE, 
"noCallback");
-            }
-
-            WSPasswordCallback pwCb = new WSPasswordCallback(user, 
WSPasswordCallback.USERNAME_TOKEN);
+            WSPasswordCallback pwCb = 
+                new WSPasswordCallback(user, 
WSPasswordCallback.USERNAME_TOKEN);
             callbacks[0] = pwCb;
             try {
                 cb.handle(callbacks);
@@ -136,9 +140,10 @@
             }
             ut.setRawPassword(origPassword);
         } else {
-            if (cb == null) {
-                throw new WSSecurityException(WSSecurityException.FAILURE, 
"noCallback");
-            } else if (!WSConstants.PASSWORD_TEXT.equals(pwType) && 
!handleCustomPasswordTypes) {
+            if (!WSConstants.PASSWORD_TEXT.equals(pwType) 
+                && pwType != null
+                && !handleCustomPasswordTypes
+            ) {
                 if (log.isDebugEnabled()) {
                     log.debug("Authentication failed as 
handleCustomUsernameTokenTypes is false");
                 }

Modified: webservices/wss4j/trunk/test/wssec/TestWSSecurityNew5.java
URL: 
http://svn.apache.org/viewvc/webservices/wss4j/trunk/test/wssec/TestWSSecurityNew5.java?rev=726704&r1=726703&r2=726704&view=diff
==============================================================================
--- webservices/wss4j/trunk/test/wssec/TestWSSecurityNew5.java (original)
+++ webservices/wss4j/trunk/test/wssec/TestWSSecurityNew5.java Mon Dec 15 
06:41:23 2008
@@ -56,6 +56,22 @@
     private static Log log = LogFactory.getLog(TestWSSecurityNew5.class);
     static final String NS = "http://www.w3.org/2000/09/xmldsig#";;
     static final String soapMsg = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" 
+ "<SOAP-ENV:Envelope 
xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\"; 
xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"; 
xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\";>" + "<SOAP-ENV:Body>" + 
"<add xmlns=\"http://ws.apache.org/counter/counter_port_type\";>" + "<value 
xmlns=\"\">15</value>" + "</add>" + "</SOAP-ENV:Body>\r\n       \r\n" + 
"</SOAP-ENV:Envelope>";
+    static final String soapUtMsg = 
+        "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" 
+        + "<SOAP-ENV:Envelope 
xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\"; "
+        + "xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"; "
+        + "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\";>"
+        + "<SOAP-ENV:Header>"
+        + "<wsse:Security SOAP-ENV:mustUnderstand=\"1\" "
+        + 
"xmlns:wsse=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd\";>"
+        + "<wsse:UsernameToken wsu:Id=\"UsernameToken-29477163\" 
xmlns:wsu=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd\";>"
+        + "<wsse:Username>wernerd</wsse:Username>"
+        + "<wsse:Password>verySecret</wsse:Password>"
+        + "</wsse:UsernameToken></wsse:Security></SOAP-ENV:Header>"
+        + "<SOAP-ENV:Body>" 
+        + "<add xmlns=\"http://ws.apache.org/counter/counter_port_type\";>" 
+        + "<value xmlns=\"\">15</value>" + "</add>" 
+        + "</SOAP-ENV:Body>\r\n       \r\n" + "</SOAP-ENV:Envelope>";
     static final WSSecurityEngine secEngine = new WSSecurityEngine();
     MessageContext msgContext;
     SOAPEnvelope unsignedEnvelope;
@@ -274,6 +290,26 @@
     }
     
     /**
+     * Test that adds a UserNameToken with no password type to a WS-Security 
envelope
+     * See WSS-152 - https://issues.apache.org/jira/browse/WSS-152
+     * "Problem with processing Username Tokens with no password type"
+     * The 1.1 spec states that the password type is optional and defaults to 
password text, 
+     * and so we should handle an incoming Username Token accordingly.
+     */
+    public void testUsernameTokenNoPasswordType() throws Exception {
+        InputStream in = new ByteArrayInputStream(soapUtMsg.getBytes());
+        Message msg = new Message(in);
+        msg.setMessageContext(msgContext);
+        SOAPEnvelope utEnvelope = msg.getSOAPEnvelope();
+        Document doc = utEnvelope.getAsDocument();
+        if (log.isDebugEnabled()) {
+            Message utMsg = SOAPUtil.toAxisMessage(doc);
+            XMLUtils.PrettyElementToWriter(utMsg.getSOAPEnvelope().getAsDOM(), 
new PrintWriter(System.out));
+        }
+        verify(doc);
+    }
+    
+    /**
      * Test with a null token type. This will fail as the default is to reject 
custom
      * token types.
      * <p/>



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to