3 # Save or delete a server
7 require './servers-lib.pl';
8 our (%in, %access, %text);
10 $access{'edit'} || &error($text{'edit_ecannot'});
11 &error_setup($text{'save_err'});
15 $serv = &get_server($in{'id'});
16 &can_use_server($serv) || &error($text{'edit_ecannot'});
19 $access{'add'} || &error($text{'edit_ecannot'});
20 $serv = { 'id' => time() };
25 &delete_server($in{'id'});
26 &webmin_log("delete", "server", $serv->{'host'}, $serv);
30 $in{'host'} =~ /^\S+$/ || &error($text{'save_ehost'});
31 if ($in{'port_def'}) {
32 $in{'mode'} == 0 || &error($text{'save_eport2'});
35 $in{'port'} =~ /^\d+$/ || &error($text{'save_eport'});
37 if ($in{'mode'} == 1) {
38 &to_ipaddress($in{'host'}) || &to_ip6address($in{'host'}) ||
39 &error($text{'save_ehost2'});
40 $in{'wuser'} =~ /\S/ || &error($text{'save_euser'});
41 $in{'wpass'} =~ /\S/ || &error($text{'save_epass'});
43 if ($in{'fast'} == 2 && $in{'mode'} == 1) {
44 # Does the server have fastrpc.cgi ?
45 my $con = &make_http_connection($in{'host'}, $in{'port'},
46 $in{'ssl'}, "GET", "/fastrpc.cgi");
49 &write_http_connection($con,
50 "Host: $serv->{'host'}\r\n");
51 &write_http_connection($con,
52 "User-agent: Webmin\r\n");
53 my $auth = &encode_base64("$in{'wuser'}:$in{'wpass'}");
55 &write_http_connection($con,
56 "Authorization: basic $auth\r\n");
57 &write_http_connection($con, "\r\n");
58 my $line = &read_http_connection($con);
59 if ($line =~ /^HTTP\/1\..\s+401\s+/) {
60 &error($text{'save_elogin'});
62 elsif ($line =~ /^HTTP\/1\..\s+200\s+/) {
63 # It does .. tell the fastrpc.cgi process to die
65 $line = &read_http_connection($con);
68 $line = &read_http_connection($con);
69 if ($line =~ /^1\s+(\S+)\s+(\S+)/) {
70 my ($port, $sid, $error) = ($1, $2);
71 &open_socket($in{'host'}, $port,
79 &close_http_connection($con);
82 elsif ($in{'fast'} == 2) {
83 # No login provided, so we cannot say for now ..
87 my @groups = split(/\0/, $in{'group'});
88 if ($in{'newgroup'}) {
89 $in{'newgroup'} =~ /^\S+$/ || &error($text{'save_egroup2'});
90 push(@groups, $in{'newgroup'});
92 $serv->{'host'} = $in{'host'};
93 $serv->{'port'} = $in{'port_def'} ? undef : $in{'port'};
94 $serv->{'type'} = $in{'type'};
95 $serv->{'ssl'} = $in{'ssl'};
96 $serv->{'desc'} = $in{'desc_def'} ? undef : $in{'desc'};
97 $serv->{'group'} = join("\t", @groups);
98 $serv->{'fast'} = $in{'fast'};
99 delete($serv->{'user'});
100 delete($serv->{'pass'});
101 delete($serv->{'autouser'});
102 delete($serv->{'sameuser'});
103 if ($in{'mode'} == 1) {
104 $serv->{'user'} = $in{'wuser'};
105 $serv->{'pass'} = $in{'wpass'};
107 elsif ($in{'mode'} == 2) {
108 $serv->{'autouser'} = 1;
110 elsif ($in{'mode'} == 3) {
111 $serv->{'user'} = 'same';
112 $serv->{'sameuser'} = 1;
115 delete($serv->{'pass'});
116 &webmin_log($in{'new'} ? 'create' : 'modify', 'server',
117 $serv->{'host'}, $serv);