diff --git a/chooser.cgi b/chooser.cgi
index 26da1240b..d4fa571aa 100755
--- a/chooser.cgi
+++ b/chooser.cgi
@@ -1,17 +1,11 @@
-#!/usr/local/bin/perl
+#!/usr/bin/perl
# chooser.cgi
# Outputs HTML for a frame-based file chooser
BEGIN { push(@INC, ".."); };
use WebminCore;
-# Globals
-our $remote_user;
-our %in;
-our %gconfig;
-our %text;
-
-my %icon_map = ( "c", "text.gif",
+@icon_map = ( "c", "text.gif",
"txt", "text.gif",
"pl", "text.gif",
"cgi", "text.gif",
@@ -22,15 +16,14 @@ my %icon_map = ( "c", "text.gif",
"tar", "binary.gif"
);
-init_config();
-if (get_product_name() eq 'usermin') {
- switch_to_remote_user();
+&init_config();
+if (&get_product_name() eq 'usermin') {
+ &switch_to_remote_user();
}
-my %access = get_module_acl();
+%access = &get_module_acl();
# Work out root directory
-my @uinfo = getpwnam($remote_user);
-my $rootdir;
+local @uinfo = getpwnam($remote_user);
if (!$access{'root'}) {
$rootdir = $uinfo[7] ? $uinfo[7] : "/";
}
@@ -40,22 +33,22 @@ else {
}
# Switch to correct Unix user
-if (supports_users()) {
- if (get_product_name() eq 'usermin') {
+if (&supports_users()) {
+ if (&get_product_name() eq 'usermin') {
# Always run as Usermin login
- switch_to_remote_user();
+ &switch_to_remote_user();
}
else {
# ACL determines
- my $fileunix = $access{'fileunix'} || $remote_user;
+ $fileunix = $access{'fileunix'} || $remote_user;
@uinfo = getpwnam($fileunix);
if (@uinfo) {
- switch_to_unix_user(\@uinfo);
+ &switch_to_unix_user(\@uinfo);
}
}
}
-ReadParse(undef, undef, 1);
+&ReadParse(undef, undef, 1);
# If a chroot is forced which is under the allowed root, there is no need for
# a restrictred root
@@ -81,8 +74,6 @@ if ($in{'add'}) {
$in{'file'} = $1;
}
}
-my $dir;
-my $file;
if ($in{'file'} =~ /^(([a-z]:)?.*\/)([^\/]*)$/i && $in{'file'} !~ /\.\./) {
# File entered is valid
$dir = $1;
@@ -94,29 +85,29 @@ else {
$dir .= '/' if ($dir !~ /\/$/);
$file = "";
}
-my $add = int($in{'add'});
+$add = int($in{'add'});
if (!(-d $in{'chroot'}.$dir)) {
# Entered directory does not exist
$dir = $rootdir.'/';
$file = "";
}
-if (!allowed_dir($dir)) {
+if (!&allowed_dir($dir)) {
# Directory is outside allowed root
$dir = $rootdir.'/';
$file = "";
}
# Work out the top allowed dir
-my $topdir = $rootdir eq "/" || $rootdir eq "c:" ? $rootdir :
+$topdir = $rootdir eq "/" || $rootdir eq "c:" ? $rootdir :
$access{'otherdirs'} ? "/" : $rootdir;
-my $uchroot = urlize($in{'chroot'});
-my $utype = urlize($in{'type'});
-my $ufile = urlize($in{'file'});
+$uchroot = &urlize($in{'chroot'});
+$utype = &urlize($in{'type'});
+$ufile = &urlize($in{'file'});
if ($in{'frame'} == 0) {
# base frame
- PrintHeader();
+ &PrintHeader();
if ($in{'type'} == 0) {
print "
$text{'chooser_title1'}\n";
}
@@ -134,7 +125,7 @@ if ($in{'frame'} == 0) {
}
elsif ($in{'frame'} == 1) {
# List of files in this directory
- popup_header();
+ &popup_header();
print <
function fileclick(f, d)
@@ -180,50 +171,48 @@ EOF
&popup_error(&text('chooser_eopen', "$!"));
print &ui_columns_start(undef, 100);
my $cnt = 0;
- foreach my $f (sort { $a cmp $b } readdir(DIR)) {
- my $path = "$in{'chroot'}$dir$f";
+ foreach $f (sort { $a cmp $b } readdir(DIR)) {
+ $path = "$in{'chroot'}$dir$f";
if ($f eq ".") { next; }
if ($f eq ".." && ($dir eq "/" || $dir eq $topdir.'/')) { next; }
if ($f =~ /^\./ && $f ne ".." && $access{'nodot'}) { next; }
if (!(-d $path) && $in{'type'} == 1) { next; }
- my @st = stat($path); # XXX What is @st?
- my $isdir = 0;
- my $icon;
+ @st = stat($path);
+ $isdir = 0; undef($icon);
if (-d $path) { $icon = "dir.gif"; $isdir = 1; }
elsif ($path =~ /\.([^\.\/]+)$/) { $icon = $icon_map{$1}; }
if (!$icon) { $icon = "unknown.gif"; }
- my $link;
if ($f eq "..") {
$dir =~ /^(.*\/)[^\/]+\/$/;
- $link = "";
+ $link = "";
}
else {
- $link = "";
+ $link = "";
}
- my @cols;
+ local @cols;
push(@cols, "$link
");
push(@cols, "$link".&html_escape($f)."");
- push(@cols, nice_size($st[7]));
- my @tm = localtime($st[9]);
+ push(@cols, &nice_size($st[7]));
+ @tm = localtime($st[9]);
push(@cols, sprintf "%.2d/%s/%.4d",
$tm[3], $text{'smonth_'.($tm[4]+1)}, $tm[5]+1900);
push(@cols, sprintf "%.2d:%.2d", $tm[2], $tm[1]);
- print ui_columns_row(\@cols);
+ print &ui_columns_row(\@cols);
$cnt++;
}
closedir(DIR);
- print ui_columns_end();
+ print &ui_columns_end();
if ( $cnt >= 10 ) {
print "";
print "";
}
- popup_footer();
+ &popup_footer();
}
elsif ($in{'frame'} == 2) {
# Current file and OK/cancel buttons
- popup_header();
+ &popup_header();
print <
function filechosen()
@@ -241,25 +230,25 @@ top.close();
}
EOF
- print ui_form_start(undef, undef, undef,
+ print &ui_form_start(undef, undef, undef,
"onSubmit='filechosen(); return false'");
- print ui_table_start(undef, "width=100%", 2);
- print ui_table_row(ui_submit($text{'chooser_ok'}),
- ui_textbox("path", $dir.$file, 45, 0, undef,
+ print &ui_table_start(undef, "width=100%", 2);
+ print &ui_table_row(&ui_submit($text{'chooser_ok'}),
+ &ui_textbox("path", $dir.$file, 45, 0, undef,
"style='width:100%'"), 1,["width=5% valign=middle nowrap","valign=middle width=95%"]);
- print ui_table_end();
- print ui_form_end();
- popup_footer();
+ print &ui_table_end();
+ print &ui_form_end();
+ &popup_footer();
}
# allowed_dir(dir)
# Returns 1 if some directory should be listable
sub allowed_dir
{
-my ($dir) = @_;
+local ($dir) = @_;
return 1 if ($rootdir eq "" || $rootdir eq "/" || $rootdir eq "c:");
foreach my $allowed ($rootdir, split(/\t+/, $access{'otherdirs'})) {
- return 1 if (is_under_directory($allowed, $dir));
+ return 1 if (&is_under_directory($allowed, $dir));
}
return 0;
}