You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@manifoldcf.apache.org by ml...@apache.org on 2013/06/26 00:05:05 UTC

svn commit: r1496653 - in /manifoldcf/trunk/connectors/ldap/connector/src/main: java/org/apache/manifoldcf/authorities/authorities/ldap/LDAPAuthority.java native2ascii/org/apache/manifoldcf/authorities/authorities/ldap/common_pl_PL.properties

Author: mlizewski
Date: Tue Jun 25 22:05:04 2013
New Revision: 1496653

URL: http://svn.apache.org/r1496653
Log:
polish translation for LDAP authority
fix for proper handling usernames as username@domain
code beautify

Added:
    manifoldcf/trunk/connectors/ldap/connector/src/main/native2ascii/org/apache/manifoldcf/authorities/authorities/ldap/common_pl_PL.properties
Modified:
    manifoldcf/trunk/connectors/ldap/connector/src/main/java/org/apache/manifoldcf/authorities/authorities/ldap/LDAPAuthority.java

Modified: manifoldcf/trunk/connectors/ldap/connector/src/main/java/org/apache/manifoldcf/authorities/authorities/ldap/LDAPAuthority.java
URL: http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/ldap/connector/src/main/java/org/apache/manifoldcf/authorities/authorities/ldap/LDAPAuthority.java?rev=1496653&r1=1496652&r2=1496653&view=diff
==============================================================================
--- manifoldcf/trunk/connectors/ldap/connector/src/main/java/org/apache/manifoldcf/authorities/authorities/ldap/LDAPAuthority.java (original)
+++ manifoldcf/trunk/connectors/ldap/connector/src/main/java/org/apache/manifoldcf/authorities/authorities/ldap/LDAPAuthority.java Tue Jun 25 22:05:04 2013
@@ -6,9 +6,9 @@
  * licenses this file to You under the Apache License, Version 2.0 (the
  * "License"); you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -40,23 +40,20 @@ public class LDAPAuthority extends org.a
 
   public static final String _rcsid = "@(#)$Id$";
   /**
-  * Session information for all DC's we talk with.
-  */
+   * 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.
-  */
+   * This is the active directory global deny token. This should be ingested
+   * with all documents.
+   */
   private static final String globalDenyToken = "DEAD_AUTHORITY";
   private static final AuthorizationResponse unreachableResponse = new AuthorizationResponse(new String[]{globalDenyToken},
     AuthorizationResponse.RESPONSE_UNREACHABLE);
   private static final AuthorizationResponse userNotFoundResponse = new AuthorizationResponse(new String[]{globalDenyToken},
     AuthorizationResponse.RESPONSE_USERNOTFOUND);
-
   private ConfigParams parameters;
-  
   private String serverName;
   private String serverPort;
   private String serverBase;
@@ -68,10 +65,11 @@ public class LDAPAuthority extends org.a
   private boolean groupMemberDN;
   private boolean addUserRecord;
   private String userNameAttr;
-
   private long responseLifetime = 60000L; //60sec
   private int LRUsize = 1000;
-  /** Cache manager. */
+  /**
+   * Cache manager.
+   */
   private ICacheManager cacheManager = null;
 
   /**
@@ -101,30 +99,28 @@ public class LDAPAuthority extends org.a
     parameters = configParams;
 
     // We get the parameters here, so we can check them in case they are missing
-    serverName = configParams.getParameter( "ldapServerName" );
-    serverPort = configParams.getParameter( "ldapServerPort" );
-    serverBase = configParams.getParameter( "ldapServerBase" );
-
-    userBase = configParams.getParameter( "ldapUserBase" );
-    userSearch = configParams.getParameter( "ldapUserSearch" );
-    groupBase = configParams.getParameter( "ldapGroupBase" );
-    groupSearch = configParams.getParameter( "ldapGroupSearch" );
-    groupNameAttr = configParams.getParameter( "ldapGroupNameAttr" );
-    userNameAttr = configParams.getParameter( "ldapUserNameAttr" );
-    
+    serverName = configParams.getParameter("ldapServerName");
+    serverPort = configParams.getParameter("ldapServerPort");
+    serverBase = configParams.getParameter("ldapServerBase");
+
+    userBase = configParams.getParameter("ldapUserBase");
+    userSearch = configParams.getParameter("ldapUserSearch");
+    groupBase = configParams.getParameter("ldapGroupBase");
+    groupSearch = configParams.getParameter("ldapGroupSearch");
+    groupNameAttr = configParams.getParameter("ldapGroupNameAttr");
+    userNameAttr = configParams.getParameter("ldapUserNameAttr");
     groupMemberDN = "1".equals(getParam(configParams, "ldapGroupMemberDn", ""));
     addUserRecord = "1".equals(getParam(configParams, "ldapAddUserRecord", ""));
   }
 
   // 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.
-  */
+  /**
+   * Session setup. Anything that might need to throw an exception should go
+   * here.
+   */
   protected LdapContext getSession()
-    throws ManifoldCFException
-  {
+    throws ManifoldCFException {
     if (serverName == null || serverName.length() == 0) {
       throw new ManifoldCFException("Server name parameter missing but required");
     }
@@ -155,13 +151,19 @@ public class LDAPAuthority extends org.a
 
     Hashtable env = new Hashtable();
     env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
-    env.put(Context.PROVIDER_URL, "ldap://"+serverName+":"+serverPort+"/"+serverBase);
+    env.put(Context.PROVIDER_URL, "ldap://" + serverName + ":" + serverPort + "/" + serverBase);
 
     //get bind credentials
-    String bindUser = getParam(parameters, "ldapBindUser", null);
-    String bindPass = getParam(parameters, "ldapBindPass", null);
-    if (bindPass != null && bindUser != null) {
-      bindPass = ManifoldCF.deobfuscate(bindPass);
+    String bindUser = getParam(parameters, "ldapBindUser", "");
+    String bindPass = "";
+    try {
+      bindPass = ManifoldCF.deobfuscate(getParam(parameters, "ldapBindPass", ""));
+    } catch (ManifoldCFException ex) {
+      if (!bindUser.isEmpty()) {
+        Logger.getLogger(LDAPAuthority.class.getName()).log(Level.SEVERE, "Deobfuscation error", ex);
+      }
+    }
+    if (!bindUser.isEmpty()) {
       env.put(Context.SECURITY_AUTHENTICATION, "simple");
       env.put(Context.SECURITY_PRINCIPAL, bindUser);
       env.put(Context.SECURITY_CREDENTIALS, bindPass);
@@ -178,26 +180,26 @@ public class LDAPAuthority extends org.a
     } catch (AuthenticationException e) {
       session = null;
       sessionExpirationTime = -1L;
-      throw new ManifoldCFException("Authentication error: "+e.getMessage(),e);
+      throw new ManifoldCFException("Authentication error: " + e.getMessage() + ", explanation: " + e.getExplanation(), e);
     } catch (CommunicationException e) {
       session = null;
       sessionExpirationTime = -1L;
-      throw new ManifoldCFException("Communication error: "+e.getMessage(),e);
+      throw new ManifoldCFException("Communication error: " + e.getMessage(), e);
     } catch (NamingException e) {
       session = null;
       sessionExpirationTime = -1L;
-      throw new ManifoldCFException("Naming error: "+e.getMessage(),e);
+      throw new ManifoldCFException("Naming error: " + e.getMessage(), e);
     }
   }
-    
+
   /**
-  * Check connection for sanity.
-  */
+   * Check connection for sanity.
+   */
   @Override
   public String check()
     throws ManifoldCFException {
     disconnectSession();
-    LdapContext fSession = getSession();
+    getSession();
     // MHL for a real check of all the search etc.
     return super.check();
   }
@@ -214,8 +216,9 @@ public class LDAPAuthority extends org.a
     super.poll();
   }
 
-  /** Disconnect a session.
-  */
+  /**
+   * Disconnect a session.
+   */
   protected void disconnectSession() {
     if (session != null) {
       try {
@@ -225,14 +228,12 @@ public class LDAPAuthority extends org.a
       }
       session = null;
       sessionExpirationTime = -1L;
-
     }
   }
-    
+
   /**
-  * Close the connection. Call this before discarding the repository
-  * connector.
-  */
+   * Close the connection. Call this before discarding the repository connector.
+   */
   @Override
   public void disconnect()
     throws ManifoldCFException {
@@ -248,7 +249,6 @@ public class LDAPAuthority extends org.a
     groupSearch = null;
     groupNameAttr = null;
     userNameAttr = null;
-
   }
 
   protected String createCacheConnectionString() {
@@ -268,19 +268,19 @@ public class LDAPAuthority extends org.a
     sb.append(groupBase).append("|").append(groupSearch).append("|").append(groupNameAttr).append("|").append(groupMemberDN ? 'Y' : 'N');
     return sb.toString();
   }
-  
+
   /**
-  * Obtain the access tokens for a given user name.
-  *
-  * @param userName is the user name or identifier.
-  * @return the response tokens (according to the current authority). (Should
-  * throws an exception only when a condition cannot be properly described
-  * within the authorization response object.)
-  */
+   * Obtain the access tokens for a given user name.
+   *
+   * @param userName is the user name or identifier.
+   * @return the response tokens (according to the current authority). (Should
+   * throws an exception only when a condition cannot be properly described
+   * within the authorization response object.)
+   */
   @Override
   public AuthorizationResponse getAuthorizationResponse(String userName)
     throws ManifoldCFException {
-    
+
     getSession();
     // Construct a cache description object
     ICacheDescription objectDescription = new LdapAuthorizationResponseDescription(userName,
@@ -312,7 +312,7 @@ public class LDAPAuthority extends org.a
 
   protected AuthorizationResponse getAuthorizationResponseUncached(String userName)
     throws ManifoldCFException {
-    LdapContext session = getSession();
+    getSession();
     try {
       //find user in LDAP tree
       SearchResult usrRecord = getUserEntry(session, userName);
@@ -322,34 +322,41 @@ public class LDAPAuthority extends org.a
 
       ArrayList theGroups = new ArrayList();
 
-      String usrName = userName;
+      String usrName = userName.split("@")[0];
       if (userNameAttr != null && !"".equals(userNameAttr)) {
         if (usrRecord.getAttributes() != null) {
           Attribute attr = usrRecord.getAttributes().get(userNameAttr);
           if (attr != null) {
             usrName = attr.get().toString();
+            if (addUserRecord) {
+              NamingEnumeration values = attr.getAll();
+              while (values.hasMore()) {
+                theGroups.add(values.next().toString());
+              }
+            }
           }
         }
       }
-      if (addUserRecord) {
-        theGroups.add(usrName);
-      }
 
-      //specify the LDAP search filter
-      String searchFilter = groupSearch.replaceAll("\\{0\\}", escapeLDAPSearchFilter(groupMemberDN ? usrRecord.getNameInNamespace() : usrName));
-      SearchControls searchCtls = new SearchControls();
-      searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);
-      String returnedAtts[] = {groupNameAttr};
-      searchCtls.setReturningAttributes(returnedAtts);
-
-      //Search for tokens.  Since every user *must* have a SID, the "no user" detection should be safe.
-      NamingEnumeration answer = session.search(groupBase, searchFilter, searchCtls);
-
-      while (answer.hasMoreElements()) {
-        SearchResult sr = (SearchResult) answer.next();
-        Attributes attrs = sr.getAttributes();
-        if (attrs != null) {
-          theGroups.add(attrs.get(groupNameAttr).get().toString());
+      if (groupSearch != null && !groupSearch.isEmpty()) {
+        //specify the LDAP search filter
+        String searchFilter = groupSearch.replaceAll("\\{0\\}", escapeLDAPSearchFilter(groupMemberDN ? usrRecord.getNameInNamespace() : usrName));
+        SearchControls searchCtls = new SearchControls();
+        searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);
+        String returnedAtts[] = {groupNameAttr};
+        searchCtls.setReturningAttributes(returnedAtts);
+
+        NamingEnumeration answer = session.search(groupBase, searchFilter, searchCtls);
+
+        while (answer.hasMoreElements()) {
+          SearchResult sr = (SearchResult) answer.next();
+          Attributes attrs = sr.getAttributes();
+          if (attrs != null) {
+            NamingEnumeration values = attrs.get(groupNameAttr).getAll();
+            while (values.hasMore()) {
+              theGroups.add(values.next().toString());
+            }
+          }
         }
       }
 
@@ -372,12 +379,12 @@ public class LDAPAuthority extends org.a
   }
 
   /**
-  * Obtain the default access tokens for a given user name.
-  *
-  * @param userName is the user name or identifier.
-  * @return the default response tokens, presuming that the connect method
-  * fails.
-  */
+   * Obtain the default access tokens for a given user name.
+   *
+   * @param userName is the user name or identifier.
+   * @return the default response tokens, presuming that the connect method
+   * fails.
+   */
   @Override
   public AuthorizationResponse getDefaultAuthorizationResponse(String userName) {
     // The default response if the getConnection method fails
@@ -388,235 +395,218 @@ public class LDAPAuthority extends org.a
   //
   // These support methods are involved in setting up authority connection configuration information. The configuration methods cannot assume that the
   // current authority object is connected.  That is why they receive a thread context argument.
-  
   /**
-  * Output the configuration header section. This method is called in the
-  * head section of the connector's configuration page. Its purpose is to add
-  * the required tabs to the list, and to output any javascript methods that
-  * might be needed by the configuration editing HTML.
-  *
-  * @param threadContext is the local thread context.
-  * @param out is the output to which any HTML should be sent.
-  * @param parameters are the configuration parameters, as they currently
-  * exist, for this connection being configured.
-  * @param tabsArray is an array of tab names. Add to this array any tab
-  * names that are specific to the connector.
-  */
+   * Output the configuration header section. This method is called in the head
+   * section of the connector's configuration page. Its purpose is to add the
+   * required tabs to the list, and to output any javascript methods that might
+   * be needed by the configuration editing HTML.
+   *
+   * @param threadContext is the local thread context.
+   * @param out is the output to which any HTML should be sent.
+   * @param parameters are the configuration parameters, as they currently
+   * exist, for this connection being configured.
+   * @param tabsArray is an array of tab names. Add to this array any tab names
+   * that are specific to the connector.
+   */
   @Override
   public void outputConfigurationHeader(IThreadContext threadContext, IHTTPOutput out, Locale locale, ConfigParams parameters, List<String> tabsArray)
     throws ManifoldCFException, IOException {
-    tabsArray.add(Messages.getString(locale,"LDAP.LDAP"));
+    tabsArray.add(Messages.getString(locale, "LDAP.LDAP"));
     out.print(
-"<script type=\"text/javascript\">\n"+
-"<!--\n"+
-"function checkConfig() {\n"+
-"  if (editconnection.ldapServerName.value.indexOf(\"/\") != -1) {\n"+
-"    alert(\""+Messages.getBodyJavascriptString(locale,"LDAP.ServerNameCannotIncludeSlash")+"\");\n"+
-"    editconnection.ldapServerName.focus();\n"+
-"    return false;\n"+
-"  }\n"+
-"  if (editconnection.ldapServerPort.value != \"\" && !isInteger(editconnection.ldapServerPort.value)) {\n"+
-"    alert(\""+Messages.getBodyJavascriptString(locale,"LDAP.ServerPortMustBeAnInteger")+"\");\n"+
-"    editconnection.ldapServerPort.focus();\n"+
-"    return false;\n"+
-"  }\n"+
-"  if (editconnection.ldapServerBase.value.indexOf(\"/\") != -1) {\n"+
-"    alert(\""+Messages.getBodyJavascriptString(locale,"LDAP.ServerBaseCannotIncludeSlash")+"\");\n"+
-"    editconnection.ldapServerBase.focus();\n"+
-"    return false;\n"+
-"  }\n"+
-"  if (editconnection.ldapUserSearch.value != \"\" && editconnection.ldapUserSearch.value.indexOf(\"{0}\") == -1) {\n"+
-"    alert(\""+Messages.getBodyJavascriptString(locale,"LDAP.UserSearchMustIncludeSubstitution")+"\");\n"+
-"    editconnection.ldapUserSearch.focus();\n"+
-"    return false;\n"+
-"  }\n"+
-"  if (editconnection.ldapGroupSearch.value != \"\" && editconnection.ldapGroupSearch.value.indexOf(\"{0}\") == -1) {\n"+
-"    alert(\""+Messages.getBodyJavascriptString(locale,"LDAP.GroupSearchMustIncludeSubstitution")+"\");\n"+
-"    editconnection.ldapGroupSearch.focus();\n"+
-"    return false;\n"+
-"  }\n"+
-"  return true;\n"+ 
-"}\n"+ 
-"\n"+
-"function checkConfigForSave() {\n"+ 
-"  if (editconnection.ldapServerName.value == \"\") {\n"+
-"    alert(\""+Messages.getBodyJavascriptString(locale,"LDAP.ServerNameCannotBeBlank")+"\");\n"+
-"    SelectTab(\""+Messages.getBodyJavascriptString(locale,"LDAP.LDAP")+"\");\n"+
-"    editconnection.ldapServerName.focus();\n"+
-"    return false;\n"+
-"  }\n"+
-"  if (editconnection.ldapServerPort.value == \"\") {\n"+
-"    alert(\""+Messages.getBodyJavascriptString(locale,"LDAP.ServerPortCannotBeBlank")+"\");\n"+
-"    SelectTab(\""+Messages.getBodyJavascriptString(locale,"LDAP.LDAP")+"\");\n"+
-"    editconnection.ldapServerPort.focus();\n"+
-"    return false;\n"+
-"  }\n"+
-"  if (editconnection.ldapUserSearch.value == \"\") {\n"+
-"    alert(\""+Messages.getBodyJavascriptString(locale,"LDAP.UserSearchCannotBeBlank")+"\");\n"+
-"    SelectTab(\""+Messages.getBodyJavascriptString(locale,"LDAP.LDAP")+"\");\n"+
-"    editconnection.ldapUserSearch.focus();\n"+
-"    return false;\n"+
-"  }\n"+
-"  if (editconnection.ldapGroupSearch.value == \"\") {\n"+
-"    alert(\""+Messages.getBodyJavascriptString(locale,"LDAP.GroupSearchCannotBeBlank")+"\");\n"+
-"    SelectTab(\""+Messages.getBodyJavascriptString(locale,"LDAP.LDAP")+"\");\n"+
-"    editconnection.ldapGroupSearch.focus();\n"+
-"    return false;\n"+
-"  }\n"+
-"  if (editconnection.ldapGroupNameAttr.value == \"\") {\n"+
-"    alert(\""+Messages.getBodyJavascriptString(locale,"LDAP.GroupNameAttrCannotBeBlank")+"\");\n"+
-"    SelectTab(\""+Messages.getBodyJavascriptString(locale,"LDAP.LDAP")+"\");\n"+
-"    editconnection.ldapGroupNameAttr.focus();\n"+
-"    return false;\n"+
-"  }\n"+
-"  if (editconnection.ldapUserSearch.value != \"\" && editconnection.ldapUserSearch.value.indexOf(\"{0}\") == -1) {\n"+
-"    alert(\""+Messages.getBodyJavascriptString(locale,"LDAP.UserSearchMustIncludeSubstitution")+"\");\n"+
-"    SelectTab(\""+Messages.getBodyJavascriptString(locale,"LDAP.LDAP")+"\");\n"+
-"    editconnection.ldapUserSearch.focus();\n"+
-"    return false;\n"+
-"  }\n"+
-"  if (editconnection.ldapGroupSearch.value != \"\" && editconnection.ldapGroupSearch.value.indexOf(\"{0}\") == -1) {\n"+
-"    alert(\""+Messages.getBodyJavascriptString(locale,"LDAP.GroupSearchMustIncludeSubstitution")+"\");\n"+
-"    SelectTab(\""+Messages.getBodyJavascriptString(locale,"LDAP.LDAP")+"\");\n"+
-"    editconnection.ldapGroupSearch.focus();\n"+
-"    return false;\n"+
-"  }\n"+
-"  if (editconnection.ldapServerPort.value != \"\" && !isInteger(editconnection.ldapServerPort.value)) {\n"+
-"    alert(\""+Messages.getBodyJavascriptString(locale,"LDAP.ServerPortMustBeAnInteger")+"\");\n"+
-"    SelectTab(\""+Messages.getBodyJavascriptString(locale,"LDAP.LDAP")+"\");\n"+
-"    editconnection.ldapServerPort.focus();\n"+
-"    return false;\n"+
-"  }\n"+
-"  if (editconnection.ldapServerName.value.indexOf(\"/\") != -1) {\n"+
-"    alert(\""+Messages.getBodyJavascriptString(locale,"LDAP.ServerNameCannotIncludeSlash")+"\");\n"+
-"    SelectTab(\""+Messages.getBodyJavascriptString(locale,"LDAP.LDAP")+"\");\n"+
-"    editconnection.ldapServerName.focus();\n"+
-"    return false;\n"+
-"  }\n"+
-"  if (editconnection.ldapServerBase.value.indexOf(\"/\") != -1) {\n"+
-"    alert(\""+Messages.getBodyJavascriptString(locale,"LDAP.ServerBaseCannotIncludeSlash")+"\");\n"+
-"    editconnection.ldapServerBase.focus();\n"+
-"    return false;\n"+
-"  }\n"+
-"  return true;\n"+ 
-"}\n"+ 
-"//-->\n"+
-"</script>\n"
-    );
-  }
-
-  /**
-  * Output the configuration body section. This method is called in the body
-  * section of the authority connector's configuration page. Its purpose is
-  * to present the required form elements for editing. The coder can presume
-  * that the HTML that is output from this configuration will be within
-  * appropriate <html>, <body>, and <form> tags. The name of the form is
-  * "editconnection".
-  *
-  * @param threadContext is the local thread context.
-  * @param out is the output to which any HTML should be sent.
-  * @param parameters are the configuration parameters, as they currently
-  * exist, for this connection being configured.
-  * @param tabName is the current tab name.
-  */
+      "<script type=\"text/javascript\">\n"
+      + "<!--\n"
+      + "function checkConfig() {\n"
+      + "  if (editconnection.ldapServerName.value.indexOf(\"/\") != -1) {\n"
+      + "    alert(\"" + Messages.getBodyJavascriptString(locale, "LDAP.ServerNameCannotIncludeSlash") + "\");\n"
+      + "    editconnection.ldapServerName.focus();\n"
+      + "    return false;\n"
+      + "  }\n"
+      + "  if (editconnection.ldapServerPort.value != \"\" && !isInteger(editconnection.ldapServerPort.value)) {\n"
+      + "    alert(\"" + Messages.getBodyJavascriptString(locale, "LDAP.ServerPortMustBeAnInteger") + "\");\n"
+      + "    editconnection.ldapServerPort.focus();\n"
+      + "    return false;\n"
+      + "  }\n"
+      + "  if (editconnection.ldapServerBase.value.indexOf(\"/\") != -1) {\n"
+      + "    alert(\"" + Messages.getBodyJavascriptString(locale, "LDAP.ServerBaseCannotIncludeSlash") + "\");\n"
+      + "    editconnection.ldapServerBase.focus();\n"
+      + "    return false;\n"
+      + "  }\n"
+      + "  if (editconnection.ldapUserSearch.value != \"\" && editconnection.ldapUserSearch.value.indexOf(\"{0}\") == -1) {\n"
+      + "    alert(\"" + Messages.getBodyJavascriptString(locale, "LDAP.UserSearchMustIncludeSubstitution") + "\");\n"
+      + "    editconnection.ldapUserSearch.focus();\n"
+      + "    return false;\n"
+      + "  }\n"
+      + "  if (editconnection.ldapGroupSearch.value != \"\" && editconnection.ldapGroupSearch.value.indexOf(\"{0}\") == -1) {\n"
+      + "    alert(\"" + Messages.getBodyJavascriptString(locale, "LDAP.GroupSearchMustIncludeSubstitution") + "\");\n"
+      + "    editconnection.ldapGroupSearch.focus();\n"
+      + "    return false;\n"
+      + "  }\n"
+      + "  return true;\n"
+      + "}\n"
+      + "\n"
+      + "function checkConfigForSave() {\n"
+      + "  if (editconnection.ldapServerName.value == \"\") {\n"
+      + "    alert(\"" + Messages.getBodyJavascriptString(locale, "LDAP.ServerNameCannotBeBlank") + "\");\n"
+      + "    SelectTab(\"" + Messages.getBodyJavascriptString(locale, "LDAP.LDAP") + "\");\n"
+      + "    editconnection.ldapServerName.focus();\n"
+      + "    return false;\n"
+      + "  }\n"
+      + "  if (editconnection.ldapServerPort.value == \"\") {\n"
+      + "    alert(\"" + Messages.getBodyJavascriptString(locale, "LDAP.ServerPortCannotBeBlank") + "\");\n"
+      + "    SelectTab(\"" + Messages.getBodyJavascriptString(locale, "LDAP.LDAP") + "\");\n"
+      + "    editconnection.ldapServerPort.focus();\n"
+      + "    return false;\n"
+      + "  }\n"
+      + "  if (editconnection.ldapUserSearch.value == \"\") {\n"
+      + "    alert(\"" + Messages.getBodyJavascriptString(locale, "LDAP.UserSearchCannotBeBlank") + "\");\n"
+      + "    SelectTab(\"" + Messages.getBodyJavascriptString(locale, "LDAP.LDAP") + "\");\n"
+      + "    editconnection.ldapUserSearch.focus();\n"
+      + "    return false;\n"
+      + "  }\n"
+      + "  if (editconnection.ldapGroupSearch.value == \"\") {\n"
+      + "    alert(\"" + Messages.getBodyJavascriptString(locale, "LDAP.GroupSearchCannotBeBlank") + "\");\n"
+      + "    SelectTab(\"" + Messages.getBodyJavascriptString(locale, "LDAP.LDAP") + "\");\n"
+      + "    editconnection.ldapGroupSearch.focus();\n"
+      + "    return false;\n"
+      + "  }\n"
+      + "  if (editconnection.ldapGroupNameAttr.value == \"\") {\n"
+      + "    alert(\"" + Messages.getBodyJavascriptString(locale, "LDAP.GroupNameAttrCannotBeBlank") + "\");\n"
+      + "    SelectTab(\"" + Messages.getBodyJavascriptString(locale, "LDAP.LDAP") + "\");\n"
+      + "    editconnection.ldapGroupNameAttr.focus();\n"
+      + "    return false;\n"
+      + "  }\n"
+      + "  if (editconnection.ldapUserSearch.value != \"\" && editconnection.ldapUserSearch.value.indexOf(\"{0}\") == -1) {\n"
+      + "    alert(\"" + Messages.getBodyJavascriptString(locale, "LDAP.UserSearchMustIncludeSubstitution") + "\");\n"
+      + "    SelectTab(\"" + Messages.getBodyJavascriptString(locale, "LDAP.LDAP") + "\");\n"
+      + "    editconnection.ldapUserSearch.focus();\n"
+      + "    return false;\n"
+      + "  }\n"
+      + "  if (editconnection.ldapGroupSearch.value != \"\" && editconnection.ldapGroupSearch.value.indexOf(\"{0}\") == -1) {\n"
+      + "    alert(\"" + Messages.getBodyJavascriptString(locale, "LDAP.GroupSearchMustIncludeSubstitution") + "\");\n"
+      + "    SelectTab(\"" + Messages.getBodyJavascriptString(locale, "LDAP.LDAP") + "\");\n"
+      + "    editconnection.ldapGroupSearch.focus();\n"
+      + "    return false;\n"
+      + "  }\n"
+      + "  if (editconnection.ldapServerPort.value != \"\" && !isInteger(editconnection.ldapServerPort.value)) {\n"
+      + "    alert(\"" + Messages.getBodyJavascriptString(locale, "LDAP.ServerPortMustBeAnInteger") + "\");\n"
+      + "    SelectTab(\"" + Messages.getBodyJavascriptString(locale, "LDAP.LDAP") + "\");\n"
+      + "    editconnection.ldapServerPort.focus();\n"
+      + "    return false;\n"
+      + "  }\n"
+      + "  if (editconnection.ldapServerName.value.indexOf(\"/\") != -1) {\n"
+      + "    alert(\"" + Messages.getBodyJavascriptString(locale, "LDAP.ServerNameCannotIncludeSlash") + "\");\n"
+      + "    SelectTab(\"" + Messages.getBodyJavascriptString(locale, "LDAP.LDAP") + "\");\n"
+      + "    editconnection.ldapServerName.focus();\n"
+      + "    return false;\n"
+      + "  }\n"
+      + "  if (editconnection.ldapServerBase.value.indexOf(\"/\") != -1) {\n"
+      + "    alert(\"" + Messages.getBodyJavascriptString(locale, "LDAP.ServerBaseCannotIncludeSlash") + "\");\n"
+      + "    editconnection.ldapServerBase.focus();\n"
+      + "    return false;\n"
+      + "  }\n"
+      + "  return true;\n"
+      + "}\n"
+      + "//-->\n"
+      + "</script>\n");
+  }
+
+  /**
+   * Output the configuration body section. This method is called in the body
+   * section of the authority connector's configuration page. Its purpose is to
+   * present the required form elements for editing. The coder can presume that
+   * the HTML that is output from this configuration will be within appropriate
+   * <html>, <body>, and <form> tags. The name of the form is "editconnection".
+   *
+   * @param threadContext is the local thread context.
+   * @param out is the output to which any HTML should be sent.
+   * @param parameters are the configuration parameters, as they currently
+   * exist, for this connection being configured.
+   * @param tabName is the current tab name.
+   */
   @Override
   public void outputConfigurationBody(IThreadContext threadContext, IHTTPOutput out, Locale locale, ConfigParams parameters, String tabName)
     throws ManifoldCFException, IOException {
-    String fServerName = getParam( parameters, "ldapServerName", "");
-    String fServerPort = getParam( parameters, "ldapServerPort", "389");
-    String fServerBase = getParam( parameters, "ldapServerBase", "");
-    
-    String fUserBase = getParam( parameters, "ldapUserBase", "ou=People" );
-    String fUserSearch = getParam( parameters, "ldapUserSearch", "(&(objectClass=inetOrgPerson)(uid={0}))" );
+    String fServerName = getParam(parameters, "ldapServerName", "");
+    String fServerPort = getParam(parameters, "ldapServerPort", "389");
+    String fServerBase = getParam(parameters, "ldapServerBase", "");
+
+    String fUserBase = getParam(parameters, "ldapUserBase", "ou=People");
+    String fUserSearch = getParam(parameters, "ldapUserSearch", "(&(objectClass=inetOrgPerson)(uid={0}))");
     String fUserNameAttr = getParam(parameters, "ldapUserNameAttr", "uid");
     boolean fAddUserRecord = "1".equals(getParam(parameters, "ldapAddUserRecord", ""));
-    
-    String fGroupBase = getParam( parameters, "ldapGroupBase", "ou=Groups" );
-    String fGroupSearch = getParam( parameters, "ldapGroupSearch", "(&(objectClass=groupOfNames)(member={0}))" );
-    String fGroupNameAttr = getParam( parameters, "ldapGroupNameAttr", "cn" );
+
+    String fGroupBase = getParam(parameters, "ldapGroupBase", "ou=Groups");
+    String fGroupSearch = getParam(parameters, "ldapGroupSearch", "(&(objectClass=groupOfNames)(member={0}))");
+    String fGroupNameAttr = getParam(parameters, "ldapGroupNameAttr", "cn");
     boolean fGroupMemberDN = "1".equals(getParam(parameters, "ldapGroupMemberDn", ""));
-    
+
     String fBindUser = getParam(parameters, "ldapBindUser", "");
-    String fBindPass = getParam(parameters, "ldapBindPass", null);
-    if (fBindPass != null)
-      fBindPass = ManifoldCF.deobfuscate(fBindPass);
-    else
-      fBindPass = "";
+    String fBindPass = "";
+    try {
+      fBindPass = ManifoldCF.deobfuscate(getParam(parameters, "ldapBindPass", ""));
+    } catch (ManifoldCFException ex) {
+      //ignore
+    }
 
-    if (tabName.equals(Messages.getString(locale,"LDAP.LDAP"))) {
+    if (tabName.equals(Messages.getString(locale, "LDAP.LDAP"))) {
       out.print(
-"<table class=\"displaytable\">\n"+
-" <tr><td class=\"separator\" colspan=\"2\"><hr/></td></tr>\n"+
-                    
-" <tr>\n"+
-"  <td class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.LDAPServerNameColon")+"</nobr></td>\n"+
-"  <td class=\"value\"><input type=\"text\" size=\"32\" name=\"ldapServerName\" value=\""+Encoder.attributeEscape(fServerName)+"\"/></td>\n"+
-" </tr>\n"+
-
-" <tr>\n"+
-"  <td class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.LDAPServerPortColon")+"</nobr></td>\n"+
-"  <td class=\"value\"><input type=\"text\" size=\"5\" name=\"ldapServerPort\" value=\""+Encoder.attributeEscape(fServerPort)+"\"/></td>\n"+
-" </tr>\n"+
-
-" <tr>\n"+
-"  <td class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.LDAPServerBaseColon")+"</nobr></td>\n"+
-"  <td class=\"value\"><input type=\"text\" size=\"64\" name=\"ldapServerBase\" value=\""+Encoder.attributeEscape(fServerBase)+"\"/></td>\n"+
-" </tr>\n"+
-
-" <tr>\n"+
-"  <td class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.LDAPBindUserColon")+"</nobr></td>\n"+
-"  <td class=\"value\"><input type=\"text\" size=\"64\" name=\"ldapBindUser\" value=\""+Encoder.attributeEscape(fBindUser)+"\"/></td>\n"+
-" </tr>\n"+
-
-" <tr>\n"+
-"  <td class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.LDAPBindPasswordColon")+"</nobr></td>\n"+
-"  <td class=\"value\"><input type=\"password\" size=\"64\" name=\"ldapBindPass\" value=\""+Encoder.attributeEscape(fBindPass)+"\"/></td>\n"+
-" </tr>\n"+
-
-" <tr><td class=\"separator\" colspan=\"2\"><hr/></td></tr>\n"+
-" <tr>\n"+
-"  <td class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.UserSearchBaseColon")+"</nobr></td>\n"+
-"  <td class=\"value\"><input type=\"text\" size=\"64\" name=\"ldapUserBase\" value=\""+Encoder.attributeEscape(fUserBase)+"\"/></td>\n"+
-" </tr>\n"+
-
-" <tr>\n"+
-"  <td class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.UserSearchFilterColon")+"</nobr></td>\n"+
-"  <td class=\"value\"><input type=\"text\" size=\"64\" name=\"ldapUserSearch\" value=\""+Encoder.attributeEscape(fUserSearch)+"\"/></td>\n"+
-" </tr>\n"+
-
-" <tr>\n"+
-"  <td class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.AddUserAuthColon")+"</nobr></td>\n"+
-"  <td class=\"value\"><input type=\"checkbox\" value=\"1\" name=\"ldapAddUserRecord\" " + (fAddUserRecord ? "checked=\"true\"" : "") + "/></td>\n"+
-" </tr>\n"+
-
-" <tr>\n"+
-"  <td class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.UserNameAttrColon")+"</nobr></td>\n"+
-"  <td class=\"value\"><input type=\"text\" size=\"64\" name=\"ldapUserNameAttr\" value=\"" + Encoder.attributeEscape(fUserNameAttr) + "\"/></td>\n"+
-" </tr>\n"+
-
-" <tr><td class=\"separator\" colspan=\"2\"><hr/></td></tr>\n" +
-" <tr>\n"+
-"  <td class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.GroupSearchBaseColon")+"</nobr></td>\n"+
-"  <td class=\"value\"><input type=\"text\" size=\"64\" name=\"ldapGroupBase\" value=\""+Encoder.attributeEscape(fGroupBase)+"\"/></td>\n"+
-" </tr>\n"+
-
-" <tr>\n"+
-"  <td class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.GroupSearchFilterColon")+"</nobr></td>\n"+
-"  <td class=\"value\"><input type=\"text\" size=\"64\" name=\"ldapGroupSearch\" value=\""+Encoder.attributeEscape(fGroupSearch)+"\"/></td>\n"+
-" </tr>\n"+
-
-" <tr>\n"+
-"  <td class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.GroupNameAttributeColon")+"</nobr></td>\n"+
-"  <td class=\"value\"><input type=\"text\" size=\"64\" name=\"ldapGroupNameAttr\" value=\""+Encoder.attributeEscape(fGroupNameAttr)+"\"/></td>\n"+
-" </tr>\n"+
-
-" <tr>\n"+
-"  <td class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.GroupMemberDnColon")+"</nobr></td>\n"+
-"  <td class=\"value\"><input type=\"checkbox\" value=\"1\" name=\"ldapGroupMemberDn\" " + (fGroupMemberDN ? "checked=\"true\"" : "") + "/></td>\n"+
-" </tr>\n"+
-
-"</table>\n"
-      );
+        "<table class=\"displaytable\">\n"
+        + " <tr><td class=\"separator\" colspan=\"2\"><hr/></td></tr>\n"
+        + " <tr>\n"
+        + "  <td class=\"description\"><nobr>" + Messages.getBodyString(locale, "LDAP.LDAPServerNameColon") + "</nobr></td>\n"
+        + "  <td class=\"value\"><input type=\"text\" size=\"32\" name=\"ldapServerName\" value=\"" + Encoder.attributeEscape(fServerName) + "\"/></td>\n"
+        + " </tr>\n"
+        + " <tr>\n"
+        + "  <td class=\"description\"><nobr>" + Messages.getBodyString(locale, "LDAP.LDAPServerPortColon") + "</nobr></td>\n"
+        + "  <td class=\"value\"><input type=\"text\" size=\"5\" name=\"ldapServerPort\" value=\"" + Encoder.attributeEscape(fServerPort) + "\"/></td>\n"
+        + " </tr>\n"
+        + " <tr>\n"
+        + "  <td class=\"description\"><nobr>" + Messages.getBodyString(locale, "LDAP.LDAPServerBaseColon") + "</nobr></td>\n"
+        + "  <td class=\"value\"><input type=\"text\" size=\"64\" name=\"ldapServerBase\" value=\"" + Encoder.attributeEscape(fServerBase) + "\"/></td>\n"
+        + " </tr>\n"
+        + " <tr>\n"
+        + "  <td class=\"description\"><nobr>" + Messages.getBodyString(locale, "LDAP.LDAPBindUserColon") + "</nobr></td>\n"
+        + "  <td class=\"value\"><input type=\"text\" size=\"64\" name=\"ldapBindUser\" value=\"" + Encoder.attributeEscape(fBindUser) + "\"/></td>\n"
+        + " </tr>\n"
+        + " <tr>\n"
+        + "  <td class=\"description\"><nobr>" + Messages.getBodyString(locale, "LDAP.LDAPBindPasswordColon") + "</nobr></td>\n"
+        + "  <td class=\"value\"><input type=\"password\" size=\"64\" name=\"ldapBindPass\" value=\"" + Encoder.attributeEscape(fBindPass) + "\"/></td>\n"
+        + " </tr>\n"
+        + " <tr><td class=\"separator\" colspan=\"2\"><hr/></td></tr>\n"
+        + " <tr>\n"
+        + "  <td class=\"description\"><nobr>" + Messages.getBodyString(locale, "LDAP.UserSearchBaseColon") + "</nobr></td>\n"
+        + "  <td class=\"value\"><input type=\"text\" size=\"64\" name=\"ldapUserBase\" value=\"" + Encoder.attributeEscape(fUserBase) + "\"/></td>\n"
+        + " </tr>\n"
+        + " <tr>\n"
+        + "  <td class=\"description\"><nobr>" + Messages.getBodyString(locale, "LDAP.UserSearchFilterColon") + "</nobr></td>\n"
+        + "  <td class=\"value\"><input type=\"text\" size=\"64\" name=\"ldapUserSearch\" value=\"" + Encoder.attributeEscape(fUserSearch) + "\"/></td>\n"
+        + " </tr>\n"
+        + " <tr>\n"
+        + "  <td class=\"description\"><nobr>" + Messages.getBodyString(locale, "LDAP.AddUserAuthColon") + "</nobr></td>\n"
+        + "  <td class=\"value\"><input type=\"checkbox\" value=\"1\" name=\"ldapAddUserRecord\" " + (fAddUserRecord ? "checked=\"true\"" : "") + "/></td>\n"
+        + " </tr>\n"
+        + " <tr>\n"
+        + "  <td class=\"description\"><nobr>" + Messages.getBodyString(locale, "LDAP.UserNameAttrColon") + "</nobr></td>\n"
+        + "  <td class=\"value\"><input type=\"text\" size=\"64\" name=\"ldapUserNameAttr\" value=\"" + Encoder.attributeEscape(fUserNameAttr) + "\"/></td>\n"
+        + " </tr>\n"
+        + " <tr><td class=\"separator\" colspan=\"2\"><hr/></td></tr>\n"
+        + " <tr>\n"
+        + "  <td class=\"description\"><nobr>" + Messages.getBodyString(locale, "LDAP.GroupSearchBaseColon") + "</nobr></td>\n"
+        + "  <td class=\"value\"><input type=\"text\" size=\"64\" name=\"ldapGroupBase\" value=\"" + Encoder.attributeEscape(fGroupBase) + "\"/></td>\n"
+        + " </tr>\n"
+        + " <tr>\n"
+        + "  <td class=\"description\"><nobr>" + Messages.getBodyString(locale, "LDAP.GroupSearchFilterColon") + "</nobr></td>\n"
+        + "  <td class=\"value\"><input type=\"text\" size=\"64\" name=\"ldapGroupSearch\" value=\"" + Encoder.attributeEscape(fGroupSearch) + "\"/></td>\n"
+        + " </tr>\n"
+        + " <tr>\n"
+        + "  <td class=\"description\"><nobr>" + Messages.getBodyString(locale, "LDAP.GroupNameAttributeColon") + "</nobr></td>\n"
+        + "  <td class=\"value\"><input type=\"text\" size=\"64\" name=\"ldapGroupNameAttr\" value=\"" + Encoder.attributeEscape(fGroupNameAttr) + "\"/></td>\n"
+        + " </tr>\n"
+        + " <tr>\n"
+        + "  <td class=\"description\"><nobr>" + Messages.getBodyString(locale, "LDAP.GroupMemberDnColon") + "</nobr></td>\n"
+        + "  <td class=\"value\"><input type=\"checkbox\" value=\"1\" name=\"ldapGroupMemberDn\" " + (fGroupMemberDN ? "checked=\"true\"" : "") + "/></td>\n"
+        + " </tr>\n"
+        + "</table>\n");
     } else {
       out.print("<input type=\"hidden\" name=\"ldapServerName\" value=\"" + Encoder.attributeEscape(fServerName) + "\"/>\n");
       out.print("<input type=\"hidden\" name=\"ldapServerPort\" value=\"" + Encoder.attributeEscape(fServerPort) + "\"/>\n");
@@ -634,62 +624,64 @@ public class LDAPAuthority extends org.a
     }
   }
 
-  private String getParam( ConfigParams parameters, String name, String def) {
+  private String getParam(ConfigParams parameters, String name, String def) {
     return parameters.getParameter(name) != null ? parameters.getParameter(name) : def;
   }
 
-  private String getViewParam( ConfigParams parameters, String name) {
+  private String getViewParam(ConfigParams parameters, String name) {
     return parameters.getParameter(name) != null ? parameters.getParameter(name) : "";
   }
 
-  private boolean copyParam( IPostParameters variableContext, ConfigParams parameters, String name) {
-    String val = variableContext.getParameter( name );
-    if( val == null ){
+  private boolean copyParam(IPostParameters variableContext, ConfigParams parameters, String name) {
+    String val = variableContext.getParameter(name);
+    if (val == null) {
       return false;
     }
-    parameters.setParameter( name, val );
+    parameters.setParameter(name, val);
     return true;
   }
 
-  private void copyParam2(IPostParameters variableContext, ConfigParams parameters, String name) {
+  private boolean copyParam(IPostParameters variableContext, ConfigParams parameters, String name, String def) {
     String val = variableContext.getParameter(name);
     if (val == null) {
-      val = "";
+      val = def;
     }
     parameters.setParameter(name, val);
+    return true;
   }
 
   /**
-  * Process a configuration post. This method is called at the start of the
-  * authority connector's configuration page, whenever there is a possibility
-  * that form data for a connection has been posted. Its purpose is to gather
-  * form information and modify the configuration parameters accordingly. The
-  * name of the posted form is "editconnection".
-  *
-  * @param threadContext is the local thread context.
-  * @param variableContext is the set of variables available from the post,
-  * including binary file post information.
-  * @param parameters are the configuration parameters, as they currently
-  * exist, for this connection being configured.
-  * @return null if all is well, or a string error message if there is an
-  * error that should prevent saving of the connection (and cause a
-  * redirection to an error page).
-  */
+   * Process a configuration post. This method is called at the start of the
+   * authority connector's configuration page, whenever there is a possibility
+   * that form data for a connection has been posted. Its purpose is to gather
+   * form information and modify the configuration parameters accordingly. The
+   * name of the posted form is "editconnection".
+   *
+   * @param threadContext is the local thread context.
+   * @param variableContext is the set of variables available from the post,
+   * including binary file post information.
+   * @param parameters are the configuration parameters, as they currently
+   * exist, for this connection being configured.
+   * @return null if all is well, or a string error message if there is an error
+   * that should prevent saving of the connection (and cause a redirection to an
+   * error page).
+   */
   @Override
   public String processConfigurationPost(IThreadContext threadContext, IPostParameters variableContext, Locale locale, ConfigParams parameters)
     throws ManifoldCFException {
-    copyParam(variableContext, parameters, "ldapServerName" );
-    copyParam(variableContext, parameters, "ldapServerPort" );
-    copyParam(variableContext, parameters, "ldapServerBase" );
-    copyParam(variableContext, parameters, "ldapUserBase" );
-    copyParam(variableContext, parameters, "ldapUserSearch" );
-    copyParam(variableContext, parameters, "ldapUserNameAttr" );
-    copyParam(variableContext, parameters, "ldapGroupBase" );
-    copyParam(variableContext, parameters, "ldapGroupSearch" );
-    copyParam(variableContext, parameters, "ldapGroupNameAttr" );
-    
-    copyParam(variableContext, parameters, "ldapGroupMemberDn");
-    copyParam(variableContext, parameters, "ldapAddUserRecord");
+    copyParam(variableContext, parameters, "ldapServerName");
+    copyParam(variableContext, parameters, "ldapServerPort");
+    copyParam(variableContext, parameters, "ldapServerBase");
+    copyParam(variableContext, parameters, "ldapUserBase");
+    copyParam(variableContext, parameters, "ldapUserSearch");
+    copyParam(variableContext, parameters, "ldapUserNameAttr");
+    copyParam(variableContext, parameters, "ldapGroupBase");
+    copyParam(variableContext, parameters, "ldapGroupSearch");
+    copyParam(variableContext, parameters, "ldapGroupNameAttr");
+
+    copyParam(variableContext, parameters, "ldapGroupMemberDn", "0"); //checkbox boolean value
+    copyParam(variableContext, parameters, "ldapAddUserRecord", "0"); //checkbox boolean value
+
     copyParam(variableContext, parameters, "ldapBindUser");
     String bindPass = variableContext.getParameter("ldapBindPass");
     if (bindPass != null) {
@@ -700,106 +692,91 @@ public class LDAPAuthority extends org.a
   }
 
   /**
-  * View configuration. This method is called in the body section of the
-  * authority connector's view configuration page. Its purpose is to present
-  * the connection information to the user. The coder can presume that the
-  * HTML that is output from this configuration will be within appropriate
-  * <html> and <body> tags.
-  *
-  * @param threadContext is the local thread context.
-  * @param out is the output to which any HTML should be sent.
-  * @param parameters are the configuration parameters, as they currently
-  * exist, for this connection being configured.
-  */
+   * View configuration. This method is called in the body section of the
+   * authority connector's view configuration page. Its purpose is to present
+   * the connection information to the user. The coder can presume that the HTML
+   * that is output from this configuration will be within appropriate <html>
+   * and <body> tags.
+   *
+   * @param threadContext is the local thread context.
+   * @param out is the output to which any HTML should be sent.
+   * @param parameters are the configuration parameters, as they currently
+   * exist, for this connection being configured.
+   */
   @Override
   public void viewConfiguration(IThreadContext threadContext, IHTTPOutput out, Locale locale, ConfigParams parameters)
     throws ManifoldCFException, IOException {
-    String f_serverName = getViewParam( parameters, "ldapServerName" );
-    String f_serverPort = getViewParam( parameters, "ldapServerPort" );
-    String f_serverBase = getViewParam( parameters, "ldapServerBase" );
+    String f_serverName = getViewParam(parameters, "ldapServerName");
+    String f_serverPort = getViewParam(parameters, "ldapServerPort");
+    String f_serverBase = getViewParam(parameters, "ldapServerBase");
     String f_bindUser = getViewParam(parameters, "ldapBindUser");
 
-    String f_userBase = getViewParam( parameters, "ldapUserBase" );
-    String f_userSearch = getViewParam( parameters, "ldapUserSearch" );
-    String f_groupBase = getViewParam( parameters, "ldapGroupBase" );
-    String f_groupSearch = getViewParam( parameters, "ldapGroupSearch" );
-    String f_groupNameAttr = getViewParam( parameters, "ldapGroupNameAttr" );
-    
+    String f_userBase = getViewParam(parameters, "ldapUserBase");
+    String f_userSearch = getViewParam(parameters, "ldapUserSearch");
+    String f_groupBase = getViewParam(parameters, "ldapGroupBase");
+    String f_groupSearch = getViewParam(parameters, "ldapGroupSearch");
+    String f_groupNameAttr = getViewParam(parameters, "ldapGroupNameAttr");
+
     String f_userNameAttr = getViewParam(parameters, "ldapUserNameAttr");
     boolean f_groupMemberDN = "1".equals(getViewParam(parameters, "ldapGroupMemberDn"));
     boolean f_addUserRecord = "1".equals(getViewParam(parameters, "ldapAddUserRecord"));
 
     out.print(
-"<table class=\"displaytable\">\n"+
-" <tr><td class=\"separator\" colspan=\"2\"><hr/></td></tr>\n"+
-                    
-" <tr>\n"+
-"  <td class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.LDAPServerNameColon")+"</nobr></td>\n"+
-"  <td class=\"value\">"+Encoder.bodyEscape(f_serverName)+"</td>\n"+
-" </tr>\n"+
-
-" <tr>\n"+
-"  <td class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.LDAPServerPortColon")+"</nobr></td>\n"+
-"  <td class=\"value\">"+Encoder.bodyEscape(f_serverPort)+"</td>\n"+
-" </tr>\n"+
-
-" <tr>\n"+
-"  <td class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.LDAPServerBaseColon")+"</nobr></td>\n"+
-"  <td class=\"value\">"+Encoder.bodyEscape(f_serverBase)+"</td>\n"+
-" </tr>\n"+
-
-" <tr>\n"+
-"  <td class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.LDAPBindUserColon")+"</nobr></td>\n"+
-"  <td class=\"value\">"+Encoder.bodyEscape(f_bindUser)+"</td>\n"+
-" </tr>\n"+
-
-" <tr>\n"+
-"  <td class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.LDAPBindPasswordColon")+"</nobr></td>\n"+
-"  <td class=\"value\">*******</td>\n"+
-" </tr>\n"+
-
-" <tr>\n"+
-"  <td class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.UserSearchBaseColon")+"</nobr></td>\n"+
-"  <td class=\"value\">"+Encoder.bodyEscape(f_userBase)+"</td>\n"+
-" </tr>\n"+
-
-" <tr>\n"+
-"  <td class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.UserSearchFilterColon")+"</nobr></td>\n"+
-"  <td class=\"value\">"+Encoder.bodyEscape(f_userSearch)+"</td>\n"+
-" </tr>\n"+
-
-" <tr>\n"+
-"  <td class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.AddUserAuthColon")+"</nobr></td>\n"+
-"  <td class=\"value\">" + (f_addUserRecord ? "Y" : "N") + "</td>\n"+
-" </tr>\n"+
-
-" <tr>\n"+
-"  <td class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.UserNameAttrColon")+"</nobr></td>\n"+
-"  <td class=\"value\">" + Encoder.bodyEscape(f_userNameAttr) + "</td>\n"+
-" </tr>\n"+
-
-" <tr>\n"+
-"  <td class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.GroupSearchBaseColon")+"</nobr></td>\n"+
-"  <td class=\"value\">"+Encoder.bodyEscape(f_groupBase)+"</td>\n"+
-" </tr>\n"+
-
-" <tr>\n"+
-"  <td class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.GroupSearchFilterColon")+"</nobr></td>\n"+
-"  <td class=\"value\">"+Encoder.bodyEscape(f_groupSearch)+"</td>\n"+
-" </tr>\n"+
-
-" <tr>\n"+
-"  <td class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.GroupNameAttributeColon")+"</nobr></td>\n"+
-"  <td class=\"value\">"+Encoder.bodyEscape(f_groupNameAttr)+"</td>\n"+
-" </tr>\n"+
-
-" <tr>\n"+
-"  <td class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.GroupMemberDnColon")+"</nobr></td>\n"+
-"  <td class=\"value\">"+(f_groupMemberDN?"Y":"N")+"</td>\n"+
-" </tr>\n"+
-
-"</table>\n"
-    );
+      "<table class=\"displaytable\">\n"
+      + " <tr><td class=\"separator\" colspan=\"2\"><hr/></td></tr>\n"
+      + " <tr>\n"
+      + "  <td class=\"description\"><nobr>" + Messages.getBodyString(locale, "LDAP.LDAPServerNameColon") + "</nobr></td>\n"
+      + "  <td class=\"value\">" + Encoder.bodyEscape(f_serverName) + "</td>\n"
+      + " </tr>\n"
+      + " <tr>\n"
+      + "  <td class=\"description\"><nobr>" + Messages.getBodyString(locale, "LDAP.LDAPServerPortColon") + "</nobr></td>\n"
+      + "  <td class=\"value\">" + Encoder.bodyEscape(f_serverPort) + "</td>\n"
+      + " </tr>\n"
+      + " <tr>\n"
+      + "  <td class=\"description\"><nobr>" + Messages.getBodyString(locale, "LDAP.LDAPServerBaseColon") + "</nobr></td>\n"
+      + "  <td class=\"value\">" + Encoder.bodyEscape(f_serverBase) + "</td>\n"
+      + " </tr>\n"
+      + " <tr>\n"
+      + "  <td class=\"description\"><nobr>" + Messages.getBodyString(locale, "LDAP.LDAPBindUserColon") + "</nobr></td>\n"
+      + "  <td class=\"value\">" + Encoder.bodyEscape(f_bindUser) + "</td>\n"
+      + " </tr>\n"
+      + " <tr>\n"
+      + "  <td class=\"description\"><nobr>" + Messages.getBodyString(locale, "LDAP.LDAPBindPasswordColon") + "</nobr></td>\n"
+      + "  <td class=\"value\">*******</td>\n"
+      + " </tr>\n"
+      + " <tr>\n"
+      + "  <td class=\"description\"><nobr>" + Messages.getBodyString(locale, "LDAP.UserSearchBaseColon") + "</nobr></td>\n"
+      + "  <td class=\"value\">" + Encoder.bodyEscape(f_userBase) + "</td>\n"
+      + " </tr>\n"
+      + " <tr>\n"
+      + "  <td class=\"description\"><nobr>" + Messages.getBodyString(locale, "LDAP.UserSearchFilterColon") + "</nobr></td>\n"
+      + "  <td class=\"value\">" + Encoder.bodyEscape(f_userSearch) + "</td>\n"
+      + " </tr>\n"
+      + " <tr>\n"
+      + "  <td class=\"description\"><nobr>" + Messages.getBodyString(locale, "LDAP.AddUserAuthColon") + "</nobr></td>\n"
+      + "  <td class=\"value\">" + (f_addUserRecord ? "Y" : "N") + "</td>\n"
+      + " </tr>\n"
+      + " <tr>\n"
+      + "  <td class=\"description\"><nobr>" + Messages.getBodyString(locale, "LDAP.UserNameAttrColon") + "</nobr></td>\n"
+      + "  <td class=\"value\">" + Encoder.bodyEscape(f_userNameAttr) + "</td>\n"
+      + " </tr>\n"
+      + " <tr>\n"
+      + "  <td class=\"description\"><nobr>" + Messages.getBodyString(locale, "LDAP.GroupSearchBaseColon") + "</nobr></td>\n"
+      + "  <td class=\"value\">" + Encoder.bodyEscape(f_groupBase) + "</td>\n"
+      + " </tr>\n"
+      + " <tr>\n"
+      + "  <td class=\"description\"><nobr>" + Messages.getBodyString(locale, "LDAP.GroupSearchFilterColon") + "</nobr></td>\n"
+      + "  <td class=\"value\">" + Encoder.bodyEscape(f_groupSearch) + "</td>\n"
+      + " </tr>\n"
+      + " <tr>\n"
+      + "  <td class=\"description\"><nobr>" + Messages.getBodyString(locale, "LDAP.GroupNameAttributeColon") + "</nobr></td>\n"
+      + "  <td class=\"value\">" + Encoder.bodyEscape(f_groupNameAttr) + "</td>\n"
+      + " </tr>\n"
+      + " <tr>\n"
+      + "  <td class=\"description\"><nobr>" + Messages.getBodyString(locale, "LDAP.GroupMemberDnColon") + "</nobr></td>\n"
+      + "  <td class=\"value\">" + (f_groupMemberDN ? "Y" : "N") + "</td>\n"
+      + " </tr>\n"
+      + "</table>\n");
   }
 
   // Protected methods
@@ -810,12 +787,12 @@ public class LDAPAuthority extends org.a
    * @param userName (Domain Logon Name) is the user name or identifier.
    * @param searchBase (Full Domain Name for the search ie:
    * DC=qa-ad-76,DC=metacarta,DC=com)
-   * @return SearchResult for given domain user logon name. (Should throws
-   * an exception if user is not found.)
+   * @return SearchResult for given domain user logon name. (Should throws an
+   * exception if user is not found.)
    */
   protected SearchResult getUserEntry(LdapContext ctx, String userName)
     throws ManifoldCFException {
-    String searchFilter = userSearch.replaceAll("\\{0\\}", escapeDN(userName));
+    String searchFilter = userSearch.replaceAll("\\{0\\}", escapeDN(userName.split("@")[0]));
     SearchControls searchCtls = new SearchControls();
     searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);
 
@@ -915,7 +892,6 @@ public class LDAPAuthority extends org.a
     }
     return sb.toString();
   }
-  
   protected static StringSet emptyStringSet = new StringSet();
 
   /**

Added: manifoldcf/trunk/connectors/ldap/connector/src/main/native2ascii/org/apache/manifoldcf/authorities/authorities/ldap/common_pl_PL.properties
URL: http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/ldap/connector/src/main/native2ascii/org/apache/manifoldcf/authorities/authorities/ldap/common_pl_PL.properties?rev=1496653&view=auto
==============================================================================
--- manifoldcf/trunk/connectors/ldap/connector/src/main/native2ascii/org/apache/manifoldcf/authorities/authorities/ldap/common_pl_PL.properties (added)
+++ manifoldcf/trunk/connectors/ldap/connector/src/main/native2ascii/org/apache/manifoldcf/authorities/authorities/ldap/common_pl_PL.properties Tue Jun 25 22:05:04 2013
@@ -0,0 +1,50 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+LDAP.LDAP=LDAP
+LDAP.LDAPServerNameColon=Serwer LDAP:
+LDAP.LDAPServerPortColon=Port LDAP:
+LDAP.LDAPServerBaseColon=Baza DN (np. 'dc=office,dc=com'):
+LDAP.LDAPBindUserColon=Pod\u0142\u0105cz do serwera jako u\u017cytkownik (pozostaw puste je\u015bli niepotrzebne):
+LDAP.LDAPBindPasswordColon=Pod\u0142\u0105cz do serwera z has\u0142em:
+LDAP.UserSearchBaseColon=Baza wyszukiwania u\u017cytkownik\u00f3w:
+LDAP.UserSearchFilterColon=Filtr u\u017cytkownik\u00f3w:
+LDAP.GroupSearchBaseColon=Baza wyszukiwania grup:
+LDAP.GroupSearchFilterColon=Filtr grup:
+LDAP.GroupNameAttributeColon=Atrybut nazwy grupy:
+LDAP.AddUserAuthColon=Dodaj nazw\u0119 u\u017cytkownika jako token:
+LDAP.UserNameAttrColon=Atrybut nazwy u\u017cytkownika:
+LDAP.GroupMemberDnColon=Elementy atrybutu "member" s\u0105 w postaci DN:
+
+LDAP.ServerNameCannotBeBlank=Nazwa serwera nie mo\u017ce by\u0107 pusta
+LDAP.ServerPortCannotBeBlank=Port nie mo\u017ce by\u0107 pusty
+LDAP.UserSearchCannotBeBlank=Filtr u\u017cytkownik\u00f3w nie mo\u017ce by\u0107 pusty
+LDAP.GroupSearchCannotBeBlank=Filtr grup nie mo\u017ce by\u0107 pusty
+LDAP.GroupNameAttrCannotBeBlank=Atrybut nazwy grupy nie mo\u017ce by\u0107 pusty
+LDAP.UserSearchMustIncludeSubstitution=Filtr u\u017cytkownik\u00f3w musi zawiera\u0107 odwo\u0142anie do nazwy u\u017cytkownika ({0})
+LDAP.GroupSearchMustIncludeSubstitution=Filtr grupy musi zawiera\u0107 odwo\u0142anie do nazwy u\u017cytkownika ({0})
+LDAP.ServerPortMustBeAnInteger=Port musi by\u0107 liczb\u0105 ca\u0142kowit\u0105
+LDAP.ServerNameCannotIncludeSlash=Nazwa serwera nie mo\u017ce zawiera\u0107 znaku "/"
+LDAP.ServerBaseCannotIncludeSlash=Baza DN nie mo\u017ce zawiera\u0107 znaku "/"
+
+
+
+
+
+
+
+
+
+



Re: svn commit: r1496653 - in /manifoldcf/trunk/connectors/ldap/connector/src/main: java/org/apache/manifoldcf/authorities/authorities/ldap/LDAPAuthority.java native2ascii/org/apache/manifoldcf/authorities/authorities/ldap/common_pl_PL.properties

Posted by Maciej Liżewski <ma...@gmail.com>.
you are right... sorry for that.


2013/6/26 Karl Wright <da...@gmail.com>

> Hi Maciej,
>
> As a general principle, it's always good to do a separate commit for a
> reformatting with no functional changes, from one that includes functional
> changes.  That way people can read the diffs.
>
> About the translation file: When you put the file in the native2ascii part
> of the tree, the native2ascii utility (or maven plugin) converts your
> unicode file into \u escape sequences - that is its point.  So just set
> your editor to utf-8 and don't use the \u characters. ;-)
>
> Thanks,
> Karl
>
>
> On Tue, Jun 25, 2013 at 6:05 PM, <ml...@apache.org> wrote:
>
> > Author: mlizewski
> > Date: Tue Jun 25 22:05:04 2013
> > New Revision: 1496653
> >
> > URL: http://svn.apache.org/r1496653
> > Log:
> > polish translation for LDAP authority
> > fix for proper handling usernames as username@domain
> > code beautify
> >
> > Added:
> >
> >
> manifoldcf/trunk/connectors/ldap/connector/src/main/native2ascii/org/apache/manifoldcf/authorities/authorities/ldap/common_pl_PL.properties
> > Modified:
> >
> >
> manifoldcf/trunk/connectors/ldap/connector/src/main/java/org/apache/manifoldcf/authorities/authorities/ldap/LDAPAuthority.java
> >
> > Modified:
> >
> manifoldcf/trunk/connectors/ldap/connector/src/main/java/org/apache/manifoldcf/authorities/authorities/ldap/LDAPAuthority.java
> > URL:
> >
> http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/ldap/connector/src/main/java/org/apache/manifoldcf/authorities/authorities/ldap/LDAPAuthority.java?rev=1496653&r1=1496652&r2=1496653&view=diff
> >
> >
> ==============================================================================
> > ---
> >
> manifoldcf/trunk/connectors/ldap/connector/src/main/java/org/apache/manifoldcf/authorities/authorities/ldap/LDAPAuthority.java
> > (original)
> > +++
> >
> manifoldcf/trunk/connectors/ldap/connector/src/main/java/org/apache/manifoldcf/authorities/authorities/ldap/LDAPAuthority.java
> > Tue Jun 25 22:05:04 2013
> > @@ -6,9 +6,9 @@
> >   * licenses this file to You under the Apache License, Version 2.0 (the
> >   * "License"); you may not use this file except in compliance with the
> > License.
> >   * You may obtain a copy of the License at
> > - *
> > + *
> >   * http://www.apache.org/licenses/LICENSE-2.0
> > - *
> > + *
> >   * Unless required by applicable law or agreed to in writing, software
> >   * distributed under the License is distributed on an "AS IS" BASIS,
> > WITHOUT
> >   * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See
> > the
> > @@ -40,23 +40,20 @@ public class LDAPAuthority extends org.a
> >
> >    public static final String _rcsid = "@(#)$Id$";
> >    /**
> > -  * Session information for all DC's we talk with.
> > -  */
> > +   * 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.
> > -  */
> > +   * This is the active directory global deny token. This should be
> > ingested
> > +   * with all documents.
> > +   */
> >    private static final String globalDenyToken = "DEAD_AUTHORITY";
> >    private static final AuthorizationResponse unreachableResponse = new
> > AuthorizationResponse(new String[]{globalDenyToken},
> >      AuthorizationResponse.RESPONSE_UNREACHABLE);
> >    private static final AuthorizationResponse userNotFoundResponse = new
> > AuthorizationResponse(new String[]{globalDenyToken},
> >      AuthorizationResponse.RESPONSE_USERNOTFOUND);
> > -
> >    private ConfigParams parameters;
> > -
> >    private String serverName;
> >    private String serverPort;
> >    private String serverBase;
> > @@ -68,10 +65,11 @@ public class LDAPAuthority extends org.a
> >    private boolean groupMemberDN;
> >    private boolean addUserRecord;
> >    private String userNameAttr;
> > -
> >    private long responseLifetime = 60000L; //60sec
> >    private int LRUsize = 1000;
> > -  /** Cache manager. */
> > +  /**
> > +   * Cache manager.
> > +   */
> >    private ICacheManager cacheManager = null;
> >
> >    /**
> > @@ -101,30 +99,28 @@ public class LDAPAuthority extends org.a
> >      parameters = configParams;
> >
> >      // We get the parameters here, so we can check them in case they are
> > missing
> > -    serverName = configParams.getParameter( "ldapServerName" );
> > -    serverPort = configParams.getParameter( "ldapServerPort" );
> > -    serverBase = configParams.getParameter( "ldapServerBase" );
> > -
> > -    userBase = configParams.getParameter( "ldapUserBase" );
> > -    userSearch = configParams.getParameter( "ldapUserSearch" );
> > -    groupBase = configParams.getParameter( "ldapGroupBase" );
> > -    groupSearch = configParams.getParameter( "ldapGroupSearch" );
> > -    groupNameAttr = configParams.getParameter( "ldapGroupNameAttr" );
> > -    userNameAttr = configParams.getParameter( "ldapUserNameAttr" );
> > -
> > +    serverName = configParams.getParameter("ldapServerName");
> > +    serverPort = configParams.getParameter("ldapServerPort");
> > +    serverBase = configParams.getParameter("ldapServerBase");
> > +
> > +    userBase = configParams.getParameter("ldapUserBase");
> > +    userSearch = configParams.getParameter("ldapUserSearch");
> > +    groupBase = configParams.getParameter("ldapGroupBase");
> > +    groupSearch = configParams.getParameter("ldapGroupSearch");
> > +    groupNameAttr = configParams.getParameter("ldapGroupNameAttr");
> > +    userNameAttr = configParams.getParameter("ldapUserNameAttr");
> >      groupMemberDN = "1".equals(getParam(configParams,
> > "ldapGroupMemberDn", ""));
> >      addUserRecord = "1".equals(getParam(configParams,
> > "ldapAddUserRecord", ""));
> >    }
> >
> >    // 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.
> > -  */
> > +  /**
> > +   * Session setup. Anything that might need to throw an exception
> should
> > go
> > +   * here.
> > +   */
> >    protected LdapContext getSession()
> > -    throws ManifoldCFException
> > -  {
> > +    throws ManifoldCFException {
> >      if (serverName == null || serverName.length() == 0) {
> >        throw new ManifoldCFException("Server name parameter missing but
> > required");
> >      }
> > @@ -155,13 +151,19 @@ public class LDAPAuthority extends org.a
> >
> >      Hashtable env = new Hashtable();
> >      env.put(Context.INITIAL_CONTEXT_FACTORY,
> > "com.sun.jndi.ldap.LdapCtxFactory");
> > -    env.put(Context.PROVIDER_URL,
> > "ldap://"+serverName+":"+serverPort+"/"+serverBase);
> > +    env.put(Context.PROVIDER_URL, "ldap://" + serverName + ":" +
> > serverPort + "/" + serverBase);
> >
> >      //get bind credentials
> > -    String bindUser = getParam(parameters, "ldapBindUser", null);
> > -    String bindPass = getParam(parameters, "ldapBindPass", null);
> > -    if (bindPass != null && bindUser != null) {
> > -      bindPass = ManifoldCF.deobfuscate(bindPass);
> > +    String bindUser = getParam(parameters, "ldapBindUser", "");
> > +    String bindPass = "";
> > +    try {
> > +      bindPass = ManifoldCF.deobfuscate(getParam(parameters,
> > "ldapBindPass", ""));
> > +    } catch (ManifoldCFException ex) {
> > +      if (!bindUser.isEmpty()) {
> > +
>  Logger.getLogger(LDAPAuthority.class.getName()).log(Level.SEVERE,
> > "Deobfuscation error", ex);
> > +      }
> > +    }
> > +    if (!bindUser.isEmpty()) {
> >        env.put(Context.SECURITY_AUTHENTICATION, "simple");
> >        env.put(Context.SECURITY_PRINCIPAL, bindUser);
> >        env.put(Context.SECURITY_CREDENTIALS, bindPass);
> > @@ -178,26 +180,26 @@ public class LDAPAuthority extends org.a
> >      } catch (AuthenticationException e) {
> >        session = null;
> >        sessionExpirationTime = -1L;
> > -      throw new ManifoldCFException("Authentication error:
> > "+e.getMessage(),e);
> > +      throw new ManifoldCFException("Authentication error: " +
> > e.getMessage() + ", explanation: " + e.getExplanation(), e);
> >      } catch (CommunicationException e) {
> >        session = null;
> >        sessionExpirationTime = -1L;
> > -      throw new ManifoldCFException("Communication error:
> > "+e.getMessage(),e);
> > +      throw new ManifoldCFException("Communication error: " +
> > e.getMessage(), e);
> >      } catch (NamingException e) {
> >        session = null;
> >        sessionExpirationTime = -1L;
> > -      throw new ManifoldCFException("Naming error: "+e.getMessage(),e);
> > +      throw new ManifoldCFException("Naming error: " + e.getMessage(),
> e);
> >      }
> >    }
> > -
> > +
> >    /**
> > -  * Check connection for sanity.
> > -  */
> > +   * Check connection for sanity.
> > +   */
> >    @Override
> >    public String check()
> >      throws ManifoldCFException {
> >      disconnectSession();
> > -    LdapContext fSession = getSession();
> > +    getSession();
> >      // MHL for a real check of all the search etc.
> >      return super.check();
> >    }
> > @@ -214,8 +216,9 @@ public class LDAPAuthority extends org.a
> >      super.poll();
> >    }
> >
> > -  /** Disconnect a session.
> > -  */
> > +  /**
> > +   * Disconnect a session.
> > +   */
> >    protected void disconnectSession() {
> >      if (session != null) {
> >        try {
> > @@ -225,14 +228,12 @@ public class LDAPAuthority extends org.a
> >        }
> >        session = null;
> >        sessionExpirationTime = -1L;
> > -
> >      }
> >    }
> > -
> > +
> >    /**
> > -  * Close the connection. Call this before discarding the repository
> > -  * connector.
> > -  */
> > +   * Close the connection. Call this before discarding the repository
> > connector.
> > +   */
> >    @Override
> >    public void disconnect()
> >      throws ManifoldCFException {
> > @@ -248,7 +249,6 @@ public class LDAPAuthority extends org.a
> >      groupSearch = null;
> >      groupNameAttr = null;
> >      userNameAttr = null;
> > -
> >    }
> >
> >    protected String createCacheConnectionString() {
> > @@ -268,19 +268,19 @@ public class LDAPAuthority extends org.a
> >
> >
>  sb.append(groupBase).append("|").append(groupSearch).append("|").append(groupNameAttr).append("|").append(groupMemberDN
> > ? 'Y' : 'N');
> >      return sb.toString();
> >    }
> > -
> > +
> >    /**
> > -  * Obtain the access tokens for a given user name.
> > -  *
> > -  * @param userName is the user name or identifier.
> > -  * @return the response tokens (according to the current authority).
> > (Should
> > -  * throws an exception only when a condition cannot be properly
> described
> > -  * within the authorization response object.)
> > -  */
> > +   * Obtain the access tokens for a given user name.
> > +   *
> > +   * @param userName is the user name or identifier.
> > +   * @return the response tokens (according to the current authority).
> > (Should
> > +   * throws an exception only when a condition cannot be properly
> > described
> > +   * within the authorization response object.)
> > +   */
> >    @Override
> >    public AuthorizationResponse getAuthorizationResponse(String userName)
> >      throws ManifoldCFException {
> > -
> > +
> >      getSession();
> >      // Construct a cache description object
> >      ICacheDescription objectDescription = new
> > LdapAuthorizationResponseDescription(userName,
> > @@ -312,7 +312,7 @@ public class LDAPAuthority extends org.a
> >
> >    protected AuthorizationResponse
> getAuthorizationResponseUncached(String
> > userName)
> >      throws ManifoldCFException {
> > -    LdapContext session = getSession();
> > +    getSession();
> >      try {
> >        //find user in LDAP tree
> >        SearchResult usrRecord = getUserEntry(session, userName);
> > @@ -322,34 +322,41 @@ public class LDAPAuthority extends org.a
> >
> >        ArrayList theGroups = new ArrayList();
> >
> > -      String usrName = userName;
> > +      String usrName = userName.split("@")[0];
> >        if (userNameAttr != null && !"".equals(userNameAttr)) {
> >          if (usrRecord.getAttributes() != null) {
> >            Attribute attr = usrRecord.getAttributes().get(userNameAttr);
> >            if (attr != null) {
> >              usrName = attr.get().toString();
> > +            if (addUserRecord) {
> > +              NamingEnumeration values = attr.getAll();
> > +              while (values.hasMore()) {
> > +                theGroups.add(values.next().toString());
> > +              }
> > +            }
> >            }
> >          }
> >        }
> > -      if (addUserRecord) {
> > -        theGroups.add(usrName);
> > -      }
> >
> > -      //specify the LDAP search filter
> > -      String searchFilter = groupSearch.replaceAll("\\{0\\}",
> > escapeLDAPSearchFilter(groupMemberDN ? usrRecord.getNameInNamespace() :
> > usrName));
> > -      SearchControls searchCtls = new SearchControls();
> > -      searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);
> > -      String returnedAtts[] = {groupNameAttr};
> > -      searchCtls.setReturningAttributes(returnedAtts);
> > -
> > -      //Search for tokens.  Since every user *must* have a SID, the "no
> > user" detection should be safe.
> > -      NamingEnumeration answer = session.search(groupBase, searchFilter,
> > searchCtls);
> > -
> > -      while (answer.hasMoreElements()) {
> > -        SearchResult sr = (SearchResult) answer.next();
> > -        Attributes attrs = sr.getAttributes();
> > -        if (attrs != null) {
> > -          theGroups.add(attrs.get(groupNameAttr).get().toString());
> > +      if (groupSearch != null && !groupSearch.isEmpty()) {
> > +        //specify the LDAP search filter
> > +        String searchFilter = groupSearch.replaceAll("\\{0\\}",
> > escapeLDAPSearchFilter(groupMemberDN ? usrRecord.getNameInNamespace() :
> > usrName));
> > +        SearchControls searchCtls = new SearchControls();
> > +        searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);
> > +        String returnedAtts[] = {groupNameAttr};
> > +        searchCtls.setReturningAttributes(returnedAtts);
> > +
> > +        NamingEnumeration answer = session.search(groupBase,
> > searchFilter, searchCtls);
> > +
> > +        while (answer.hasMoreElements()) {
> > +          SearchResult sr = (SearchResult) answer.next();
> > +          Attributes attrs = sr.getAttributes();
> > +          if (attrs != null) {
> > +            NamingEnumeration values =
> attrs.get(groupNameAttr).getAll();
> > +            while (values.hasMore()) {
> > +              theGroups.add(values.next().toString());
> > +            }
> > +          }
> >          }
> >        }
> >
> > @@ -372,12 +379,12 @@ public class LDAPAuthority extends org.a
> >    }
> >
> >    /**
> > -  * Obtain the default access tokens for a given user name.
> > -  *
> > -  * @param userName is the user name or identifier.
> > -  * @return the default response tokens, presuming that the connect
> method
> > -  * fails.
> > -  */
> > +   * Obtain the default access tokens for a given user name.
> > +   *
> > +   * @param userName is the user name or identifier.
> > +   * @return the default response tokens, presuming that the connect
> > method
> > +   * fails.
> > +   */
> >    @Override
> >    public AuthorizationResponse getDefaultAuthorizationResponse(String
> > userName) {
> >      // The default response if the getConnection method fails
> > @@ -388,235 +395,218 @@ public class LDAPAuthority extends org.a
> >    //
> >    // These support methods are involved in setting up authority
> > connection configuration information. The configuration methods cannot
> > assume that the
> >    // current authority object is connected.  That is why they receive a
> > thread context argument.
> > -
> >    /**
> > -  * Output the configuration header section. This method is called in
> the
> > -  * head section of the connector's configuration page. Its purpose is
> to
> > add
> > -  * the required tabs to the list, and to output any javascript methods
> > that
> > -  * might be needed by the configuration editing HTML.
> > -  *
> > -  * @param threadContext is the local thread context.
> > -  * @param out is the output to which any HTML should be sent.
> > -  * @param parameters are the configuration parameters, as they
> currently
> > -  * exist, for this connection being configured.
> > -  * @param tabsArray is an array of tab names. Add to this array any tab
> > -  * names that are specific to the connector.
> > -  */
> > +   * Output the configuration header section. This method is called in
> > the head
> > +   * section of the connector's configuration page. Its purpose is to
> add
> > the
> > +   * required tabs to the list, and to output any javascript methods
> that
> > might
> > +   * be needed by the configuration editing HTML.
> > +   *
> > +   * @param threadContext is the local thread context.
> > +   * @param out is the output to which any HTML should be sent.
> > +   * @param parameters are the configuration parameters, as they
> currently
> > +   * exist, for this connection being configured.
> > +   * @param tabsArray is an array of tab names. Add to this array any
> tab
> > names
> > +   * that are specific to the connector.
> > +   */
> >    @Override
> >    public void outputConfigurationHeader(IThreadContext threadContext,
> > IHTTPOutput out, Locale locale, ConfigParams parameters, List<String>
> > tabsArray)
> >      throws ManifoldCFException, IOException {
> > -    tabsArray.add(Messages.getString(locale,"LDAP.LDAP"));
> > +    tabsArray.add(Messages.getString(locale, "LDAP.LDAP"));
> >      out.print(
> > -"<script type=\"text/javascript\">\n"+
> > -"<!--\n"+
> > -"function checkConfig() {\n"+
> > -"  if (editconnection.ldapServerName.value.indexOf(\"/\") != -1) {\n"+
> > -"
> >
>  alert(\""+Messages.getBodyJavascriptString(locale,"LDAP.ServerNameCannotIncludeSlash")+"\");\n"+
> > -"    editconnection.ldapServerName.focus();\n"+
> > -"    return false;\n"+
> > -"  }\n"+
> > -"  if (editconnection.ldapServerPort.value != \"\" &&
> > !isInteger(editconnection.ldapServerPort.value)) {\n"+
> > -"
> >
>  alert(\""+Messages.getBodyJavascriptString(locale,"LDAP.ServerPortMustBeAnInteger")+"\");\n"+
> > -"    editconnection.ldapServerPort.focus();\n"+
> > -"    return false;\n"+
> > -"  }\n"+
> > -"  if (editconnection.ldapServerBase.value.indexOf(\"/\") != -1) {\n"+
> > -"
> >
>  alert(\""+Messages.getBodyJavascriptString(locale,"LDAP.ServerBaseCannotIncludeSlash")+"\");\n"+
> > -"    editconnection.ldapServerBase.focus();\n"+
> > -"    return false;\n"+
> > -"  }\n"+
> > -"  if (editconnection.ldapUserSearch.value != \"\" &&
> > editconnection.ldapUserSearch.value.indexOf(\"{0}\") == -1) {\n"+
> > -"
> >
>  alert(\""+Messages.getBodyJavascriptString(locale,"LDAP.UserSearchMustIncludeSubstitution")+"\");\n"+
> > -"    editconnection.ldapUserSearch.focus();\n"+
> > -"    return false;\n"+
> > -"  }\n"+
> > -"  if (editconnection.ldapGroupSearch.value != \"\" &&
> > editconnection.ldapGroupSearch.value.indexOf(\"{0}\") == -1) {\n"+
> > -"
> >
>  alert(\""+Messages.getBodyJavascriptString(locale,"LDAP.GroupSearchMustIncludeSubstitution")+"\");\n"+
> > -"    editconnection.ldapGroupSearch.focus();\n"+
> > -"    return false;\n"+
> > -"  }\n"+
> > -"  return true;\n"+
> > -"}\n"+
> > -"\n"+
> > -"function checkConfigForSave() {\n"+
> > -"  if (editconnection.ldapServerName.value == \"\") {\n"+
> > -"
> >
>  alert(\""+Messages.getBodyJavascriptString(locale,"LDAP.ServerNameCannotBeBlank")+"\");\n"+
> > -"
> >
>  SelectTab(\""+Messages.getBodyJavascriptString(locale,"LDAP.LDAP")+"\");\n"+
> > -"    editconnection.ldapServerName.focus();\n"+
> > -"    return false;\n"+
> > -"  }\n"+
> > -"  if (editconnection.ldapServerPort.value == \"\") {\n"+
> > -"
> >
>  alert(\""+Messages.getBodyJavascriptString(locale,"LDAP.ServerPortCannotBeBlank")+"\");\n"+
> > -"
> >
>  SelectTab(\""+Messages.getBodyJavascriptString(locale,"LDAP.LDAP")+"\");\n"+
> > -"    editconnection.ldapServerPort.focus();\n"+
> > -"    return false;\n"+
> > -"  }\n"+
> > -"  if (editconnection.ldapUserSearch.value == \"\") {\n"+
> > -"
> >
>  alert(\""+Messages.getBodyJavascriptString(locale,"LDAP.UserSearchCannotBeBlank")+"\");\n"+
> > -"
> >
>  SelectTab(\""+Messages.getBodyJavascriptString(locale,"LDAP.LDAP")+"\");\n"+
> > -"    editconnection.ldapUserSearch.focus();\n"+
> > -"    return false;\n"+
> > -"  }\n"+
> > -"  if (editconnection.ldapGroupSearch.value == \"\") {\n"+
> > -"
> >
>  alert(\""+Messages.getBodyJavascriptString(locale,"LDAP.GroupSearchCannotBeBlank")+"\");\n"+
> > -"
> >
>  SelectTab(\""+Messages.getBodyJavascriptString(locale,"LDAP.LDAP")+"\");\n"+
> > -"    editconnection.ldapGroupSearch.focus();\n"+
> > -"    return false;\n"+
> > -"  }\n"+
> > -"  if (editconnection.ldapGroupNameAttr.value == \"\") {\n"+
> > -"
> >
>  alert(\""+Messages.getBodyJavascriptString(locale,"LDAP.GroupNameAttrCannotBeBlank")+"\");\n"+
> > -"
> >
>  SelectTab(\""+Messages.getBodyJavascriptString(locale,"LDAP.LDAP")+"\");\n"+
> > -"    editconnection.ldapGroupNameAttr.focus();\n"+
> > -"    return false;\n"+
> > -"  }\n"+
> > -"  if (editconnection.ldapUserSearch.value != \"\" &&
> > editconnection.ldapUserSearch.value.indexOf(\"{0}\") == -1) {\n"+
> > -"
> >
>  alert(\""+Messages.getBodyJavascriptString(locale,"LDAP.UserSearchMustIncludeSubstitution")+"\");\n"+
> > -"
> >
>  SelectTab(\""+Messages.getBodyJavascriptString(locale,"LDAP.LDAP")+"\");\n"+
> > -"    editconnection.ldapUserSearch.focus();\n"+
> > -"    return false;\n"+
> > -"  }\n"+
> > -"  if (editconnection.ldapGroupSearch.value != \"\" &&
> > editconnection.ldapGroupSearch.value.indexOf(\"{0}\") == -1) {\n"+
> > -"
> >
>  alert(\""+Messages.getBodyJavascriptString(locale,"LDAP.GroupSearchMustIncludeSubstitution")+"\");\n"+
> > -"
> >
>  SelectTab(\""+Messages.getBodyJavascriptString(locale,"LDAP.LDAP")+"\");\n"+
> > -"    editconnection.ldapGroupSearch.focus();\n"+
> > -"    return false;\n"+
> > -"  }\n"+
> > -"  if (editconnection.ldapServerPort.value != \"\" &&
> > !isInteger(editconnection.ldapServerPort.value)) {\n"+
> > -"
> >
>  alert(\""+Messages.getBodyJavascriptString(locale,"LDAP.ServerPortMustBeAnInteger")+"\");\n"+
> > -"
> >
>  SelectTab(\""+Messages.getBodyJavascriptString(locale,"LDAP.LDAP")+"\");\n"+
> > -"    editconnection.ldapServerPort.focus();\n"+
> > -"    return false;\n"+
> > -"  }\n"+
> > -"  if (editconnection.ldapServerName.value.indexOf(\"/\") != -1) {\n"+
> > -"
> >
>  alert(\""+Messages.getBodyJavascriptString(locale,"LDAP.ServerNameCannotIncludeSlash")+"\");\n"+
> > -"
> >
>  SelectTab(\""+Messages.getBodyJavascriptString(locale,"LDAP.LDAP")+"\");\n"+
> > -"    editconnection.ldapServerName.focus();\n"+
> > -"    return false;\n"+
> > -"  }\n"+
> > -"  if (editconnection.ldapServerBase.value.indexOf(\"/\") != -1) {\n"+
> > -"
> >
>  alert(\""+Messages.getBodyJavascriptString(locale,"LDAP.ServerBaseCannotIncludeSlash")+"\");\n"+
> > -"    editconnection.ldapServerBase.focus();\n"+
> > -"    return false;\n"+
> > -"  }\n"+
> > -"  return true;\n"+
> > -"}\n"+
> > -"//-->\n"+
> > -"</script>\n"
> > -    );
> > -  }
> > -
> > -  /**
> > -  * Output the configuration body section. This method is called in the
> > body
> > -  * section of the authority connector's configuration page. Its purpose
> > is
> > -  * to present the required form elements for editing. The coder can
> > presume
> > -  * that the HTML that is output from this configuration will be within
> > -  * appropriate <html>, <body>, and <form> tags. The name of the form is
> > -  * "editconnection".
> > -  *
> > -  * @param threadContext is the local thread context.
> > -  * @param out is the output to which any HTML should be sent.
> > -  * @param parameters are the configuration parameters, as they
> currently
> > -  * exist, for this connection being configured.
> > -  * @param tabName is the current tab name.
> > -  */
> > +      "<script type=\"text/javascript\">\n"
> > +      + "<!--\n"
> > +      + "function checkConfig() {\n"
> > +      + "  if (editconnection.ldapServerName.value.indexOf(\"/\") != -1)
> > {\n"
> > +      + "    alert(\"" + Messages.getBodyJavascriptString(locale,
> > "LDAP.ServerNameCannotIncludeSlash") + "\");\n"
> > +      + "    editconnection.ldapServerName.focus();\n"
> > +      + "    return false;\n"
> > +      + "  }\n"
> > +      + "  if (editconnection.ldapServerPort.value != \"\" &&
> > !isInteger(editconnection.ldapServerPort.value)) {\n"
> > +      + "    alert(\"" + Messages.getBodyJavascriptString(locale,
> > "LDAP.ServerPortMustBeAnInteger") + "\");\n"
> > +      + "    editconnection.ldapServerPort.focus();\n"
> > +      + "    return false;\n"
> > +      + "  }\n"
> > +      + "  if (editconnection.ldapServerBase.value.indexOf(\"/\") != -1)
> > {\n"
> > +      + "    alert(\"" + Messages.getBodyJavascriptString(locale,
> > "LDAP.ServerBaseCannotIncludeSlash") + "\");\n"
> > +      + "    editconnection.ldapServerBase.focus();\n"
> > +      + "    return false;\n"
> > +      + "  }\n"
> > +      + "  if (editconnection.ldapUserSearch.value != \"\" &&
> > editconnection.ldapUserSearch.value.indexOf(\"{0}\") == -1) {\n"
> > +      + "    alert(\"" + Messages.getBodyJavascriptString(locale,
> > "LDAP.UserSearchMustIncludeSubstitution") + "\");\n"
> > +      + "    editconnection.ldapUserSearch.focus();\n"
> > +      + "    return false;\n"
> > +      + "  }\n"
> > +      + "  if (editconnection.ldapGroupSearch.value != \"\" &&
> > editconnection.ldapGroupSearch.value.indexOf(\"{0}\") == -1) {\n"
> > +      + "    alert(\"" + Messages.getBodyJavascriptString(locale,
> > "LDAP.GroupSearchMustIncludeSubstitution") + "\");\n"
> > +      + "    editconnection.ldapGroupSearch.focus();\n"
> > +      + "    return false;\n"
> > +      + "  }\n"
> > +      + "  return true;\n"
> > +      + "}\n"
> > +      + "\n"
> > +      + "function checkConfigForSave() {\n"
> > +      + "  if (editconnection.ldapServerName.value == \"\") {\n"
> > +      + "    alert(\"" + Messages.getBodyJavascriptString(locale,
> > "LDAP.ServerNameCannotBeBlank") + "\");\n"
> > +      + "    SelectTab(\"" + Messages.getBodyJavascriptString(locale,
> > "LDAP.LDAP") + "\");\n"
> > +      + "    editconnection.ldapServerName.focus();\n"
> > +      + "    return false;\n"
> > +      + "  }\n"
> > +      + "  if (editconnection.ldapServerPort.value == \"\") {\n"
> > +      + "    alert(\"" + Messages.getBodyJavascriptString(locale,
> > "LDAP.ServerPortCannotBeBlank") + "\");\n"
> > +      + "    SelectTab(\"" + Messages.getBodyJavascriptString(locale,
> > "LDAP.LDAP") + "\");\n"
> > +      + "    editconnection.ldapServerPort.focus();\n"
> > +      + "    return false;\n"
> > +      + "  }\n"
> > +      + "  if (editconnection.ldapUserSearch.value == \"\") {\n"
> > +      + "    alert(\"" + Messages.getBodyJavascriptString(locale,
> > "LDAP.UserSearchCannotBeBlank") + "\");\n"
> > +      + "    SelectTab(\"" + Messages.getBodyJavascriptString(locale,
> > "LDAP.LDAP") + "\");\n"
> > +      + "    editconnection.ldapUserSearch.focus();\n"
> > +      + "    return false;\n"
> > +      + "  }\n"
> > +      + "  if (editconnection.ldapGroupSearch.value == \"\") {\n"
> > +      + "    alert(\"" + Messages.getBodyJavascriptString(locale,
> > "LDAP.GroupSearchCannotBeBlank") + "\");\n"
> > +      + "    SelectTab(\"" + Messages.getBodyJavascriptString(locale,
> > "LDAP.LDAP") + "\");\n"
> > +      + "    editconnection.ldapGroupSearch.focus();\n"
> > +      + "    return false;\n"
> > +      + "  }\n"
> > +      + "  if (editconnection.ldapGroupNameAttr.value == \"\") {\n"
> > +      + "    alert(\"" + Messages.getBodyJavascriptString(locale,
> > "LDAP.GroupNameAttrCannotBeBlank") + "\");\n"
> > +      + "    SelectTab(\"" + Messages.getBodyJavascriptString(locale,
> > "LDAP.LDAP") + "\");\n"
> > +      + "    editconnection.ldapGroupNameAttr.focus();\n"
> > +      + "    return false;\n"
> > +      + "  }\n"
> > +      + "  if (editconnection.ldapUserSearch.value != \"\" &&
> > editconnection.ldapUserSearch.value.indexOf(\"{0}\") == -1) {\n"
> > +      + "    alert(\"" + Messages.getBodyJavascriptString(locale,
> > "LDAP.UserSearchMustIncludeSubstitution") + "\");\n"
> > +      + "    SelectTab(\"" + Messages.getBodyJavascriptString(locale,
> > "LDAP.LDAP") + "\");\n"
> > +      + "    editconnection.ldapUserSearch.focus();\n"
> > +      + "    return false;\n"
> > +      + "  }\n"
> > +      + "  if (editconnection.ldapGroupSearch.value != \"\" &&
> > editconnection.ldapGroupSearch.value.indexOf(\"{0}\") == -1) {\n"
> > +      + "    alert(\"" + Messages.getBodyJavascriptString(locale,
> > "LDAP.GroupSearchMustIncludeSubstitution") + "\");\n"
> > +      + "    SelectTab(\"" + Messages.getBodyJavascriptString(locale,
> > "LDAP.LDAP") + "\");\n"
> > +      + "    editconnection.ldapGroupSearch.focus();\n"
> > +      + "    return false;\n"
> > +      + "  }\n"
> > +      + "  if (editconnection.ldapServerPort.value != \"\" &&
> > !isInteger(editconnection.ldapServerPort.value)) {\n"
> > +      + "    alert(\"" + Messages.getBodyJavascriptString(locale,
> > "LDAP.ServerPortMustBeAnInteger") + "\");\n"
> > +      + "    SelectTab(\"" + Messages.getBodyJavascriptString(locale,
> > "LDAP.LDAP") + "\");\n"
> > +      + "    editconnection.ldapServerPort.focus();\n"
> > +      + "    return false;\n"
> > +      + "  }\n"
> > +      + "  if (editconnection.ldapServerName.value.indexOf(\"/\") != -1)
> > {\n"
> > +      + "    alert(\"" + Messages.getBodyJavascriptString(locale,
> > "LDAP.ServerNameCannotIncludeSlash") + "\");\n"
> > +      + "    SelectTab(\"" + Messages.getBodyJavascriptString(locale,
> > "LDAP.LDAP") + "\");\n"
> > +      + "    editconnection.ldapServerName.focus();\n"
> > +      + "    return false;\n"
> > +      + "  }\n"
> > +      + "  if (editconnection.ldapServerBase.value.indexOf(\"/\") != -1)
> > {\n"
> > +      + "    alert(\"" + Messages.getBodyJavascriptString(locale,
> > "LDAP.ServerBaseCannotIncludeSlash") + "\");\n"
> > +      + "    editconnection.ldapServerBase.focus();\n"
> > +      + "    return false;\n"
> > +      + "  }\n"
> > +      + "  return true;\n"
> > +      + "}\n"
> > +      + "//-->\n"
> > +      + "</script>\n");
> > +  }
> > +
> > +  /**
> > +   * Output the configuration body section. This method is called in the
> > body
> > +   * section of the authority connector's configuration page. Its
> purpose
> > is to
> > +   * present the required form elements for editing. The coder can
> > presume that
> > +   * the HTML that is output from this configuration will be within
> > appropriate
> > +   * <html>, <body>, and <form> tags. The name of the form is
> > "editconnection".
> > +   *
> > +   * @param threadContext is the local thread context.
> > +   * @param out is the output to which any HTML should be sent.
> > +   * @param parameters are the configuration parameters, as they
> currently
> > +   * exist, for this connection being configured.
> > +   * @param tabName is the current tab name.
> > +   */
> >    @Override
> >    public void outputConfigurationBody(IThreadContext threadContext,
> > IHTTPOutput out, Locale locale, ConfigParams parameters, String tabName)
> >      throws ManifoldCFException, IOException {
> > -    String fServerName = getParam( parameters, "ldapServerName", "");
> > -    String fServerPort = getParam( parameters, "ldapServerPort", "389");
> > -    String fServerBase = getParam( parameters, "ldapServerBase", "");
> > -
> > -    String fUserBase = getParam( parameters, "ldapUserBase", "ou=People"
> > );
> > -    String fUserSearch = getParam( parameters, "ldapUserSearch",
> > "(&(objectClass=inetOrgPerson)(uid={0}))" );
> > +    String fServerName = getParam(parameters, "ldapServerName", "");
> > +    String fServerPort = getParam(parameters, "ldapServerPort", "389");
> > +    String fServerBase = getParam(parameters, "ldapServerBase", "");
> > +
> > +    String fUserBase = getParam(parameters, "ldapUserBase",
> "ou=People");
> > +    String fUserSearch = getParam(parameters, "ldapUserSearch",
> > "(&(objectClass=inetOrgPerson)(uid={0}))");
> >      String fUserNameAttr = getParam(parameters, "ldapUserNameAttr",
> > "uid");
> >      boolean fAddUserRecord = "1".equals(getParam(parameters,
> > "ldapAddUserRecord", ""));
> > -
> > -    String fGroupBase = getParam( parameters, "ldapGroupBase",
> > "ou=Groups" );
> > -    String fGroupSearch = getParam( parameters, "ldapGroupSearch",
> > "(&(objectClass=groupOfNames)(member={0}))" );
> > -    String fGroupNameAttr = getParam( parameters, "ldapGroupNameAttr",
> > "cn" );
> > +
> > +    String fGroupBase = getParam(parameters, "ldapGroupBase",
> > "ou=Groups");
> > +    String fGroupSearch = getParam(parameters, "ldapGroupSearch",
> > "(&(objectClass=groupOfNames)(member={0}))");
> > +    String fGroupNameAttr = getParam(parameters, "ldapGroupNameAttr",
> > "cn");
> >      boolean fGroupMemberDN = "1".equals(getParam(parameters,
> > "ldapGroupMemberDn", ""));
> > -
> > +
> >      String fBindUser = getParam(parameters, "ldapBindUser", "");
> > -    String fBindPass = getParam(parameters, "ldapBindPass", null);
> > -    if (fBindPass != null)
> > -      fBindPass = ManifoldCF.deobfuscate(fBindPass);
> > -    else
> > -      fBindPass = "";
> > +    String fBindPass = "";
> > +    try {
> > +      fBindPass = ManifoldCF.deobfuscate(getParam(parameters,
> > "ldapBindPass", ""));
> > +    } catch (ManifoldCFException ex) {
> > +      //ignore
> > +    }
> >
> > -    if (tabName.equals(Messages.getString(locale,"LDAP.LDAP"))) {
> > +    if (tabName.equals(Messages.getString(locale, "LDAP.LDAP"))) {
> >        out.print(
> > -"<table class=\"displaytable\">\n"+
> > -" <tr><td class=\"separator\" colspan=\"2\"><hr/></td></tr>\n"+
> > -
> > -" <tr>\n"+
> > -"  <td
> >
> class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.LDAPServerNameColon")+"</nobr></td>\n"+
> > -"  <td class=\"value\"><input type=\"text\" size=\"32\"
> > name=\"ldapServerName\"
> > value=\""+Encoder.attributeEscape(fServerName)+"\"/></td>\n"+
> > -" </tr>\n"+
> > -
> > -" <tr>\n"+
> > -"  <td
> >
> class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.LDAPServerPortColon")+"</nobr></td>\n"+
> > -"  <td class=\"value\"><input type=\"text\" size=\"5\"
> > name=\"ldapServerPort\"
> > value=\""+Encoder.attributeEscape(fServerPort)+"\"/></td>\n"+
> > -" </tr>\n"+
> > -
> > -" <tr>\n"+
> > -"  <td
> >
> class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.LDAPServerBaseColon")+"</nobr></td>\n"+
> > -"  <td class=\"value\"><input type=\"text\" size=\"64\"
> > name=\"ldapServerBase\"
> > value=\""+Encoder.attributeEscape(fServerBase)+"\"/></td>\n"+
> > -" </tr>\n"+
> > -
> > -" <tr>\n"+
> > -"  <td
> >
> class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.LDAPBindUserColon")+"</nobr></td>\n"+
> > -"  <td class=\"value\"><input type=\"text\" size=\"64\"
> > name=\"ldapBindUser\"
> > value=\""+Encoder.attributeEscape(fBindUser)+"\"/></td>\n"+
> > -" </tr>\n"+
> > -
> > -" <tr>\n"+
> > -"  <td
> >
> class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.LDAPBindPasswordColon")+"</nobr></td>\n"+
> > -"  <td class=\"value\"><input type=\"password\" size=\"64\"
> > name=\"ldapBindPass\"
> > value=\""+Encoder.attributeEscape(fBindPass)+"\"/></td>\n"+
> > -" </tr>\n"+
> > -
> > -" <tr><td class=\"separator\" colspan=\"2\"><hr/></td></tr>\n"+
> > -" <tr>\n"+
> > -"  <td
> >
> class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.UserSearchBaseColon")+"</nobr></td>\n"+
> > -"  <td class=\"value\"><input type=\"text\" size=\"64\"
> > name=\"ldapUserBase\"
> > value=\""+Encoder.attributeEscape(fUserBase)+"\"/></td>\n"+
> > -" </tr>\n"+
> > -
> > -" <tr>\n"+
> > -"  <td
> >
> class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.UserSearchFilterColon")+"</nobr></td>\n"+
> > -"  <td class=\"value\"><input type=\"text\" size=\"64\"
> > name=\"ldapUserSearch\"
> > value=\""+Encoder.attributeEscape(fUserSearch)+"\"/></td>\n"+
> > -" </tr>\n"+
> > -
> > -" <tr>\n"+
> > -"  <td
> >
> class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.AddUserAuthColon")+"</nobr></td>\n"+
> > -"  <td class=\"value\"><input type=\"checkbox\" value=\"1\"
> > name=\"ldapAddUserRecord\" " + (fAddUserRecord ? "checked=\"true\"" :
> "") +
> > "/></td>\n"+
> > -" </tr>\n"+
> > -
> > -" <tr>\n"+
> > -"  <td
> >
> class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.UserNameAttrColon")+"</nobr></td>\n"+
> > -"  <td class=\"value\"><input type=\"text\" size=\"64\"
> > name=\"ldapUserNameAttr\" value=\"" +
> > Encoder.attributeEscape(fUserNameAttr) + "\"/></td>\n"+
> > -" </tr>\n"+
> > -
> > -" <tr><td class=\"separator\" colspan=\"2\"><hr/></td></tr>\n" +
> > -" <tr>\n"+
> > -"  <td
> >
> class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.GroupSearchBaseColon")+"</nobr></td>\n"+
> > -"  <td class=\"value\"><input type=\"text\" size=\"64\"
> > name=\"ldapGroupBase\"
> > value=\""+Encoder.attributeEscape(fGroupBase)+"\"/></td>\n"+
> > -" </tr>\n"+
> > -
> > -" <tr>\n"+
> > -"  <td
> >
> class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.GroupSearchFilterColon")+"</nobr></td>\n"+
> > -"  <td class=\"value\"><input type=\"text\" size=\"64\"
> > name=\"ldapGroupSearch\"
> > value=\""+Encoder.attributeEscape(fGroupSearch)+"\"/></td>\n"+
> > -" </tr>\n"+
> > -
> > -" <tr>\n"+
> > -"  <td
> >
> class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.GroupNameAttributeColon")+"</nobr></td>\n"+
> > -"  <td class=\"value\"><input type=\"text\" size=\"64\"
> > name=\"ldapGroupNameAttr\"
> > value=\""+Encoder.attributeEscape(fGroupNameAttr)+"\"/></td>\n"+
> > -" </tr>\n"+
> > -
> > -" <tr>\n"+
> > -"  <td
> >
> class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.GroupMemberDnColon")+"</nobr></td>\n"+
> > -"  <td class=\"value\"><input type=\"checkbox\" value=\"1\"
> > name=\"ldapGroupMemberDn\" " + (fGroupMemberDN ? "checked=\"true\"" :
> "") +
> > "/></td>\n"+
> > -" </tr>\n"+
> > -
> > -"</table>\n"
> > -      );
> > +        "<table class=\"displaytable\">\n"
> > +        + " <tr><td class=\"separator\" colspan=\"2\"><hr/></td></tr>\n"
> > +        + " <tr>\n"
> > +        + "  <td class=\"description\"><nobr>" +
> > Messages.getBodyString(locale, "LDAP.LDAPServerNameColon") +
> > "</nobr></td>\n"
> > +        + "  <td class=\"value\"><input type=\"text\" size=\"32\"
> > name=\"ldapServerName\" value=\"" + Encoder.attributeEscape(fServerName)
> +
> > "\"/></td>\n"
> > +        + " </tr>\n"
> > +        + " <tr>\n"
> > +        + "  <td class=\"description\"><nobr>" +
> > Messages.getBodyString(locale, "LDAP.LDAPServerPortColon") +
> > "</nobr></td>\n"
> > +        + "  <td class=\"value\"><input type=\"text\" size=\"5\"
> > name=\"ldapServerPort\" value=\"" + Encoder.attributeEscape(fServerPort)
> +
> > "\"/></td>\n"
> > +        + " </tr>\n"
> > +        + " <tr>\n"
> > +        + "  <td class=\"description\"><nobr>" +
> > Messages.getBodyString(locale, "LDAP.LDAPServerBaseColon") +
> > "</nobr></td>\n"
> > +        + "  <td class=\"value\"><input type=\"text\" size=\"64\"
> > name=\"ldapServerBase\" value=\"" + Encoder.attributeEscape(fServerBase)
> +
> > "\"/></td>\n"
> > +        + " </tr>\n"
> > +        + " <tr>\n"
> > +        + "  <td class=\"description\"><nobr>" +
> > Messages.getBodyString(locale, "LDAP.LDAPBindUserColon") +
> "</nobr></td>\n"
> > +        + "  <td class=\"value\"><input type=\"text\" size=\"64\"
> > name=\"ldapBindUser\" value=\"" + Encoder.attributeEscape(fBindUser) +
> > "\"/></td>\n"
> > +        + " </tr>\n"
> > +        + " <tr>\n"
> > +        + "  <td class=\"description\"><nobr>" +
> > Messages.getBodyString(locale, "LDAP.LDAPBindPasswordColon") +
> > "</nobr></td>\n"
> > +        + "  <td class=\"value\"><input type=\"password\" size=\"64\"
> > name=\"ldapBindPass\" value=\"" + Encoder.attributeEscape(fBindPass) +
> > "\"/></td>\n"
> > +        + " </tr>\n"
> > +        + " <tr><td class=\"separator\" colspan=\"2\"><hr/></td></tr>\n"
> > +        + " <tr>\n"
> > +        + "  <td class=\"description\"><nobr>" +
> > Messages.getBodyString(locale, "LDAP.UserSearchBaseColon") +
> > "</nobr></td>\n"
> > +        + "  <td class=\"value\"><input type=\"text\" size=\"64\"
> > name=\"ldapUserBase\" value=\"" + Encoder.attributeEscape(fUserBase) +
> > "\"/></td>\n"
> > +        + " </tr>\n"
> > +        + " <tr>\n"
> > +        + "  <td class=\"description\"><nobr>" +
> > Messages.getBodyString(locale, "LDAP.UserSearchFilterColon") +
> > "</nobr></td>\n"
> > +        + "  <td class=\"value\"><input type=\"text\" size=\"64\"
> > name=\"ldapUserSearch\" value=\"" + Encoder.attributeEscape(fUserSearch)
> +
> > "\"/></td>\n"
> > +        + " </tr>\n"
> > +        + " <tr>\n"
> > +        + "  <td class=\"description\"><nobr>" +
> > Messages.getBodyString(locale, "LDAP.AddUserAuthColon") +
> "</nobr></td>\n"
> > +        + "  <td class=\"value\"><input type=\"checkbox\" value=\"1\"
> > name=\"ldapAddUserRecord\" " + (fAddUserRecord ? "checked=\"true\"" :
> "") +
> > "/></td>\n"
> > +        + " </tr>\n"
> > +        + " <tr>\n"
> > +        + "  <td class=\"description\"><nobr>" +
> > Messages.getBodyString(locale, "LDAP.UserNameAttrColon") +
> "</nobr></td>\n"
> > +        + "  <td class=\"value\"><input type=\"text\" size=\"64\"
> > name=\"ldapUserNameAttr\" value=\"" +
> > Encoder.attributeEscape(fUserNameAttr) + "\"/></td>\n"
> > +        + " </tr>\n"
> > +        + " <tr><td class=\"separator\" colspan=\"2\"><hr/></td></tr>\n"
> > +        + " <tr>\n"
> > +        + "  <td class=\"description\"><nobr>" +
> > Messages.getBodyString(locale, "LDAP.GroupSearchBaseColon") +
> > "</nobr></td>\n"
> > +        + "  <td class=\"value\"><input type=\"text\" size=\"64\"
> > name=\"ldapGroupBase\" value=\"" + Encoder.attributeEscape(fGroupBase) +
> > "\"/></td>\n"
> > +        + " </tr>\n"
> > +        + " <tr>\n"
> > +        + "  <td class=\"description\"><nobr>" +
> > Messages.getBodyString(locale, "LDAP.GroupSearchFilterColon") +
> > "</nobr></td>\n"
> > +        + "  <td class=\"value\"><input type=\"text\" size=\"64\"
> > name=\"ldapGroupSearch\" value=\"" +
> Encoder.attributeEscape(fGroupSearch)
> > + "\"/></td>\n"
> > +        + " </tr>\n"
> > +        + " <tr>\n"
> > +        + "  <td class=\"description\"><nobr>" +
> > Messages.getBodyString(locale, "LDAP.GroupNameAttributeColon") +
> > "</nobr></td>\n"
> > +        + "  <td class=\"value\"><input type=\"text\" size=\"64\"
> > name=\"ldapGroupNameAttr\" value=\"" +
> > Encoder.attributeEscape(fGroupNameAttr) + "\"/></td>\n"
> > +        + " </tr>\n"
> > +        + " <tr>\n"
> > +        + "  <td class=\"description\"><nobr>" +
> > Messages.getBodyString(locale, "LDAP.GroupMemberDnColon") +
> "</nobr></td>\n"
> > +        + "  <td class=\"value\"><input type=\"checkbox\" value=\"1\"
> > name=\"ldapGroupMemberDn\" " + (fGroupMemberDN ? "checked=\"true\"" :
> "") +
> > "/></td>\n"
> > +        + " </tr>\n"
> > +        + "</table>\n");
> >      } else {
> >        out.print("<input type=\"hidden\" name=\"ldapServerName\"
> value=\""
> > + Encoder.attributeEscape(fServerName) + "\"/>\n");
> >        out.print("<input type=\"hidden\" name=\"ldapServerPort\"
> value=\""
> > + Encoder.attributeEscape(fServerPort) + "\"/>\n");
> > @@ -634,62 +624,64 @@ public class LDAPAuthority extends org.a
> >      }
> >    }
> >
> > -  private String getParam( ConfigParams parameters, String name, String
> > def) {
> > +  private String getParam(ConfigParams parameters, String name, String
> > def) {
> >      return parameters.getParameter(name) != null ?
> > parameters.getParameter(name) : def;
> >    }
> >
> > -  private String getViewParam( ConfigParams parameters, String name) {
> > +  private String getViewParam(ConfigParams parameters, String name) {
> >      return parameters.getParameter(name) != null ?
> > parameters.getParameter(name) : "";
> >    }
> >
> > -  private boolean copyParam( IPostParameters variableContext,
> > ConfigParams parameters, String name) {
> > -    String val = variableContext.getParameter( name );
> > -    if( val == null ){
> > +  private boolean copyParam(IPostParameters variableContext,
> ConfigParams
> > parameters, String name) {
> > +    String val = variableContext.getParameter(name);
> > +    if (val == null) {
> >        return false;
> >      }
> > -    parameters.setParameter( name, val );
> > +    parameters.setParameter(name, val);
> >      return true;
> >    }
> >
> > -  private void copyParam2(IPostParameters variableContext, ConfigParams
> > parameters, String name) {
> > +  private boolean copyParam(IPostParameters variableContext,
> ConfigParams
> > parameters, String name, String def) {
> >      String val = variableContext.getParameter(name);
> >      if (val == null) {
> > -      val = "";
> > +      val = def;
> >      }
> >      parameters.setParameter(name, val);
> > +    return true;
> >    }
> >
> >    /**
> > -  * Process a configuration post. This method is called at the start of
> > the
> > -  * authority connector's configuration page, whenever there is a
> > possibility
> > -  * that form data for a connection has been posted. Its purpose is to
> > gather
> > -  * form information and modify the configuration parameters
> accordingly.
> > The
> > -  * name of the posted form is "editconnection".
> > -  *
> > -  * @param threadContext is the local thread context.
> > -  * @param variableContext is the set of variables available from the
> > post,
> > -  * including binary file post information.
> > -  * @param parameters are the configuration parameters, as they
> currently
> > -  * exist, for this connection being configured.
> > -  * @return null if all is well, or a string error message if there is
> an
> > -  * error that should prevent saving of the connection (and cause a
> > -  * redirection to an error page).
> > -  */
> > +   * Process a configuration post. This method is called at the start of
> > the
> > +   * authority connector's configuration page, whenever there is a
> > possibility
> > +   * that form data for a connection has been posted. Its purpose is to
> > gather
> > +   * form information and modify the configuration parameters
> > accordingly. The
> > +   * name of the posted form is "editconnection".
> > +   *
> > +   * @param threadContext is the local thread context.
> > +   * @param variableContext is the set of variables available from the
> > post,
> > +   * including binary file post information.
> > +   * @param parameters are the configuration parameters, as they
> currently
> > +   * exist, for this connection being configured.
> > +   * @return null if all is well, or a string error message if there is
> > an error
> > +   * that should prevent saving of the connection (and cause a
> > redirection to an
> > +   * error page).
> > +   */
> >    @Override
> >    public String processConfigurationPost(IThreadContext threadContext,
> > IPostParameters variableContext, Locale locale, ConfigParams parameters)
> >      throws ManifoldCFException {
> > -    copyParam(variableContext, parameters, "ldapServerName" );
> > -    copyParam(variableContext, parameters, "ldapServerPort" );
> > -    copyParam(variableContext, parameters, "ldapServerBase" );
> > -    copyParam(variableContext, parameters, "ldapUserBase" );
> > -    copyParam(variableContext, parameters, "ldapUserSearch" );
> > -    copyParam(variableContext, parameters, "ldapUserNameAttr" );
> > -    copyParam(variableContext, parameters, "ldapGroupBase" );
> > -    copyParam(variableContext, parameters, "ldapGroupSearch" );
> > -    copyParam(variableContext, parameters, "ldapGroupNameAttr" );
> > -
> > -    copyParam(variableContext, parameters, "ldapGroupMemberDn");
> > -    copyParam(variableContext, parameters, "ldapAddUserRecord");
> > +    copyParam(variableContext, parameters, "ldapServerName");
> > +    copyParam(variableContext, parameters, "ldapServerPort");
> > +    copyParam(variableContext, parameters, "ldapServerBase");
> > +    copyParam(variableContext, parameters, "ldapUserBase");
> > +    copyParam(variableContext, parameters, "ldapUserSearch");
> > +    copyParam(variableContext, parameters, "ldapUserNameAttr");
> > +    copyParam(variableContext, parameters, "ldapGroupBase");
> > +    copyParam(variableContext, parameters, "ldapGroupSearch");
> > +    copyParam(variableContext, parameters, "ldapGroupNameAttr");
> > +
> > +    copyParam(variableContext, parameters, "ldapGroupMemberDn", "0");
> > //checkbox boolean value
> > +    copyParam(variableContext, parameters, "ldapAddUserRecord", "0");
> > //checkbox boolean value
> > +
> >      copyParam(variableContext, parameters, "ldapBindUser");
> >      String bindPass = variableContext.getParameter("ldapBindPass");
> >      if (bindPass != null) {
> > @@ -700,106 +692,91 @@ public class LDAPAuthority extends org.a
> >    }
> >
> >    /**
> > -  * View configuration. This method is called in the body section of the
> > -  * authority connector's view configuration page. Its purpose is to
> > present
> > -  * the connection information to the user. The coder can presume that
> the
> > -  * HTML that is output from this configuration will be within
> appropriate
> > -  * <html> and <body> tags.
> > -  *
> > -  * @param threadContext is the local thread context.
> > -  * @param out is the output to which any HTML should be sent.
> > -  * @param parameters are the configuration parameters, as they
> currently
> > -  * exist, for this connection being configured.
> > -  */
> > +   * View configuration. This method is called in the body section of
> the
> > +   * authority connector's view configuration page. Its purpose is to
> > present
> > +   * the connection information to the user. The coder can presume that
> > the HTML
> > +   * that is output from this configuration will be within appropriate
> > <html>
> > +   * and <body> tags.
> > +   *
> > +   * @param threadContext is the local thread context.
> > +   * @param out is the output to which any HTML should be sent.
> > +   * @param parameters are the configuration parameters, as they
> currently
> > +   * exist, for this connection being configured.
> > +   */
> >    @Override
> >    public void viewConfiguration(IThreadContext threadContext,
> IHTTPOutput
> > out, Locale locale, ConfigParams parameters)
> >      throws ManifoldCFException, IOException {
> > -    String f_serverName = getViewParam( parameters, "ldapServerName" );
> > -    String f_serverPort = getViewParam( parameters, "ldapServerPort" );
> > -    String f_serverBase = getViewParam( parameters, "ldapServerBase" );
> > +    String f_serverName = getViewParam(parameters, "ldapServerName");
> > +    String f_serverPort = getViewParam(parameters, "ldapServerPort");
> > +    String f_serverBase = getViewParam(parameters, "ldapServerBase");
> >      String f_bindUser = getViewParam(parameters, "ldapBindUser");
> >
> > -    String f_userBase = getViewParam( parameters, "ldapUserBase" );
> > -    String f_userSearch = getViewParam( parameters, "ldapUserSearch" );
> > -    String f_groupBase = getViewParam( parameters, "ldapGroupBase" );
> > -    String f_groupSearch = getViewParam( parameters, "ldapGroupSearch"
> );
> > -    String f_groupNameAttr = getViewParam( parameters,
> > "ldapGroupNameAttr" );
> > -
> > +    String f_userBase = getViewParam(parameters, "ldapUserBase");
> > +    String f_userSearch = getViewParam(parameters, "ldapUserSearch");
> > +    String f_groupBase = getViewParam(parameters, "ldapGroupBase");
> > +    String f_groupSearch = getViewParam(parameters, "ldapGroupSearch");
> > +    String f_groupNameAttr = getViewParam(parameters,
> > "ldapGroupNameAttr");
> > +
> >      String f_userNameAttr = getViewParam(parameters,
> "ldapUserNameAttr");
> >      boolean f_groupMemberDN = "1".equals(getViewParam(parameters,
> > "ldapGroupMemberDn"));
> >      boolean f_addUserRecord = "1".equals(getViewParam(parameters,
> > "ldapAddUserRecord"));
> >
> >      out.print(
> > -"<table class=\"displaytable\">\n"+
> > -" <tr><td class=\"separator\" colspan=\"2\"><hr/></td></tr>\n"+
> > -
> > -" <tr>\n"+
> > -"  <td
> >
> class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.LDAPServerNameColon")+"</nobr></td>\n"+
> > -"  <td class=\"value\">"+Encoder.bodyEscape(f_serverName)+"</td>\n"+
> > -" </tr>\n"+
> > -
> > -" <tr>\n"+
> > -"  <td
> >
> class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.LDAPServerPortColon")+"</nobr></td>\n"+
> > -"  <td class=\"value\">"+Encoder.bodyEscape(f_serverPort)+"</td>\n"+
> > -" </tr>\n"+
> > -
> > -" <tr>\n"+
> > -"  <td
> >
> class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.LDAPServerBaseColon")+"</nobr></td>\n"+
> > -"  <td class=\"value\">"+Encoder.bodyEscape(f_serverBase)+"</td>\n"+
> > -" </tr>\n"+
> > -
> > -" <tr>\n"+
> > -"  <td
> >
> class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.LDAPBindUserColon")+"</nobr></td>\n"+
> > -"  <td class=\"value\">"+Encoder.bodyEscape(f_bindUser)+"</td>\n"+
> > -" </tr>\n"+
> > -
> > -" <tr>\n"+
> > -"  <td
> >
> class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.LDAPBindPasswordColon")+"</nobr></td>\n"+
> > -"  <td class=\"value\">*******</td>\n"+
> > -" </tr>\n"+
> > -
> > -" <tr>\n"+
> > -"  <td
> >
> class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.UserSearchBaseColon")+"</nobr></td>\n"+
> > -"  <td class=\"value\">"+Encoder.bodyEscape(f_userBase)+"</td>\n"+
> > -" </tr>\n"+
> > -
> > -" <tr>\n"+
> > -"  <td
> >
> class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.UserSearchFilterColon")+"</nobr></td>\n"+
> > -"  <td class=\"value\">"+Encoder.bodyEscape(f_userSearch)+"</td>\n"+
> > -" </tr>\n"+
> > -
> > -" <tr>\n"+
> > -"  <td
> >
> class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.AddUserAuthColon")+"</nobr></td>\n"+
> > -"  <td class=\"value\">" + (f_addUserRecord ? "Y" : "N") + "</td>\n"+
> > -" </tr>\n"+
> > -
> > -" <tr>\n"+
> > -"  <td
> >
> class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.UserNameAttrColon")+"</nobr></td>\n"+
> > -"  <td class=\"value\">" + Encoder.bodyEscape(f_userNameAttr) +
> "</td>\n"+
> > -" </tr>\n"+
> > -
> > -" <tr>\n"+
> > -"  <td
> >
> class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.GroupSearchBaseColon")+"</nobr></td>\n"+
> > -"  <td class=\"value\">"+Encoder.bodyEscape(f_groupBase)+"</td>\n"+
> > -" </tr>\n"+
> > -
> > -" <tr>\n"+
> > -"  <td
> >
> class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.GroupSearchFilterColon")+"</nobr></td>\n"+
> > -"  <td class=\"value\">"+Encoder.bodyEscape(f_groupSearch)+"</td>\n"+
> > -" </tr>\n"+
> > -
> > -" <tr>\n"+
> > -"  <td
> >
> class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.GroupNameAttributeColon")+"</nobr></td>\n"+
> > -"  <td class=\"value\">"+Encoder.bodyEscape(f_groupNameAttr)+"</td>\n"+
> > -" </tr>\n"+
> > -
> > -" <tr>\n"+
> > -"  <td
> >
> class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.GroupMemberDnColon")+"</nobr></td>\n"+
> > -"  <td class=\"value\">"+(f_groupMemberDN?"Y":"N")+"</td>\n"+
> > -" </tr>\n"+
> > -
> > -"</table>\n"
> > -    );
> > +      "<table class=\"displaytable\">\n"
> > +      + " <tr><td class=\"separator\" colspan=\"2\"><hr/></td></tr>\n"
> > +      + " <tr>\n"
> > +      + "  <td class=\"description\"><nobr>" +
> > Messages.getBodyString(locale, "LDAP.LDAPServerNameColon") +
> > "</nobr></td>\n"
> > +      + "  <td class=\"value\">" + Encoder.bodyEscape(f_serverName) +
> > "</td>\n"
> > +      + " </tr>\n"
> > +      + " <tr>\n"
> > +      + "  <td class=\"description\"><nobr>" +
> > Messages.getBodyString(locale, "LDAP.LDAPServerPortColon") +
> > "</nobr></td>\n"
> > +      + "  <td class=\"value\">" + Encoder.bodyEscape(f_serverPort) +
> > "</td>\n"
> > +      + " </tr>\n"
> > +      + " <tr>\n"
> > +      + "  <td class=\"description\"><nobr>" +
> > Messages.getBodyString(locale, "LDAP.LDAPServerBaseColon") +
> > "</nobr></td>\n"
> > +      + "  <td class=\"value\">" + Encoder.bodyEscape(f_serverBase) +
> > "</td>\n"
> > +      + " </tr>\n"
> > +      + " <tr>\n"
> > +      + "  <td class=\"description\"><nobr>" +
> > Messages.getBodyString(locale, "LDAP.LDAPBindUserColon") +
> "</nobr></td>\n"
> > +      + "  <td class=\"value\">" + Encoder.bodyEscape(f_bindUser) +
> > "</td>\n"
> > +      + " </tr>\n"
> > +      + " <tr>\n"
> > +      + "  <td class=\"description\"><nobr>" +
> > Messages.getBodyString(locale, "LDAP.LDAPBindPasswordColon") +
> > "</nobr></td>\n"
> > +      + "  <td class=\"value\">*******</td>\n"
> > +      + " </tr>\n"
> > +      + " <tr>\n"
> > +      + "  <td class=\"description\"><nobr>" +
> > Messages.getBodyString(locale, "LDAP.UserSearchBaseColon") +
> > "</nobr></td>\n"
> > +      + "  <td class=\"value\">" + Encoder.bodyEscape(f_userBase) +
> > "</td>\n"
> > +      + " </tr>\n"
> > +      + " <tr>\n"
> > +      + "  <td class=\"description\"><nobr>" +
> > Messages.getBodyString(locale, "LDAP.UserSearchFilterColon") +
> > "</nobr></td>\n"
> > +      + "  <td class=\"value\">" + Encoder.bodyEscape(f_userSearch) +
> > "</td>\n"
> > +      + " </tr>\n"
> > +      + " <tr>\n"
> > +      + "  <td class=\"description\"><nobr>" +
> > Messages.getBodyString(locale, "LDAP.AddUserAuthColon") +
> "</nobr></td>\n"
> > +      + "  <td class=\"value\">" + (f_addUserRecord ? "Y" : "N") +
> > "</td>\n"
> > +      + " </tr>\n"
> > +      + " <tr>\n"
> > +      + "  <td class=\"description\"><nobr>" +
> > Messages.getBodyString(locale, "LDAP.UserNameAttrColon") +
> "</nobr></td>\n"
> > +      + "  <td class=\"value\">" + Encoder.bodyEscape(f_userNameAttr) +
> > "</td>\n"
> > +      + " </tr>\n"
> > +      + " <tr>\n"
> > +      + "  <td class=\"description\"><nobr>" +
> > Messages.getBodyString(locale, "LDAP.GroupSearchBaseColon") +
> > "</nobr></td>\n"
> > +      + "  <td class=\"value\">" + Encoder.bodyEscape(f_groupBase) +
> > "</td>\n"
> > +      + " </tr>\n"
> > +      + " <tr>\n"
> > +      + "  <td class=\"description\"><nobr>" +
> > Messages.getBodyString(locale, "LDAP.GroupSearchFilterColon") +
> > "</nobr></td>\n"
> > +      + "  <td class=\"value\">" + Encoder.bodyEscape(f_groupSearch) +
> > "</td>\n"
> > +      + " </tr>\n"
> > +      + " <tr>\n"
> > +      + "  <td class=\"description\"><nobr>" +
> > Messages.getBodyString(locale, "LDAP.GroupNameAttributeColon") +
> > "</nobr></td>\n"
> > +      + "  <td class=\"value\">" + Encoder.bodyEscape(f_groupNameAttr) +
> > "</td>\n"
> > +      + " </tr>\n"
> > +      + " <tr>\n"
> > +      + "  <td class=\"description\"><nobr>" +
> > Messages.getBodyString(locale, "LDAP.GroupMemberDnColon") +
> "</nobr></td>\n"
> > +      + "  <td class=\"value\">" + (f_groupMemberDN ? "Y" : "N") +
> > "</td>\n"
> > +      + " </tr>\n"
> > +      + "</table>\n");
> >    }
> >
> >    // Protected methods
> > @@ -810,12 +787,12 @@ public class LDAPAuthority extends org.a
> >     * @param userName (Domain Logon Name) is the user name or identifier.
> >     * @param searchBase (Full Domain Name for the search ie:
> >     * DC=qa-ad-76,DC=metacarta,DC=com)
> > -   * @return SearchResult for given domain user logon name. (Should
> throws
> > -   * an exception if user is not found.)
> > +   * @return SearchResult for given domain user logon name. (Should
> > throws an
> > +   * exception if user is not found.)
> >     */
> >    protected SearchResult getUserEntry(LdapContext ctx, String userName)
> >      throws ManifoldCFException {
> > -    String searchFilter = userSearch.replaceAll("\\{0\\}",
> > escapeDN(userName));
> > +    String searchFilter = userSearch.replaceAll("\\{0\\}",
> > escapeDN(userName.split("@")[0]));
> >      SearchControls searchCtls = new SearchControls();
> >      searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);
> >
> > @@ -915,7 +892,6 @@ public class LDAPAuthority extends org.a
> >      }
> >      return sb.toString();
> >    }
> > -
> >    protected static StringSet emptyStringSet = new StringSet();
> >
> >    /**
> >
> > Added:
> >
> manifoldcf/trunk/connectors/ldap/connector/src/main/native2ascii/org/apache/manifoldcf/authorities/authorities/ldap/common_pl_PL.properties
> > URL:
> >
> http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/ldap/connector/src/main/native2ascii/org/apache/manifoldcf/authorities/authorities/ldap/common_pl_PL.properties?rev=1496653&view=auto
> >
> >
> ==============================================================================
> > ---
> >
> manifoldcf/trunk/connectors/ldap/connector/src/main/native2ascii/org/apache/manifoldcf/authorities/authorities/ldap/common_pl_PL.properties
> > (added)
> > +++
> >
> manifoldcf/trunk/connectors/ldap/connector/src/main/native2ascii/org/apache/manifoldcf/authorities/authorities/ldap/common_pl_PL.properties
> > Tue Jun 25 22:05:04 2013
> > @@ -0,0 +1,50 @@
> > +# Licensed to the Apache Software Foundation (ASF) under one or more
> > +# contributor license agreements.  See the NOTICE file distributed with
> > +# this work for additional information regarding copyright ownership.
> > +# The ASF licenses this file to You under the Apache License, Version
> 2.0
> > +# (the "License"); you may not use this file except in compliance with
> > +# the License.  You may obtain a copy of the License at
> > +#
> > +#     http://www.apache.org/licenses/LICENSE-2.0
> > +#
> > +# Unless required by applicable law or agreed to in writing, software
> > +# distributed under the License is distributed on an "AS IS" BASIS,
> > +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> implied.
> > +# See the License for the specific language governing permissions and
> > +# limitations under the License.
> > +
> > +LDAP.LDAP=LDAP
> > +LDAP.LDAPServerNameColon=Serwer LDAP:
> > +LDAP.LDAPServerPortColon=Port LDAP:
> > +LDAP.LDAPServerBaseColon=Baza DN (np. 'dc=office,dc=com'):
> > +LDAP.LDAPBindUserColon=Pod\u0142\u0105cz do serwera jako u\u017cytkownik
> > (pozostaw puste je\u015bli niepotrzebne):
> > +LDAP.LDAPBindPasswordColon=Pod\u0142\u0105cz do serwera z has\u0142em:
> > +LDAP.UserSearchBaseColon=Baza wyszukiwania u\u017cytkownik\u00f3w:
> > +LDAP.UserSearchFilterColon=Filtr u\u017cytkownik\u00f3w:
> > +LDAP.GroupSearchBaseColon=Baza wyszukiwania grup:
> > +LDAP.GroupSearchFilterColon=Filtr grup:
> > +LDAP.GroupNameAttributeColon=Atrybut nazwy grupy:
> > +LDAP.AddUserAuthColon=Dodaj nazw\u0119 u\u017cytkownika jako token:
> > +LDAP.UserNameAttrColon=Atrybut nazwy u\u017cytkownika:
> > +LDAP.GroupMemberDnColon=Elementy atrybutu "member" s\u0105 w postaci DN:
> > +
> > +LDAP.ServerNameCannotBeBlank=Nazwa serwera nie mo\u017ce by\u0107 pusta
> > +LDAP.ServerPortCannotBeBlank=Port nie mo\u017ce by\u0107 pusty
> > +LDAP.UserSearchCannotBeBlank=Filtr u\u017cytkownik\u00f3w nie mo\u017ce
> > by\u0107 pusty
> > +LDAP.GroupSearchCannotBeBlank=Filtr grup nie mo\u017ce by\u0107 pusty
> > +LDAP.GroupNameAttrCannotBeBlank=Atrybut nazwy grupy nie mo\u017ce
> > by\u0107 pusty
> > +LDAP.UserSearchMustIncludeSubstitution=Filtr u\u017cytkownik\u00f3w musi
> > zawiera\u0107 odwo\u0142anie do nazwy u\u017cytkownika ({0})
> > +LDAP.GroupSearchMustIncludeSubstitution=Filtr grupy musi zawiera\u0107
> > odwo\u0142anie do nazwy u\u017cytkownika ({0})
> > +LDAP.ServerPortMustBeAnInteger=Port musi by\u0107 liczb\u0105
> > ca\u0142kowit\u0105
> > +LDAP.ServerNameCannotIncludeSlash=Nazwa serwera nie mo\u017ce
> > zawiera\u0107 znaku "/"
> > +LDAP.ServerBaseCannotIncludeSlash=Baza DN nie mo\u017ce zawiera\u0107
> > znaku "/"
> > +
> > +
> > +
> > +
> > +
> > +
> > +
> > +
> > +
> > +
> >
> >
> >
>

Re: svn commit: r1496653 - in /manifoldcf/trunk/connectors/ldap/connector/src/main: java/org/apache/manifoldcf/authorities/authorities/ldap/LDAPAuthority.java native2ascii/org/apache/manifoldcf/authorities/authorities/ldap/common_pl_PL.properties

Posted by Karl Wright <da...@gmail.com>.
Hi Maciej,

As a general principle, it's always good to do a separate commit for a
reformatting with no functional changes, from one that includes functional
changes.  That way people can read the diffs.

About the translation file: When you put the file in the native2ascii part
of the tree, the native2ascii utility (or maven plugin) converts your
unicode file into \u escape sequences - that is its point.  So just set
your editor to utf-8 and don't use the \u characters. ;-)

Thanks,
Karl


On Tue, Jun 25, 2013 at 6:05 PM, <ml...@apache.org> wrote:

> Author: mlizewski
> Date: Tue Jun 25 22:05:04 2013
> New Revision: 1496653
>
> URL: http://svn.apache.org/r1496653
> Log:
> polish translation for LDAP authority
> fix for proper handling usernames as username@domain
> code beautify
>
> Added:
>
> manifoldcf/trunk/connectors/ldap/connector/src/main/native2ascii/org/apache/manifoldcf/authorities/authorities/ldap/common_pl_PL.properties
> Modified:
>
> manifoldcf/trunk/connectors/ldap/connector/src/main/java/org/apache/manifoldcf/authorities/authorities/ldap/LDAPAuthority.java
>
> Modified:
> manifoldcf/trunk/connectors/ldap/connector/src/main/java/org/apache/manifoldcf/authorities/authorities/ldap/LDAPAuthority.java
> URL:
> http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/ldap/connector/src/main/java/org/apache/manifoldcf/authorities/authorities/ldap/LDAPAuthority.java?rev=1496653&r1=1496652&r2=1496653&view=diff
>
> ==============================================================================
> ---
> manifoldcf/trunk/connectors/ldap/connector/src/main/java/org/apache/manifoldcf/authorities/authorities/ldap/LDAPAuthority.java
> (original)
> +++
> manifoldcf/trunk/connectors/ldap/connector/src/main/java/org/apache/manifoldcf/authorities/authorities/ldap/LDAPAuthority.java
> Tue Jun 25 22:05:04 2013
> @@ -6,9 +6,9 @@
>   * licenses this file to You under the Apache License, Version 2.0 (the
>   * "License"); you may not use this file except in compliance with the
> License.
>   * You may obtain a copy of the License at
> - *
> + *
>   * http://www.apache.org/licenses/LICENSE-2.0
> - *
> + *
>   * Unless required by applicable law or agreed to in writing, software
>   * distributed under the License is distributed on an "AS IS" BASIS,
> WITHOUT
>   * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See
> the
> @@ -40,23 +40,20 @@ public class LDAPAuthority extends org.a
>
>    public static final String _rcsid = "@(#)$Id$";
>    /**
> -  * Session information for all DC's we talk with.
> -  */
> +   * 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.
> -  */
> +   * This is the active directory global deny token. This should be
> ingested
> +   * with all documents.
> +   */
>    private static final String globalDenyToken = "DEAD_AUTHORITY";
>    private static final AuthorizationResponse unreachableResponse = new
> AuthorizationResponse(new String[]{globalDenyToken},
>      AuthorizationResponse.RESPONSE_UNREACHABLE);
>    private static final AuthorizationResponse userNotFoundResponse = new
> AuthorizationResponse(new String[]{globalDenyToken},
>      AuthorizationResponse.RESPONSE_USERNOTFOUND);
> -
>    private ConfigParams parameters;
> -
>    private String serverName;
>    private String serverPort;
>    private String serverBase;
> @@ -68,10 +65,11 @@ public class LDAPAuthority extends org.a
>    private boolean groupMemberDN;
>    private boolean addUserRecord;
>    private String userNameAttr;
> -
>    private long responseLifetime = 60000L; //60sec
>    private int LRUsize = 1000;
> -  /** Cache manager. */
> +  /**
> +   * Cache manager.
> +   */
>    private ICacheManager cacheManager = null;
>
>    /**
> @@ -101,30 +99,28 @@ public class LDAPAuthority extends org.a
>      parameters = configParams;
>
>      // We get the parameters here, so we can check them in case they are
> missing
> -    serverName = configParams.getParameter( "ldapServerName" );
> -    serverPort = configParams.getParameter( "ldapServerPort" );
> -    serverBase = configParams.getParameter( "ldapServerBase" );
> -
> -    userBase = configParams.getParameter( "ldapUserBase" );
> -    userSearch = configParams.getParameter( "ldapUserSearch" );
> -    groupBase = configParams.getParameter( "ldapGroupBase" );
> -    groupSearch = configParams.getParameter( "ldapGroupSearch" );
> -    groupNameAttr = configParams.getParameter( "ldapGroupNameAttr" );
> -    userNameAttr = configParams.getParameter( "ldapUserNameAttr" );
> -
> +    serverName = configParams.getParameter("ldapServerName");
> +    serverPort = configParams.getParameter("ldapServerPort");
> +    serverBase = configParams.getParameter("ldapServerBase");
> +
> +    userBase = configParams.getParameter("ldapUserBase");
> +    userSearch = configParams.getParameter("ldapUserSearch");
> +    groupBase = configParams.getParameter("ldapGroupBase");
> +    groupSearch = configParams.getParameter("ldapGroupSearch");
> +    groupNameAttr = configParams.getParameter("ldapGroupNameAttr");
> +    userNameAttr = configParams.getParameter("ldapUserNameAttr");
>      groupMemberDN = "1".equals(getParam(configParams,
> "ldapGroupMemberDn", ""));
>      addUserRecord = "1".equals(getParam(configParams,
> "ldapAddUserRecord", ""));
>    }
>
>    // 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.
> -  */
> +  /**
> +   * Session setup. Anything that might need to throw an exception should
> go
> +   * here.
> +   */
>    protected LdapContext getSession()
> -    throws ManifoldCFException
> -  {
> +    throws ManifoldCFException {
>      if (serverName == null || serverName.length() == 0) {
>        throw new ManifoldCFException("Server name parameter missing but
> required");
>      }
> @@ -155,13 +151,19 @@ public class LDAPAuthority extends org.a
>
>      Hashtable env = new Hashtable();
>      env.put(Context.INITIAL_CONTEXT_FACTORY,
> "com.sun.jndi.ldap.LdapCtxFactory");
> -    env.put(Context.PROVIDER_URL,
> "ldap://"+serverName+":"+serverPort+"/"+serverBase);
> +    env.put(Context.PROVIDER_URL, "ldap://" + serverName + ":" +
> serverPort + "/" + serverBase);
>
>      //get bind credentials
> -    String bindUser = getParam(parameters, "ldapBindUser", null);
> -    String bindPass = getParam(parameters, "ldapBindPass", null);
> -    if (bindPass != null && bindUser != null) {
> -      bindPass = ManifoldCF.deobfuscate(bindPass);
> +    String bindUser = getParam(parameters, "ldapBindUser", "");
> +    String bindPass = "";
> +    try {
> +      bindPass = ManifoldCF.deobfuscate(getParam(parameters,
> "ldapBindPass", ""));
> +    } catch (ManifoldCFException ex) {
> +      if (!bindUser.isEmpty()) {
> +        Logger.getLogger(LDAPAuthority.class.getName()).log(Level.SEVERE,
> "Deobfuscation error", ex);
> +      }
> +    }
> +    if (!bindUser.isEmpty()) {
>        env.put(Context.SECURITY_AUTHENTICATION, "simple");
>        env.put(Context.SECURITY_PRINCIPAL, bindUser);
>        env.put(Context.SECURITY_CREDENTIALS, bindPass);
> @@ -178,26 +180,26 @@ public class LDAPAuthority extends org.a
>      } catch (AuthenticationException e) {
>        session = null;
>        sessionExpirationTime = -1L;
> -      throw new ManifoldCFException("Authentication error:
> "+e.getMessage(),e);
> +      throw new ManifoldCFException("Authentication error: " +
> e.getMessage() + ", explanation: " + e.getExplanation(), e);
>      } catch (CommunicationException e) {
>        session = null;
>        sessionExpirationTime = -1L;
> -      throw new ManifoldCFException("Communication error:
> "+e.getMessage(),e);
> +      throw new ManifoldCFException("Communication error: " +
> e.getMessage(), e);
>      } catch (NamingException e) {
>        session = null;
>        sessionExpirationTime = -1L;
> -      throw new ManifoldCFException("Naming error: "+e.getMessage(),e);
> +      throw new ManifoldCFException("Naming error: " + e.getMessage(), e);
>      }
>    }
> -
> +
>    /**
> -  * Check connection for sanity.
> -  */
> +   * Check connection for sanity.
> +   */
>    @Override
>    public String check()
>      throws ManifoldCFException {
>      disconnectSession();
> -    LdapContext fSession = getSession();
> +    getSession();
>      // MHL for a real check of all the search etc.
>      return super.check();
>    }
> @@ -214,8 +216,9 @@ public class LDAPAuthority extends org.a
>      super.poll();
>    }
>
> -  /** Disconnect a session.
> -  */
> +  /**
> +   * Disconnect a session.
> +   */
>    protected void disconnectSession() {
>      if (session != null) {
>        try {
> @@ -225,14 +228,12 @@ public class LDAPAuthority extends org.a
>        }
>        session = null;
>        sessionExpirationTime = -1L;
> -
>      }
>    }
> -
> +
>    /**
> -  * Close the connection. Call this before discarding the repository
> -  * connector.
> -  */
> +   * Close the connection. Call this before discarding the repository
> connector.
> +   */
>    @Override
>    public void disconnect()
>      throws ManifoldCFException {
> @@ -248,7 +249,6 @@ public class LDAPAuthority extends org.a
>      groupSearch = null;
>      groupNameAttr = null;
>      userNameAttr = null;
> -
>    }
>
>    protected String createCacheConnectionString() {
> @@ -268,19 +268,19 @@ public class LDAPAuthority extends org.a
>
>  sb.append(groupBase).append("|").append(groupSearch).append("|").append(groupNameAttr).append("|").append(groupMemberDN
> ? 'Y' : 'N');
>      return sb.toString();
>    }
> -
> +
>    /**
> -  * Obtain the access tokens for a given user name.
> -  *
> -  * @param userName is the user name or identifier.
> -  * @return the response tokens (according to the current authority).
> (Should
> -  * throws an exception only when a condition cannot be properly described
> -  * within the authorization response object.)
> -  */
> +   * Obtain the access tokens for a given user name.
> +   *
> +   * @param userName is the user name or identifier.
> +   * @return the response tokens (according to the current authority).
> (Should
> +   * throws an exception only when a condition cannot be properly
> described
> +   * within the authorization response object.)
> +   */
>    @Override
>    public AuthorizationResponse getAuthorizationResponse(String userName)
>      throws ManifoldCFException {
> -
> +
>      getSession();
>      // Construct a cache description object
>      ICacheDescription objectDescription = new
> LdapAuthorizationResponseDescription(userName,
> @@ -312,7 +312,7 @@ public class LDAPAuthority extends org.a
>
>    protected AuthorizationResponse getAuthorizationResponseUncached(String
> userName)
>      throws ManifoldCFException {
> -    LdapContext session = getSession();
> +    getSession();
>      try {
>        //find user in LDAP tree
>        SearchResult usrRecord = getUserEntry(session, userName);
> @@ -322,34 +322,41 @@ public class LDAPAuthority extends org.a
>
>        ArrayList theGroups = new ArrayList();
>
> -      String usrName = userName;
> +      String usrName = userName.split("@")[0];
>        if (userNameAttr != null && !"".equals(userNameAttr)) {
>          if (usrRecord.getAttributes() != null) {
>            Attribute attr = usrRecord.getAttributes().get(userNameAttr);
>            if (attr != null) {
>              usrName = attr.get().toString();
> +            if (addUserRecord) {
> +              NamingEnumeration values = attr.getAll();
> +              while (values.hasMore()) {
> +                theGroups.add(values.next().toString());
> +              }
> +            }
>            }
>          }
>        }
> -      if (addUserRecord) {
> -        theGroups.add(usrName);
> -      }
>
> -      //specify the LDAP search filter
> -      String searchFilter = groupSearch.replaceAll("\\{0\\}",
> escapeLDAPSearchFilter(groupMemberDN ? usrRecord.getNameInNamespace() :
> usrName));
> -      SearchControls searchCtls = new SearchControls();
> -      searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);
> -      String returnedAtts[] = {groupNameAttr};
> -      searchCtls.setReturningAttributes(returnedAtts);
> -
> -      //Search for tokens.  Since every user *must* have a SID, the "no
> user" detection should be safe.
> -      NamingEnumeration answer = session.search(groupBase, searchFilter,
> searchCtls);
> -
> -      while (answer.hasMoreElements()) {
> -        SearchResult sr = (SearchResult) answer.next();
> -        Attributes attrs = sr.getAttributes();
> -        if (attrs != null) {
> -          theGroups.add(attrs.get(groupNameAttr).get().toString());
> +      if (groupSearch != null && !groupSearch.isEmpty()) {
> +        //specify the LDAP search filter
> +        String searchFilter = groupSearch.replaceAll("\\{0\\}",
> escapeLDAPSearchFilter(groupMemberDN ? usrRecord.getNameInNamespace() :
> usrName));
> +        SearchControls searchCtls = new SearchControls();
> +        searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);
> +        String returnedAtts[] = {groupNameAttr};
> +        searchCtls.setReturningAttributes(returnedAtts);
> +
> +        NamingEnumeration answer = session.search(groupBase,
> searchFilter, searchCtls);
> +
> +        while (answer.hasMoreElements()) {
> +          SearchResult sr = (SearchResult) answer.next();
> +          Attributes attrs = sr.getAttributes();
> +          if (attrs != null) {
> +            NamingEnumeration values = attrs.get(groupNameAttr).getAll();
> +            while (values.hasMore()) {
> +              theGroups.add(values.next().toString());
> +            }
> +          }
>          }
>        }
>
> @@ -372,12 +379,12 @@ public class LDAPAuthority extends org.a
>    }
>
>    /**
> -  * Obtain the default access tokens for a given user name.
> -  *
> -  * @param userName is the user name or identifier.
> -  * @return the default response tokens, presuming that the connect method
> -  * fails.
> -  */
> +   * Obtain the default access tokens for a given user name.
> +   *
> +   * @param userName is the user name or identifier.
> +   * @return the default response tokens, presuming that the connect
> method
> +   * fails.
> +   */
>    @Override
>    public AuthorizationResponse getDefaultAuthorizationResponse(String
> userName) {
>      // The default response if the getConnection method fails
> @@ -388,235 +395,218 @@ public class LDAPAuthority extends org.a
>    //
>    // These support methods are involved in setting up authority
> connection configuration information. The configuration methods cannot
> assume that the
>    // current authority object is connected.  That is why they receive a
> thread context argument.
> -
>    /**
> -  * Output the configuration header section. This method is called in the
> -  * head section of the connector's configuration page. Its purpose is to
> add
> -  * the required tabs to the list, and to output any javascript methods
> that
> -  * might be needed by the configuration editing HTML.
> -  *
> -  * @param threadContext is the local thread context.
> -  * @param out is the output to which any HTML should be sent.
> -  * @param parameters are the configuration parameters, as they currently
> -  * exist, for this connection being configured.
> -  * @param tabsArray is an array of tab names. Add to this array any tab
> -  * names that are specific to the connector.
> -  */
> +   * Output the configuration header section. This method is called in
> the head
> +   * section of the connector's configuration page. Its purpose is to add
> the
> +   * required tabs to the list, and to output any javascript methods that
> might
> +   * be needed by the configuration editing HTML.
> +   *
> +   * @param threadContext is the local thread context.
> +   * @param out is the output to which any HTML should be sent.
> +   * @param parameters are the configuration parameters, as they currently
> +   * exist, for this connection being configured.
> +   * @param tabsArray is an array of tab names. Add to this array any tab
> names
> +   * that are specific to the connector.
> +   */
>    @Override
>    public void outputConfigurationHeader(IThreadContext threadContext,
> IHTTPOutput out, Locale locale, ConfigParams parameters, List<String>
> tabsArray)
>      throws ManifoldCFException, IOException {
> -    tabsArray.add(Messages.getString(locale,"LDAP.LDAP"));
> +    tabsArray.add(Messages.getString(locale, "LDAP.LDAP"));
>      out.print(
> -"<script type=\"text/javascript\">\n"+
> -"<!--\n"+
> -"function checkConfig() {\n"+
> -"  if (editconnection.ldapServerName.value.indexOf(\"/\") != -1) {\n"+
> -"
>  alert(\""+Messages.getBodyJavascriptString(locale,"LDAP.ServerNameCannotIncludeSlash")+"\");\n"+
> -"    editconnection.ldapServerName.focus();\n"+
> -"    return false;\n"+
> -"  }\n"+
> -"  if (editconnection.ldapServerPort.value != \"\" &&
> !isInteger(editconnection.ldapServerPort.value)) {\n"+
> -"
>  alert(\""+Messages.getBodyJavascriptString(locale,"LDAP.ServerPortMustBeAnInteger")+"\");\n"+
> -"    editconnection.ldapServerPort.focus();\n"+
> -"    return false;\n"+
> -"  }\n"+
> -"  if (editconnection.ldapServerBase.value.indexOf(\"/\") != -1) {\n"+
> -"
>  alert(\""+Messages.getBodyJavascriptString(locale,"LDAP.ServerBaseCannotIncludeSlash")+"\");\n"+
> -"    editconnection.ldapServerBase.focus();\n"+
> -"    return false;\n"+
> -"  }\n"+
> -"  if (editconnection.ldapUserSearch.value != \"\" &&
> editconnection.ldapUserSearch.value.indexOf(\"{0}\") == -1) {\n"+
> -"
>  alert(\""+Messages.getBodyJavascriptString(locale,"LDAP.UserSearchMustIncludeSubstitution")+"\");\n"+
> -"    editconnection.ldapUserSearch.focus();\n"+
> -"    return false;\n"+
> -"  }\n"+
> -"  if (editconnection.ldapGroupSearch.value != \"\" &&
> editconnection.ldapGroupSearch.value.indexOf(\"{0}\") == -1) {\n"+
> -"
>  alert(\""+Messages.getBodyJavascriptString(locale,"LDAP.GroupSearchMustIncludeSubstitution")+"\");\n"+
> -"    editconnection.ldapGroupSearch.focus();\n"+
> -"    return false;\n"+
> -"  }\n"+
> -"  return true;\n"+
> -"}\n"+
> -"\n"+
> -"function checkConfigForSave() {\n"+
> -"  if (editconnection.ldapServerName.value == \"\") {\n"+
> -"
>  alert(\""+Messages.getBodyJavascriptString(locale,"LDAP.ServerNameCannotBeBlank")+"\");\n"+
> -"
>  SelectTab(\""+Messages.getBodyJavascriptString(locale,"LDAP.LDAP")+"\");\n"+
> -"    editconnection.ldapServerName.focus();\n"+
> -"    return false;\n"+
> -"  }\n"+
> -"  if (editconnection.ldapServerPort.value == \"\") {\n"+
> -"
>  alert(\""+Messages.getBodyJavascriptString(locale,"LDAP.ServerPortCannotBeBlank")+"\");\n"+
> -"
>  SelectTab(\""+Messages.getBodyJavascriptString(locale,"LDAP.LDAP")+"\");\n"+
> -"    editconnection.ldapServerPort.focus();\n"+
> -"    return false;\n"+
> -"  }\n"+
> -"  if (editconnection.ldapUserSearch.value == \"\") {\n"+
> -"
>  alert(\""+Messages.getBodyJavascriptString(locale,"LDAP.UserSearchCannotBeBlank")+"\");\n"+
> -"
>  SelectTab(\""+Messages.getBodyJavascriptString(locale,"LDAP.LDAP")+"\");\n"+
> -"    editconnection.ldapUserSearch.focus();\n"+
> -"    return false;\n"+
> -"  }\n"+
> -"  if (editconnection.ldapGroupSearch.value == \"\") {\n"+
> -"
>  alert(\""+Messages.getBodyJavascriptString(locale,"LDAP.GroupSearchCannotBeBlank")+"\");\n"+
> -"
>  SelectTab(\""+Messages.getBodyJavascriptString(locale,"LDAP.LDAP")+"\");\n"+
> -"    editconnection.ldapGroupSearch.focus();\n"+
> -"    return false;\n"+
> -"  }\n"+
> -"  if (editconnection.ldapGroupNameAttr.value == \"\") {\n"+
> -"
>  alert(\""+Messages.getBodyJavascriptString(locale,"LDAP.GroupNameAttrCannotBeBlank")+"\");\n"+
> -"
>  SelectTab(\""+Messages.getBodyJavascriptString(locale,"LDAP.LDAP")+"\");\n"+
> -"    editconnection.ldapGroupNameAttr.focus();\n"+
> -"    return false;\n"+
> -"  }\n"+
> -"  if (editconnection.ldapUserSearch.value != \"\" &&
> editconnection.ldapUserSearch.value.indexOf(\"{0}\") == -1) {\n"+
> -"
>  alert(\""+Messages.getBodyJavascriptString(locale,"LDAP.UserSearchMustIncludeSubstitution")+"\");\n"+
> -"
>  SelectTab(\""+Messages.getBodyJavascriptString(locale,"LDAP.LDAP")+"\");\n"+
> -"    editconnection.ldapUserSearch.focus();\n"+
> -"    return false;\n"+
> -"  }\n"+
> -"  if (editconnection.ldapGroupSearch.value != \"\" &&
> editconnection.ldapGroupSearch.value.indexOf(\"{0}\") == -1) {\n"+
> -"
>  alert(\""+Messages.getBodyJavascriptString(locale,"LDAP.GroupSearchMustIncludeSubstitution")+"\");\n"+
> -"
>  SelectTab(\""+Messages.getBodyJavascriptString(locale,"LDAP.LDAP")+"\");\n"+
> -"    editconnection.ldapGroupSearch.focus();\n"+
> -"    return false;\n"+
> -"  }\n"+
> -"  if (editconnection.ldapServerPort.value != \"\" &&
> !isInteger(editconnection.ldapServerPort.value)) {\n"+
> -"
>  alert(\""+Messages.getBodyJavascriptString(locale,"LDAP.ServerPortMustBeAnInteger")+"\");\n"+
> -"
>  SelectTab(\""+Messages.getBodyJavascriptString(locale,"LDAP.LDAP")+"\");\n"+
> -"    editconnection.ldapServerPort.focus();\n"+
> -"    return false;\n"+
> -"  }\n"+
> -"  if (editconnection.ldapServerName.value.indexOf(\"/\") != -1) {\n"+
> -"
>  alert(\""+Messages.getBodyJavascriptString(locale,"LDAP.ServerNameCannotIncludeSlash")+"\");\n"+
> -"
>  SelectTab(\""+Messages.getBodyJavascriptString(locale,"LDAP.LDAP")+"\");\n"+
> -"    editconnection.ldapServerName.focus();\n"+
> -"    return false;\n"+
> -"  }\n"+
> -"  if (editconnection.ldapServerBase.value.indexOf(\"/\") != -1) {\n"+
> -"
>  alert(\""+Messages.getBodyJavascriptString(locale,"LDAP.ServerBaseCannotIncludeSlash")+"\");\n"+
> -"    editconnection.ldapServerBase.focus();\n"+
> -"    return false;\n"+
> -"  }\n"+
> -"  return true;\n"+
> -"}\n"+
> -"//-->\n"+
> -"</script>\n"
> -    );
> -  }
> -
> -  /**
> -  * Output the configuration body section. This method is called in the
> body
> -  * section of the authority connector's configuration page. Its purpose
> is
> -  * to present the required form elements for editing. The coder can
> presume
> -  * that the HTML that is output from this configuration will be within
> -  * appropriate <html>, <body>, and <form> tags. The name of the form is
> -  * "editconnection".
> -  *
> -  * @param threadContext is the local thread context.
> -  * @param out is the output to which any HTML should be sent.
> -  * @param parameters are the configuration parameters, as they currently
> -  * exist, for this connection being configured.
> -  * @param tabName is the current tab name.
> -  */
> +      "<script type=\"text/javascript\">\n"
> +      + "<!--\n"
> +      + "function checkConfig() {\n"
> +      + "  if (editconnection.ldapServerName.value.indexOf(\"/\") != -1)
> {\n"
> +      + "    alert(\"" + Messages.getBodyJavascriptString(locale,
> "LDAP.ServerNameCannotIncludeSlash") + "\");\n"
> +      + "    editconnection.ldapServerName.focus();\n"
> +      + "    return false;\n"
> +      + "  }\n"
> +      + "  if (editconnection.ldapServerPort.value != \"\" &&
> !isInteger(editconnection.ldapServerPort.value)) {\n"
> +      + "    alert(\"" + Messages.getBodyJavascriptString(locale,
> "LDAP.ServerPortMustBeAnInteger") + "\");\n"
> +      + "    editconnection.ldapServerPort.focus();\n"
> +      + "    return false;\n"
> +      + "  }\n"
> +      + "  if (editconnection.ldapServerBase.value.indexOf(\"/\") != -1)
> {\n"
> +      + "    alert(\"" + Messages.getBodyJavascriptString(locale,
> "LDAP.ServerBaseCannotIncludeSlash") + "\");\n"
> +      + "    editconnection.ldapServerBase.focus();\n"
> +      + "    return false;\n"
> +      + "  }\n"
> +      + "  if (editconnection.ldapUserSearch.value != \"\" &&
> editconnection.ldapUserSearch.value.indexOf(\"{0}\") == -1) {\n"
> +      + "    alert(\"" + Messages.getBodyJavascriptString(locale,
> "LDAP.UserSearchMustIncludeSubstitution") + "\");\n"
> +      + "    editconnection.ldapUserSearch.focus();\n"
> +      + "    return false;\n"
> +      + "  }\n"
> +      + "  if (editconnection.ldapGroupSearch.value != \"\" &&
> editconnection.ldapGroupSearch.value.indexOf(\"{0}\") == -1) {\n"
> +      + "    alert(\"" + Messages.getBodyJavascriptString(locale,
> "LDAP.GroupSearchMustIncludeSubstitution") + "\");\n"
> +      + "    editconnection.ldapGroupSearch.focus();\n"
> +      + "    return false;\n"
> +      + "  }\n"
> +      + "  return true;\n"
> +      + "}\n"
> +      + "\n"
> +      + "function checkConfigForSave() {\n"
> +      + "  if (editconnection.ldapServerName.value == \"\") {\n"
> +      + "    alert(\"" + Messages.getBodyJavascriptString(locale,
> "LDAP.ServerNameCannotBeBlank") + "\");\n"
> +      + "    SelectTab(\"" + Messages.getBodyJavascriptString(locale,
> "LDAP.LDAP") + "\");\n"
> +      + "    editconnection.ldapServerName.focus();\n"
> +      + "    return false;\n"
> +      + "  }\n"
> +      + "  if (editconnection.ldapServerPort.value == \"\") {\n"
> +      + "    alert(\"" + Messages.getBodyJavascriptString(locale,
> "LDAP.ServerPortCannotBeBlank") + "\");\n"
> +      + "    SelectTab(\"" + Messages.getBodyJavascriptString(locale,
> "LDAP.LDAP") + "\");\n"
> +      + "    editconnection.ldapServerPort.focus();\n"
> +      + "    return false;\n"
> +      + "  }\n"
> +      + "  if (editconnection.ldapUserSearch.value == \"\") {\n"
> +      + "    alert(\"" + Messages.getBodyJavascriptString(locale,
> "LDAP.UserSearchCannotBeBlank") + "\");\n"
> +      + "    SelectTab(\"" + Messages.getBodyJavascriptString(locale,
> "LDAP.LDAP") + "\");\n"
> +      + "    editconnection.ldapUserSearch.focus();\n"
> +      + "    return false;\n"
> +      + "  }\n"
> +      + "  if (editconnection.ldapGroupSearch.value == \"\") {\n"
> +      + "    alert(\"" + Messages.getBodyJavascriptString(locale,
> "LDAP.GroupSearchCannotBeBlank") + "\");\n"
> +      + "    SelectTab(\"" + Messages.getBodyJavascriptString(locale,
> "LDAP.LDAP") + "\");\n"
> +      + "    editconnection.ldapGroupSearch.focus();\n"
> +      + "    return false;\n"
> +      + "  }\n"
> +      + "  if (editconnection.ldapGroupNameAttr.value == \"\") {\n"
> +      + "    alert(\"" + Messages.getBodyJavascriptString(locale,
> "LDAP.GroupNameAttrCannotBeBlank") + "\");\n"
> +      + "    SelectTab(\"" + Messages.getBodyJavascriptString(locale,
> "LDAP.LDAP") + "\");\n"
> +      + "    editconnection.ldapGroupNameAttr.focus();\n"
> +      + "    return false;\n"
> +      + "  }\n"
> +      + "  if (editconnection.ldapUserSearch.value != \"\" &&
> editconnection.ldapUserSearch.value.indexOf(\"{0}\") == -1) {\n"
> +      + "    alert(\"" + Messages.getBodyJavascriptString(locale,
> "LDAP.UserSearchMustIncludeSubstitution") + "\");\n"
> +      + "    SelectTab(\"" + Messages.getBodyJavascriptString(locale,
> "LDAP.LDAP") + "\");\n"
> +      + "    editconnection.ldapUserSearch.focus();\n"
> +      + "    return false;\n"
> +      + "  }\n"
> +      + "  if (editconnection.ldapGroupSearch.value != \"\" &&
> editconnection.ldapGroupSearch.value.indexOf(\"{0}\") == -1) {\n"
> +      + "    alert(\"" + Messages.getBodyJavascriptString(locale,
> "LDAP.GroupSearchMustIncludeSubstitution") + "\");\n"
> +      + "    SelectTab(\"" + Messages.getBodyJavascriptString(locale,
> "LDAP.LDAP") + "\");\n"
> +      + "    editconnection.ldapGroupSearch.focus();\n"
> +      + "    return false;\n"
> +      + "  }\n"
> +      + "  if (editconnection.ldapServerPort.value != \"\" &&
> !isInteger(editconnection.ldapServerPort.value)) {\n"
> +      + "    alert(\"" + Messages.getBodyJavascriptString(locale,
> "LDAP.ServerPortMustBeAnInteger") + "\");\n"
> +      + "    SelectTab(\"" + Messages.getBodyJavascriptString(locale,
> "LDAP.LDAP") + "\");\n"
> +      + "    editconnection.ldapServerPort.focus();\n"
> +      + "    return false;\n"
> +      + "  }\n"
> +      + "  if (editconnection.ldapServerName.value.indexOf(\"/\") != -1)
> {\n"
> +      + "    alert(\"" + Messages.getBodyJavascriptString(locale,
> "LDAP.ServerNameCannotIncludeSlash") + "\");\n"
> +      + "    SelectTab(\"" + Messages.getBodyJavascriptString(locale,
> "LDAP.LDAP") + "\");\n"
> +      + "    editconnection.ldapServerName.focus();\n"
> +      + "    return false;\n"
> +      + "  }\n"
> +      + "  if (editconnection.ldapServerBase.value.indexOf(\"/\") != -1)
> {\n"
> +      + "    alert(\"" + Messages.getBodyJavascriptString(locale,
> "LDAP.ServerBaseCannotIncludeSlash") + "\");\n"
> +      + "    editconnection.ldapServerBase.focus();\n"
> +      + "    return false;\n"
> +      + "  }\n"
> +      + "  return true;\n"
> +      + "}\n"
> +      + "//-->\n"
> +      + "</script>\n");
> +  }
> +
> +  /**
> +   * Output the configuration body section. This method is called in the
> body
> +   * section of the authority connector's configuration page. Its purpose
> is to
> +   * present the required form elements for editing. The coder can
> presume that
> +   * the HTML that is output from this configuration will be within
> appropriate
> +   * <html>, <body>, and <form> tags. The name of the form is
> "editconnection".
> +   *
> +   * @param threadContext is the local thread context.
> +   * @param out is the output to which any HTML should be sent.
> +   * @param parameters are the configuration parameters, as they currently
> +   * exist, for this connection being configured.
> +   * @param tabName is the current tab name.
> +   */
>    @Override
>    public void outputConfigurationBody(IThreadContext threadContext,
> IHTTPOutput out, Locale locale, ConfigParams parameters, String tabName)
>      throws ManifoldCFException, IOException {
> -    String fServerName = getParam( parameters, "ldapServerName", "");
> -    String fServerPort = getParam( parameters, "ldapServerPort", "389");
> -    String fServerBase = getParam( parameters, "ldapServerBase", "");
> -
> -    String fUserBase = getParam( parameters, "ldapUserBase", "ou=People"
> );
> -    String fUserSearch = getParam( parameters, "ldapUserSearch",
> "(&(objectClass=inetOrgPerson)(uid={0}))" );
> +    String fServerName = getParam(parameters, "ldapServerName", "");
> +    String fServerPort = getParam(parameters, "ldapServerPort", "389");
> +    String fServerBase = getParam(parameters, "ldapServerBase", "");
> +
> +    String fUserBase = getParam(parameters, "ldapUserBase", "ou=People");
> +    String fUserSearch = getParam(parameters, "ldapUserSearch",
> "(&(objectClass=inetOrgPerson)(uid={0}))");
>      String fUserNameAttr = getParam(parameters, "ldapUserNameAttr",
> "uid");
>      boolean fAddUserRecord = "1".equals(getParam(parameters,
> "ldapAddUserRecord", ""));
> -
> -    String fGroupBase = getParam( parameters, "ldapGroupBase",
> "ou=Groups" );
> -    String fGroupSearch = getParam( parameters, "ldapGroupSearch",
> "(&(objectClass=groupOfNames)(member={0}))" );
> -    String fGroupNameAttr = getParam( parameters, "ldapGroupNameAttr",
> "cn" );
> +
> +    String fGroupBase = getParam(parameters, "ldapGroupBase",
> "ou=Groups");
> +    String fGroupSearch = getParam(parameters, "ldapGroupSearch",
> "(&(objectClass=groupOfNames)(member={0}))");
> +    String fGroupNameAttr = getParam(parameters, "ldapGroupNameAttr",
> "cn");
>      boolean fGroupMemberDN = "1".equals(getParam(parameters,
> "ldapGroupMemberDn", ""));
> -
> +
>      String fBindUser = getParam(parameters, "ldapBindUser", "");
> -    String fBindPass = getParam(parameters, "ldapBindPass", null);
> -    if (fBindPass != null)
> -      fBindPass = ManifoldCF.deobfuscate(fBindPass);
> -    else
> -      fBindPass = "";
> +    String fBindPass = "";
> +    try {
> +      fBindPass = ManifoldCF.deobfuscate(getParam(parameters,
> "ldapBindPass", ""));
> +    } catch (ManifoldCFException ex) {
> +      //ignore
> +    }
>
> -    if (tabName.equals(Messages.getString(locale,"LDAP.LDAP"))) {
> +    if (tabName.equals(Messages.getString(locale, "LDAP.LDAP"))) {
>        out.print(
> -"<table class=\"displaytable\">\n"+
> -" <tr><td class=\"separator\" colspan=\"2\"><hr/></td></tr>\n"+
> -
> -" <tr>\n"+
> -"  <td
> class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.LDAPServerNameColon")+"</nobr></td>\n"+
> -"  <td class=\"value\"><input type=\"text\" size=\"32\"
> name=\"ldapServerName\"
> value=\""+Encoder.attributeEscape(fServerName)+"\"/></td>\n"+
> -" </tr>\n"+
> -
> -" <tr>\n"+
> -"  <td
> class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.LDAPServerPortColon")+"</nobr></td>\n"+
> -"  <td class=\"value\"><input type=\"text\" size=\"5\"
> name=\"ldapServerPort\"
> value=\""+Encoder.attributeEscape(fServerPort)+"\"/></td>\n"+
> -" </tr>\n"+
> -
> -" <tr>\n"+
> -"  <td
> class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.LDAPServerBaseColon")+"</nobr></td>\n"+
> -"  <td class=\"value\"><input type=\"text\" size=\"64\"
> name=\"ldapServerBase\"
> value=\""+Encoder.attributeEscape(fServerBase)+"\"/></td>\n"+
> -" </tr>\n"+
> -
> -" <tr>\n"+
> -"  <td
> class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.LDAPBindUserColon")+"</nobr></td>\n"+
> -"  <td class=\"value\"><input type=\"text\" size=\"64\"
> name=\"ldapBindUser\"
> value=\""+Encoder.attributeEscape(fBindUser)+"\"/></td>\n"+
> -" </tr>\n"+
> -
> -" <tr>\n"+
> -"  <td
> class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.LDAPBindPasswordColon")+"</nobr></td>\n"+
> -"  <td class=\"value\"><input type=\"password\" size=\"64\"
> name=\"ldapBindPass\"
> value=\""+Encoder.attributeEscape(fBindPass)+"\"/></td>\n"+
> -" </tr>\n"+
> -
> -" <tr><td class=\"separator\" colspan=\"2\"><hr/></td></tr>\n"+
> -" <tr>\n"+
> -"  <td
> class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.UserSearchBaseColon")+"</nobr></td>\n"+
> -"  <td class=\"value\"><input type=\"text\" size=\"64\"
> name=\"ldapUserBase\"
> value=\""+Encoder.attributeEscape(fUserBase)+"\"/></td>\n"+
> -" </tr>\n"+
> -
> -" <tr>\n"+
> -"  <td
> class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.UserSearchFilterColon")+"</nobr></td>\n"+
> -"  <td class=\"value\"><input type=\"text\" size=\"64\"
> name=\"ldapUserSearch\"
> value=\""+Encoder.attributeEscape(fUserSearch)+"\"/></td>\n"+
> -" </tr>\n"+
> -
> -" <tr>\n"+
> -"  <td
> class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.AddUserAuthColon")+"</nobr></td>\n"+
> -"  <td class=\"value\"><input type=\"checkbox\" value=\"1\"
> name=\"ldapAddUserRecord\" " + (fAddUserRecord ? "checked=\"true\"" : "") +
> "/></td>\n"+
> -" </tr>\n"+
> -
> -" <tr>\n"+
> -"  <td
> class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.UserNameAttrColon")+"</nobr></td>\n"+
> -"  <td class=\"value\"><input type=\"text\" size=\"64\"
> name=\"ldapUserNameAttr\" value=\"" +
> Encoder.attributeEscape(fUserNameAttr) + "\"/></td>\n"+
> -" </tr>\n"+
> -
> -" <tr><td class=\"separator\" colspan=\"2\"><hr/></td></tr>\n" +
> -" <tr>\n"+
> -"  <td
> class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.GroupSearchBaseColon")+"</nobr></td>\n"+
> -"  <td class=\"value\"><input type=\"text\" size=\"64\"
> name=\"ldapGroupBase\"
> value=\""+Encoder.attributeEscape(fGroupBase)+"\"/></td>\n"+
> -" </tr>\n"+
> -
> -" <tr>\n"+
> -"  <td
> class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.GroupSearchFilterColon")+"</nobr></td>\n"+
> -"  <td class=\"value\"><input type=\"text\" size=\"64\"
> name=\"ldapGroupSearch\"
> value=\""+Encoder.attributeEscape(fGroupSearch)+"\"/></td>\n"+
> -" </tr>\n"+
> -
> -" <tr>\n"+
> -"  <td
> class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.GroupNameAttributeColon")+"</nobr></td>\n"+
> -"  <td class=\"value\"><input type=\"text\" size=\"64\"
> name=\"ldapGroupNameAttr\"
> value=\""+Encoder.attributeEscape(fGroupNameAttr)+"\"/></td>\n"+
> -" </tr>\n"+
> -
> -" <tr>\n"+
> -"  <td
> class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.GroupMemberDnColon")+"</nobr></td>\n"+
> -"  <td class=\"value\"><input type=\"checkbox\" value=\"1\"
> name=\"ldapGroupMemberDn\" " + (fGroupMemberDN ? "checked=\"true\"" : "") +
> "/></td>\n"+
> -" </tr>\n"+
> -
> -"</table>\n"
> -      );
> +        "<table class=\"displaytable\">\n"
> +        + " <tr><td class=\"separator\" colspan=\"2\"><hr/></td></tr>\n"
> +        + " <tr>\n"
> +        + "  <td class=\"description\"><nobr>" +
> Messages.getBodyString(locale, "LDAP.LDAPServerNameColon") +
> "</nobr></td>\n"
> +        + "  <td class=\"value\"><input type=\"text\" size=\"32\"
> name=\"ldapServerName\" value=\"" + Encoder.attributeEscape(fServerName) +
> "\"/></td>\n"
> +        + " </tr>\n"
> +        + " <tr>\n"
> +        + "  <td class=\"description\"><nobr>" +
> Messages.getBodyString(locale, "LDAP.LDAPServerPortColon") +
> "</nobr></td>\n"
> +        + "  <td class=\"value\"><input type=\"text\" size=\"5\"
> name=\"ldapServerPort\" value=\"" + Encoder.attributeEscape(fServerPort) +
> "\"/></td>\n"
> +        + " </tr>\n"
> +        + " <tr>\n"
> +        + "  <td class=\"description\"><nobr>" +
> Messages.getBodyString(locale, "LDAP.LDAPServerBaseColon") +
> "</nobr></td>\n"
> +        + "  <td class=\"value\"><input type=\"text\" size=\"64\"
> name=\"ldapServerBase\" value=\"" + Encoder.attributeEscape(fServerBase) +
> "\"/></td>\n"
> +        + " </tr>\n"
> +        + " <tr>\n"
> +        + "  <td class=\"description\"><nobr>" +
> Messages.getBodyString(locale, "LDAP.LDAPBindUserColon") + "</nobr></td>\n"
> +        + "  <td class=\"value\"><input type=\"text\" size=\"64\"
> name=\"ldapBindUser\" value=\"" + Encoder.attributeEscape(fBindUser) +
> "\"/></td>\n"
> +        + " </tr>\n"
> +        + " <tr>\n"
> +        + "  <td class=\"description\"><nobr>" +
> Messages.getBodyString(locale, "LDAP.LDAPBindPasswordColon") +
> "</nobr></td>\n"
> +        + "  <td class=\"value\"><input type=\"password\" size=\"64\"
> name=\"ldapBindPass\" value=\"" + Encoder.attributeEscape(fBindPass) +
> "\"/></td>\n"
> +        + " </tr>\n"
> +        + " <tr><td class=\"separator\" colspan=\"2\"><hr/></td></tr>\n"
> +        + " <tr>\n"
> +        + "  <td class=\"description\"><nobr>" +
> Messages.getBodyString(locale, "LDAP.UserSearchBaseColon") +
> "</nobr></td>\n"
> +        + "  <td class=\"value\"><input type=\"text\" size=\"64\"
> name=\"ldapUserBase\" value=\"" + Encoder.attributeEscape(fUserBase) +
> "\"/></td>\n"
> +        + " </tr>\n"
> +        + " <tr>\n"
> +        + "  <td class=\"description\"><nobr>" +
> Messages.getBodyString(locale, "LDAP.UserSearchFilterColon") +
> "</nobr></td>\n"
> +        + "  <td class=\"value\"><input type=\"text\" size=\"64\"
> name=\"ldapUserSearch\" value=\"" + Encoder.attributeEscape(fUserSearch) +
> "\"/></td>\n"
> +        + " </tr>\n"
> +        + " <tr>\n"
> +        + "  <td class=\"description\"><nobr>" +
> Messages.getBodyString(locale, "LDAP.AddUserAuthColon") + "</nobr></td>\n"
> +        + "  <td class=\"value\"><input type=\"checkbox\" value=\"1\"
> name=\"ldapAddUserRecord\" " + (fAddUserRecord ? "checked=\"true\"" : "") +
> "/></td>\n"
> +        + " </tr>\n"
> +        + " <tr>\n"
> +        + "  <td class=\"description\"><nobr>" +
> Messages.getBodyString(locale, "LDAP.UserNameAttrColon") + "</nobr></td>\n"
> +        + "  <td class=\"value\"><input type=\"text\" size=\"64\"
> name=\"ldapUserNameAttr\" value=\"" +
> Encoder.attributeEscape(fUserNameAttr) + "\"/></td>\n"
> +        + " </tr>\n"
> +        + " <tr><td class=\"separator\" colspan=\"2\"><hr/></td></tr>\n"
> +        + " <tr>\n"
> +        + "  <td class=\"description\"><nobr>" +
> Messages.getBodyString(locale, "LDAP.GroupSearchBaseColon") +
> "</nobr></td>\n"
> +        + "  <td class=\"value\"><input type=\"text\" size=\"64\"
> name=\"ldapGroupBase\" value=\"" + Encoder.attributeEscape(fGroupBase) +
> "\"/></td>\n"
> +        + " </tr>\n"
> +        + " <tr>\n"
> +        + "  <td class=\"description\"><nobr>" +
> Messages.getBodyString(locale, "LDAP.GroupSearchFilterColon") +
> "</nobr></td>\n"
> +        + "  <td class=\"value\"><input type=\"text\" size=\"64\"
> name=\"ldapGroupSearch\" value=\"" + Encoder.attributeEscape(fGroupSearch)
> + "\"/></td>\n"
> +        + " </tr>\n"
> +        + " <tr>\n"
> +        + "  <td class=\"description\"><nobr>" +
> Messages.getBodyString(locale, "LDAP.GroupNameAttributeColon") +
> "</nobr></td>\n"
> +        + "  <td class=\"value\"><input type=\"text\" size=\"64\"
> name=\"ldapGroupNameAttr\" value=\"" +
> Encoder.attributeEscape(fGroupNameAttr) + "\"/></td>\n"
> +        + " </tr>\n"
> +        + " <tr>\n"
> +        + "  <td class=\"description\"><nobr>" +
> Messages.getBodyString(locale, "LDAP.GroupMemberDnColon") + "</nobr></td>\n"
> +        + "  <td class=\"value\"><input type=\"checkbox\" value=\"1\"
> name=\"ldapGroupMemberDn\" " + (fGroupMemberDN ? "checked=\"true\"" : "") +
> "/></td>\n"
> +        + " </tr>\n"
> +        + "</table>\n");
>      } else {
>        out.print("<input type=\"hidden\" name=\"ldapServerName\" value=\""
> + Encoder.attributeEscape(fServerName) + "\"/>\n");
>        out.print("<input type=\"hidden\" name=\"ldapServerPort\" value=\""
> + Encoder.attributeEscape(fServerPort) + "\"/>\n");
> @@ -634,62 +624,64 @@ public class LDAPAuthority extends org.a
>      }
>    }
>
> -  private String getParam( ConfigParams parameters, String name, String
> def) {
> +  private String getParam(ConfigParams parameters, String name, String
> def) {
>      return parameters.getParameter(name) != null ?
> parameters.getParameter(name) : def;
>    }
>
> -  private String getViewParam( ConfigParams parameters, String name) {
> +  private String getViewParam(ConfigParams parameters, String name) {
>      return parameters.getParameter(name) != null ?
> parameters.getParameter(name) : "";
>    }
>
> -  private boolean copyParam( IPostParameters variableContext,
> ConfigParams parameters, String name) {
> -    String val = variableContext.getParameter( name );
> -    if( val == null ){
> +  private boolean copyParam(IPostParameters variableContext, ConfigParams
> parameters, String name) {
> +    String val = variableContext.getParameter(name);
> +    if (val == null) {
>        return false;
>      }
> -    parameters.setParameter( name, val );
> +    parameters.setParameter(name, val);
>      return true;
>    }
>
> -  private void copyParam2(IPostParameters variableContext, ConfigParams
> parameters, String name) {
> +  private boolean copyParam(IPostParameters variableContext, ConfigParams
> parameters, String name, String def) {
>      String val = variableContext.getParameter(name);
>      if (val == null) {
> -      val = "";
> +      val = def;
>      }
>      parameters.setParameter(name, val);
> +    return true;
>    }
>
>    /**
> -  * Process a configuration post. This method is called at the start of
> the
> -  * authority connector's configuration page, whenever there is a
> possibility
> -  * that form data for a connection has been posted. Its purpose is to
> gather
> -  * form information and modify the configuration parameters accordingly.
> The
> -  * name of the posted form is "editconnection".
> -  *
> -  * @param threadContext is the local thread context.
> -  * @param variableContext is the set of variables available from the
> post,
> -  * including binary file post information.
> -  * @param parameters are the configuration parameters, as they currently
> -  * exist, for this connection being configured.
> -  * @return null if all is well, or a string error message if there is an
> -  * error that should prevent saving of the connection (and cause a
> -  * redirection to an error page).
> -  */
> +   * Process a configuration post. This method is called at the start of
> the
> +   * authority connector's configuration page, whenever there is a
> possibility
> +   * that form data for a connection has been posted. Its purpose is to
> gather
> +   * form information and modify the configuration parameters
> accordingly. The
> +   * name of the posted form is "editconnection".
> +   *
> +   * @param threadContext is the local thread context.
> +   * @param variableContext is the set of variables available from the
> post,
> +   * including binary file post information.
> +   * @param parameters are the configuration parameters, as they currently
> +   * exist, for this connection being configured.
> +   * @return null if all is well, or a string error message if there is
> an error
> +   * that should prevent saving of the connection (and cause a
> redirection to an
> +   * error page).
> +   */
>    @Override
>    public String processConfigurationPost(IThreadContext threadContext,
> IPostParameters variableContext, Locale locale, ConfigParams parameters)
>      throws ManifoldCFException {
> -    copyParam(variableContext, parameters, "ldapServerName" );
> -    copyParam(variableContext, parameters, "ldapServerPort" );
> -    copyParam(variableContext, parameters, "ldapServerBase" );
> -    copyParam(variableContext, parameters, "ldapUserBase" );
> -    copyParam(variableContext, parameters, "ldapUserSearch" );
> -    copyParam(variableContext, parameters, "ldapUserNameAttr" );
> -    copyParam(variableContext, parameters, "ldapGroupBase" );
> -    copyParam(variableContext, parameters, "ldapGroupSearch" );
> -    copyParam(variableContext, parameters, "ldapGroupNameAttr" );
> -
> -    copyParam(variableContext, parameters, "ldapGroupMemberDn");
> -    copyParam(variableContext, parameters, "ldapAddUserRecord");
> +    copyParam(variableContext, parameters, "ldapServerName");
> +    copyParam(variableContext, parameters, "ldapServerPort");
> +    copyParam(variableContext, parameters, "ldapServerBase");
> +    copyParam(variableContext, parameters, "ldapUserBase");
> +    copyParam(variableContext, parameters, "ldapUserSearch");
> +    copyParam(variableContext, parameters, "ldapUserNameAttr");
> +    copyParam(variableContext, parameters, "ldapGroupBase");
> +    copyParam(variableContext, parameters, "ldapGroupSearch");
> +    copyParam(variableContext, parameters, "ldapGroupNameAttr");
> +
> +    copyParam(variableContext, parameters, "ldapGroupMemberDn", "0");
> //checkbox boolean value
> +    copyParam(variableContext, parameters, "ldapAddUserRecord", "0");
> //checkbox boolean value
> +
>      copyParam(variableContext, parameters, "ldapBindUser");
>      String bindPass = variableContext.getParameter("ldapBindPass");
>      if (bindPass != null) {
> @@ -700,106 +692,91 @@ public class LDAPAuthority extends org.a
>    }
>
>    /**
> -  * View configuration. This method is called in the body section of the
> -  * authority connector's view configuration page. Its purpose is to
> present
> -  * the connection information to the user. The coder can presume that the
> -  * HTML that is output from this configuration will be within appropriate
> -  * <html> and <body> tags.
> -  *
> -  * @param threadContext is the local thread context.
> -  * @param out is the output to which any HTML should be sent.
> -  * @param parameters are the configuration parameters, as they currently
> -  * exist, for this connection being configured.
> -  */
> +   * View configuration. This method is called in the body section of the
> +   * authority connector's view configuration page. Its purpose is to
> present
> +   * the connection information to the user. The coder can presume that
> the HTML
> +   * that is output from this configuration will be within appropriate
> <html>
> +   * and <body> tags.
> +   *
> +   * @param threadContext is the local thread context.
> +   * @param out is the output to which any HTML should be sent.
> +   * @param parameters are the configuration parameters, as they currently
> +   * exist, for this connection being configured.
> +   */
>    @Override
>    public void viewConfiguration(IThreadContext threadContext, IHTTPOutput
> out, Locale locale, ConfigParams parameters)
>      throws ManifoldCFException, IOException {
> -    String f_serverName = getViewParam( parameters, "ldapServerName" );
> -    String f_serverPort = getViewParam( parameters, "ldapServerPort" );
> -    String f_serverBase = getViewParam( parameters, "ldapServerBase" );
> +    String f_serverName = getViewParam(parameters, "ldapServerName");
> +    String f_serverPort = getViewParam(parameters, "ldapServerPort");
> +    String f_serverBase = getViewParam(parameters, "ldapServerBase");
>      String f_bindUser = getViewParam(parameters, "ldapBindUser");
>
> -    String f_userBase = getViewParam( parameters, "ldapUserBase" );
> -    String f_userSearch = getViewParam( parameters, "ldapUserSearch" );
> -    String f_groupBase = getViewParam( parameters, "ldapGroupBase" );
> -    String f_groupSearch = getViewParam( parameters, "ldapGroupSearch" );
> -    String f_groupNameAttr = getViewParam( parameters,
> "ldapGroupNameAttr" );
> -
> +    String f_userBase = getViewParam(parameters, "ldapUserBase");
> +    String f_userSearch = getViewParam(parameters, "ldapUserSearch");
> +    String f_groupBase = getViewParam(parameters, "ldapGroupBase");
> +    String f_groupSearch = getViewParam(parameters, "ldapGroupSearch");
> +    String f_groupNameAttr = getViewParam(parameters,
> "ldapGroupNameAttr");
> +
>      String f_userNameAttr = getViewParam(parameters, "ldapUserNameAttr");
>      boolean f_groupMemberDN = "1".equals(getViewParam(parameters,
> "ldapGroupMemberDn"));
>      boolean f_addUserRecord = "1".equals(getViewParam(parameters,
> "ldapAddUserRecord"));
>
>      out.print(
> -"<table class=\"displaytable\">\n"+
> -" <tr><td class=\"separator\" colspan=\"2\"><hr/></td></tr>\n"+
> -
> -" <tr>\n"+
> -"  <td
> class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.LDAPServerNameColon")+"</nobr></td>\n"+
> -"  <td class=\"value\">"+Encoder.bodyEscape(f_serverName)+"</td>\n"+
> -" </tr>\n"+
> -
> -" <tr>\n"+
> -"  <td
> class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.LDAPServerPortColon")+"</nobr></td>\n"+
> -"  <td class=\"value\">"+Encoder.bodyEscape(f_serverPort)+"</td>\n"+
> -" </tr>\n"+
> -
> -" <tr>\n"+
> -"  <td
> class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.LDAPServerBaseColon")+"</nobr></td>\n"+
> -"  <td class=\"value\">"+Encoder.bodyEscape(f_serverBase)+"</td>\n"+
> -" </tr>\n"+
> -
> -" <tr>\n"+
> -"  <td
> class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.LDAPBindUserColon")+"</nobr></td>\n"+
> -"  <td class=\"value\">"+Encoder.bodyEscape(f_bindUser)+"</td>\n"+
> -" </tr>\n"+
> -
> -" <tr>\n"+
> -"  <td
> class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.LDAPBindPasswordColon")+"</nobr></td>\n"+
> -"  <td class=\"value\">*******</td>\n"+
> -" </tr>\n"+
> -
> -" <tr>\n"+
> -"  <td
> class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.UserSearchBaseColon")+"</nobr></td>\n"+
> -"  <td class=\"value\">"+Encoder.bodyEscape(f_userBase)+"</td>\n"+
> -" </tr>\n"+
> -
> -" <tr>\n"+
> -"  <td
> class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.UserSearchFilterColon")+"</nobr></td>\n"+
> -"  <td class=\"value\">"+Encoder.bodyEscape(f_userSearch)+"</td>\n"+
> -" </tr>\n"+
> -
> -" <tr>\n"+
> -"  <td
> class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.AddUserAuthColon")+"</nobr></td>\n"+
> -"  <td class=\"value\">" + (f_addUserRecord ? "Y" : "N") + "</td>\n"+
> -" </tr>\n"+
> -
> -" <tr>\n"+
> -"  <td
> class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.UserNameAttrColon")+"</nobr></td>\n"+
> -"  <td class=\"value\">" + Encoder.bodyEscape(f_userNameAttr) + "</td>\n"+
> -" </tr>\n"+
> -
> -" <tr>\n"+
> -"  <td
> class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.GroupSearchBaseColon")+"</nobr></td>\n"+
> -"  <td class=\"value\">"+Encoder.bodyEscape(f_groupBase)+"</td>\n"+
> -" </tr>\n"+
> -
> -" <tr>\n"+
> -"  <td
> class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.GroupSearchFilterColon")+"</nobr></td>\n"+
> -"  <td class=\"value\">"+Encoder.bodyEscape(f_groupSearch)+"</td>\n"+
> -" </tr>\n"+
> -
> -" <tr>\n"+
> -"  <td
> class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.GroupNameAttributeColon")+"</nobr></td>\n"+
> -"  <td class=\"value\">"+Encoder.bodyEscape(f_groupNameAttr)+"</td>\n"+
> -" </tr>\n"+
> -
> -" <tr>\n"+
> -"  <td
> class=\"description\"><nobr>"+Messages.getBodyString(locale,"LDAP.GroupMemberDnColon")+"</nobr></td>\n"+
> -"  <td class=\"value\">"+(f_groupMemberDN?"Y":"N")+"</td>\n"+
> -" </tr>\n"+
> -
> -"</table>\n"
> -    );
> +      "<table class=\"displaytable\">\n"
> +      + " <tr><td class=\"separator\" colspan=\"2\"><hr/></td></tr>\n"
> +      + " <tr>\n"
> +      + "  <td class=\"description\"><nobr>" +
> Messages.getBodyString(locale, "LDAP.LDAPServerNameColon") +
> "</nobr></td>\n"
> +      + "  <td class=\"value\">" + Encoder.bodyEscape(f_serverName) +
> "</td>\n"
> +      + " </tr>\n"
> +      + " <tr>\n"
> +      + "  <td class=\"description\"><nobr>" +
> Messages.getBodyString(locale, "LDAP.LDAPServerPortColon") +
> "</nobr></td>\n"
> +      + "  <td class=\"value\">" + Encoder.bodyEscape(f_serverPort) +
> "</td>\n"
> +      + " </tr>\n"
> +      + " <tr>\n"
> +      + "  <td class=\"description\"><nobr>" +
> Messages.getBodyString(locale, "LDAP.LDAPServerBaseColon") +
> "</nobr></td>\n"
> +      + "  <td class=\"value\">" + Encoder.bodyEscape(f_serverBase) +
> "</td>\n"
> +      + " </tr>\n"
> +      + " <tr>\n"
> +      + "  <td class=\"description\"><nobr>" +
> Messages.getBodyString(locale, "LDAP.LDAPBindUserColon") + "</nobr></td>\n"
> +      + "  <td class=\"value\">" + Encoder.bodyEscape(f_bindUser) +
> "</td>\n"
> +      + " </tr>\n"
> +      + " <tr>\n"
> +      + "  <td class=\"description\"><nobr>" +
> Messages.getBodyString(locale, "LDAP.LDAPBindPasswordColon") +
> "</nobr></td>\n"
> +      + "  <td class=\"value\">*******</td>\n"
> +      + " </tr>\n"
> +      + " <tr>\n"
> +      + "  <td class=\"description\"><nobr>" +
> Messages.getBodyString(locale, "LDAP.UserSearchBaseColon") +
> "</nobr></td>\n"
> +      + "  <td class=\"value\">" + Encoder.bodyEscape(f_userBase) +
> "</td>\n"
> +      + " </tr>\n"
> +      + " <tr>\n"
> +      + "  <td class=\"description\"><nobr>" +
> Messages.getBodyString(locale, "LDAP.UserSearchFilterColon") +
> "</nobr></td>\n"
> +      + "  <td class=\"value\">" + Encoder.bodyEscape(f_userSearch) +
> "</td>\n"
> +      + " </tr>\n"
> +      + " <tr>\n"
> +      + "  <td class=\"description\"><nobr>" +
> Messages.getBodyString(locale, "LDAP.AddUserAuthColon") + "</nobr></td>\n"
> +      + "  <td class=\"value\">" + (f_addUserRecord ? "Y" : "N") +
> "</td>\n"
> +      + " </tr>\n"
> +      + " <tr>\n"
> +      + "  <td class=\"description\"><nobr>" +
> Messages.getBodyString(locale, "LDAP.UserNameAttrColon") + "</nobr></td>\n"
> +      + "  <td class=\"value\">" + Encoder.bodyEscape(f_userNameAttr) +
> "</td>\n"
> +      + " </tr>\n"
> +      + " <tr>\n"
> +      + "  <td class=\"description\"><nobr>" +
> Messages.getBodyString(locale, "LDAP.GroupSearchBaseColon") +
> "</nobr></td>\n"
> +      + "  <td class=\"value\">" + Encoder.bodyEscape(f_groupBase) +
> "</td>\n"
> +      + " </tr>\n"
> +      + " <tr>\n"
> +      + "  <td class=\"description\"><nobr>" +
> Messages.getBodyString(locale, "LDAP.GroupSearchFilterColon") +
> "</nobr></td>\n"
> +      + "  <td class=\"value\">" + Encoder.bodyEscape(f_groupSearch) +
> "</td>\n"
> +      + " </tr>\n"
> +      + " <tr>\n"
> +      + "  <td class=\"description\"><nobr>" +
> Messages.getBodyString(locale, "LDAP.GroupNameAttributeColon") +
> "</nobr></td>\n"
> +      + "  <td class=\"value\">" + Encoder.bodyEscape(f_groupNameAttr) +
> "</td>\n"
> +      + " </tr>\n"
> +      + " <tr>\n"
> +      + "  <td class=\"description\"><nobr>" +
> Messages.getBodyString(locale, "LDAP.GroupMemberDnColon") + "</nobr></td>\n"
> +      + "  <td class=\"value\">" + (f_groupMemberDN ? "Y" : "N") +
> "</td>\n"
> +      + " </tr>\n"
> +      + "</table>\n");
>    }
>
>    // Protected methods
> @@ -810,12 +787,12 @@ public class LDAPAuthority extends org.a
>     * @param userName (Domain Logon Name) is the user name or identifier.
>     * @param searchBase (Full Domain Name for the search ie:
>     * DC=qa-ad-76,DC=metacarta,DC=com)
> -   * @return SearchResult for given domain user logon name. (Should throws
> -   * an exception if user is not found.)
> +   * @return SearchResult for given domain user logon name. (Should
> throws an
> +   * exception if user is not found.)
>     */
>    protected SearchResult getUserEntry(LdapContext ctx, String userName)
>      throws ManifoldCFException {
> -    String searchFilter = userSearch.replaceAll("\\{0\\}",
> escapeDN(userName));
> +    String searchFilter = userSearch.replaceAll("\\{0\\}",
> escapeDN(userName.split("@")[0]));
>      SearchControls searchCtls = new SearchControls();
>      searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);
>
> @@ -915,7 +892,6 @@ public class LDAPAuthority extends org.a
>      }
>      return sb.toString();
>    }
> -
>    protected static StringSet emptyStringSet = new StringSet();
>
>    /**
>
> Added:
> manifoldcf/trunk/connectors/ldap/connector/src/main/native2ascii/org/apache/manifoldcf/authorities/authorities/ldap/common_pl_PL.properties
> URL:
> http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/ldap/connector/src/main/native2ascii/org/apache/manifoldcf/authorities/authorities/ldap/common_pl_PL.properties?rev=1496653&view=auto
>
> ==============================================================================
> ---
> manifoldcf/trunk/connectors/ldap/connector/src/main/native2ascii/org/apache/manifoldcf/authorities/authorities/ldap/common_pl_PL.properties
> (added)
> +++
> manifoldcf/trunk/connectors/ldap/connector/src/main/native2ascii/org/apache/manifoldcf/authorities/authorities/ldap/common_pl_PL.properties
> Tue Jun 25 22:05:04 2013
> @@ -0,0 +1,50 @@
> +# Licensed to the Apache Software Foundation (ASF) under one or more
> +# contributor license agreements.  See the NOTICE file distributed with
> +# this work for additional information regarding copyright ownership.
> +# The ASF licenses this file to You under the Apache License, Version 2.0
> +# (the "License"); you may not use this file except in compliance with
> +# the License.  You may obtain a copy of the License at
> +#
> +#     http://www.apache.org/licenses/LICENSE-2.0
> +#
> +# Unless required by applicable law or agreed to in writing, software
> +# distributed under the License is distributed on an "AS IS" BASIS,
> +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
> +# See the License for the specific language governing permissions and
> +# limitations under the License.
> +
> +LDAP.LDAP=LDAP
> +LDAP.LDAPServerNameColon=Serwer LDAP:
> +LDAP.LDAPServerPortColon=Port LDAP:
> +LDAP.LDAPServerBaseColon=Baza DN (np. 'dc=office,dc=com'):
> +LDAP.LDAPBindUserColon=Pod\u0142\u0105cz do serwera jako u\u017cytkownik
> (pozostaw puste je\u015bli niepotrzebne):
> +LDAP.LDAPBindPasswordColon=Pod\u0142\u0105cz do serwera z has\u0142em:
> +LDAP.UserSearchBaseColon=Baza wyszukiwania u\u017cytkownik\u00f3w:
> +LDAP.UserSearchFilterColon=Filtr u\u017cytkownik\u00f3w:
> +LDAP.GroupSearchBaseColon=Baza wyszukiwania grup:
> +LDAP.GroupSearchFilterColon=Filtr grup:
> +LDAP.GroupNameAttributeColon=Atrybut nazwy grupy:
> +LDAP.AddUserAuthColon=Dodaj nazw\u0119 u\u017cytkownika jako token:
> +LDAP.UserNameAttrColon=Atrybut nazwy u\u017cytkownika:
> +LDAP.GroupMemberDnColon=Elementy atrybutu "member" s\u0105 w postaci DN:
> +
> +LDAP.ServerNameCannotBeBlank=Nazwa serwera nie mo\u017ce by\u0107 pusta
> +LDAP.ServerPortCannotBeBlank=Port nie mo\u017ce by\u0107 pusty
> +LDAP.UserSearchCannotBeBlank=Filtr u\u017cytkownik\u00f3w nie mo\u017ce
> by\u0107 pusty
> +LDAP.GroupSearchCannotBeBlank=Filtr grup nie mo\u017ce by\u0107 pusty
> +LDAP.GroupNameAttrCannotBeBlank=Atrybut nazwy grupy nie mo\u017ce
> by\u0107 pusty
> +LDAP.UserSearchMustIncludeSubstitution=Filtr u\u017cytkownik\u00f3w musi
> zawiera\u0107 odwo\u0142anie do nazwy u\u017cytkownika ({0})
> +LDAP.GroupSearchMustIncludeSubstitution=Filtr grupy musi zawiera\u0107
> odwo\u0142anie do nazwy u\u017cytkownika ({0})
> +LDAP.ServerPortMustBeAnInteger=Port musi by\u0107 liczb\u0105
> ca\u0142kowit\u0105
> +LDAP.ServerNameCannotIncludeSlash=Nazwa serwera nie mo\u017ce
> zawiera\u0107 znaku "/"
> +LDAP.ServerBaseCannotIncludeSlash=Baza DN nie mo\u017ce zawiera\u0107
> znaku "/"
> +
> +
> +
> +
> +
> +
> +
> +
> +
> +
>
>
>