[java-shib-idp2 COMMIT] in /branches/REL_2: doc/RELEASE-NOTES.txt src/main/java/edu/internet2/middleware/shibboleth/i...

noreply at shibboleth.net noreply at shibboleth.net
Tue Dec 11 23:00:25 EST 2012


Author: scantor
Date: Tue Dec 11 23:00:25 2012
New Revision: 3127

URL: http://svn.shibboleth.net/view/java-shib-idp2?rev=3127&view=rev
Log:
SIDP-564: Dual address support in IdP session cookie

Modified:
    branches/REL_2/doc/RELEASE-NOTES.txt
    branches/REL_2/src/main/java/edu/internet2/middleware/shibboleth/idp/authn/AuthenticationEngine.java
    branches/REL_2/src/main/java/edu/internet2/middleware/shibboleth/idp/session/IdPSessionFilter.java

Modified: branches/REL_2/doc/RELEASE-NOTES.txt
URL: http://svn.shibboleth.net/view/java-shib-idp2/branches/REL_2/doc/RELEASE-NOTES.txt?rev=3127&r1=3126&r2=3127&view=diff
==============================================================================
--- branches/REL_2/doc/RELEASE-NOTES.txt (original)
+++ branches/REL_2/doc/RELEASE-NOTES.txt Tue Dec 11 23:00:25 2012
@@ -5,6 +5,7 @@
 [SIDP-557] - aacli.sh Exception (again)
 [SIDP-559] - Attribute queries are ignoring input designators
 [SIDP-563] - IdP-only SAML logout profile handler
+[SIDP-564] - Happy Eyeballs support for IdP session cookie address checking
 
 Changes in Release 2.3.8
 =============================================

Modified: branches/REL_2/src/main/java/edu/internet2/middleware/shibboleth/idp/authn/AuthenticationEngine.java
URL: http://svn.shibboleth.net/view/java-shib-idp2/branches/REL_2/src/main/java/edu/internet2/middleware/shibboleth/idp/authn/AuthenticationEngine.java?rev=3127&r1=3126&r2=3127&view=diff
==============================================================================
--- branches/REL_2/src/main/java/edu/internet2/middleware/shibboleth/idp/authn/AuthenticationEngine.java (original)
+++ branches/REL_2/src/main/java/edu/internet2/middleware/shibboleth/idp/authn/AuthenticationEngine.java Tue Dec 11 23:00:25 2012
@@ -789,14 +789,23 @@
             Session userSession) {
         httpRequest.setAttribute(Session.HTTP_SESSION_BINDING_ATTRIBUTE, userSession);
 
-        byte[] remoteAddress = httpRequest.getRemoteAddr().getBytes();
+        String remoteAddressStr = httpRequest.getRemoteAddr();
+        boolean isV4 = remoteAddressStr.contains(".");
+        byte[] remoteAddress = remoteAddressStr.getBytes();
         byte[] sessionId = userSession.getSessionID().getBytes();
-
+        byte[] placeholder = "-".getBytes();       
+ 
         String signature = null;
         try {
             MessageDigest digester = MessageDigest.getInstance("SHA");
             digester.update(userSession.getSessionSecret());
-            digester.update(remoteAddress);
+            if (isV4) {
+                digester.update(remoteAddress);
+                digester.update(placeholder);    // placeholder for V6 address
+            } else {
+                digester.update(placeholder);    // placeholder for V4 address
+                digester.update(remoteAddress);
+            }
             digester.update(sessionId);
             signature = Base64.encodeBytes(digester.digest());
         } catch (GeneralSecurityException e) {
@@ -805,7 +814,13 @@
 
         LOG.debug("Adding IdP session cookie to HTTP response");
         StringBuilder cookieValue = new StringBuilder();
-        cookieValue.append(Base64.encodeBytes(remoteAddress, Base64.DONT_BREAK_LINES)).append("|");
+        if (isV4) {
+            cookieValue.append(Base64.encodeBytes(remoteAddress, Base64.DONT_BREAK_LINES)).append("|");
+            cookieValue.append(Base64.encodeBytes(placeholder, Base64.DONT_BREAK_LINES)).append("|");    // placeholder for V6 address
+        } else {
+            cookieValue.append(Base64.encodeBytes(placeholder, Base64.DONT_BREAK_LINES)).append("|");    // placeholder for V4 address
+            cookieValue.append(Base64.encodeBytes(remoteAddress, Base64.DONT_BREAK_LINES)).append("|");
+        }
         cookieValue.append(Base64.encodeBytes(sessionId, Base64.DONT_BREAK_LINES)).append("|");
         cookieValue.append(signature);
 
@@ -820,4 +835,4 @@
         sessionCookie.setSecure(httpRequest.isSecure());
         httpResponse.addCookie(sessionCookie);
     }
-}
+}

Modified: branches/REL_2/src/main/java/edu/internet2/middleware/shibboleth/idp/session/IdPSessionFilter.java
URL: http://svn.shibboleth.net/view/java-shib-idp2/branches/REL_2/src/main/java/edu/internet2/middleware/shibboleth/idp/session/IdPSessionFilter.java?rev=3127&r1=3126&r2=3127&view=diff
==============================================================================
--- branches/REL_2/src/main/java/edu/internet2/middleware/shibboleth/idp/session/IdPSessionFilter.java (original)
+++ branches/REL_2/src/main/java/edu/internet2/middleware/shibboleth/idp/session/IdPSessionFilter.java Tue Dec 11 23:00:25 2012
@@ -25,11 +25,13 @@
 import javax.servlet.Filter;
 import javax.servlet.FilterChain;
 import javax.servlet.FilterConfig;
+import javax.servlet.ServletContext;
 import javax.servlet.ServletException;
 import javax.servlet.ServletRequest;
 import javax.servlet.ServletResponse;
 import javax.servlet.http.Cookie;
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 
 import org.joda.time.DateTime;

[... 199 lines stripped ...]


More information about the commits mailing list