Update of 
/var/cvs/contributions/CMSContainer_Modules/knownvisitor-ntlm/src/java/com/finalist/cmsc/knownvisitor/ntlm
In directory 
james.mmbase.org:/tmp/cvs-serv21601/knownvisitor-ntlm/src/java/com/finalist/cmsc/knownvisitor/ntlm

Modified Files:
      Tag: b1_5
        NtlmKnownVisitorModule.java NtlmVisitorFilter.java 
Log Message:
CMSC-1194 NtlmVisitorFilter for Almere has code which is not in CVS


See also: 
http://cvs.mmbase.org/viewcvs/contributions/CMSContainer_Modules/knownvisitor-ntlm/src/java/com/finalist/cmsc/knownvisitor/ntlm
See also: http://www.mmbase.org/jira/browse/CMSC-1194


Index: NtlmKnownVisitorModule.java
===================================================================
RCS file: 
/var/cvs/contributions/CMSContainer_Modules/knownvisitor-ntlm/src/java/com/finalist/cmsc/knownvisitor/ntlm/NtlmKnownVisitorModule.java,v
retrieving revision 1.6.2.1
retrieving revision 1.6.2.2
diff -u -b -r1.6.2.1 -r1.6.2.2
--- NtlmKnownVisitorModule.java 22 Jan 2009 12:41:43 -0000      1.6.2.1
+++ NtlmKnownVisitorModule.java 22 Jan 2009 14:33:27 -0000      1.6.2.2
@@ -19,18 +19,24 @@
 
    private static final String SESSION_ATTRIBUTE = "NtlmVisitor";
 
-   public static final String PROPERTY_DOMAIN_CONTROLLER = 
"knownvisitor-ntlm.domaincontroller";
    public static final String PROPERTY_ENABLED = "knownvisitor-ntlm.enabled";
+   public static final String PROPERTY_DOMAIN_CONTROLLER = 
"knownvisitor-ntlm.domaincontroller";
+   public static final String PROPERTY_DOMAIN = "knownvisitor-ntlm.domain";
+   public static final String PROPERTY_IPEXCEPTIONS = 
"knownvisitor-ntlm.ipexceptions";
+   public static final String PROPERTY_BASIC_AUTH = 
"knownvisitor-ntlm.basic-authentication";
+
    public static final String PROPERTY_FIELD_EMAIL = 
"knownvisitor-ntlm.field.email";
    public static final String PROPERTY_FIELD_REALNAME = 
"knownvisitor-ntlm.field.realname";
    public static final String PROPERTY_FIELD_USERNAME = 
"knownvisitor-ntlm.field.username";
    public static final String PROPERTY_LOGONNAME = 
"knownvisitor-ntlm.logonname";
    public static final String PROPERTY_LOGONPASSWORD = 
"knownvisitor-ntlm.logonpassword";
    public static final String PROPERTY_SEARCHDN = "knownvisitor-ntlm.searchDN";
-   public static final String PROPERTY_DOMAIN = "knownvisitor-ntlm.domain";
+
+   
 
 
    public NtlmKnownVisitorModule() {
+      // nothing
    }
 
 
@@ -69,9 +75,9 @@
       // Make a directory context by connecting with the above details.
       try {
          ctx = new InitialDirContext(env);
-         NamingEnumeration answer = ctx.search("ldap://"; + server + "/" + 
searchDN, query, null);
+         NamingEnumeration<SearchResult> answer = ctx.search("ldap://"; + 
server + "/" + searchDN, query, null);
          if (answer.hasMoreElements()) {
-            SearchResult result = (SearchResult) answer.next();
+            SearchResult result = answer.next();
             Attribute values = 
result.getAttributes().get(getProperty(PROPERTY_FIELD_REALNAME));
             if (values.size() > 0) {
                visitor.setDisplayName((String) values.get(0));


Index: NtlmVisitorFilter.java
===================================================================
RCS file: 
/var/cvs/contributions/CMSContainer_Modules/knownvisitor-ntlm/src/java/com/finalist/cmsc/knownvisitor/ntlm/NtlmVisitorFilter.java,v
retrieving revision 1.7.2.1
retrieving revision 1.7.2.2
diff -u -b -r1.7.2.1 -r1.7.2.2
--- NtlmVisitorFilter.java      22 Jan 2009 12:41:44 -0000      1.7.2.1
+++ NtlmVisitorFilter.java      22 Jan 2009 14:33:27 -0000      1.7.2.2
@@ -1,24 +1,18 @@
 package com.finalist.cmsc.knownvisitor.ntlm;
 
-import jcifs.http.NtlmSsp;
-import jcifs.smb.NtlmPasswordAuthentication;
-import jcifs.smb.SmbSession;
-import jcifs.smb.SmbAuthException;
-import jcifs.UniAddress;
+import java.io.IOException;
+import java.util.*;
+
+import javax.servlet.*;
+import javax.servlet.http.*;
+
 import jcifs.Config;
+import jcifs.UniAddress;
+import jcifs.http.NtlmSsp;
+import jcifs.smb.*;
 import jcifs.util.Base64;
 
-import javax.servlet.FilterConfig;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.FilterChain;
-import javax.servlet.Filter;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpSession;
-import java.io.IOException;
-
+import org.apache.commons.lang.StringUtils;
 import org.mmbase.util.logging.Logger;
 import org.mmbase.util.logging.Logging;
 
@@ -30,12 +24,13 @@
  * @author Jeoffrey Bakker, Finalist IT Group
  */
 public class NtlmVisitorFilter implements Filter {
+
    private static final String realm = "jCIFS";
 
    private static final Logger log = 
Logging.getLoggerInstance(NtlmVisitorFilter.class);
 
 
-   public void init(FilterConfig filterConfig) throws ServletException {
+   public void init(FilterConfig filterConfig) {
 
       /*
        * Set jcifs properties we know we want; soTimeout and cachePolicy to
@@ -47,6 +42,7 @@
 
 
    public void destroy() {
+      // nothing
    }
 
 
@@ -60,9 +56,24 @@
       final HttpServletRequest req = (HttpServletRequest) request;
       final HttpServletResponse resp = (HttpServletResponse) response;
 
-      if (isEnabled() && !negotiate(req, resp, false)) {
+      if (isEnabled()) {
+         List<String> exceptions = getIpExceptions();
+         if (!exceptions.isEmpty()) {
+            String clientIp = req.getHeader("X-Forwarded-For");
+            if (StringUtils.isBlank(clientIp)) {
+               // not behind a proxy or mod_proxy
+               clientIp = request.getRemoteAddr();
+            }
+            if (exceptions.contains(clientIp)) {
+               chain.doFilter(req, resp);
+               return;
+            }
+         }
+
+         if (!negotiate(req, resp, false)) {
          return;
       }
+      }
 
       chain.doFilter(req, resp);
    }
@@ -90,7 +101,7 @@
       String msg;
       NtlmPasswordAuthentication ntlm = null;
       msg = req.getHeader("Authorization");
-      boolean offerBasic = req.isSecure();
+      boolean offerBasic = offerBasic(req);
 
       log.debug("Message: " + msg);
       if (msg != null && (msg.startsWith("NTLM ") || (offerBasic && 
msg.startsWith("Basic ")))) {
@@ -143,7 +154,7 @@
                log.service("NtlmHttpFilter: " + ntlm.getName() + ": 0x"
                      + jcifs.util.Hexdump.toHexString(sae.getNtStatus(), 8) + 
": " + sae);
             }
-            if (sae.getNtStatus() == 
SmbAuthException.NT_STATUS_ACCESS_VIOLATION) {
+            if (sae.getNtStatus() == NtStatus.NT_STATUS_ACCESS_VIOLATION) {
                /*
                 * Server challenge no longer valid for externally supplied
                 * password hashes.
@@ -180,13 +191,44 @@
    }
 
 
-   private boolean isEnabled() {
-      return 
PropertiesUtil.getProperty(NtlmKnownVisitorModule.PROPERTY_ENABLED).equals("true");
+   private boolean offerBasic(HttpServletRequest req) {
+      boolean offerBasic = req.isSecure();
+      if (!offerBasic) {
+         String basic = 
PropertiesUtil.getProperty(NtlmKnownVisitorModule.PROPERTY_BASIC_AUTH);
+         if (StringUtils.isBlank(basic) || "secure".equalsIgnoreCase(basic)) {
+            return false;
+         }
+         else {
+            // basic authentication is not forced to be on secured urls and 
the current request is not secured
+            // This does not mean that the url arrived at the webserver was 
not secured. The webserver could
+            // proxy the request without using the secured flag.
+            return true;
+         }
    }
+      return offerBasic;
+   }
+
 
+   private boolean isEnabled() {
+      return 
Boolean.parseBoolean(PropertiesUtil.getProperty(NtlmKnownVisitorModule.PROPERTY_ENABLED));
+   }
 
    private String getDomainController() {
       return 
PropertiesUtil.getProperty(NtlmKnownVisitorModule.PROPERTY_DOMAIN_CONTROLLER);
    }
 
+   private List<String> getIpExceptions() {
+       String prop = 
PropertiesUtil.getProperty(NtlmKnownVisitorModule.PROPERTY_IPEXCEPTIONS);
+       return convertToList(prop);
+   }
+
+   private static List<String> convertToList(String prop) {
+      List<String> list = new ArrayList<String>();
+      StringTokenizer tokenizer = new StringTokenizer(prop, ", \t\n\r\f");
+      while (tokenizer.hasMoreTokens()) {
+         String str = tokenizer.nextToken();
+         list.add(str);
+      }
+      return list;
+   }
 }
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to