From: <kl...@ta...> - 2006-09-20 07:48:09
|
Claes Wikstr=F6m wrote: > ke han wrote: >> I would like to get the client's ip address. I have found this =20 >> technique buried in yaws_server.erl in function maybe_auth_log(Item, =20 >> ARG). >=20 >=20 > Maybe the best would be to add an additional field in the #arg > record. I'll do that. >=20 > /klacke >=20 >=20 It was trivial. [klacke@buzz]yaws > cvs diff . ? tmp ? yaws/config.log ? yaws/config.status ? yaws/include.mk ? yaws/bin/yaws ? yaws/ebin/yaws.app ? yaws/priv/epam ? yaws/scripts/yaws.conf ? yaws/src/charset.def ? yaws/src/d ? yaws/src/erl_crash.dump ? yaws/src/mime_types.erl ? yaws/src/yaws_generated.erl Index: yaws/include/yaws_api.hrl =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvsroot/erlyaws/yaws/include/yaws_api.hrl,v retrieving revision 1.25 diff -u -b -r1.25 yaws_api.hrl --- yaws/include/yaws_api.hrl 16 Mar 2004 12:20:00 -0000 1.25 +++ yaws/include/yaws_api.hrl 20 Sep 2006 07:29:29 -0000 @@ -10,6 +10,7 @@ -record(arg, { clisock, %% the socket leading to the peer client + client_ip_port, %% {ClientIp, ClientPort} tuple headers, %% headers req, %% request clidata, %% The client data (as a binary in POST reques= ts) Index: yaws/src/yaws_server.erl =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvsroot/erlyaws/yaws/src/yaws_server.erl,v retrieving revision 1.308 diff -u -b -r1.308 yaws_server.erl --- yaws/src/yaws_server.erl 19 Sep 2006 07:41:26 -0000 1.308 +++ yaws/src/yaws_server.erl 20 Sep 2006 07:29:30 -0000 @@ -1002,23 +1002,7 @@ ok; true -> Req =3D ARG#arg.req, - CliSock =3D ARG#arg.clisock, - IP =3D if - port(CliSock) -> - case inet:peername(CliSock) of - {ok, {Ip, _}} -> - Ip; - _ -> - unknown - end; - true -> - case ssl:peername(CliSock) of - {ok, {Ip, _}} -> - Ip; - _ -> - unknown - end - end, + {IP,_} =3D ARG#arg.client_ip_port, Path =3D safe_decode_path(Req#http_request.path), yaws_log:authlog(SC#sconf.servername, IP, Path, Item) end. @@ -1297,7 +1281,24 @@ make_arg(CliSock, Head, Req, Bin) -> SC =3D get(sc), + IP =3D if + port(CliSock) -> + case inet:peername(CliSock) of + {ok, IpPort} -> + IpPort; + _ -> + {unknown, unknown} + end; + true -> + case ssl:peername(CliSock) of + {ok, IpPort} -> + IpPort; + _ -> + {unknown, unknown} + end + end, ARG =3D #arg{clisock =3D CliSock, + client_ip_port =3D IP, headers =3D Head, req =3D Req, opaque =3D SC#sconf.opaque, --=20 Claes Wikstrom -- Caps lock is nowhere and http://www.tail-f.com -- everything is under control cellphone: +46 70 2097763 |