diff options
author | Badlop <badlop@process-one.net> | 2008-11-06 15:36:49 +0000 |
---|---|---|
committer | Badlop <badlop@process-one.net> | 2008-11-06 15:36:49 +0000 |
commit | 02d68146bd01f9b974d7fa55fafd48f3f20fca94 (patch) | |
tree | 8402a49fa49d20fb2d6634dfd1fd5211f2139ae5 /src | |
parent | * src/ejabberd_c2s.erl: Disable zlib when STARTTLS is required (diff) |
* src/extauth.erl: When the extauth call fails or timeouts, deny
authorization. Use two timeouts: 60s for script initialization and
10s for regular calls. (thanks to Kevin Crosbie from
Ravenpack) (EJAB-627)
SVN Revision: 1673
Diffstat (limited to '')
-rw-r--r-- | src/extauth.erl | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/src/extauth.erl b/src/extauth.erl index c4acb305..99fc1fae 100644 --- a/src/extauth.erl +++ b/src/extauth.erl @@ -32,7 +32,8 @@ -include("ejabberd.hrl"). --define(CALL_TIMEOUT, 30000). % Timeout is in milliseconds: 30 seconds == 30000 +-define(INIT_TIMEOUT, 60000). % Timeout is in milliseconds: 60 seconds == 60000 +-define(CALL_TIMEOUT, 10000). % Timeout is in milliseconds: 10 seconds == 10000 start(Host, ExtPrg) -> spawn(?MODULE, init, [Host, ExtPrg]). @@ -41,7 +42,7 @@ init(Host, ExtPrg) -> register(gen_mod:get_module_proc(Host, eauth), self()), process_flag(trap_exit,true), Port = open_port({spawn, ExtPrg}, [{packet,2}]), - loop(Port). + loop(Port, ?INIT_TIMEOUT). stop(Host) -> gen_mod:get_module_proc(Host, eauth) ! stop. @@ -63,21 +64,23 @@ call_port(Server, Msg) -> Result end. -loop(Port) -> +loop(Port, Timeout) -> receive {call, Caller, Msg} -> Port ! {self(), {command, encode(Msg)}}, receive {Port, {data, Data}} -> ?DEBUG("extauth call '~p' received data response:~n~p", [Msg, Data]), - Caller ! {eauth, decode(Data)}; - {Port, Other} -> - ?ERROR_MSG("extauth call '~p' received strange response:~n~p", [Msg, Other]) + Caller ! {eauth, decode(Data)}; + {Port, Other} -> + ?ERROR_MSG("extauth call '~p' received strange response:~n~p", [Msg, Other]), + Caller ! {eauth, false} after - ?CALL_TIMEOUT -> - ?ERROR_MSG("extauth call '~p' didn't receive response~n", [Msg]) + Timeout -> + ?ERROR_MSG("extauth call '~p' didn't receive response", [Msg]), + Caller ! {eauth, false} end, - loop(Port); + loop(Port, ?CALL_TIMEOUT); stop -> Port ! {self(), close}, receive |