Handle hostnames with upper-case letters
[webmin.git] / passwd / index.cgi
1 #!/usr/local/bin/perl
2 # Display a list of users whose passwords can be changed
3
4 require './passwd-lib.pl';
5
6 # Show an error if we don't know how to change passwords
7 if (!$config{'passwd_cmd'} && !&foreign_check("useradmin")) {
8         &ui_print_header(undef, $text{'index_title'}, "", undef, 1, 1);
9         print "<p>$text{'index_euseradmin'}<p>\n";
10         &ui_print_footer("/", $text{'index'});
11         exit;
12         }
13
14 if ($access{'mode'} == 1) {
15         if ($access{'users'} =~ /^\S+$/) {
16                 # Just one user - go to him
17                 &redirect("edit_passwd.cgi?user=$access{'users'}&one=1");
18                 exit;
19                 }
20         map { $ucan{$_}++ } split(/\s+/, $access{'users'});
21         }
22 elsif ($access{'mode'} == 2) {
23         map { $ucannot{$_}++ } split(/\s+/, $access{'users'});
24         }
25 elsif ($access{'mode'} == 3) {
26         # Just this user - go to him
27         &redirect("edit_passwd.cgi?user=$remote_user&one=1");
28         exit;
29         }
30 elsif ($access{'mode'} == 5) {
31         %notusers = map { $_, 1 } split(/\s+/, $access{'notusers'});
32         foreach $g (split(/\s+/, $access{'users'})) {
33                 @g = getgrnam($g);
34                 $gcan{$g[2]}++;
35                 if ($access{'sec'}) {
36                         foreach $m (split(/\s+/, $g[3])) {
37                                 $insec{$m}++;
38                                 }
39                         }
40                 }
41         }
42
43 &ui_print_header(undef, $text{'index_title'}, "", undef, 1, 1);
44
45 # Show all unix users who can be edited
46 setpwent();
47 while(local @u = getpwent()) {
48         if ($access{'mode'} == 0 ||
49             $access{'mode'} == 1 && $ucan{$u[0]} ||
50             $access{'mode'} == 2 && !$ucannot{$u[0]} ||
51             $access{'mode'} == 5 && ($gcan{$u[3]} ||
52                                      $access{'sec'} && $insec{$u[0]}) &&
53                                     !$notusers{$u[0]} ||
54             $access{'mode'} == 6 && $u[0] =~ /$access{'users'}/ ||
55             $access{'mode'} == 4 &&
56                 (!$access{'low'} || $u[2] >= $access{'low'}) &&
57                 (!$access{'high'} || $u[2] <= $access{'high'})) {
58                 push(@ulist, \@u);
59                 if ($config{'max_users'} && @ulist > $config{'max_users'}) {
60                         # Reached limit already .. no need to go on
61                         last;
62                         }
63                 }
64         }
65 endpwent() if ($gconfig{'os_type'} ne 'hpux');
66 if ($config{'sort_mode'}) {
67         @ulist = sort { lc($a->[0]) cmp lc($b->[0]) } @ulist;
68         }
69 if ($config{'max_users'} && @ulist > $config{'max_users'}) {
70         # Show as form for entering a username
71         print "$text{'index_toomany'}<br>\n";
72         print &ui_form_start("edit_passwd.cgi");
73         print &ui_submit($text{'index_user'});
74         if ($config{'input_type'}) {
75                 print &ui_select("user", undef,
76                                  [ map { $_->[0] } @ulist ]);
77                 }
78         else {
79                 print &ui_user_textbox("user");
80                 }
81         print &ui_form_end();
82         }
83 elsif (@ulist) {
84         # Show as table of users
85         @grid = ( );
86         for($i=0; $i<@ulist; $i++) {
87                 push(@grid, "<a href=\"edit_passwd.cgi?".
88                             "user=$ulist[$i]->[0]\">".
89                             &html_escape($ulist[$i]->[0])."</a>");
90                 }
91         print &ui_grid_table(\@grid, 4, 100, undef, undef,
92                              $text{'index_header'});
93         }
94 else {
95         # No users available
96         print "<b>$text{'index_none'}</b><p>\n";
97         }
98
99 &ui_print_footer("/", $text{'index'});
100