diff --git a/pom.xml b/pom.xml
index ff8a28c..35f947d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
de.jalin.ldapadmin
ldapadmin
war
- 1.0-SNAPSHOT
+ 1.0.1
LDAP Admin Webapp
@@ -55,13 +55,8 @@
commons-net
commons-net
- 3.6
+ 3.8.0
-
- org.apache.xmlrpc
- xmlrpc-client
- 3.1.3
-
org.webjars
bootstrap
@@ -70,12 +65,12 @@
org.apache.directory.server
apacheds-service
- 2.0.0.AM25
+ 2.0.0.AM26
junit
junit
- 4.12
+ 4.13.2
test
diff --git a/src/main/java/de/jalin/ldapadmin/hsadmin/EMailAddressDAO.java b/src/main/java/de/jalin/ldapadmin/hsadmin/EMailAddressDAO.java
deleted file mode 100644
index 6b55260..0000000
--- a/src/main/java/de/jalin/ldapadmin/hsadmin/EMailAddressDAO.java
+++ /dev/null
@@ -1,98 +0,0 @@
-package de.jalin.ldapadmin.hsadmin;
-
-import java.io.IOException;
-import java.io.Serializable;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.xmlrpc.XmlRpcException;
-import org.apache.xmlrpc.client.XmlRpcClient;
-import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;
-
-public class EMailAddressDAO {
-
- private TicketProvider ticketBox;
- private XmlRpcClient rpcClient;
-
- public EMailAddressDAO(final TicketProvider ticketBox) throws IOException {
- this.ticketBox = ticketBox;
- final XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();
- config.setServerURL(new URL("https://config.hostsharing.net:443/hsar/xmlrpc/hsadmin"));
- config.setEnabledForExtensions(true);
- this.rpcClient = new XmlRpcClient();
- this.rpcClient.setConfig(config);
- }
-
- public void assertEMailAddressExists(final String emailAddress, final String target) throws IOException, XmlRpcException, EMailAddressNotFound {
- final String[] parts = emailAddress.split("@");
- if (parts.length == 2) {
- final String localpart = parts[0];
- final String domain = parts[1];
- final String pac = ticketBox.getAdminLogin();
- try {
- getEMailAddress(pac, localpart, domain);
- updateEMailAddress(pac, localpart, domain, target);
- } catch (EMailAddressNotFound e) {
- createEMailAddress(pac, localpart, domain, target);
- }
- }
- }
-
- private String createEMailAddress(String pac, String localpart, String domain, String target) throws EMailAddressNotFound, XmlRpcException, IOException {
- final List xmlRpcParamsList = new ArrayList();
- xmlRpcParamsList.add(pac);
- xmlRpcParamsList.add(ticketBox.getTicket());
- final HashMap setParamsMap = new HashMap();
- xmlRpcParamsList.add(setParamsMap);
- setParamsMap.put("localpart", localpart);
- setParamsMap.put("domain", domain);
- setParamsMap.put("target", target);
- final Object[] rpcResult = (Object[])rpcClient.execute("emailaddress.add", xmlRpcParamsList);
- if (rpcResult.length == 1) {
- @SuppressWarnings("unchecked")
- final Map emailAddressMap = (Map) rpcResult[0];
- return (String) emailAddressMap.get("emailaddress");
- }
- throw new EMailAddressNotFound();
- }
-
- private String updateEMailAddress(String pac, String localpart, String domain, String target) throws IOException, XmlRpcException, EMailAddressNotFound {
- final List xmlRpcParamsList = new ArrayList();
- xmlRpcParamsList.add(pac);
- xmlRpcParamsList.add(ticketBox.getTicket());
- final HashMap whereParamsMap = new HashMap();
- xmlRpcParamsList.add(whereParamsMap);
- final HashMap setParamsMap = new HashMap();
- xmlRpcParamsList.add(setParamsMap);
- whereParamsMap.put("localpart", localpart);
- whereParamsMap.put("domain", domain);
- setParamsMap.put("target", target);
- final Object[] rpcResult = (Object[])rpcClient.execute("emailaddress.update", xmlRpcParamsList);
- if (rpcResult.length == 1) {
- @SuppressWarnings("unchecked")
- final Map emailAddressMap = (Map) rpcResult[0];
- return (String) emailAddressMap.get("emailaddress");
- }
- throw new EMailAddressNotFound();
- }
-
- private String getEMailAddress(String pac, String localpart, String domain) throws EMailAddressNotFound, IOException, XmlRpcException {
- final List xmlRpcParamsList = new ArrayList();
- xmlRpcParamsList.add(pac);
- xmlRpcParamsList.add(ticketBox.getTicket());
- final HashMap whereParamsMap = new HashMap();
- xmlRpcParamsList.add(whereParamsMap);
- whereParamsMap.put("localpart", localpart);
- whereParamsMap.put("domain", domain);
- final Object[] rpcResult = (Object[])rpcClient.execute("emailaddress.search", xmlRpcParamsList);
- if (rpcResult.length == 1) {
- @SuppressWarnings("unchecked")
- final Map emailAddressMap = (Map) rpcResult[0];
- return (String) emailAddressMap.get("emailaddress");
- }
- throw new EMailAddressNotFound();
- }
-}
diff --git a/src/main/java/de/jalin/ldapadmin/hsadmin/EMailAddressNotFound.java b/src/main/java/de/jalin/ldapadmin/hsadmin/EMailAddressNotFound.java
deleted file mode 100644
index 5728f93..0000000
--- a/src/main/java/de/jalin/ldapadmin/hsadmin/EMailAddressNotFound.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package de.jalin.ldapadmin.hsadmin;
-
-public class EMailAddressNotFound extends Exception {
-
- private static final long serialVersionUID = 1L;
-
-}
diff --git a/src/main/java/de/jalin/ldapadmin/hsadmin/MailboxDAO.java b/src/main/java/de/jalin/ldapadmin/hsadmin/MailboxDAO.java
deleted file mode 100644
index c06de32..0000000
--- a/src/main/java/de/jalin/ldapadmin/hsadmin/MailboxDAO.java
+++ /dev/null
@@ -1,107 +0,0 @@
-package de.jalin.ldapadmin.hsadmin;
-
-import java.io.IOException;
-import java.io.Serializable;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.xmlrpc.XmlRpcException;
-import org.apache.xmlrpc.client.XmlRpcClient;
-import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;
-
-public class MailboxDAO {
-
- private final TicketProvider ticketBox;
- private final XmlRpcClient rpcClient;
-
- public MailboxDAO(final TicketProvider ticketBox) throws IOException {
- this.ticketBox = ticketBox;
- final XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();
- config.setServerURL(new URL("https://config.hostsharing.net:443/hsar/xmlrpc/hsadmin"));
- config.setEnabledForExtensions(true);
- this.rpcClient = new XmlRpcClient();
- this.rpcClient.setConfig(config);
- }
-
- public void assertMailboxExists(final String emailAddress, final String comment) throws IOException, XmlRpcException {
- final String[] parts = emailAddress.split("@");
- if (parts.length == 2) {
- final String localpart = parts[0];
- final String domain = parts[1];
- final String pac = ticketBox.getAdminLogin();
- try {
- getMailbox(pac, localpart);
- } catch (MailboxNotFound e) {
- try {
- createMailbox(pac, localpart, comment);
- } catch (MailboxNotFound e1) {
-
- }
- }
- }
- }
-
- private String getMailbox(String pac, String localpart) throws IOException, XmlRpcException, MailboxNotFound {
- final String mailboxPostfix = localpart.replace('-', '_');
- final String mailboxIdentifier = pac + "-" + mailboxPostfix;
- final List xmlRpcParamsList = new ArrayList();
- xmlRpcParamsList.add(pac);
- xmlRpcParamsList.add(ticketBox.getTicket());
- final HashMap whereParamsMap = new HashMap();
- xmlRpcParamsList.add(whereParamsMap);
- whereParamsMap.put("name", mailboxIdentifier);
- final Object[] rpcResult = (Object[])rpcClient.execute("user.search", xmlRpcParamsList);
- if (rpcResult.length == 1) {
- @SuppressWarnings("unchecked")
- final Map userAsMap = (Map) rpcResult[0];
- return (String) userAsMap.get("name");
- }
- throw new MailboxNotFound("mailbox for " + localpart + " not found");
- }
-
- public void changePassword(String pac, String localpart, String newPassword) throws IOException, XmlRpcException, MailboxNotFound {
- final String mailbox = getMailbox(pac, localpart);
- final List xmlRpcParamsList = new ArrayList();
- xmlRpcParamsList.add(pac);
- xmlRpcParamsList.add(ticketBox.getTicket());
- final HashMap setParamsMap = new HashMap();
- xmlRpcParamsList.add(setParamsMap);
- setParamsMap.put("password", newPassword);
- final HashMap whereParamsMap = new HashMap();
- xmlRpcParamsList.add(whereParamsMap);
- whereParamsMap.put("name", mailbox);
- final Object[] rpcResult = (Object[])rpcClient.execute("user.update", xmlRpcParamsList);
- if (rpcResult.length != 1) {
- throw new MailboxNotFound("mailbox for " + localpart + " not found");
- }
- }
-
- private void createMailbox(String pac, String localpart, String comment) throws IOException, XmlRpcException, MailboxNotFound {
- final List xmlRpcParamsList = new ArrayList();
- xmlRpcParamsList.add(pac);
- xmlRpcParamsList.add(ticketBox.getTicket());
- final HashMap setParamsMap = new HashMap();
- xmlRpcParamsList.add(setParamsMap);
- setParamsMap.put("name", pac + "-" + localpart);
- setParamsMap.put("password", pwGen());
- setParamsMap.put("comment", comment);
- @SuppressWarnings("unused")
- final Object rpcResult = rpcClient.execute("user.add", xmlRpcParamsList);
- }
-
- private String pwGen() {
- final String pwCharacters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-.,_:;?!#+&%$=";
- final StringBuffer buffer = new StringBuffer();
- for (int loop=0; loop<64; loop++) {
- final int length = pwCharacters.length() - 1;
- double rand = Math.random() * length;
- int idx = (new Double(rand)).intValue();
- buffer.append(pwCharacters.charAt(idx));
- }
- return buffer.toString();
- }
-
-}
diff --git a/src/main/java/de/jalin/ldapadmin/hsadmin/MailboxNotFound.java b/src/main/java/de/jalin/ldapadmin/hsadmin/MailboxNotFound.java
deleted file mode 100644
index 189462c..0000000
--- a/src/main/java/de/jalin/ldapadmin/hsadmin/MailboxNotFound.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package de.jalin.ldapadmin.hsadmin;
-
-public class MailboxNotFound extends Exception {
-
- private static final long serialVersionUID = 1L;
-
- public MailboxNotFound(String message) {
- super(message);
- }
-
-}
diff --git a/src/main/java/de/jalin/ldapadmin/hsadmin/TicketProvider.java b/src/main/java/de/jalin/ldapadmin/hsadmin/TicketProvider.java
deleted file mode 100644
index 8928a1a..0000000
--- a/src/main/java/de/jalin/ldapadmin/hsadmin/TicketProvider.java
+++ /dev/null
@@ -1,83 +0,0 @@
-package de.jalin.ldapadmin.hsadmin;
-
-import java.io.BufferedReader;
-import java.io.BufferedWriter;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.OutputStreamWriter;
-import java.net.URL;
-import java.net.URLEncoder;
-
-import javax.net.ssl.HttpsURLConnection;
-
-public class TicketProvider {
-
- private final String adminLogin;
- private final String adminPassword;
-
- private String grantingTicket = null;
-
- public TicketProvider(final String login, final String password) {
- this.adminLogin = login;
- this.adminPassword = password;
- }
-
- public String getAdminLogin() {
- return adminLogin;
- }
-
- public String getTicket() throws IOException {
- if (grantingTicket == null) {
- grantingTicket = getGrantingTicket();
- }
- String ticket = null;
- while (ticket == null) {
- final String serviceParam = "service=" + URLEncoder.encode("https://config.hostsharing.net:443/hsar/backend", "UTF-8");
- final URL url = new URL(grantingTicket);
- final HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
- connection.setRequestMethod("POST");
- connection.setRequestProperty("Content-type", "application/x-www-form-urlencoded; charset=UTF-8");
- connection.setDoInput(true);
- connection.setDoOutput(true);
- connection.setUseCaches(false);
- connection.setAllowUserInteraction(false);
- final BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(connection.getOutputStream()));
- writer.write(serviceParam);
- writer.close();
- connection.connect();
- int httpResponseCode = connection.getResponseCode();
- if (200 == httpResponseCode) {
- final BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
- ticket = reader.readLine();
- String readLine = reader.readLine();
- do {
- readLine = reader.readLine();
- } while (readLine != null);
- }
- if (httpResponseCode >= 400) {
- grantingTicket = getGrantingTicket();
- }
- }
- return ticket;
- }
-
- private String getGrantingTicket() throws IOException {
- final String userParam = "username=" + URLEncoder.encode(adminLogin, "UTF-8");
- final String passwordParam = "password=" + URLEncoder.encode(adminPassword, "UTF-8");
- final String encodedData = userParam + "&" + passwordParam;
- final URL url = new URL("https://login.hostsharing.net/cas/v1/tickets");
- final HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
- connection.setRequestMethod("POST");
- connection.setRequestProperty("Content-type", "application/x-www-form-urlencoded; charset=UTF-8");
- connection.setDoInput(true);
- connection.setDoOutput(true);
- connection.setUseCaches(false);
- connection.setAllowUserInteraction(false);
- final BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(connection.getOutputStream()));
- writer.write(encodedData);
- writer.close();
- connection.connect();
- return connection.getHeaderField("Location");
- }
-
-}
diff --git a/src/main/java/de/jalin/ldapadmin/ldap/DirectoryServiceRunner.java b/src/main/java/de/jalin/ldapadmin/ldap/DirectoryServiceRunner.java
index 8be14db..973a7b2 100644
--- a/src/main/java/de/jalin/ldapadmin/ldap/DirectoryServiceRunner.java
+++ b/src/main/java/de/jalin/ldapadmin/ldap/DirectoryServiceRunner.java
@@ -3,12 +3,10 @@ package de.jalin.ldapadmin.ldap;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
-import net.sf.ehcache.Cache;
import org.apache.directory.api.ldap.model.entry.Entry;
import org.apache.directory.api.ldap.model.exception.LdapInvalidDnException;
import org.apache.directory.api.ldap.model.name.Dn;
import org.apache.directory.api.ldap.model.schema.SchemaManager;
-import org.apache.directory.server.core.api.CacheService;
import org.apache.directory.server.core.api.DirectoryService;
import org.apache.directory.server.core.api.partition.Partition;
import org.apache.directory.server.core.factory.DefaultDirectoryServiceFactory;
@@ -66,7 +64,7 @@ public class DirectoryServiceRunner {
directoryService.setShutdownHookEnabled(true);
directoryService.getChangeLog().setEnabled(false);
directoryService.setAllowAnonymousAccess(false);
- directoryService.setAccessControlEnabled(false);
+ directoryService.setAccessControlEnabled(true);
directoryService.setPasswordHidden(false);
return directoryService;
}
@@ -74,9 +72,7 @@ public class DirectoryServiceRunner {
private void addPartition(final String dnString, final String partitionId, final String partitionPath) throws LdapInvalidDnException, Exception {
final JdbmPartitionFactory partitionFactory = new JdbmPartitionFactory();
final SchemaManager schemaManager = service.getSchemaManager();
- final CacheService cacheService = service.getCacheService();
- final Cache cache = cacheService.getCache("dnCache");
- final DefaultDnFactory defaultDnFactory = new DefaultDnFactory(schemaManager, cache);
+ final DefaultDnFactory defaultDnFactory = new DefaultDnFactory(schemaManager, 4096);
final String parPath = partitionPath != null ? partitionPath : "ldap-data." + Double.valueOf(Math.random()).hashCode();
final Partition partition =
partitionFactory.createPartition(schemaManager, defaultDnFactory, partitionId, dnString, 400, new File(parPath));
diff --git a/src/main/java/de/jalin/ldapadmin/web/AbstractLDAPServlet.java b/src/main/java/de/jalin/ldapadmin/web/AbstractLDAPServlet.java
index f7086d6..c400bac 100644
--- a/src/main/java/de/jalin/ldapadmin/web/AbstractLDAPServlet.java
+++ b/src/main/java/de/jalin/ldapadmin/web/AbstractLDAPServlet.java
@@ -10,7 +10,6 @@ import javax.servlet.http.HttpSession;
import de.jalin.ldapadmin.beans.Group;
import de.jalin.ldapadmin.beans.User;
-import de.jalin.ldapadmin.hsadmin.TicketProvider;
import de.jalin.ldapadmin.ldap.LDAPConfig;
import de.jalin.ldapadmin.ldap.LDAPSession;
import de.jalin.ldapadmin.ldap.LDAPSessionException;
@@ -28,7 +27,6 @@ public class AbstractLDAPServlet extends HttpServlet {
protected LDAPSession ldapSession;
protected LDAPConfig config;
- protected TicketProvider ticketProvider = null;
protected void loadData() {
users = new TreeMap<>();
@@ -76,13 +74,4 @@ public class AbstractLDAPServlet extends HttpServlet {
httpSession.removeAttribute("servletexception");
}
- protected TicketProvider getTicketProvider() {
- if (ticketProvider == null) {
- final String pacAdmin = config.getPacAdmin();
- final String pacPassword = config.getPacPassword();
- ticketProvider = new TicketProvider(pacAdmin, pacPassword);
- }
- return ticketProvider;
- }
-
}
diff --git a/src/main/java/de/jalin/ldapadmin/web/ProfileServlet.java b/src/main/java/de/jalin/ldapadmin/web/ProfileServlet.java
index 4217441..8ef1c7c 100644
--- a/src/main/java/de/jalin/ldapadmin/web/ProfileServlet.java
+++ b/src/main/java/de/jalin/ldapadmin/web/ProfileServlet.java
@@ -12,12 +12,8 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
-import org.apache.xmlrpc.XmlRpcException;
-
import de.jalin.ldapadmin.beans.User;
import de.jalin.ldapadmin.beans.ValidationException;
-import de.jalin.ldapadmin.hsadmin.MailboxDAO;
-import de.jalin.ldapadmin.hsadmin.MailboxNotFound;
import de.jalin.ldapadmin.ldap.GroupsDAO;
import de.jalin.ldapadmin.ldap.LDAPSessionException;
import de.jalin.ldapadmin.ldap.SimplePasswordException;
@@ -28,12 +24,9 @@ public class ProfileServlet extends AbstractLDAPServlet {
private static final long serialVersionUID = 1L;
- private String pacAdmin;
-
@Override
public void init() throws ServletException {
super.init();
- pacAdmin = config.getPacAdmin();
}
@Override
@@ -93,12 +86,6 @@ public class ProfileServlet extends AbstractLDAPServlet {
throw new ValidationException("password2", messages.getString("ProfileServlet.passwords_donot_match"));
} else {
usr.setAndValidatePassword(password);
- final MailboxDAO hsadminMailboxDAO = new MailboxDAO(getTicketProvider());
- try {
- hsadminMailboxDAO.changePassword(pacAdmin, usr.getLogin(), password);
- } catch (XmlRpcException | MailboxNotFound e) {
- System.out.println(e.getLocalizedMessage());
- }
}
}
} catch (SimplePasswordException e) {
diff --git a/src/main/java/de/jalin/ldapadmin/web/ResetPasswordServlet.java b/src/main/java/de/jalin/ldapadmin/web/ResetPasswordServlet.java
index 4e1297f..8e68a37 100644
--- a/src/main/java/de/jalin/ldapadmin/web/ResetPasswordServlet.java
+++ b/src/main/java/de/jalin/ldapadmin/web/ResetPasswordServlet.java
@@ -18,15 +18,11 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
-import org.apache.commons.lang.CharEncoding;
import org.apache.commons.net.smtp.SMTPClient;
import org.apache.commons.net.smtp.SMTPReply;
import org.apache.commons.net.smtp.SimpleSMTPHeader;
-import org.apache.xmlrpc.XmlRpcException;
import de.jalin.ldapadmin.beans.User;
-import de.jalin.ldapadmin.hsadmin.MailboxDAO;
-import de.jalin.ldapadmin.hsadmin.MailboxNotFound;
import de.jalin.ldapadmin.ldap.LDAPSessionException;
import de.jalin.ldapadmin.ldap.SimplePasswordException;
import de.jalin.ldapadmin.ldap.UsersDAO;
@@ -39,7 +35,6 @@ public class ResetPasswordServlet extends AbstractLDAPServlet {
private String smtpHost;
private String smtpPort;
private String smtpFrom;
- private String hsadminPacAdmin;
private String tempDir;
@Override
@@ -48,7 +43,6 @@ public class ResetPasswordServlet extends AbstractLDAPServlet {
smtpHost = config.getSmtpHost();
smtpPort = config.getSmtpPort();
smtpFrom = config.getSmtpFromAddress();
- hsadminPacAdmin = config.getPacAdmin();
tempDir = config.getTempDir();
}
@@ -88,7 +82,7 @@ public class ResetPasswordServlet extends AbstractLDAPServlet {
final UsersDAO usrDAO = new UsersDAO(ldapSession);
final String loginParam = req.getParameter("login");
final User sessUsr = (User) httpSession.getAttribute("user");
- final MailboxDAO hsMailboxDAO = new MailboxDAO(getTicketProvider());
+// final MailboxDAO hsMailboxDAO = new MailboxDAO(getTicketProvider());
if (loginParam != null && sessUsr != null && loginParam.equals(sessUsr.getLogin())) {
final String password1 = req.getParameter("password");
final String password2 = req.getParameter("password2");
@@ -101,11 +95,6 @@ public class ResetPasswordServlet extends AbstractLDAPServlet {
try {
sessUsr.setAndValidatePassword(password1);
usrDAO.update(sessUsr);
- try {
- hsMailboxDAO.changePassword(hsadminPacAdmin, sessUsr.getLogin(), password1);
- } catch (XmlRpcException | MailboxNotFound e) {
- System.out.println(e.getLocalizedMessage());
- }
httpSession.setAttribute("successmessage", messages.getString("ResetPasswordServlet.password_changed"));
req.getRequestDispatcher("/new-password.jsp").forward(req, resp);
return;
@@ -187,7 +176,7 @@ public class ResetPasswordServlet extends AbstractLDAPServlet {
}
private static void smtpSend(final String smtpHost, final String smtpPort, final Messages messages, final String fromAddress, final String toAddress, final String subject, final String text) throws IOException {
- final SMTPClient client = new SMTPClient(CharEncoding.ISO_8859_1);
+ final SMTPClient client = new SMTPClient();
final String canonicalHostName = InetAddress.getLocalHost().getHostName();
client.connect(smtpHost, Integer.parseInt(smtpPort));
int reply = client.getReplyCode();
diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml
index e629fe0..877e0cf 100644
--- a/src/main/webapp/WEB-INF/web.xml
+++ b/src/main/webapp/WEB-INF/web.xml
@@ -48,7 +48,7 @@
/
- admins
+ ldapadmin
login
@@ -65,7 +65,7 @@
/groups/*
- admins
+ ldapadmin
@@ -77,7 +77,7 @@
- admins
+ ldapadmin
login