You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@manifoldcf.apache.org by kw...@apache.org on 2012/09/13 01:38:49 UTC

svn commit: r1384159 - /manifoldcf/branches/CONNECTORS-515/connectors/ldap/connector/src/main/java/org/apache/manifoldcf/authorities/authorities/ldap/LDAPAuthority.java

Author: kwright
Date: Wed Sep 12 23:38:49 2012
New Revision: 1384159

URL: http://svn.apache.org/viewvc?rev=1384159&view=rev
Log:
Install session connect/expiration logic, so that connections and sessions can operate on different time scales.

Modified:
    manifoldcf/branches/CONNECTORS-515/connectors/ldap/connector/src/main/java/org/apache/manifoldcf/authorities/authorities/ldap/LDAPAuthority.java

Modified: manifoldcf/branches/CONNECTORS-515/connectors/ldap/connector/src/main/java/org/apache/manifoldcf/authorities/authorities/ldap/LDAPAuthority.java
URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-515/connectors/ldap/connector/src/main/java/org/apache/manifoldcf/authorities/authorities/ldap/LDAPAuthority.java?rev=1384159&r1=1384158&r2=1384159&view=diff
==============================================================================
--- manifoldcf/branches/CONNECTORS-515/connectors/ldap/connector/src/main/java/org/apache/manifoldcf/authorities/authorities/ldap/LDAPAuthority.java (original)
+++ manifoldcf/branches/CONNECTORS-515/connectors/ldap/connector/src/main/java/org/apache/manifoldcf/authorities/authorities/ldap/LDAPAuthority.java Wed Sep 12 23:38:49 2012
@@ -44,6 +44,8 @@ public class LDAPAuthority extends org.a
      * Session information for all DC's we talk with.
      */
     private LdapContext session = null;
+    private long sessionExpirationTime = -1L;
+  
     /**
      * This is the active directory global deny token. This should be ingested
      * with all documents.
@@ -84,33 +86,51 @@ public class LDAPAuthority extends org.a
       groupSearch = getParam( configParams, "ldapGroupSearch", "(&(objectClass=groupOfNames)(member={0}))" );
       groupNameAttr = getParam( configParams, "ldapGroupNameAttr", "cn" );
 
+    }
+
+    // All methods below this line will ONLY be called if a connect() call succeeded
+    // on this instance!
+
+    /** Session setup.  Anything that might need to throw an exception should go
+    * here.
+    */
+    protected void getSession()
+      throws ManifoldCFException
+    {
       Hashtable env = new Hashtable();
       env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
       env.put(Context.PROVIDER_URL, serverURL);
 
-      String em = "";
       try {
         if (session == null) {
           session = new InitialLdapContext(env, null);
         } else {
           session.reconnect(null);
         }
+        sessionExpirationTime = System.currentTimeMillis() + 300000L;
       } catch (AuthenticationException e) {
+        session = null;
+        sessionExpirationTime = -1L;
+        throw new ManifoldCFException("Authentication error: "+e.getMessage(),e);
       } catch (CommunicationException e) {
+        session = null;
+        sessionExpirationTime = -1L;
+        throw new ManifoldCFException("Communication error: "+e.getMessage(),e);
       } catch (NamingException e) {
-        em = e.toString();
+        session = null;
+        sessionExpirationTime = -1L;
+        throw new ManifoldCFException("Naming error: "+e.getMessage(),e);
       }
-      em = em + "";
-    }
 
-    // All methods below this line will ONLY be called if a connect() call succeeded
-    // on this instance!
+    }
+    
     /**
      * Check connection for sanity.
      */
     @Override
     public String check()
       throws ManifoldCFException {
+      getSession();
       // MHL for a real check
       return super.check();
     }
@@ -121,16 +141,15 @@ public class LDAPAuthority extends org.a
     @Override
     public void poll()
       throws ManifoldCFException {
+      if (session != null && System.currentTimeMillis() > sessionExpirationTime)
+        disconnectSession();
       super.poll();
     }
 
-    /**
-     * Close the connection. Call this before discarding the repository
-     * connector.
-     */
-    @Override
-    public void disconnect()
-      throws ManifoldCFException {
+    /** Disconnect a session.
+    */
+    protected void disconnectSession()
+    {
       if (session != null) {
         try {
           session.close();
@@ -138,7 +157,18 @@ public class LDAPAuthority extends org.a
           // Eat this error
         }
         session = null;
+        sessionExpirationTime = -1L;
       }
+    }
+    
+    /**
+     * Close the connection. Call this before discarding the repository
+     * connector.
+     */
+    @Override
+    public void disconnect()
+      throws ManifoldCFException {
+      disconnectSession();
       super.disconnect();
     }
 
@@ -153,6 +183,7 @@ public class LDAPAuthority extends org.a
     @Override
     public AuthorizationResponse getAuthorizationResponse(String userName)
       throws ManifoldCFException {
+      getSession();
       try {
         //Get DistinguishedName (for this method we are using DomainPart as a searchBase ie: DC=qa-ad-76,DC=metacarta,DC=com")
         String usrDN = getDistinguishedName(session, userName);