Handle hostnames with upper-case letters
[webmin.git] / chooser.cgi
index c854fd3..1b4dbb5 100755 (executable)
@@ -2,6 +2,9 @@
 # chooser.cgi
 # Outputs HTML for a frame-based file chooser 
 
+BEGIN { push(@INC, ".."); };
+use WebminCore;
+
 @icon_map = (  "c", "text.gif",
                "txt", "text.gif",
                "pl", "text.gif",
                );
 
 $trust_unknown_referers = 1;
-require (-r './web-lib.pl' ? './web-lib.pl' : '../web-lib.pl');
-require (-r './ui-lib.pl' ? './ui-lib.pl' : '../ui-lib.pl');
 &init_config();
+if (&get_product_name() eq 'usermin') {
+       &switch_to_remote_user();
+       }
 %access = &get_module_acl();
 
 # Work out root directory
+local @uinfo = getpwnam($remote_user);
 if (!$access{'root'}) {
-       local @uinfo = getpwnam($remote_user);
        $rootdir = $uinfo[7] ? $uinfo[7] : "/";
        }
 else {
        $rootdir = $access{'root'};
+       $rootdir =~ s/^\~/$uinfo[7]/;
        }
 
 # Switch to correct Unix user
@@ -39,10 +44,7 @@ if (&supports_users()) {
                $fileunix = $access{'fileunix'} || $remote_user;
                @uinfo = getpwnam($fileunix);
                if (@uinfo) {
-                       ($(, $)) = ( $uinfo[3],
-                                    "$uinfo[3] ".join(" ", $uinfo[3],
-                                                  &other_groups($uinfo[0])) );
-                       ($>, $<) = ( $uinfo[2], $uinfo[2] );
+                       &switch_to_unix_user(\@uinfo);
                        }
                }
        }
@@ -174,10 +176,10 @@ EOF
 
                if ($f eq "..") {
                        $dir =~ /^(.*\/)[^\/]+\/$/;
-                       $link = "<a href=\"\" onClick='parentdir(\"".&html_escape(quotemeta($1))."\"); return false'>";
+                       $link = "<a href=\"\" onClick='parentdir(\"".&quote_escape($1)."\"); return false'>";
                        }
                else {
-                       $link = "<a href=\"\" onClick='fileclick(\"".&html_escape(quotemeta("$dir$f"))."\", $isdir); return false'>";
+                       $link = "<a href=\"\" onClick='fileclick(\"".&quote_escape("$dir$f")."\", $isdir); return false'>";
                        }
                local @cols;
                push(@cols, "$link<img border=0 src=$gconfig{'webprefix'}/images/$icon></a>");