Handle hostnames with upper-case letters
[webmin.git] / htaccess-htpasswd / search.cgi
1 #!/usr/local/bin/perl
2 # search.cgi
3 # Find .htaccess files under some directory
4
5 require './htaccess-lib.pl';
6 &foreign_require($apachemod, "apache-lib.pl");
7
8 &ReadParse();
9 &error_setup($text{'search_err'});
10 if ($in{'search'} !~ /^\// && $accessdirs[0] ne "/") {
11         # Make path absolute
12         $in{'search'} = "$accessdirs[0]/$in{'dir'}";
13         }
14 $in{'search'} =~ /^\// && $in{'search'} !~ /\.\./ ||
15         &error($text{'search_edir'});
16 &can_access_dir($in{'search'}) || &error($text{'search_ecannot'});
17
18 &ui_print_unbuffered_header(undef, $text{'search_title'}, "");
19
20 @dirs = &list_directories();
21 %got = map { ( "$_->[0]/$config{'htaccess'}", 1 ) } @dirs;
22 print "<b>",&text('search_doing', "<tt>$in{'search'}</tt>"),"</b><p>\n";
23
24 # Use the find command
25 &switch_user();
26 open(FIND, "find ".quotemeta($in{'search'})." -name ".
27            quotemeta($config{'htaccess'})." -print 2>/dev/null |");
28 while($f = <FIND>) {
29         chop($f);
30         if ($got{$f}) {
31                 print &text('search_already', "<tt>$f</tt>"),"<br>\n";
32                 }
33         elsif (!open(TEST, $f)) {
34                 print &text('search_open', "<tt>$f</tt>", $!),"<br>\n";
35                 }
36         else {
37                 $conf = &foreign_call($apachemod, "get_htaccess_config", $f);
38                 $currfile = &foreign_call($apachemod, "find_directive",
39                                           "AuthUserFile", $conf, 1);
40                 $require = &foreign_call($apachemod, "find_directive",
41                                          "require", $conf, 1);
42                 if ($currfile && $require) {
43                         print &text('search_found', "<tt>$f</tt>",
44                                     "<tt>$currfile</tt>"),"<br>\n";
45                         local $d = $f;
46                         $d =~ s/\/$config{'htaccess'}$//;
47                         push(@dirs, [ $d, $currfile ]);
48                         }
49                 else {
50                         print &text('search_noprot', "<tt>$f</tt>"),"<br>\n";
51                         }
52                 }
53         }
54 close(FIND);
55 print "<p><b>$text{'search_done'}</b><p>\n";
56 &switch_back();
57
58 &lock_file($directories_file);
59 &save_directories(\@dirs);
60 &unlock_file($directories_file);
61 &webmin_log("search", $in{'search'});
62
63 &ui_print_footer("", $text{'index_return'});
64
65