diff --git a/.gitignore b/.gitignore index b2f1825..4ecaa75 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ -*.iml -.idea/* -*.swp -target/* ++*.iml ++.idea/* ++*.swp ++target/* \ No newline at end of file diff --git a/src/main/java/com/yammer/dropwizard/authenticator/LdapAuthenticator.java b/src/main/java/com/yammer/dropwizard/authenticator/LdapAuthenticator.java index e1afa7a..9fd9780 100644 --- a/src/main/java/com/yammer/dropwizard/authenticator/LdapAuthenticator.java +++ b/src/main/java/com/yammer/dropwizard/authenticator/LdapAuthenticator.java @@ -64,6 +64,9 @@ private boolean filterByGroup(InitialDirContext context, String sanitizedUsernam } private Set getGroupMembershipsIntersectingWithRestrictedGroups(InitialDirContext context, String userName) throws NamingException { + + userName = userNameBaseOnGroupClass(userName); + final String filter = String.format("(&(%s=%s)(objectClass=%s))", configuration.getGroupMembershipAttribute(), userName, configuration.getGroupClassName()); final NamingEnumeration result = context.search(configuration.getGroupFilter(), filter, new SearchControls()); @@ -84,6 +87,14 @@ private Set getGroupMembershipsIntersectingWithRestrictedGroups(InitialD } } + private String userNameBaseOnGroupClass(String userName) { + if ("groupOfNames".equalsIgnoreCase(configuration.getGroupClassName()) + && "member".equalsIgnoreCase(configuration.getGroupMembershipAttribute())) { + return toUserDN(userName); + } + return userName; + } + @Timed public boolean authenticate(BasicCredentials credentials) throws io.dropwizard.auth.AuthenticationException { final String sanitizedUsername = sanitizeEntity(credentials.getUsername()); @@ -101,7 +112,7 @@ public boolean authenticate(BasicCredentials credentials) throws io.dropwizard.a } private AutoclosingDirContext buildContext(String sanitizedUsername, String password) throws NamingException { - final String userDN = String.format("%s=%s,%s", configuration.getUserNameAttribute(), sanitizedUsername, configuration.getUserFilter()); + final String userDN = toUserDN(sanitizedUsername); final Hashtable env = contextConfiguration(); @@ -111,6 +122,10 @@ private AutoclosingDirContext buildContext(String sanitizedUsername, String pass return new AutoclosingDirContext(env); } + private String toUserDN(String username) { + return String.format("%s=%s,%s", configuration.getUserNameAttribute(), username, configuration.getUserFilter()); + } + @Timed public Optional authenticateAndReturnPermittedGroups(BasicCredentials credentials) throws io.dropwizard.auth.AuthenticationException { final String sanitizedUsername = sanitizeEntity(credentials.getUsername()); @@ -141,4 +156,4 @@ private Hashtable contextConfiguration() { return env; } -} +} \ No newline at end of file