#!/usr/local/bin/perl # search.cgi # Find files under some directory require './file-lib.pl'; $disallowed_buttons{'search'} && &error($text{'ebutton'}); &ReadParse(); &switch_acl_uid(); print "Content-type: text/plain\n\n"; if (!&can_access($in{'dir'})) { print $text{'search_eaccess'},"\n"; } $in{'dir'} =~ s/^\/+/\//g; if ($in{'dir'} ne '/') { $in{'dir'} =~ s/\/$//; } $cmd = "find ".quotemeta(&unmake_chroot($in{'dir'}))." -name ".quotemeta($in{'match'}); if ($in{'type'}) { $cmd .= " -type $in{'type'}"; } if ($in{'user'}) { $cmd .= " -user $in{'user'}"; } if ($in{'group'}) { $cmd .= " -group $in{'group'}"; } if ($in{'size'}) { $cmd .= " -size $in{'size'}"; } if ($in{'xdev'}) { $cmd .= " -mount"; } print "\n"; open(CMD, "$cmd 2>/dev/null |"); while($f = ) { chop($f); if (defined($in{'cont'})) { # Check the file contents for the given pattern $found = 0; if ($f =~ /\.pdf$/i && &has_command("pdftotext")) { # Convert PDF to text open(FILE, "pdftotext -raw ".quotemeta($f)." - |"); } else { open(FILE, $f); } while() { if (/\Q$in{'cont'}\E/i) { $found = 1; last; } } close(FILE); next if (!$found); } local $rf = &make_chroot($f); local $fil = &file_info_line($f, $rf); print $fil,"\n" if (defined($fil)); } close(CMD);