diff options
author | Alexey Shchepin <alexey@process-one.net> | 2003-03-09 20:46:47 +0000 |
---|---|---|
committer | Alexey Shchepin <alexey@process-one.net> | 2003-03-09 20:46:47 +0000 |
commit | f3916bddd2ee79f82c138f2fce09b878ab721cf6 (patch) | |
tree | fa3e18694ddc1a8b8c41690061906110bfa370b4 /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.erl | 56 |
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]). + + + + |