/usr/share/usermin/updown
NameSizeModeActions
images/-0755rm
lang/-0755rm
cancel.cgi8500755editdlrm
CHANGELOG9710644editdlrm
config530644editdlrm
config.info3760644editdlrm
config.info.ca3830755editdlrm
config.info.de1280644editdlrm
config.info.nl4040755editdlrm
config.info.no3970644editdlrm
defaultuconfig130644editdlrm
download.cgi50170755editdlrm
download.pl14260755editdlrm
fetch.cgi38660755editdlrm
index.cgi74790755editdlrm
log_parser.pl9860755editdlrm
module.info1840644editdlrm
module.info.af00644editdlrm
module.info.af.auto1330644editdlrm
module.info.ar00644editdlrm
module.info.ar.auto2050644editdlrm
module.info.be00644editdlrm
module.info.be.auto2440644editdlrm
module.info.bg00644editdlrm
module.info.bg.auto2590644editdlrm
module.info.ca350644editdlrm
module.info.ca.auto1250644editdlrm
module.info.cs00644editdlrm
module.info.cs.auto1550644editdlrm
module.info.da00644editdlrm
module.info.da.auto1330644editdlrm
module.info.de1740644editdlrm
module.info.el00644editdlrm
module.info.el.auto2950644editdlrm
module.info.es00644editdlrm
module.info.es.auto1420644editdlrm
module.info.eu00644editdlrm
module.info.eu.auto1560644editdlrm
module.info.fa00644editdlrm
module.info.fa.auto2490644editdlrm
module.info.fi00644editdlrm
module.info.fi.auto1430644editdlrm
module.info.fr380644editdlrm
module.info.he00644editdlrm
module.info.he.auto1930644editdlrm
module.info.hr00644editdlrm
module.info.hr.auto1410644editdlrm
module.info.hu320644editdlrm
module.info.hu.auto1390644editdlrm
module.info.it00644editdlrm
module.info.it.auto1250644editdlrm
module.info.ja00644editdlrm
module.info.ja.auto2180644editdlrm
module.info.ko00644editdlrm
module.info.ko.auto1770644editdlrm
module.info.lt00644editdlrm
module.info.lt.auto1750644editdlrm
module.info.lv00644editdlrm
module.info.lv.auto1820644editdlrm
module.info.ms00644editdlrm
module.info.ms.auto1370644editdlrm
module.info.mt00644editdlrm
module.info.mt.auto1490644editdlrm
module.info.nl310644editdlrm
module.info.no270644editdlrm
module.info.no.auto1200644editdlrm
module.info.pl00644editdlrm
module.info.pl.auto1550644editdlrm
module.info.pt00644editdlrm
module.info.pt.auto1490644editdlrm
module.info.pt_BR00644editdlrm
module.info.pt_BR.auto1580644editdlrm
module.info.ro00644editdlrm
module.info.ro.auto1870644editdlrm
module.info.ru00644editdlrm
module.info.ru.auto2740644editdlrm
module.info.sk00644editdlrm
module.info.sk.auto1480644editdlrm
module.info.sl00644editdlrm
module.info.sl.auto1430644editdlrm
module.info.sv00644editdlrm
module.info.sv.auto1490644editdlrm
module.info.th00644editdlrm
module.info.th.auto2910644editdlrm
module.info.tr00644editdlrm
module.info.tr.auto1580644editdlrm
module.info.uk00644editdlrm
module.info.uk.auto2890644editdlrm
module.info.ur00644editdlrm
module.info.ur.auto2450644editdlrm
module.info.vi00644editdlrm
module.info.vi.auto1760644editdlrm
module.info.zh00644editdlrm
module.info.zh.auto1250644editdlrm
module.info.zh_TW00644editdlrm
module.info.zh_TW.auto1340644editdlrm
updown-lib.pl77920755editdlrm
upload.cgi74770755editdlrm
Edit: /usr/share/usermin/updown/upload.cgi (7477B)
#!/usr/bin/perl # upload.cgi # Upload multiple files require './updown-lib.pl'; &error_setup($text{'upload_err'}); &ReadParse(\%getin, "GET"); $upid = $getin{'id'}; if ($getin{'direct'}) { # Create a temp directory for the uploaded files for ReadParseMime $direct_dir = &transname(); &make_dir($direct_dir, 0711); } &ReadParseMime($upload_max, \&read_parse_mime_callback, [ $upid ], 1, $direct_dir); foreach my $k (keys %in) { $in{$k} = $in{$k}->[0] if ($k !~ /^upload\d+/); } $can_upload || &error($text{'upload_ecannot'}); # Validate inputs $in{'dir'} || &error($text{'upload_edir'}); if (defined($in{'email_def'}) && !$in{'email_def'}) { $in{'email'} =~ /\S/ || &error($text{'upload_eemail'}); $email = $in{'email'}; } if ($can_mode != 3) { # User can be entered scalar(@uinfo = getpwnam($in{'user'})) || &error($text{'upload_euser'}); &can_as_user($in{'user'}) || &error(&text('upload_eucannot', $in{'user'})); $in{'group_def'} || scalar(@ginfo = getgrnam($in{'group'})) || &error($text{'upload_egroup'}); $can_mode == 0 || $in{'group_def'} || &in_group(\@uinfo, \@ginfo) || &error($text{'upload_egcannot'}); } elsif (&supports_users()) { # User to upload as is set in the ACL @uinfo = getpwnam($remote_user); } for($i=0; defined($in{"upload$i"}); $i++) { for(my $j=0; $j<@{$in{"upload$i"}}; $j++) { $d = $in{"upload${i}"}->[$j]; $f = $in{"upload${i}_filename"}->[$j]; $found++ if ($d && $f); } } $found || &error($text{'upload_enone'}); &can_write_file($in{'dir'}) || &error(&text('upload_eaccess', "$in{'dir'}", $!)); # If in direct mode, the uploaded files need to be readable by the user we're # going to write files as if ($direct_dir) { &set_ownership_permissions($uinfo[2], $uinfo[3], undef, $direct_dir, glob("$direct_dir/*")); } # Switch to the upload user &switch_uid_to($uinfo[2], scalar(@ginfo) ? $ginfo[2] : $uinfo[3]); # Create the directory if needed if (!-d $in{'dir'} && $in{'mkdir'}) { mkdir($in{'dir'}, 0755) || &error(&text('upload_emkdir', $!)); } &ui_print_header(undef, $text{'upload_title'}, ""); # Move or save the actual files, showing progress $msg = undef; for($i=0; defined($in{"upload$i"}); $i++) { for(my $j=0; $j<@{$in{"upload$i"}}; $j++) { $d = $in{"upload${i}"}->[$j]; $f = $in{"upload${i}_filename"}->[$j]; next if (!$f); # Work out the short name of the uploaded file, and # where it is stored if in direct mode $f =~ /([^\\\/]+)$/; my $fname = $1; my $mpath; if ($direct_dir) { $mpath = $direct_dir."/".$fname; } # Work out were the uploaded file is being written to if (-d $in{'dir'}) { $path = "$in{'dir'}/$1"; } else { $path = $in{'dir'}; } print &text('upload_saving', "".&html_escape($path).""),"
\n"; if ($mpath) { # Move file as we already have it in disk rename($mpath, $path) || &move_source_dest($mpath, $path) || &error(&text('upload_emove', "".&html_escape($mpath)."", "".&html_escape($path)."", $!)); } else { # Write uploaded data to the destination file if (!&open_tempfile(FILE, ">$path", 1)) { &error(&text('upload_eopen', "$path", $!)); } &print_tempfile(FILE, $d); &close_tempfile(FILE); push(@uploads, $path); } @st = stat($path); print &text('upload_saved', &nice_size($st[7])),"

\n"; $estatus = undef; if ($in{'zip'}) { print &text('upload_unzipping', "$path"),"
\n"; local ($err, $out); $path =~ /^(\S*\/)/; local $dir = $1; local $qdir = quotemeta($dir); local $qpath = quotemeta($path); local @files; if ($path =~ /\.zip$/i) { # ZIP file if (!&has_command("unzip")) { $err = &text('upload_ecmd', "unzip"); } else { open(OUT, &webmin_command_as_user($uinfo[0], 0, "(cd $qdir && unzip -o $qpath)")." 2>&1 ) { $out .= $_; if (/^\s*[a-z]+:\s+(.*)/) { push(@files, $1); } } close(OUT); $err = $out if ($?); } $fmt = "zip"; } elsif ($path =~ /\.tar$/i) { # Un-compressed tar file if (!&has_command("tar")) { $err = &text('upload_ecmd', "tar"); } else { open(OUT, &webmin_command_as_user($uinfo[0], 0, "(cd $qdir && tar xvf $qpath)")." 2>&1 ) { $out .= $_; if (/^(.*)/) { push(@files, $1); } } close(OUT); $err = $out if ($?); } $fmt = "tar"; } elsif ($path =~ /\.(lha|lhz)$/i) { # LHAarc file if (!&has_command("lha")) { $err = &text('upload_ecmd', "lha"); } else { open(OUT, &webmin_command_as_user($uinfo[0], 0, "(cd $qdir && lha xf $qpath)")." 2>&1 ) { $out .= $_; if (/(\S[^\t]*\S)\s+\-\s+/) { push(@files, "/".$1); } } close(OUT); $err = $out if ($?); } $fmt = "lha"; } elsif ($path =~ /\.(tar\.gz|tgz|tar\.bz|tbz|tar\.bz2|tbz2)$/i) { # Compressed tar file local $zipper = $path =~ /bz(2?)$/i ? "bunzip2" : "gunzip"; if (!&has_command("tar")) { $err = &text('upload_ecmd', "tar"); } elsif (!&has_command($zipper)) { $err = &text('upload_ecmd', $zipper); } else { open(OUT, &webmin_command_as_user($uinfo[0], 0, "(cd $qdir && $zipper -c $qpath | tar xvf -)")." 2>&1 ) { $out .= $_; if (/^(.*)/) { push(@files, $1); } } close(OUT); $err = $out if ($?); } $fmt = $zipper eq "gunzip" ? "tgz" : "tbz2"; } else { # Doesn't look possible $err = $text{'upload_notcomp'}; } if (!$err) { my $jn = join("
", map { "  $_" } @files); if ($in{'zip'} == 2) { unlink($path); $ext{$path} = $text{'upload_deleted'}. "
".$jn; } else { $ext{$path} = $text{'upload_extracted'}. "
".$jn; } } else { $ext{$path} = &text('email_eextract', $err); } $estatus = $err ? &text('email_extfailed', $err) : &text('email_extdone_'.$fmt); print &text('upload_unzipdone', $estatus),"

\n"; } # Add to email message $msg .= &text('email_upfile', $f)."\n"; $msg .= &text('email_uppath', $path)."\n"; $msg .= &text('email_upsize', &nice_size($st[7]))."\n"; if ($estatus) { $msg .= &text('email_upextract', $estatus)."\n"; } $msg .= "\n"; } } # Switch back to root &switch_uid_back(); # Save the settings if ($module_info{'usermin'}) { &lock_file("$user_module_config_directory/config"); $userconfig{'dir'} = $in{'dir'}; &write_file("$user_module_config_directory/config", \%userconfig); &unlock_file("$user_module_config_directory/config"); } else { &lock_file("$module_config_directory/config"); $config{'dir_'.$remote_user} = $in{'dir'}; $config{'user_'.$remote_user} = $in{'user'}; $config{'group_'.$remote_user} = $in{'group_def'} ? undef : $in{'group'}; &write_file("$module_config_directory/config", \%config); &unlock_file("$module_config_directory/config"); } # Send email if ($email && $msg) { $msg = $text{'email_upmsg'}."\n\n".$msg; &send_email_notification($email, $text{'email_subjectu'}, $msg); } &webmin_log("upload", undef, undef, { 'uploads' => \@uploads }); &ui_print_footer("index.cgi?mode=upload", $text{'index_return'});