aboutsummaryrefslogtreecommitdiff
path: root/src/ejabberd_auth_pam.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/ejabberd_auth_pam.erl')
-rw-r--r--src/ejabberd_auth_pam.erl88
1 files changed, 88 insertions, 0 deletions
diff --git a/src/ejabberd_auth_pam.erl b/src/ejabberd_auth_pam.erl
new file mode 100644
index 000000000..e420313e7
--- /dev/null
+++ b/src/ejabberd_auth_pam.erl
@@ -0,0 +1,88 @@
+%%%-------------------------------------------------------------------
+%%% File : ejabberd_auth_pam.erl
+%%% Author : Evgeniy Khramtsov <xram@jabber.ru>
+%%% Purpose : PAM authentication
+%%% Created : 5 Jul 2007 by Evgeniy Khramtsov <xram@jabber.ru>
+%%% Id : $Id$
+%%%-------------------------------------------------------------------
+-module(ejabberd_auth_pam).
+-author('xram@jabber.ru').
+
+%% External exports
+-export([start/1,
+ set_password/3,
+ check_password/3,
+ check_password/5,
+ try_register/3,
+ dirty_get_registered_users/0,
+ get_vh_registered_users/1,
+ get_password/2,
+ get_password_s/2,
+ is_user_exists/2,
+ remove_user/2,
+ remove_user/3,
+ plain_password_required/0
+ ]).
+
+%%====================================================================
+%% API
+%%====================================================================
+start(_Host) ->
+ case epam:start() of
+ {ok, _} -> ok;
+ {error,{already_started, _}} -> ok;
+ Err -> Err
+ end.
+
+set_password(_User, _Server, _Password) ->
+ {error, not_allowed}.
+
+check_password(User, Server, Password, _StreamID, _Digest) ->
+ check_password(User, Server, Password).
+
+check_password(User, Host, Password) ->
+ Service = get_pam_service(Host),
+ case catch epam:authenticate(Service, User, Password) of
+ true -> true;
+ _ -> false
+ end.
+
+try_register(_User, _Server, _Password) ->
+ {error, not_allowed}.
+
+dirty_get_registered_users() ->
+ [].
+
+get_vh_registered_users(_Host) ->
+ [].
+
+get_password(_User, _Server) ->
+ false.
+
+get_password_s(_User, _Server) ->
+ "".
+
+is_user_exists(User, Host) ->
+ Service = get_pam_service(Host),
+ case catch epam:acct_mgmt(Service, User) of
+ true -> true;
+ _ -> false
+ end.
+
+remove_user(_User, _Server) ->
+ {error, not_allowed}.
+
+remove_user(_User, _Server, _Password) ->
+ {error, not_allowed}.
+
+plain_password_required() ->
+ true.
+
+%%====================================================================
+%% Internal functions
+%%====================================================================
+get_pam_service(Host) ->
+ case ejabberd_config:get_local_option({pam_service, Host}) of
+ undefined -> "ejabberd";
+ Service -> Service
+ end.