aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/ejabberd.cfg.example4
-rw-r--r--src/ejabberd_auth_ldap.erl31
2 files changed, 31 insertions, 4 deletions
diff --git a/src/ejabberd.cfg.example b/src/ejabberd.cfg.example
index 6185200e7..df3c3461c 100644
--- a/src/ejabberd.cfg.example
+++ b/src/ejabberd.cfg.example
@@ -79,7 +79,9 @@
%{auth_method, ldap}.
%{ldap_servers, ["localhost"]}. % List of LDAP servers
%{ldap_uidattr, "uid"}. % LDAP attribute that holds user ID
-%{ldap_base, "dc=example,dc=com"}. % Base of LDAP directory
+%{ldap_base, "dc=example,dc=com"}. % Search base of LDAP directory
+%{ldap_rootdn, "dc=example,dc=com"}. % LDAP manager
+%{ldap_password, "******"}. % Password to LDAP manager
% For authentification via external script use the following:
%{auth_method, external}.
diff --git a/src/ejabberd_auth_ldap.erl b/src/ejabberd_auth_ldap.erl
index 355fd3b60..093c340f8 100644
--- a/src/ejabberd_auth_ldap.erl
+++ b/src/ejabberd_auth_ldap.erl
@@ -26,6 +26,7 @@
plain_password_required/0
]).
+-include("ejabberd.hrl").
-include("eldap/eldap.hrl").
%%%----------------------------------------------------------------------
@@ -65,10 +66,34 @@ try_register(_User, _Server, _Password) ->
{error, not_allowed}.
dirty_get_registered_users() ->
- [].
+ get_vh_registered_users(?MYNAME).
-get_vh_registered_users(_Server) ->
- [].
+get_vh_registered_users(Server) ->
+ LServer = jlib:nameprep(Server),
+ Attr = ejabberd_config:get_local_option(ldap_uidattr),
+ Filter = eldap:present(Attr),
+ Base = ejabberd_config:get_local_option(ldap_base),
+ case eldap:search("ejabberd", [{base, Base},
+ {filter, Filter},
+ {attributes, [Attr]}]) of
+ #eldap_search_result{entries = Es} ->
+ lists:flatmap(
+ fun(E) ->
+ case lists:keysearch(Attr, 1, E#eldap_entry.attributes) of
+ {value, {_, [U]}} ->
+ case jlib:nodeprep(U) of
+ error ->
+ [];
+ LU ->
+ [{LU, LServer}]
+ end;
+ _ ->
+ []
+ end
+ end, Es);
+ _ ->
+ []
+ end.
get_password(_User, _Server) ->
false.