diff --git a/usermin/change_bind.cgi b/usermin/change_bind.cgi index b397107f4..990f6a3ac 100755 --- a/usermin/change_bind.cgi +++ b/usermin/change_bind.cgi @@ -64,6 +64,14 @@ else { $miniserv{'bind'} = $first->[0]; } $miniserv{'sockets'} = join(" ", map { "$_->[0]:$_->[1]" } @sockets); +# WebSocket bind address +if ($in{'websocket_bind_def'}) { + delete($miniserv{'websocket_bind'}); + } +else { + $miniserv{'websocket_bind'} = $in{'websocket_bind'}; + } +# Websocket base port if ($in{'websocket_base_port_def'}) { delete($miniserv{'websocket_base_port'}); } diff --git a/usermin/edit_bind.cgi b/usermin/edit_bind.cgi index 33e8fdbc0..b2a4f746b 100755 --- a/usermin/edit_bind.cgi +++ b/usermin/edit_bind.cgi @@ -46,6 +46,14 @@ if (&foreign_check("firewall") || &foreign_check("firewalld")) { } print &ui_table_row($text{'bind_sockets'}, $stable); +# WebSocket default bind address +print &ui_table_row($text{'bind_websocaddr'}, + &ui_radio("websocket_bind_def", + $miniserv{"websocket_bind"} ? 0 : 1, + [ [ 1, $text{'bind_websocaddr_localhost'} ], + [ 0, &ui_textbox("websocket_bind", + $miniserv{"websocket_bind"}, 15) ] ])); + # WebSocket based port print &ui_table_row($text{'bind_websocport'}, &ui_radio("websocket_base_port_def", diff --git a/webmin/change_bind.cgi b/webmin/change_bind.cgi index f5592abe6..04f38380b 100755 --- a/webmin/change_bind.cgi +++ b/webmin/change_bind.cgi @@ -84,6 +84,14 @@ else { $miniserv{'bind'} = $first->[0]; } $miniserv{'sockets'} = join(" ", map { "$_->[0]:$_->[1]" } @sockets); +# WebSocket bind address +if ($in{'websocket_bind_def'}) { + delete($miniserv{'websocket_bind'}); + } +else { + $miniserv{'websocket_bind'} = $in{'websocket_bind'}; + } +# Websocket base port if ($in{'websocket_base_port_def'}) { delete($miniserv{'websocket_base_port'}); } diff --git a/webmin/edit_bind.cgi b/webmin/edit_bind.cgi index 064b75cd9..836d62ab0 100755 --- a/webmin/edit_bind.cgi +++ b/webmin/edit_bind.cgi @@ -43,6 +43,14 @@ if (&foreign_check("firewall") || &foreign_check("firewalld")) { } print &ui_table_row($text{'bind_sockets'}, $stable); +# WebSocket default bind address +print &ui_table_row($text{'bind_websocaddr'}, + &ui_radio("websocket_bind_def", + $miniserv{"websocket_bind"} ? 0 : 1, + [ [ 1, $text{'bind_websocaddr_localhost'} ], + [ 0, &ui_textbox("websocket_bind", + $miniserv{"websocket_bind"}, 15) ] ])); + # WebSocket based port print &ui_table_row($text{'bind_websocport'}, &ui_radio("websocket_base_port_def", diff --git a/webmin/lang/en b/webmin/lang/en index c5cf373c1..43dc7dbf9 100644 --- a/webmin/lang/en +++ b/webmin/lang/en @@ -49,7 +49,9 @@ bind_sport0=Same as first bind_sport1=Specific port .. bind_listen=Listen for broadcasts on UDP port bind_none=Don't listen -bind_websocport=Base port number for WebSockets connections +bind_websocaddr=WebSocket bind address or hostname +bind_websocaddr_localhost=Localhost (127.0.0.1) +bind_websocport=WebSockets connection base port number bind_websocport_none=Default (555) bind_websoc_host=Hostname for WebSocket connections bind_websoc_host_auto=Automatic diff --git a/xterm/shellserver.pl b/xterm/shellserver.pl index 473a528a2..9b923cf04 100755 --- a/xterm/shellserver.pl +++ b/xterm/shellserver.pl @@ -104,16 +104,19 @@ $SIG{'ALRM'} = sub { die "timeout waiting for connection"; }; alarm(60); -&error_stderr("Listening on port $port"); +my %miniserv; +&get_miniserv_config(\%miniserv); +my $host = $miniserv{'websocket_bind'} || '127.0.0.1'; +&error_stderr("Listening on port $host:$port"); my ($wsconn, $shellbuf); my $server_socket = IO::Socket::INET->new( Listen => 5, - LocalAddr => '127.0.0.1', + LocalAddr => $host, LocalPort => $port, Proto => 'tcp', ReuseAddr => 1, ); -$server_socket || die "failed to listen on port $port"; +$server_socket || die "Failed to listen on port $host:$port"; Net::WebSocket::Server->new( listen => $server_socket, on_connect => sub {