summaryrefslogtreecommitdiff
path: root/src/cyrsasl_plain.erl
diff options
context:
space:
mode:
authorAlexey Shchepin <alexey@process-one.net>2003-03-09 20:46:47 +0000
committerAlexey Shchepin <alexey@process-one.net>2003-03-09 20:46:47 +0000
commitf3916bddd2ee79f82c138f2fce09b878ab721cf6 (patch)
treefa3e18694ddc1a8b8c41690061906110bfa370b4 /src/cyrsasl_plain.erl
parent* src/ejabberd_c2s.erl: More correct stream closing (diff)
* src/cyrsasl*.erl: SASL support (currently support only PLAIN
mechanism) * src/ejabberd_c2s.erl: Likewise (all): Support for new-style error elements (except old errors "Not Acceptable", "Not Found", "Invalid Namespace" and "Server Connect Failed", so ejabberd may work unstable) SVN Revision: 86
Diffstat (limited to 'src/cyrsasl_plain.erl')
-rw-r--r--src/cyrsasl_plain.erl56
1 files changed, 56 insertions, 0 deletions
diff --git a/src/cyrsasl_plain.erl b/src/cyrsasl_plain.erl
new file mode 100644
index 00000000..46461e1c
--- /dev/null
+++ b/src/cyrsasl_plain.erl
@@ -0,0 +1,56 @@
+%%%----------------------------------------------------------------------
+%%% File : cyrsasl_plain.erl
+%%% Author : Alexey Shchepin <alexey@sevcom.net>
+%%% Purpose : PLAIN SASL mechanism
+%%% Created : 8 Mar 2003 by Alexey Shchepin <alexey@sevcom.net>
+%%% Id : $Id$
+%%%----------------------------------------------------------------------
+
+-module(cyrsasl_plain).
+-author('alexey@sevcom.net').
+-vsn('$Revision$ ').
+
+-export([start/1, stop/0, mech_new/0, mech_step/2, parse/1]).
+
+-behaviour(cyrsasl).
+%-behaviour(gen_mod).
+
+start(Opts) ->
+ cyrsasl:register_mechanism("PLAIN", ?MODULE),
+ ok.
+
+stop() ->
+ ok.
+
+mech_new() ->
+ {ok, []}.
+
+mech_step(State, ClientIn) ->
+ case parse(ClientIn) of
+ [_, User, Password] ->
+ case ejabberd_auth:check_password(User, Password) of
+ true ->
+ {ok, [{username, User}]};
+ _ ->
+ {error, "454"}
+ end;
+ _ ->
+ {error, "454"}
+ end.
+
+
+parse(S) ->
+ parse1(S, "", []).
+
+parse1([0 | Cs], S, T) ->
+ parse1(Cs, "", [lists:reverse(S) | T]);
+parse1([C | Cs], S, T) ->
+ parse1(Cs, [C | S], T);
+%parse1([], [], T) ->
+% lists:reverse(T);
+parse1([], S, T) ->
+ lists:reverse([lists:reverse(S) | T]).
+
+
+
+