version 1.397, 2008/02/29 21:01:03
|
version 1.400, 2008/04/21 15:27:34
|
Line 1221 sub push_file_handler {
|
Line 1221 sub push_file_handler {
|
} |
} |
®ister_handler("pushfile", \&push_file_handler, 1, 0, 1); |
®ister_handler("pushfile", \&push_file_handler, 1, 0, 1); |
|
|
|
# The du_handler routine should be considered obsolete and is retained |
|
# for communication with legacy servers. Please see the du2_handler. |
# |
# |
# du - list the disk usuage of a directory recursively. |
# du - list the disk usage of a directory recursively. |
# |
# |
# note: stolen code from the ls file handler |
# note: stolen code from the ls file handler |
# under construction by Rick Banghart |
# under construction by Rick Banghart |
Line 1272 sub du_handler {
|
Line 1274 sub du_handler {
|
} |
} |
®ister_handler("du", \&du_handler, 0, 1, 0); |
®ister_handler("du", \&du_handler, 0, 1, 0); |
|
|
|
# Please also see the du_handler, which is obsoleted by du2. |
|
# du2_handler differs from du_handler in that required path to directory |
|
# provided by &propath() is prepended in the handler instead of on the |
|
# client side. |
# |
# |
# The ls_handler routine should be considered obosolete and is retained |
# du2 - list the disk usage of a directory recursively. |
# for communication with legacy servers. Please see the ls2_handler. |
# |
|
# Parameters: |
|
# $cmd - The command that dispatched us (du). |
|
# $tail - The tail of the request that invoked us. |
|
# $tail is a : separated list of the following: |
|
# - $ududir - directory path to list (before prepending) |
|
# - $getpropath = 1 if &propath() should prepend |
|
# - $uname - username to use for &propath or user dir |
|
# - $udom - domain to use for &propath or user dir |
|
# All are escaped. |
|
# $client - Socket open on the client. |
|
# Returns: |
|
# 1 - indicating that the daemon should not disconnect. |
|
# Side Effects: |
|
# The reply is written to $client. |
|
# |
|
|
|
sub du2_handler { |
|
my ($cmd, $tail, $client) = @_; |
|
my ($ududir,$getpropath,$uname,$udom) = map { &unescape($_) } (split(/:/, $tail)); |
|
my $userinput = "$cmd:$tail"; |
|
if (($ududir=~/\.\./) || (($ududir!~m|^/home/httpd/|) && (!$getpropath))) { |
|
&Failure($client,"refused\n","$cmd:$tail"); |
|
return 1; |
|
} |
|
if ($getpropath) { |
|
if (($uname =~ /^$LONCAPA::match_name$/) && ($udom =~ /^$LONCAPA::match_domain$/)) { |
|
$ududir = &propath($udom,$uname).'/'.$ududir; |
|
} else { |
|
&Failure($client,"refused\n","$cmd:$tail"); |
|
return 1; |
|
} |
|
} |
|
# Since $ududir could have some nasties in it, |
|
# we will require that ududir is a valid |
|
# directory. Just in case someone tries to |
|
# slip us a line like .;(cd /home/httpd rm -rf*) |
|
# etc. |
|
# |
|
if (-d $ududir) { |
|
my $total_size=0; |
|
my $code=sub { |
|
if ($_=~/\.\d+\./) { return;} |
|
if ($_=~/\.meta$/) { return;} |
|
if (-d $_) { return;} |
|
$total_size+=(stat($_))[7]; |
|
}; |
|
chdir($ududir); |
|
find($code,$ududir); |
|
$total_size=int($total_size/1024); |
|
&Reply($client,\$total_size,"$cmd:$ududir"); |
|
} else { |
|
&Failure($client, "bad_directory:$ududir\n","$cmd:$tail"); |
|
} |
|
return 1; |
|
} |
|
®ister_handler("du2", \&du2_handler, 0, 1, 0); |
|
|
|
# |
|
# The ls_handler routine should be considered obsolete and is retained |
|
# for communication with legacy servers. Please see the ls3_handler. |
# |
# |
# ls - list the contents of a directory. For each file in the |
# ls - list the contents of a directory. For each file in the |
# selected directory the filename followed by the full output of |
# selected directory the filename followed by the full output of |
Line 1340 sub ls_handler {
|
Line 1406 sub ls_handler {
|
} |
} |
®ister_handler("ls", \&ls_handler, 0, 1, 0); |
®ister_handler("ls", \&ls_handler, 0, 1, 0); |
|
|
# |
# The ls2_handler routine should be considered obsolete and is retained |
# Please also see the ls_handler, which this routine obosolets. |
# for communication with legacy servers. Please see the ls3_handler. |
|
# Please also see the ls_handler, which was itself obsoleted by ls2. |
# ls2_handler differs from ls_handler in that it escapes its return |
# ls2_handler differs from ls_handler in that it escapes its return |
# values before concatenating them together with ':'s. |
# values before concatenating them together with ':'s. |
# |
# |
Line 1406 sub ls2_handler {
|
Line 1473 sub ls2_handler {
|
return 1; |
return 1; |
} |
} |
®ister_handler("ls2", \&ls2_handler, 0, 1, 0); |
®ister_handler("ls2", \&ls2_handler, 0, 1, 0); |
|
# |
|
# ls3 - list the contents of a directory. For each file in the |
|
# selected directory the filename followed by the full output of |
|
# the stat function is returned. The returned info for each |
|
# file are separated by ':'. The stat fields are separated by &'s. |
|
# Parameters: |
|
# $cmd - The command that dispatched us (ls). |
|
# $tail - The tail of the request that invoked us. |
|
# $tail is a : separated list of the following: |
|
# - $ulsdir - directory path to list (before prepending) |
|
# - $getpropath = 1 if &propath() should prepend |
|
# - $getuserdir = 1 if path to user dir in lonUsers should |
|
# prepend |
|
# - $alternate_root - path to prepend |
|
# - $uname - username to use for &propath or user dir |
|
# - $udom - domain to use for &propath or user dir |
|
# All of these except $getpropath and &getuserdir are escaped. |
|
# no_such_dir. |
|
# $client - Socket open on the client. |
|
# Returns: |
|
# 1 - indicating that the daemon should not disconnect. |
|
# Side Effects: |
|
# The reply is written to $client. |
|
# |
|
|
|
sub ls3_handler { |
|
my ($cmd, $tail, $client) = @_; |
|
my $userinput = "$cmd:$tail"; |
|
my ($ulsdir,$getpropath,$getuserdir,$alternate_root,$uname,$udom) = |
|
split(/:/,$tail); |
|
if (defined($ulsdir)) { |
|
$ulsdir = &unescape($ulsdir); |
|
} |
|
if (defined($alternate_root)) { |
|
$alternate_root = &unescape($alternate_root); |
|
} |
|
if (defined($uname)) { |
|
$uname = &unescape($uname); |
|
} |
|
if (defined($udom)) { |
|
$udom = &unescape($udom); |
|
} |
|
|
|
my $dir_root = $perlvar{'lonDocRoot'}; |
|
if ($getpropath) { |
|
if (($uname =~ /^$LONCAPA::match_name$/) && ($udom =~ /^$LONCAPA::match_domain$/)) { |
|
$dir_root = &propath($udom,$uname); |
|
$dir_root =~ s/\/$//; |
|
} else { |
|
&Failure($client,"refused\n","$cmd:$tail"); |
|
return 1; |
|
} |
|
} elsif ($getuserdir) { |
|
if (($uname =~ /^$LONCAPA::match_name$/) && ($udom =~ /^$LONCAPA::match_domain$/)) { |
|
my $subdir=$uname.'__'; |
|
$subdir =~ s/(.)(.)(.).*/$1\/$2\/$3/; |
|
$dir_root = $Apache::lonnet::perlvar{'lonUsersDir'} |
|
."/$udom/$subdir/$uname"; |
|
} else { |
|
&Failure($client,"refused\n","$cmd:$tail"); |
|
return 1; |
|
} |
|
} elsif ($alternate_root ne '') { |
|
$dir_root = $alternate_root; |
|
} |
|
if ($dir_root ne '') { |
|
if ($ulsdir =~ /^\//) { |
|
$ulsdir = $dir_root.$ulsdir; |
|
} else { |
|
$ulsdir = $dir_root.'/'.$ulsdir; |
|
} |
|
} |
|
my $obs; |
|
my $rights; |
|
my $ulsout=''; |
|
my $ulsfn; |
|
if (-e $ulsdir) { |
|
if(-d $ulsdir) { |
|
if (opendir(LSDIR,$ulsdir)) { |
|
while ($ulsfn=readdir(LSDIR)) { |
|
undef($obs); |
|
undef($rights); |
|
my @ulsstats=stat($ulsdir.'/'.$ulsfn); |
|
#We do some obsolete checking here |
|
if(-e $ulsdir.'/'.$ulsfn.".meta") { |
|
open(FILE, $ulsdir.'/'.$ulsfn.".meta"); |
|
my @obsolete=<FILE>; |
|
foreach my $obsolete (@obsolete) { |
|
if($obsolete =~ m/(<obsolete>)(on|1)/) { $obs = 1; } |
|
if($obsolete =~ m|(<copyright>)(default)|) { |
|
$rights = 1; |
|
} |
|
} |
|
} |
|
my $tmp = $ulsfn.'&'.join('&',@ulsstats); |
|
if ($obs eq '1') { $tmp.="&1"; } else { $tmp.="&0"; } |
|
if ($rights eq '1') { $tmp.="&1"; } else { $tmp.="&0"; } |
|
$ulsout.= &escape($tmp).':'; |
|
} |
|
closedir(LSDIR); |
|
} |
|
} else { |
|
my @ulsstats=stat($ulsdir); |
|
$ulsout.=$ulsfn.'&'.join('&',@ulsstats).':'; |
|
} |
|
} else { |
|
$ulsout='no_such_dir'; |
|
} |
|
if ($ulsout eq '') { $ulsout='empty'; } |
|
&Reply($client, \$ulsout, $userinput); # This supports debug logging. |
|
return 1; |
|
} |
|
®ister_handler("ls3", \&ls3_handler, 0, 1, 0); |
|
|
# Process a reinit request. Reinit requests that either |
# Process a reinit request. Reinit requests that either |
# lonc or lond be reinitialized so that an updated |
# lonc or lond be reinitialized so that an updated |
Line 1518 sub authenticate_handler {
|
Line 1698 sub authenticate_handler {
|
# with default auth type(s) if no user account. |
# with default auth type(s) if no user account. |
|
|
my ($udom, $uname, $upass, $checkdefauth)=split(/:/,$tail); |
my ($udom, $uname, $upass, $checkdefauth)=split(/:/,$tail); |
&Debug(" Authenticate domain = $udom, user = $uname, password = $upass"); |
&Debug(" Authenticate domain = $udom, user = $uname, password = $upass, checkdefauth = $checkdefauth"); |
chomp($upass); |
chomp($upass); |
$upass=&unescape($upass); |
$upass=&unescape($upass); |
|
|
Line 3498 sub dump_course_id_handler {
|
Line 3678 sub dump_course_id_handler {
|
if ($hashref) { |
if ($hashref) { |
while (my ($key,$value) = each(%$hashref)) { |
while (my ($key,$value) = each(%$hashref)) { |
my ($unesc_key,$lasttime_key,$lasttime,$is_hash,%val, |
my ($unesc_key,$lasttime_key,$lasttime,$is_hash,%val, |
%unesc_val,$selfenroll_start,$selfenroll_end, |
%unesc_val,$selfenroll_end,$selfenroll_types); |
$selfenroll_types); |
|
$unesc_key = &unescape($key); |
$unesc_key = &unescape($key); |
if ($unesc_key =~ /^lasttime:/) { |
if ($unesc_key =~ /^lasttime:/) { |
next; |
next; |
Line 3519 sub dump_course_id_handler {
|
Line 3698 sub dump_course_id_handler {
|
$unesc_val{'owner'} = $items->{'owner'}; |
$unesc_val{'owner'} = $items->{'owner'}; |
$unesc_val{'type'} = $items->{'type'}; |
$unesc_val{'type'} = $items->{'type'}; |
$selfenroll_types = $items->{'selfenroll_types'}; |
$selfenroll_types = $items->{'selfenroll_types'}; |
$selfenroll_start = $items->{'selfenroll_start_date'}; |
|
$selfenroll_end = $items->{'selfenroll_end_date'}; |
$selfenroll_end = $items->{'selfenroll_end_date'}; |
if ($selfenrollonly) { |
if ($selfenrollonly) { |
next if (!$selfenroll_types); |
next if (!$selfenroll_types); |
if (($selfenroll_start > 0) && ($selfenroll_start > $now)) { |
|
next; |
|
} |
|
if (($selfenroll_end > 0) && ($selfenroll_end <= $now)) { |
if (($selfenroll_end > 0) && ($selfenroll_end <= $now)) { |
next; |
next; |
} |
} |