aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPaweł Chmielowski <pchmielowski@process-one.net>2015-08-17 15:50:02 +0200
committerPaweł Chmielowski <pchmielowski@process-one.net>2015-08-17 15:50:35 +0200
commitf89db30d7740b38ce942c2e05cb6a6f16fa0812a (patch)
treeab6ebb491f971a3c908d2b3a85fda170156e362a /src
parentLet ejabberdctl handle more shell metacharacters (diff)
Catch errors when calling inet:peername in ejabberd_http
Diffstat (limited to 'src')
-rw-r--r--src/ejabberd_http.erl12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/ejabberd_http.erl b/src/ejabberd_http.erl
index 1702e9be6..61ce64734 100644
--- a/src/ejabberd_http.erl
+++ b/src/ejabberd_http.erl
@@ -160,7 +160,11 @@ init({SockMod, Socket}, Opts) ->
default_host = DefaultHost,
options = Opts,
request_handlers = RequestHandlers},
- receive_headers(State).
+ try receive_headers(State) of
+ V -> V
+ catch
+ {error, _} -> State
+ end.
become_controller(_Pid) -> ok.
@@ -427,13 +431,17 @@ process_request(#state{request_method = Method,
false ->
make_bad_request(State);
{LPath, LQuery, Data} ->
- {ok, IPHere} =
+ PeerName =
case SockMod of
gen_tcp ->
inet:peername(Socket);
_ ->
SockMod:peername(Socket)
end,
+ IPHere = case PeerName of
+ {ok, V} -> V;
+ {error, _} = E -> throw(E)
+ end,
XFF = proplists:get_value('X-Forwarded-For', RequestHeaders, []),
IP = analyze_ip_xff(IPHere, XFF, Host),
Request = #request{method = Method,