Handle hostnames with upper-case letters
[webmin.git] / ppp-client / edit.cgi
1 #!/usr/local/bin/perl
2 # edit.cgi
3 # Display settings for some dialer
4
5 require './ppp-client-lib.pl';
6 &ReadParse();
7 $conf = &get_config();
8 if ($in{'new'}) {
9         &ui_print_header(undef, $text{'edit_title1'}, "");
10         }
11 else {
12         &ui_print_header(undef, $text{'edit_title2'}, "");
13         $dialer = $conf->[$in{'idx'}];
14         }
15 ($ddialer) = grep { lc($_->{'name'}) eq 'dialer defaults' } @$conf;
16 if ($inherits = $dialer->{'values'}->{'inherits'}) {
17         ($parent) = grep { lc($_->{'name'}) eq lc($inherits) } @$conf;
18         }
19
20 if (lc($dialer->{'name'}) eq 'dialer defaults') {
21         print "$text{'edit_ddesc'}<p>\n";
22         }
23
24 print "<form action=save.cgi method=post>\n";
25 print "<input type=hidden name=new value='$in{'new'}'>\n";
26 print "<input type=hidden name=idx value='$in{'idx'}'>\n";
27 print "<table border width=100%>\n";
28 print "<tr $tb> <td><b>$text{'edit_header'}</b></td> </tr>\n";
29 print "<tr $cb> <td><table width=100%>\n";
30
31 print "<tr> <td><b>$text{'edit_name'}</b></td> <td>\n";
32 if (lc($dialer->{'name'}) eq 'dialer defaults') {
33         # Don't allow renaming of the defaults
34         print $text{'index_defaults'};
35         $defs++;
36         }
37 elsif ($dialer->{'name'} =~ /^Dialer\s+(.*)$/ || $in{'new'}) {
38         # Some normal dialer name
39         print "<input name=dialer size=20 value='$1'>\n";
40         }
41 else {
42         # Some other oddly-named section
43         print "<input name=name size=20 value='$dialer->{'name'}'>\n";
44         }
45 print "</td>\n";
46
47 print &opt_input("Phone", $text{'edit_phone'}, 20);
48 print "</tr>\n";
49
50 print "<tr>\n";
51 print &opt_input("Username", $text{'edit_user'}, 20);
52 print &opt_input("Password", $text{'edit_pass'}, 20, "type=password");
53 print "</tr>\n";
54
55 print "<tr>\n";
56 print &opt_input("Dial Prefix", $text{'edit_prefix'}, 10);
57 print &yes_no_input("Stupid Mode", $text{'edit_stupid'}, 0);
58 print "</tr>\n";
59
60 print "<tr> <td><b>$text{'edit_other'}</b></td> <td colspan=3>\n";
61 for($i=1; $i<=4; $i++) {
62         printf "<input name=other_%d size=20 value='%s'>\n",
63                 $i, $dialer->{'values'}->{'phone'.$i};
64         }
65 print "</td> </tr>\n";
66
67 print "<tr> <td><b>$text{'edit_inherits'}</b></td> <td colspan=3>\n";
68 printf "<input type=radio name=inherits_def value=1 %s> %s\n",
69         $inherits ? "" : "checked", $text{'edit_def'};
70 printf "<input type=radio name=inherits_def value=0 %s> %s\n",
71         $inherits ? "checked" : "", $text{'edit_from'};
72 print "<select name=inherits>\n";
73 foreach $c (@$conf) {
74         next if ($c eq $dialer);
75         printf "<option value='%s' %s>%s\n",
76                 $c->{'name'}, lc($inherits) eq lc($c->{'name'}) ? "selected":"",
77                 &dialer_name($c->{'name'});
78         }
79 print "</select></td> </tr>\n";
80
81 # Modem options
82 print "<tr> <td colspan=4><hr></td> </tr>\n";
83
84 $modem = $dialer->{'values'}->{'modem'};
85 $dm = &get_default("Modem");
86 local $found = !$modem || $modem eq "/dev/modem";
87 print "<tr> <td><b>$text{'edit_serial'}</b></td>\n";
88 print "<td nowrap><select name=modem>\n";
89 printf "<option value='' %s>%s %s\n",
90         $modem ? "" : "selected",
91         $defs ? $text{'edit_none'} : $text{'edit_def'},
92         $dm ? "($dm)" : "";
93 printf "<option value=/dev/modem %s>%s (%s)\n",
94         $modem eq "/dev/modem" ? "selected" : "", $text{'edit_modem'},
95         "/dev/modem";
96 foreach $t (sort { "$a$b" =~ /^\/dev\/ttyS(\d+)\/dev\/ttyS(\d+)$/ ? $1 <=> $2 : 0 } glob("/dev/ttyS[0-9]*")) {
97         printf "<option value=%s %s>%s\n",
98                 $t, $modem eq $t ? "selected" : "",
99                 $t =~ /ttyS(\d+)$/ ? &text('edit_port', $1+1) : $t;
100         $found++ if ($modem eq $t);
101         }
102 printf "<option value=* %s>%s\n",
103         $found ? "" : "selected", $text{'edit_otherm'};
104 print "</select>\n";
105 printf "<input name=otherm size=15 value='%s'></td>\n",
106         $found ? "" : $modem;
107
108 print &opt_input("Baud", $text{'edit_baud'}, 6);
109 print "</tr>\n";
110
111 print "<tr> <td valign=top><b>$text{'edit_init'}</b></td> <td colspan=3>\n";
112 for($i=1; $i<=9; $i++) {
113         printf "<input name=init_%s size=25 value='%s'>\n",
114                 $i, $dialer->{'values'}->{"init".$i};
115         print "<br>\n" if (($i-1)%3 == 2);
116         }
117 print "</td> </tr>\n";
118
119 print "<tr>\n";
120 print &yes_no_input("Carrier Check", $text{'edit_carrier'}, 1);
121 print &yes_no_input("Abort on Busy", $text{'edit_busy'}, 0);
122 print "</tr>\n";
123
124 print "<tr>\n";
125 print &opt_input("Dial Attempts", $text{'edit_dial'}, 4);
126 print &yes_no_input("Abort on No Dialtone", $text{'edit_dialtone'}, 1);
127 print "</tr>\n";
128
129 # Networking options
130 print "<tr> <td colspan=4><hr></td> </tr>\n";
131
132 print "<tr>\n";
133 print &yes_no_input("Auto DNS", $text{'edit_dns'}, 1);
134 print &yes_no_input("Auto Reconnect", $text{'edit_reconnect'}, 1);
135 print "</tr>\n";
136
137 print "<tr>\n";
138 print &opt_input("Idle Seconds", $text{'edit_idle'}, 6);
139 print "</tr>\n";
140
141 print "</table></td></tr></table>\n";
142
143 print "<table width=100%><tr>\n";
144 if ($in{'new'}) {
145         print "<td><input type=submit value='$text{'create'}'></td>\n";
146         }
147 else {
148         print "<td><input type=submit value='$text{'save'}'></td>\n";
149         print "<td align=right><input type=submit name=delete ",
150               "value='$text{'delete'}'></td>\n";
151         }
152 print "</tr></table></form>\n";
153
154 &ui_print_footer("", $text{'index_return'});
155
156 # opt_input(name, text, size, inputopts)
157 sub opt_input
158 {
159 local $n = lc($_[0]);
160 local $v = $dialer->{'values'}->{$n};
161 local $rv = "<td><b>$_[1]</b></td> <td nowrap>\n";
162 $rv .= sprintf "<input type=radio name='${n}_def' value=1 %s> %s\n",
163                 defined($v) ? "" : "checked",
164                 $defs ? $text{'edit_none'} : $text{'default'};
165 $rv .= sprintf "<input type=radio name='${n}_def' value=0 %s>\n",
166                 defined($v) ? "checked" : "";
167 $rv .= sprintf "<input $_[3] name='${n}' size=$_[2] value='%s'></td>\n", $v;
168 return $rv;
169 }
170
171 # yes_no_input(name, text, defmode)
172 sub yes_no_input
173 {
174 local $n = lc($_[0]);
175 local $val = $dialer->{'values'}->{$n};
176 local $dval = &get_default($_[0]);
177 local $d = $dval =~ /on|yes|1/i ? $text{'edit_yd'} :
178            $dval =~ /off|no|0/i ? $text{'edit_nd'} :
179            $_[2] ? $text{'edit_yd'} : $text{'edit_nd'};
180 local $rv = "<td><b>$_[1]</b></td> <td>\n";
181 $rv .= sprintf "<input type=radio name='$n' value=1 %s> %s\n",
182         $val =~ /on|yes|1/i ? "checked" : "", $text{'yes'};
183 $rv .= sprintf "<input type=radio name='$n' value=0 %s> %s\n",
184         $val =~ /off|no|0/i ? "checked" : "", $text{'no'};
185 $rv .= sprintf "<input type=radio name='$n' value=-1 %s> %s</td>\n",
186         $val ? "" : "checked", $d;
187 return $rv;
188 }
189
190 # get_default(name)
191 sub get_default
192 {
193 return undef if ($defs);
194 if ($parent) {
195         local $pv = $parent->{'values'}->{lc($_[0])};
196         return $pv if (defined($pv));
197         }
198 return $ddialer->{'values'}->{lc($_[0])};
199 }
200