--- openfire_src/src/java/org/jivesoftware/openfire/ldap/LdapGroupProvider.java	2007-06-22 21:25:22.000000000 +0200
+++ openfire_src-patched/src/java/org/jivesoftware/openfire/ldap/LdapGroupProvider.java	2007-11-09 21:59:17.000000000 +0100
@@ -323,13 +323,18 @@
         XMPPServer server = XMPPServer.getInstance();
         String username;
         if (!manager.isPosixMode()) {
+	    boolean noBaseDN = (manager.getBaseDN() == null || manager.getBaseDN().trim().equals(""));
+
             // Check if the user exists (only if user is a local user)
             if (!server.isLocal(user)) {
                 return Collections.emptyList();
             }
             username = JID.unescapeNode(user.getNode());
             try {
-                username = manager.findUserDN(username) + "," + manager.getBaseDN();
+		if(noBaseDN)
+                	username = manager.findUserDN(username);
+		else
+                	username = manager.findUserDN(username) + "," + manager.getBaseDN();
             }
             catch (Exception e) {
                 Log.error("Could not find user in LDAP " + username);
@@ -667,9 +672,13 @@
                                         NamingEnumeration usrAnswer = ctx.search("",
                                                 userDNPart, searchControls);
                                         if (usrAnswer != null && usrAnswer.hasMoreElements()) {
-                                            username = (String) ((SearchResult) usrAnswer.next())
-                                                    .getAttributes().get(
-                                                    manager.getUsernameField()).get();
+					    Attribute possiblyNullName = ((SearchResult) usrAnswer.next()).getAttributes().get(manager.getUsernameField());;
+
+					    if(possiblyNullName != null) {
+						    username = (String)possiblyNullName.get();
+					    } else {
+						    continue;
+					    }
                                         }
                                         // Close the enumeration.
                                         usrAnswer.close();
--- openfire_src/src/java/org/jivesoftware/openfire/ldap/LdapManager.java	2007-06-22 21:25:23.000000000 +0200
+++ openfire_src-patched/src/java/org/jivesoftware/openfire/ldap/LdapManager.java	2007-11-09 21:59:17.000000000 +0100
@@ -433,7 +433,19 @@
                 env.put(Context.SECURITY_PROTOCOL, "ssl");
             }
             env.put(Context.SECURITY_AUTHENTICATION, "simple");
-            env.put(Context.SECURITY_PRINCIPAL, userDN + "," + baseDN);
+
+	    if(baseDN != null && !baseDN.trim().equals("")) {
+		if(debug) {
+            	    Log.debug("Not using Lotus Notes workaround");
+		}
+            	env.put(Context.SECURITY_PRINCIPAL, userDN + "," + baseDN);
+	    } else {
+		if(debug) {
+            	    Log.debug("Enabled Lotus Notes workaround");
+		}
+            	env.put(Context.SECURITY_PRINCIPAL, userDN);
+	    }
+
             env.put(Context.SECURITY_CREDENTIALS, password);
             // Specify timeout to be 10 seconds, only on non SSL since SSL connections
             // break with a timemout.
--- openfire_src/src/web/setup/ldap-server.jspf	2007-06-22 21:25:15.000000000 +0200
+++ openfire_src-patched/src/web/setup/ldap-server.jspf	2007-11-09 21:59:17.000000000 +0100
@@ -33,9 +33,9 @@
             errors.put("port", LocaleUtils.getLocalizedString("setup.ldap.server.port_error"));
         }
         baseDN = ParamUtils.getParameter(request, "basedn");
-        if (baseDN == null) {
+        /* if (baseDN == null) {
             errors.put("baseDN", LocaleUtils.getLocalizedString("setup.ldap.server.basedn_error"));
-        }
+        } */
         adminDN = ParamUtils.getParameter(request, "admindn");
         adminPassword = ParamUtils.getParameter(request, "adminpwd");
         connectionPoolEnabled =
