3 # Edit or create a webmin server
7 require './servers-lib.pl';
8 our (%text, %in, %config, %access, $status_error_msg);
10 $access{'edit'} || &error($text{'edit_ecannot'});
14 &ui_print_header(undef, $text{'create_title'}, "");
16 &get_miniserv_config(\%miniserv);
17 my $ts = &this_server();
18 $s = { 'port' => $miniserv{'port'},
19 'type' => $config{'auto_type'} || $ts->{'type'}, };
22 &ui_print_header(undef, $text{'edit_title'}, "");
23 $s = &get_server($in{'id'});
24 &can_use_server($s) || &error($text{'edit_ecannot'});
27 print &ui_form_start("save_serv.cgi");
28 print &ui_hidden("new", $in{'new'});
29 print &ui_hidden("id", $in{'id'});
30 print &ui_table_start($text{'edit_details'}, undef, 2);
32 print &ui_table_row($text{'edit_host'},
33 &ui_textbox("host", $s->{'host'}, 60));
35 if ($in{'new'} || $s->{'port'}) {
36 print &ui_table_row($text{'edit_port'},
37 &ui_textbox("port", $s->{'port'}, 5));
40 print &ui_table_row($text{'edit_port'},
41 &ui_opt_textbox("port", $s->{'port'}, 5,
42 $text{'edit_portnone'}));
45 if ($s->{'realhost'}) {
46 print &ui_table_row($text{'edit_realhost'},
47 "<tt>$s->{'realhost'}</tt>");
50 if ($access{'forcetype'}) {
51 print &ui_hidden("type", $s->{'type'});
54 print &ui_table_row($text{'edit_type'},
55 &ui_select("type", $s->{'type'},
56 [ map { [ $_->[0], $_->[1] ] }
57 sort { $a->[1] cmp $b->[1] } &get_server_types() ]));
60 print &ui_table_row($text{'edit_ssl'},
61 &ui_yesno_radio("ssl", int($s->{'ssl'})));
63 print &ui_table_row($text{'edit_desc'},
65 &ui_textbox("desc", $s->{'desc'}, 40, 0, 40) :
66 &ui_opt_textbox("desc", $s->{'desc'}, 40, $text{'edit_desc_def'}));
68 if ($access{'forcegroup'}) {
70 foreach my $g (split(/\t/, $s->{'group'})) {
71 print &ui_hidden("group", $g),"\n";
75 # Show group checkboxes, with option to add a new one
76 my @groups = &unique(map { split(/\t/, $_->{'group'}) }
78 my %ingroups = map { $_, 1 } split(/\t/, $s->{'group'});
80 foreach my $g (@groups) {
81 push(@grid, &ui_checkbox("group", $g, $g, $ingroups{$g}));
83 my $gtable = &ui_grid_table(\@grid, 4);
84 $gtable .= $text{'edit_new'}." ".&ui_textbox("newgroup", undef, 10);
85 print &ui_table_row($text{'edit_group'}, $gtable, 3);
88 my $mode = $in{'new'} ? $config{'deflink'} :
89 $s->{'autouser'} ? 2 :
90 $s->{'sameuser'} ? 3 : $s->{'user'} ? 1 : 0;
91 if ($access{'forcelink'}) {
92 print &ui_hidden("mode", $mode),"\n";
94 print &ui_table_row($text{'edit_luser'},
95 &ui_textbox("wuser", $s->{'user'}, 10));
96 print &ui_table_row($text{'edit_lpass'},
97 &ui_password("wpass", $s->{'pass'}, 10));
102 my $linksel = &ui_radio("mode", $mode,
103 [ [ 0, "$text{'edit_mode0'}<br>" ],
104 [ 1, $text{'edit_mode1'}." ".$text{'edit_user'}." ".
105 &ui_textbox("wuser", $mode == 1 ? $s->{'user'} : "", 10).
106 " ".$text{'edit_pass'}.
107 &ui_password("wpass", $s->{'pass'}, 10)."<br>" ],
108 [ 2, "$text{'edit_mode2'}<br>" ],
109 ($access{'pass'} && !$main::session_id || $mode == 3 ?
110 ( [ 3, "$text{'edit_mode3'}<br>".
111 (defined($main::remote_pass) ? "" :
112 "<font size=-1>($text{'edit_same'})</font><br>") ] )
114 print &ui_table_row($text{'edit_link'}, $linksel);
117 if ($access{'forcefast'}) {
118 # Don't allow choosing of fast mode
119 print &ui_hidden("fast", $in{'new'} ? $config{'deffast'}
123 if ($in{'new'} || $s->{'fast'} == 2) {
124 print &ui_table_row($text{'edit_fast'},
125 &ui_radio("fast", $config{'deffast'},
126 [ [ 1, $text{'yes'} ],
127 [ 2, $text{'edit_auto'} ],
128 [ 0, $text{'no'} ] ]));
131 print &ui_table_row($text{'edit_fast'},
132 &ui_radio("fast", int($s->{'fast'}),
133 [ [ 1, $text{'yes'} ],
134 [ 0, $text{'no'} ] ]));
138 if ($s->{'user'} && $config{'show_status'}) {
141 $status_error_msg = join("", @_);
144 &remote_error_setup(\&status_error);
146 $SIG{'ALRM'} = sub { die "alarm\n" };
148 &remote_foreign_require($s->{'host'}, "webmin","webmin-lib.pl");
149 if ($status_error_msg) {
151 $msg = $status_error_msg;
154 # Connected - get status
155 $msg = &text('edit_version',
156 &remote_foreign_call($s->{'host'}, "webmin",
157 "get_webmin_version"));
162 $msg = $text{'edit_timeout'};
165 print &ui_table_row($text{'edit_status'}, $msg, 3);
167 print &ui_table_end();
169 [ "save", $text{'save'} ],
170 $in{'new'} ? ( ) : ( [ 'delete', $text{'delete'} ] ) ]);
172 &ui_print_footer("", $text{'index_return'});