[erlang-patches] jinterface patch - connect to epmd using the loopback address

Raimo Niskanen <>
Tue Jan 15 12:11:43 CET 2008


On Sat, Jan 12, 2008 at 10:53:55PM +0900, Artur Matos wrote:
> Hi,
> 
> In the current jinterface implementation, OtpEpmd.publishPort(node)  
> connects to the local epmd using the
> host's current IP address instead of the loopback  address (127.0.0.1).
> 
> If the host is connected to the internet with a static IP address,  
> this will make
> the connection to epmd go through the host's firewall, at least in  
> Mac OS X. Besides being
> a waste of resources, this forces the user to have the  epmd port  
> open (creating an unnecessary security risk),
> and seems inconsistent with Erlang semantics. For example, in my  
> machine, If I invoke
> "erl -sname blah" in my shell, Erlang connects to epmd without  
> requiring its port to be open (but I have only started
> using Erlang quite recently, so please correct me if I am wrong).
> 
> Anyway, the following patch fixes this problem.
> The patched version works perfectly in Mac OS X, and should behave  
> the same in other platforms, but I didn't test it with any other OS:
> 

Thank you for your patch. I have now checked the behaviour for
Erlang itself as well as erl_interface, and it seems Jinterface
is alone in error. Your patch will probably be accepted
as it is, I will just check that it does not break any
test cases and that you have not missed any places
needing the same change. (The Jinterface code is
well structured, so I do not think so)



> --- OtpEpmd.java.orig       2000-08-22 21:01:24.000000000 +0900
> +++ OtpEpmd.java  2008-01-12 21:51:30.000000000 +0900
> @@ -137,7 +137,7 @@
>       Socket s = null;
> 
>       try {
> -      s = new Socket(InetAddress.getLocalHost(),epmdPort);
> +      s = new Socket(InetAddress.getByName("localhost"),epmdPort);
>         OtpOutputStream obuf = new OtpOutputStream();
>         obuf.write2BE(node.alive().length() + 1);
>         obuf.write1(stopReq);
> @@ -289,7 +289,7 @@
> 
>       try {
>         OtpOutputStream obuf = new OtpOutputStream();
> -      s = new Socket(InetAddress.getLocalHost(),epmdPort);
> +      s = new Socket(InetAddress.getByName("localhost"),epmdPort);
> 
>         obuf.write2BE(node.alive().length() + 3);
> 
> @@ -349,7 +349,7 @@
> 
>       try {
>         OtpOutputStream obuf = new OtpOutputStream();
> -      s = new Socket(InetAddress.getLocalHost(),epmdPort);
> +      s = new Socket(InetAddress.getByName("localhost"),epmdPort);
> 
>         obuf.write2BE(node.alive().length() + 13);
> 
> 
> 
> 
> Artur
> 
> _______________________________________________
> erlang-patches mailing list
> 
> http://www.erlang.org/mailman/listinfo/erlang-patches

-- 

/ Raimo Niskanen, Erlang/OTP, Ericsson AB



More information about the erlang-patches mailing list