From a112fa3206d3e80214dae90bf7716d9674e252a8 Mon Sep 17 00:00:00 2001 From: Jamie Cameron Date: Mon, 16 Jun 2008 03:25:30 +0000 Subject: [PATCH] Allow scheduled downloads in Usermin --- at/freebsd-lib.pl | 10 ++++++++-- at/irix-lib.pl | 10 ++++++++-- at/linux-lib.pl | 6 +++--- at/solaris-lib.pl | 8 ++++---- updown/download.cgi | 7 +++++-- updown/updown-lib.pl | 2 +- 6 files changed, 29 insertions(+), 14 deletions(-) diff --git a/at/freebsd-lib.pl b/at/freebsd-lib.pl index fa3ba5a4e..6f1219f46 100644 --- a/at/freebsd-lib.pl +++ b/at/freebsd-lib.pl @@ -32,7 +32,13 @@ sub create_atjob local @tm = localtime($_[1]); local $date = sprintf "%2.2d:%2.2d %d.%d.%d", $tm[2], $tm[1], $tm[3], $tm[4]+1, $tm[5]+1900; -&open_execute_command(AT, "su \"$_[0]\" -c \"cd $_[3] ; at $date\" >/dev/null 2>&1", 0); +local $cmd = "cd ".quotemeta($_[3])." ; at $date"; +local @uinfo = getpwnam($_[0]); +if ($uinfo[2] != $<) { + # Only SU if we are not already the user + $cmd = &command_as_user($_[0], 0, $cmd); + } +&open_execute_command(AT, "$cmd >/dev/null 2>&1", 0); print AT $_[2]; close(AT); &additional_log('exec', undef, "su \"$_[0]\" -c \"cd $_[3] ; at $date\""); @@ -41,6 +47,6 @@ close(AT); # delete_atjob(id) sub delete_atjob { -&system_logged("atrm \"$_[0]\" >/dev/null 2>&1"); +&system_logged("atrm ".quotemeta($_[0])." >/dev/null 2>&1"); } diff --git a/at/irix-lib.pl b/at/irix-lib.pl index 9248c1aad..8e3a4bfeb 100644 --- a/at/irix-lib.pl +++ b/at/irix-lib.pl @@ -33,7 +33,13 @@ sub create_atjob { local @tm = localtime($_[1]); local $date = strftime "%H:%M %b %d", @tm; -&open_execute_command(AT, "su \"$_[0]\" -c \"cd $_[3] ; at $date\"", 0); +local $cmd = "cd ".quotemeta($_[3])." ; at $date"; +local @uinfo = getpwnam($_[0]); +if ($uinfo[2] != $<) { + # Only SU if we are not already the user + $cmd = &command_as_user($_[0], 0, $cmd); + } +&open_execute_command(AT, "$cmd >/dev/null 2>&1", 0); print AT $_[2]; close(AT); &additional_log('exec', undef, "su \"$_[0]\" -c \"cd $_[3] ; at $date\""); @@ -42,6 +48,6 @@ close(AT); # delete_atjob(id) sub delete_atjob { -&system_logged("at -r \"$_[0]\""); +&system_logged("at -r ".quotemeta($_[0])); } diff --git a/at/linux-lib.pl b/at/linux-lib.pl index 63391f454..ac2f49c62 100644 --- a/at/linux-lib.pl +++ b/at/linux-lib.pl @@ -33,11 +33,11 @@ sub create_atjob local @tm = localtime($_[1]); local $date = sprintf "%2.2d:%2.2d %d.%d.%d", $tm[2], $tm[1], $tm[3], $tm[4]+1, $tm[5]+1900; -local $cmd = "cd $_[3]; at $date"; +local $cmd = "cd ".quotemeta($_[3])." ; at $date"; local @uinfo = getpwnam($_[0]); if ($uinfo[2] != $<) { # Only SU if we are not already the user - $cmd = "su \"$_[0]\" -c \"$cmd\""; + $cmd = &command_as_user($_[0], 0, $cmd); } &open_execute_command(AT, "$cmd >/dev/null 2>&1", 0); print AT $_[2]; @@ -48,6 +48,6 @@ close(AT); # delete_atjob(id) sub delete_atjob { -&system_logged("atrm \"$_[0]\" >/dev/null 2>&1"); +&system_logged("atrm ".quotemeta($_[0])." >/dev/null 2>&1"); } diff --git a/at/solaris-lib.pl b/at/solaris-lib.pl index 88bba0834..f1304b0b0 100644 --- a/at/solaris-lib.pl +++ b/at/solaris-lib.pl @@ -34,13 +34,13 @@ sub create_atjob { local @tm = localtime($_[1]); local $date = strftime "%H:%M %b %d", @tm; -local $cmd = "cd $_[3]; at $date"; +local $cmd = "cd ".quotemeta($_[3])." ; at $date"; local @uinfo = getpwnam($_[0]); if ($uinfo[2] != $<) { # Only SU if we are not already the user - $cmd = "su \"$_[0]\" -c \"$cmd\""; + $cmd = &command_as_user($_[0], 0, $cmd); } -&open_execute_command(AT, "$cmd ; at $date\"", 0); +&open_execute_command(AT, "$cmd >/dev/null 2>&1", 0); print AT $_[2]; close(AT); &additional_log('exec', undef, $cmd); @@ -49,6 +49,6 @@ close(AT); # delete_atjob(id) sub delete_atjob { -&system_logged("atrm \"$_[0]\""); +&system_logged("atrm ".quotemeta($_[0])); } diff --git a/updown/download.cgi b/updown/download.cgi index 4c150a085..d74740d40 100755 --- a/updown/download.cgi +++ b/updown/download.cgi @@ -126,8 +126,11 @@ if ($in{'bg'} && $can_background) { &clean_environment(); $ENV{'REMOTE_USER'} = $remote_user; # For usermin $ENV{'BASE_REMOTE_USER'} = $base_remote_user; - &at::create_atjob("root", $download{'time'}, - "$atjob_cmd $download{'id'}", "/"); + &at::create_atjob( + $module_info{'usermin'} ? $remote_user : "root", + $download{'time'}, + "$atjob_cmd $download{'id'}", + "/"); &reset_environment(); } } diff --git a/updown/updown-lib.pl b/updown/updown-lib.pl index 96d98343f..aeafca95f 100644 --- a/updown/updown-lib.pl +++ b/updown/updown-lib.pl @@ -14,7 +14,7 @@ if ($module_info{'usermin'}) { $can_upload = $config{'upload'}; $can_download = $config{'download'}; $can_fetch = $config{'fetch'}; - $can_schedule = 0; + $can_schedule = $config{'background'} && &foreign_check("at"); $can_background = $config{'background'}; if ($config{'home_only'}) { @can_dirs = ( &resolve_links($remote_user_info[7]),