Handle hostnames with upper-case letters
[webmin.git] / sshd / edit_net.cgi
1 #!/usr/local/bin/perl
2 # edit_net.cgi
3 # Display networking related SSHd options
4
5 require './sshd-lib.pl';
6 &ui_print_header(undef, $text{'net_title'}, "", "net");
7 $conf = &get_sshd_config();
8
9 print &ui_form_start("save_net.cgi", "post");
10 print &ui_table_start($text{'net_header'}, "width=100%", 2);
11
12 if ($version{'type'} eq 'openssh' && $version{'number'} >= 3) {
13         # Multiple listen addresses supported
14         @listens = &find("ListenAddress", $conf);
15         $i = 0;
16         @table = ( );
17         foreach $l (@listens, { }) {
18                 local ($a, $p) = $l->{'values'}->[0] =~ /^([^:]*):(\d+)$/ ||
19                                  $l->{'values'}->[0] =~ /^\[(.*)\]:(\d+)$/ ?
20                                    ($1, $2) :
21                                  $l->{'values'}->[0] =~ /^\[(.*)\]$/ ?
22                                    ($1) :
23                                    ($l->{'values'}->[0]);
24                 $amode = $a eq "::" ? 2 : $a eq "0.0.0.0" ? 1 :
25                          $a eq "" ? 0 : 3;
26                 push(@table, [
27                         &ui_select("mode_$i", $amode,
28                                    [ [ 0, " " ],
29                                      [ 1, $text{'net_all4'} ],
30                                      [ 2, $text{'net_all6'} ],
31                                      [ 3, $text{'net_sel'} ] ])." ".
32                         &ui_textbox("address_$i", $amode == 3 ? $a : "", 25),
33                         &ui_opt_textbox("port_$i", $p, 6, $text{'default'})
34                         ]);
35                 $i++;
36                 }
37         print &ui_table_row($text{'net_listen2'},
38                 &ui_radio("listen_def", @listens ? 0 : 1,
39                           [ [ 1, $text{'net_listen_def'} ],
40                             [ 0, $text{'net_below'} ] ])."<br>\n".
41                 &ui_columns_table([ $text{'net_laddress'},
42                                     $text{'net_lport'} ],
43                                   undef, \@table));
44         }
45 else {
46         # Just one listen address
47         $listen = &find_value("ListenAddress", $conf);
48         $listen = "" if ($listen eq "0.0.0.0");
49         print &ui_table_row($text{'net_listen'},
50                 &ui_opt_textbox("listen", $listen, 20,$text{'net_listen_def'}));
51         }
52
53 # Default port(s)
54 @ports = &find("Port", $conf);
55 $port = join(" ", map { $_->{'values'}->[0] } @ports);
56 print &ui_table_row($text{'net_port'},
57         &ui_opt_textbox("port", $port, 15, $text{'default'}." (22)"));
58
59 if ($version{'type'} eq 'openssh' && $version{'number'} >= 2) {
60         # Protocols
61         $prots = &find_value("Protocol", $conf);
62         @prots = $prots ? split(/,/, $prots) :
63                  $version{'number'} >= 2.9 ? (1, 2) : (1);
64         $cbs = "";
65         foreach $p (1, 2) {
66                 $cbs .= &ui_checkbox("prots", $p, $text{"net_prots_$p"},
67                                      &indexof($p, @prots) >= 0)." ";
68                 }
69         print &ui_table_row($text{'net_prots'}, $cbs);
70         }
71
72 if ($version{'type'} eq 'ssh' &&
73     ($version{'number'} < 2 || $version{'number'} >= 3)) {
74         # Idle connection timeout
75         $idle = &find_value("IdleTimeout", $conf);
76         if ($idle =~ /^(\d+)([smhdw])$/i) {
77                 $idle = $1; $units = $2;
78                 }
79         print &ui_table_row($text{'net_idle'},
80                 &ui_radio("idle_def", $idle ? 0 : 1,
81                   [ [ 1, $text{'default'} ],
82                     [ 0, &ui_textbox("idle", $idle, 6)." ".
83                          &ui_select("idle_units", $units,
84                                 [ map { [ $_, $text{"net_idle_".$_} ] }
85                                       ('s', 'm', 'h', 'd', 'w') ]) ] ]));
86         }
87
88 # Send keepalive packets?
89 $keep = &find_value("KeepAlive", $conf);
90 print &ui_table_row($text{'net_keep'},
91         &ui_yesno_radio("keep", lc($keep) ne 'no'));
92
93 # Grace time for logins
94 $grace = &find_value("LoginGraceTime", $conf);
95 print &ui_table_row($text{'net_grace'},
96         &ui_opt_textbox("grace", $grace, 6, $text{'net_grace_def'})." ".
97         $text{'net_grace_s'});
98
99 if ($version{'type'} ne 'openssh' || $version{'number'} >= 2) {
100         # Allow port forwarding?
101         $tcp = &find_value("AllowTcpForwarding", $conf);
102         print &ui_table_row($text{'net_tcp'},
103                 &ui_yesno_radio("tcp", lc($tcp) ne 'no'));
104         }
105
106 if ($version{'type'} eq 'openssh' && $version{'number'} >= 2) {
107         # Allow connections to forwarded ports
108         $gateway = &find_value("GatewayPorts", $conf);
109         print &ui_table_row($text{'net_gateway'},
110                 &ui_yesno_radio("gateway", lc($gateway) eq 'yes'));
111
112         if ($version{'number'} > 2.3 && $version{'number'} < 3.7) {
113                 # Validate reverse IP
114                 $reverse = &find_value("ReverseMappingCheck", $conf);
115                 print &ui_table_row($text{'net_reverse'},
116                         &ui_yesno_radio("reverse", lc($reverse) eq 'yes'));
117                 }
118         }
119
120 print &ui_table_end();
121 print &ui_form_end([ [ undef, $text{'save'} ] ]);
122
123 &ui_print_footer("", $text{'index_return'});
124