aboutsummaryrefslogtreecommitdiff
path: root/src/ejabberd_auth.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/ejabberd_auth.erl')
-rw-r--r--src/ejabberd_auth.erl58
1 files changed, 53 insertions, 5 deletions
diff --git a/src/ejabberd_auth.erl b/src/ejabberd_auth.erl
index c697e8b73..d078223e1 100644
--- a/src/ejabberd_auth.erl
+++ b/src/ejabberd_auth.erl
@@ -47,7 +47,14 @@
%%% API
%%%----------------------------------------------------------------------
start() ->
+ case auth_method() of
+ external ->
+ extauth:start(ejabberd_config:get_local_option(extauth_program));
+ _ ->
+ ok
+ end,
gen_server:start({local, ejabberd_auth}, ejabberd_auth, [], []).
+
start_link() ->
gen_server:start_link({local, ejabberd_auth}, ejabberd_auth, [], []).
@@ -68,6 +75,8 @@ init([]) ->
case auth_method() of
internal ->
ok;
+ external ->
+ ok;
ldap ->
LDAPServers = ejabberd_config:get_local_option(ldap_servers),
eldap:start_link("ejabberd", LDAPServers, 389, "", ""),
@@ -124,6 +133,16 @@ terminate(_Reason, _State) ->
auth_method() ->
case ejabberd_config:get_local_option(auth_method) of
+ external ->
+ external;
+ ldap ->
+ ldap;
+ _ ->
+ internal
+ end.
+
+user_method() ->
+ case ejabberd_config:get_local_option(user_method) of
ldap ->
ldap;
_ ->
@@ -134,19 +153,31 @@ plain_password_required() ->
case auth_method() of
internal ->
false;
+ external ->
+ true;
ldap ->
true
end.
-
check_password(User, Password) ->
case auth_method() of
internal ->
check_password_internal(User, Password);
+ external ->
+ check_password_external(User, Password);
ldap ->
check_password_ldap(User, Password)
end.
+check_password_external(User, Password) ->
+ extauth:check_password(User, Password).
+
+set_password_external(User, Password) ->
+ extauth:set_password(User, Password).
+
+is_user_exists_external(User) ->
+ extauth:is_user_exists(User).
+
check_password_internal(User, Password) ->
LUser = jlib:nodeprep(User),
case catch mnesia:dirty_read({passwd, LUser}) of
@@ -160,6 +191,8 @@ check_password(User, Password, StreamID, Digest) ->
case auth_method() of
internal ->
check_password_internal(User, Password, StreamID, Digest);
+ external ->
+ check_password_external(User, Password, StreamID, Digest);
ldap ->
check_password_ldap(User, Password, StreamID, Digest)
end.
@@ -183,8 +216,16 @@ check_password_internal(User, Password, StreamID, Digest) ->
false
end.
-
set_password(User, Password) ->
+ case auth_method() of
+ internal ->
+ set_password_internal(User,Password);
+ external ->
+ set_password_external(User,Password);
+ ldap -> {error, not_allowed}
+ end.
+
+set_password_internal(User, Password) ->
case jlib:nodeprep(User) of
error -> {error, invalid_jid};
LUser ->
@@ -200,6 +241,8 @@ try_register(User, Password) ->
case auth_method() of
internal ->
try_register_internal(User, Password);
+ external ->
+ {error, not_allowed};
ldap ->
{error, not_allowed}
end.
@@ -246,6 +289,8 @@ is_user_exists(User) ->
case auth_method() of
internal ->
is_user_exists_internal(User);
+ external ->
+ is_user_exists_external(User);
ldap ->
is_user_exists_ldap(User)
end.
@@ -262,13 +307,13 @@ is_user_exists_internal(User) ->
end.
remove_user(User) ->
- case auth_method() of
+ case user_method() of
internal ->
remove_user_internal(User);
ldap ->
{error, not_allowed}
end.
-
+
remove_user_internal(User) ->
LUser = jlib:nodeprep(User),
F = fun() ->
@@ -282,7 +327,7 @@ remove_user_internal(User) ->
catch mod_private:remove_user(User).
remove_user(User, Password) ->
- case auth_method() of
+ case user_method() of
internal ->
remove_user_internal(User, Password);
ldap ->
@@ -322,6 +367,9 @@ remove_user_internal(User, Password) ->
check_password_ldap(User, Password, StreamID, Digest) ->
check_password_ldap(User, Password).
+check_password_external(User, Password, StreamID, Digest) ->
+ check_password_external(User, Password).
+
check_password_ldap(User, Password) ->
case find_user_dn(User) of
false ->