X7ROOT File Manager
Current Path:
/usr/libexec/webmin
usr
/
libexec
/
webmin
/
📁
..
📁
JSON
📄
LICENCE
(1.48 KB)
📄
LICENCE.ja
(1.62 KB)
📄
README.md
(4.01 KB)
📄
WebminCore.pm
(7.65 KB)
📁
WebminUI
📁
acl
📄
acl_security.pl
(4.51 KB)
📁
adsl-client
📁
ajaxterm
📁
apache
📁
at
📁
authentic-theme
📁
backup-config
📁
bacula-backup
📁
bandwidth
📁
bin
📁
bind8
📁
blue-theme
📁
change-user
📄
changepass.pl
(868 B)
📄
chooser.cgi
(7.21 KB)
📁
cluster-copy
📁
cluster-cron
📁
cluster-passwd
📁
cluster-shell
📁
cluster-software
📁
cluster-useradmin
📁
cluster-usermin
📁
cluster-webmin
📄
config-aix
(227 B)
📄
config-cobalt-linux
(264 B)
📄
config-coherent-linux
(264 B)
📄
config-corel-linux
(264 B)
📄
config-debian-linux
(264 B)
📄
config-freebsd
(256 B)
📄
config-generic-linux
(264 B)
📄
config-gentoo-linux
(264 B)
📄
config-hpux
(243 B)
📄
config-irix
(284 B)
📄
config-lib.pl
(10.83 KB)
📄
config-macos
(260 B)
📄
config-mandrake-linux
(278 B)
📄
config-msc-linux
(264 B)
📄
config-netbsd
(283 B)
📄
config-open-linux
(264 B)
📄
config-openbsd
(241 B)
📄
config-openmamba-linux
(264 B)
📄
config-openserver
(236 B)
📄
config-osf1
(266 B)
📄
config-pardus-linux
(264 B)
📄
config-redhat-linux
(264 B)
📄
config-slackware-linux
(280 B)
📄
config-sol-linux
(264 B)
📄
config-solaris
(417 B)
📄
config-suse-linux
(264 B)
📄
config-syno-linux
(364 B)
📄
config-trustix-linux
(264 B)
📄
config-turbo-linux
(264 B)
📄
config-united-linux
(264 B)
📄
config-unixware
(286 B)
📄
config-windows
(88 B)
📄
config.cgi
(1.55 KB)
📄
config_save.cgi
(1.64 KB)
📄
copyconfig.pl
(4.33 KB)
📁
cpan
📄
create-module.pl
(3.82 KB)
📁
cron
📁
custom
📄
date_chooser.cgi
(2.19 KB)
📄
defaultacl
(98 B)
📄
defaulttheme
(16 B)
📁
dfsadmin
📁
dhcpd
📁
dovecot
📄
entities_map.txt
(1.47 KB)
📁
exim
📁
exports
📁
fail2ban
📄
fastrpc.cgi
(10.59 KB)
📄
favicon.ico
(14.73 KB)
📁
fdisk
📄
feedback.cgi
(6.37 KB)
📄
feedback_form.cgi
(3.45 KB)
📁
fetchmail
📁
filemin
📁
filter
📁
firewall
📁
firewall6
📁
firewalld
📁
fsdump
📁
gray-theme
📄
group_chooser.cgi
(7.36 KB)
📁
grub
📁
heartbeat
📄
help.cgi
(2.36 KB)
📁
htaccess-htpasswd
📁
idmapd
📁
images
📄
index.cgi
(5.61 KB)
📁
inetd
📁
init
📁
inittab
📄
install-module.pl
(1.54 KB)
📄
install-type
(4 B)
📁
ipfilter
📁
ipfw
📁
ipsec
📁
iscsi-client
📁
iscsi-server
📁
iscsi-target
📁
iscsi-tgtd
📁
jabber
📁
jailkit
📄
javascript-lib.pl
(14.69 KB)
📁
krb5
📁
lang
📄
lang_list.txt
(3.41 KB)
📁
ldap-client
📁
ldap-server
📁
ldap-useradmin
📁
logrotate
📁
logviewer
📁
lpadmin
📁
lvm
📁
mailboxes
📁
mailcap
📄
maketemp.pl
(424 B)
📁
man
📄
mime.types
(12.42 KB)
📄
miniserv.pem
(974 B)
📄
miniserv.pl
(172.58 KB)
📄
module_chooser.cgi
(4.14 KB)
📁
mon
📁
mount
📁
mysql
📁
net
📄
newmods.pl
(1.25 KB)
📁
nis
📁
openslp
📄
os_list.txt
(33.58 KB)
📄
oschooser.pl
(4.55 KB)
📁
package-updates
📁
pam
📄
pam_login.cgi
(2.65 KB)
📁
pap
📁
passwd
📄
password_change.cgi
(7 KB)
📄
password_form.cgi
(1.3 KB)
📄
perlpath.pl
(571 B)
📁
php-pear
📁
phpini
📁
postfix
📁
postgresql
📁
ppp-client
📁
pptp-client
📁
pptp-server
📁
proc
📁
procmail
📁
proftpd
📁
qmailadmin
📁
quota
📁
raid
📄
record-failed.pl
(503 B)
📄
record-login.pl
(513 B)
📄
record-logout.pl
(516 B)
📄
robots.txt
(26 B)
📄
rpc.cgi
(4 KB)
📁
ruby-gems
📄
run-postinstalls.pl
(1 KB)
📄
run-uninstalls.pl
(1004 B)
📄
safeacl
(44 B)
📁
samba
📁
sarg
📁
sendmail
📁
servers
📄
session_login.cgi
(3.36 KB)
📄
setup.bat
(3.09 KB)
📄
setup.pl
(29.93 KB)
📄
setup.sh
(31.72 KB)
📁
shell
📁
shorewall
📁
shorewall6
📁
smart-status
📁
smf
📁
software
📁
spam
📁
squid
📁
sshd
📁
status
📁
stunnel
📄
switch_skill.cgi
(293 B)
📄
switch_user.cgi
(404 B)
📁
syslog
📁
syslog-ng
📁
system-status
📁
tcpwrappers
📁
telnet
📄
thirdparty.pl
(1.73 KB)
📁
time
📁
tunnel
📄
ui-lib.pl
(82.48 KB)
📁
unauthenticated
📄
update-from-repo.sh
(14.8 KB)
📁
updown
📄
uptracker.cgi
(2.88 KB)
📄
user_chooser.cgi
(7.29 KB)
📁
useradmin
📁
usermin
📄
version
(6 B)
📁
vgetty
📁
virtual-server
📁
virtualmin-awstats
📁
virtualmin-htpasswd
📄
web-lib-funcs.pl
(329.15 KB)
📄
web-lib.pl
(907 B)
📁
webalizer
📁
webmin
📄
webmin-daemon
(80 B)
📄
webmin-debian-pam
(104 B)
📄
webmin-init
(1.93 KB)
📄
webmin-pam
(101 B)
📄
webmin-search-lib.pl
(8.93 KB)
📄
webmin-systemd
(351 B)
📄
webmin_search.cgi
(2.63 KB)
📁
webmincron
📁
webminlog
📁
wuftpd
📁
xinetd
📄
xmlrpc.cgi
(7.53 KB)
Editing: webmin-search-lib.pl
# Functions for searching the webmin docs and UI =head2 search_webmin(phrase, [callback-function], [&modules]) Searches all Webmin help pages, UI text, module names and config.info files for entries matching the given phrase or word. Returns them sorted by relevance order, each as a hash ref with the following keys : =item mod - A module hash reference for the module the search result was in =item rank - A result ranking, higher being better =item type - One of mod (for module name), dir (for module directory), config (configuration setting), help (help page) or text (UI text) =item text - The text that matched =items cgis - An array ref of pages on which the text appears, each formatted like module/script.cgi =cut sub search_webmin { my ($re, $cbfunc, $onlymods) = @_; # Work out this Webmin's URL base my $urlhost = $ENV{'HTTP_HOST'}; if ($urlhost !~ /:/) { $urlhost .= ":".$ENV{'SERVER_PORT'}; } my $urlbase = ($ENV{'HTTPS'} eq 'ON' ? 'https://' : 'http://').$urlhost; # Search module names and add to results list my @rv = ( ); my $pn = &get_product_name(); my @mods; if ($onlymods) { # Modules specified by caller @mods = grep { &foreign_available($_->{'dir'}) } @$onlymods; } else { # All reasonable modules @mods = &get_available_module_infos(); } @mods = grep { !$_->{'clone'} && !$_->{'hidden'} } grep { !$_->{'noui'} && !$_->{$pn.'_noui'} } @mods; @mods = sort { $b->{'longdesc'} cmp $a->{'longdesc'} } @mods; foreach my $m (@mods) { if ($m->{'desc'} =~ /\Q$re\E/i) { # Module description match push(@rv, { 'mod' => $m, 'rank' => 10, 'type' => 'mod', 'link' => $m->{'dir'}.'/', 'text' => $m->{'desc'} }); } elsif ($m->{'longdesc'} =~ /\Q$re\E/i) { # Module long description match push(@rv, { 'mod' => $m, 'rank' => 9.5, 'type' => 'mod', 'link' => $m->{'dir'}.'/', 'text' => $m->{'longdesc'} }); } elsif ($m->{'dir'} =~ /\Q$re\E/i) { # Module directory match push(@rv, { 'mod' => $m, 'rank' => 9, 'type' => 'dir', 'link' => $m->{'dir'}.'/', 'text' => $urlbase."/".$m->{'dir'}."/" }); } &$cbfunc() if ($cbfunc); } # Search module configs and their help pages foreach my $m (@mods) { my %access = &get_module_acl(undef, $m); next if ($access{'noconfig'}); my $file = $prod eq 'webmin' ? "$m->{'dir'}/config.info" : "$m->{'dir'}/uconfig.info"; my %info = ( ); my @info_order = ( ); &read_file($file, \%info, \@info_order); foreach my $o (@lang_order_list) { &read_file("$file.$o", \%info); } my $section = undef; foreach my $c (@info_order) { my @p = split(/,/, $info{$c}); if ($p[1] == 11) { $section = $c; } if ($p[0] =~ /\Q$re\E/i) { # Config description matches push(@rv, { 'mod' => $m, 'rank' => 8, 'type' => 'config', 'link' => "/config.cgi?module=$m->{'dir'}&". "section=".&urlize($section)."#$c", 'text' => $p[0], }); } my $hfl = &help_file($mod->{'dir'}, "config_".$c); my ($title, $help) = &help_file_match($hfl); if ($help) { # Config help matches push(@rv, { 'mod' => $m, 'rank' => 6, 'type' => 'help', 'link' => "/help.cgi/$m->{'dir'}/config_".$c, 'desc' => &text('wsearch_helpfor', $p[0]), 'text' => $help, 'cgis' => [ "/config.cgi?". "module=$m->{'dir'}§ion=". &urlize($section)."#$c" ], }); } } &$cbfunc() if ($cbfunc); } # Search other help pages my %lang_order_list = map { $_, 1 } @lang_order_list; foreach my $m (@mods) { my $helpdir = &module_root_directory($m->{'dir'})."/help"; my %donepage = ( ); opendir(DIR, $helpdir); foreach my $f (sort { length($b) <=> length($a) } readdir(DIR)) { next if ($f =~ /^config_/); # For config help, already done # Work out if we should grep this help page - don't do the same # page twice for different languages my $grep = 0; my ($page, $lang); if ($f =~ /^(\S+)\.([^\.]+)\.html$/) { ($page, $lang) = ($1, $2); if ($lang_order_list{$lang} && !$donepage{$page}++) { $grep = 1; } } elsif ($f =~ /^(\S+)\.html$/) { $page = $1; if (!$donepage{$page}++) { $grep = 1; } } # If yes, search it if ($grep) { my ($title, $help) = &help_file_match("$helpdir/$f"); if ($title) { my @cgis = &find_cgi_text( [ "hlink\\(.*'$page'", "hlink\\(.*\"$page\"", "header\\([^,]+,[^,]+,[^,]+,\\s*\"$page\"", "header\\([^,]+,[^,]+,[^,]+,\\s*'$page'", ], $m, 1); push(@rv, { 'mod' => $m, 'rank' => 6, 'type' => 'help', 'link' => "/help.cgi/$m->{'dir'}/$page", 'desc' => $title, 'text' => $help, 'cgis' => \@cgis }); } } &$cbfunc() if ($cbfunc); } closedir(DIR); } # Then do text strings my %gtext = &load_language(""); MODULE: foreach my $m (@mods) { my %mtext = &load_language($m->{'dir'}); foreach my $k (keys %mtext) { next if ($gtext{$k}); # Skip repeated global strings $mtext{$k} =~ s/\$[0-9]//g; if ($mtext{$k} =~ /\Q$re\E/i) { # Find CGIs that use this text my @cgis = &find_cgi_text( [ "\$text{'$k'}", "\$text{\"$k\"}", "\$text{$k}", "&text('$k'", "&text(\"$k\"" ], $m); if (@cgis) { push(@rv, { 'mod' => $m, 'rank' => 4, 'type' => 'text', 'text' => $mtext{$k}, 'cgis' => \@cgis }); } } } &$cbfunc() if ($cbfunc); } # Sort results by relevancy # XXX can do better? @rv = sort { $b->{'rank'} <=> $a->{'rank'} || lc($a->{'mod'}->{'desc'}) cmp lc($b->{'mod'}->{'desc'}) } @rv; return @rv; } # highlight_text(text, [length]) # Returns text with the search term bolded, and truncated to 50 characters sub highlight_text { local ($str, $len) = @_; $len ||= 50; local $hlen = $len / 2; $str =~ s/<[^>]*>//g; if ($str =~ /(.*)(\Q$re\E)(.*)/i) { local ($before, $match, $after) = ($1, $2, $3); if (length($before) > $hlen) { $before = "...".substr($before, length($before)-$hlen); } if (length($after) > $hlen) { $after = substr($after, 0, $hlen)."..."; } $str = $before."<b>".&html_escape($match)."</b>".$after; } return $str; } # find_cgi_text(®exps, module, re-mode) # Returns the relative URLs of CGIs that matches some regexps, in the given # module. Does not include those that don't call some header function, as # they cannot be linked to normally sub find_cgi_text { local ($res, $m, $remode) = @_; local $mdir = &module_root_directory($m); local @rv; foreach my $f (glob("$mdir/*.cgi")) { local $found = 0; local $header = 0; open(CGI, "<".$f); LINE: while(my $line = <CGI>) { if ($line =~ /(header|ui_print_header|ui_print_unbuffered_header)\(/) { $header++; } foreach my $r (@$res) { if (!$remode && index($line, $r) >= 0 || $remode && $line =~ /$r/) { $found++; last LINE; } } } close(CGI); if ($found && $header) { local $url = $f; $url =~ s/^\Q$root_directory\E\///; push(@rv, $url); } } return @rv; } # help_file_match(file) # Returns the title if some help file matches the current search sub help_file_match { local ($f) = @_; local $data = &read_file_contents($f); local $title; if ($data =~ /<header>([^<]*)<\/header>/) { $title = $1; } $data =~ s/\s+/ /g; $data =~ s/<p>/\n\n/gi; $data =~ s/<br>/\n/gi; $data =~ s/<[^>]+>//g; if ($data =~ /\Q$re\E/i) { return ($title, $data); } return ( ); } # cgi_page_title(module, cgi) # Given a CGI, return the text for its page title, if possible sub cgi_page_title { local ($m, $cgi) = @_; local $data = &read_file_contents(&module_root_directory($m)."/".$cgi); local $rv; if ($data =~ /(ui_print_header|ui_print_unbuffered_header)\([^,]+,[^,]*(\$text\{'([^']+)'|\$text\{"([^"]+)"|\&text\('([^']+)'|\&text\("([^"]+)")/) { # New header function, with arg before title local $msg = $3 || $4 || $5 || $6; local %mtext = &load_language($m); $rv = $mtext{$msg}; } elsif ($data =~ /(^|\s|mail_page_)header\(\s*(\$text\{'([^']+)'|\$text\{"([^"]+)"|\&text\('([^']+)'|\&text\("([^"]+)")/) { # Old header function local $msg = $3 || $4 || $5 || $6; local %mtext = &load_language($m); $rv = $mtext{$msg}; } if ($cgi eq "index.cgi" && !$rv) { # If no title was found for an index.cgi, use module title local %minfo = &get_module_info($m); $rv = $minfo{'desc'}; } return $rv; } # cgi_page_args(module, cgi) # Given a module and CGI name, returns a string of URL parameters that can be # used for linking to it. Returns "none" if parameters are needed, but cannot # be determined. sub cgi_page_args { local ($m, $cgi) = @_; local $mroot = &module_root_directory($m); if (-r "$mroot/cgi_args.pl") { # Module can tell us what args to use &foreign_require($m, "cgi_args.pl"); $args = &foreign_call($m, "cgi_args", $cgi); if (defined($args)) { return $args; } } if ($cgi eq "index.cgi") { # Index page is always safe to link to return undef; } # Otherwise check if it appears to parse any args local $data = &read_file_contents($mroot."/".$cgi); if ($data =~ /(ReadParse|ReadParseMime)\(/) { return "none"; } return undef; } 1;
Upload File
Create Folder