Handle hostnames with upper-case letters
[webmin.git] / cluster-useradmin / add.cgi
1 #!/usr/local/bin/perl
2 # add.cgi
3 # Add or update a server or group from the webmin servers module
4
5 require './cluster-useradmin-lib.pl';
6 &ReadParse();
7 @servers = &list_servers();
8
9 if ($in{'add'}) {
10         # Add a single host
11         @add = grep { $_->{'id'} eq $in{'server'} } @servers;
12         &error_setup($text{'add_err'});
13         $msg = &text('add_msg', &server_name($add[0]));
14         }
15 else {
16         # Add all from a group
17         ($group) = grep { $_->{'name'} eq $in{'group'} }
18                         &servers::list_all_groups(\@servers);
19         foreach $m (@{$group->{'members'}}) {
20                 push(@add, grep { $_->{'host'} eq $m } @servers);
21                 }
22         &error_setup($text{'add_gerr'});
23         $msg = &text('add_gmsg', $in{'group'});
24         }
25
26 &ui_print_header(undef, $text{'add_title'}, "");
27 print "<b>$msg</b><p>\n";
28
29 # Setup error handler for down hosts
30 sub add_error
31 {
32 $add_error_msg = join("", @_);
33 }
34 &remote_error_setup(\&add_error);
35
36 # Get the users and groups for each host
37 &foreign_require("useradmin", "user-lib.pl");
38 $pft = &foreign_call("useradmin", "passfiles_type");
39 $gft = &foreign_call("useradmin", "groupfiles_type");
40 foreach $s (@add) {
41         $add_error_msg = undef;
42         local $host = { 'id' => $s->{'id'} };
43         local $useradmin = &remote_foreign_check($s->{'host'}, "useradmin");
44         if ($add_error_msg) {
45                 print "$add_error_msg<p>\n";
46                 next;
47                 }
48         if (!$useradmin) {
49                 print &text('add_echeck', $s->{'host'}),"<p>\n";
50                 next;
51                 }
52         &remote_foreign_require($s->{'host'}, "useradmin", "user-lib.pl");
53
54         local $rpft = &remote_foreign_call($s->{'host'}, "useradmin",
55                                            "passfiles_type");
56         if ($pft != $rpft) {
57                 print &text('add_epft', $s->{'host'}),"<p>\n";
58                 next;
59                 }
60
61         local @rusers = &remote_foreign_call($s->{'host'}, "useradmin",
62                                              "list_users");
63         local @rgroups = &remote_foreign_call($s->{'host'}, "useradmin",
64                                               "list_groups");
65         $host->{'users'} = \@rusers;
66         $host->{'groups'} = \@rgroups;
67         &save_useradmin_host($host);
68         print &text('add_ok', &server_name($s), scalar(@rusers),
69                     scalar(@rgroups)),"<p>\n";
70         }
71 &remote_finished();
72 if ($in{'add'}) {
73         &webmin_log("add", "host", $add[0]->{'host'});
74         }
75 else {
76         &webmin_log("add", "group", $in{'group'});
77         }
78
79 &ui_print_footer("", $text{'index_return'});
80