version 1.421, 2009/08/16 21:49:21
|
version 1.438, 2010/03/15 05:09:59
|
Line 67 my $currentdomainid;
|
Line 67 my $currentdomainid;
|
my $client; |
my $client; |
my $clientip; # IP address of client. |
my $clientip; # IP address of client. |
my $clientname; # LonCAPA name of client. |
my $clientname; # LonCAPA name of client. |
|
my $clientversion; # LonCAPA version running on client |
|
|
my $server; |
my $server; |
|
|
Line 1815 sub change_password_handler {
|
Line 1816 sub change_password_handler {
|
# npass - New password. |
# npass - New password. |
# context - Context in which this was called |
# context - Context in which this was called |
# (preferences or reset_by_email). |
# (preferences or reset_by_email). |
|
# lonhost - HostID of server where request originated |
|
|
my ($udom,$uname,$upass,$npass,$context)=split(/:/,$tail); |
my ($udom,$uname,$upass,$npass,$context,$lonhost)=split(/:/,$tail); |
|
|
$upass=&unescape($upass); |
$upass=&unescape($upass); |
$npass=&unescape($npass); |
$npass=&unescape($npass); |
Line 1825 sub change_password_handler {
|
Line 1827 sub change_password_handler {
|
# First require that the user can be authenticated with their |
# First require that the user can be authenticated with their |
# old password unless context was 'reset_by_email': |
# old password unless context was 'reset_by_email': |
|
|
my $validated; |
my ($validated,$failure); |
if ($context eq 'reset_by_email') { |
if ($context eq 'reset_by_email') { |
$validated = 1; |
if ($lonhost eq '') { |
|
$failure = 'invalid_client'; |
|
} else { |
|
$validated = 1; |
|
} |
} else { |
} else { |
$validated = &validate_user($udom, $uname, $upass); |
$validated = &validate_user($udom, $uname, $upass); |
} |
} |
Line 1841 sub change_password_handler {
|
Line 1847 sub change_password_handler {
|
$salt=substr($salt,6,2); |
$salt=substr($salt,6,2); |
my $ncpass=crypt($npass,$salt); |
my $ncpass=crypt($npass,$salt); |
if(&rewrite_password_file($udom, $uname, "internal:$ncpass")) { |
if(&rewrite_password_file($udom, $uname, "internal:$ncpass")) { |
&logthis("Result of password change for " |
my $msg="Result of password change for $uname: pwchange_success"; |
."$uname: pwchange_success"); |
if ($lonhost) { |
|
$msg .= " - request originated from: $lonhost"; |
|
} |
|
&logthis($msg); |
&Reply($client, "ok\n", $userinput); |
&Reply($client, "ok\n", $userinput); |
} else { |
} else { |
&logthis("Unable to open $uname passwd " |
&logthis("Unable to open $uname passwd " |
Line 1863 sub change_password_handler {
|
Line 1872 sub change_password_handler {
|
} |
} |
|
|
} else { |
} else { |
&Failure( $client, "non_authorized\n", $userinput); |
if ($failure eq '') { |
|
$failure = 'non_authorized'; |
|
} |
|
&Failure( $client, "$failure\n", $userinput); |
} |
} |
|
|
return 1; |
return 1; |
Line 2050 sub is_home_handler {
|
Line 2062 sub is_home_handler {
|
®ister_handler("home", \&is_home_handler, 0,1,0); |
®ister_handler("home", \&is_home_handler, 0,1,0); |
|
|
# |
# |
# Process an update request for a resource?? I think what's going on here is |
# Process an update request for a resource. |
# that a resource has been modified that we hold a subscription to. |
# A resource has been modified that we hold a subscription to. |
# If the resource is not local, then we must update, or at least invalidate our |
# If the resource is not local, then we must update, or at least invalidate our |
# cached copy of the resource. |
# cached copy of the resource. |
# FUTURE WORK: |
|
# I need to look at this logic carefully. My druthers would be to follow |
|
# typical caching logic, and simple invalidate the cache, drop any subscription |
|
# an let the next fetch start the ball rolling again... however that may |
|
# actually be more difficult than it looks given the complex web of |
|
# proxy servers. |
|
# Parameters: |
# Parameters: |
# $cmd - The command that got us here. |
# $cmd - The command that got us here. |
# $tail - Tail of the command (remaining parameters). |
# $tail - Tail of the command (remaining parameters). |
Line 2083 sub update_resource_handler {
|
Line 2089 sub update_resource_handler {
|
my $ownership=ishome($fname); |
my $ownership=ishome($fname); |
if ($ownership eq 'not_owner') { |
if ($ownership eq 'not_owner') { |
if (-e $fname) { |
if (-e $fname) { |
|
# Delete preview file, if exists |
|
unlink("$fname.tmp"); |
|
# Get usage stats |
my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size, |
my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size, |
$atime,$mtime,$ctime,$blksize,$blocks)=stat($fname); |
$atime,$mtime,$ctime,$blksize,$blocks)=stat($fname); |
my $now=time; |
my $now=time; |
my $since=$now-$atime; |
my $since=$now-$atime; |
|
# If the file has not been used within lonExpire seconds, |
|
# unsubscribe from it and delete local copy |
if ($since>$perlvar{'lonExpire'}) { |
if ($since>$perlvar{'lonExpire'}) { |
my $reply=&Apache::lonnet::reply("unsub:$fname","$clientname"); |
my $reply=&Apache::lonnet::reply("unsub:$fname","$clientname"); |
&devalidate_meta_cache($fname); |
&devalidate_meta_cache($fname); |
unlink("$fname"); |
unlink("$fname"); |
unlink("$fname.meta"); |
unlink("$fname.meta"); |
} else { |
} else { |
|
# Yes, this is in active use. Get a fresh copy. Since it might be in |
|
# very active use and huge (like a movie), copy it to "in.transfer" filename first. |
my $transname="$fname.in.transfer"; |
my $transname="$fname.in.transfer"; |
my $remoteurl=&Apache::lonnet::reply("sub:$fname","$clientname"); |
my $remoteurl=&Apache::lonnet::reply("sub:$fname","$clientname"); |
my $response; |
my $response; |
Line 2120 sub update_resource_handler {
|
Line 2133 sub update_resource_handler {
|
} |
} |
alarm(0); |
alarm(0); |
} |
} |
|
# we successfully transfered, copy file over to real name |
rename($transname,$fname); |
rename($transname,$fname); |
&devalidate_meta_cache($fname); |
&devalidate_meta_cache($fname); |
} |
} |
Line 3110 sub dump_with_regexp {
|
Line 3124 sub dump_with_regexp {
|
my $qresult=''; |
my $qresult=''; |
my $count=0; |
my $count=0; |
while (my ($key,$value) = each(%$hashref)) { |
while (my ($key,$value) = each(%$hashref)) { |
|
if ($namespace eq 'roles') { |
|
if ($key =~ /^($LONCAPA::match_domain)_($LONCAPA::match_community)_(cc|co|in|ta|ep|ad|st|cr)/) { |
|
if ($clientversion =~ /^(\d+)\.(\d+)$/) { |
|
my $major = $1; |
|
my $minor = $2; |
|
next if (($major < 2) || (($major == 2) && ($minor < 9))); |
|
} |
|
} |
|
} |
if ($regexp eq '.') { |
if ($regexp eq '.') { |
$count++; |
$count++; |
if (defined($range) && $count >= $end) { last; } |
if (defined($range) && $count >= $end) { last; } |
Line 3693 sub put_course_id_hash_handler {
|
Line 3716 sub put_course_id_hash_handler {
|
# caller - if set to 'coursecatalog', courses set to be hidden |
# caller - if set to 'coursecatalog', courses set to be hidden |
# from course catalog will be excluded from results (unless |
# from course catalog will be excluded from results (unless |
# overridden by "showhidden". |
# overridden by "showhidden". |
# cloner - escaped username:domain of course cloner (if picking course to# |
# cloner - escaped username:domain of course cloner (if picking course to |
# clone). |
# clone). |
# cc_clone_list - escaped comma separated list of courses for which |
# cc_clone_list - escaped comma separated list of courses for which |
# course cloner has active CC role (and so can clone |
# course cloner has active CC role (and so can clone |
# automatically). |
# automatically). |
# cloneonly - filter by courses for which cloner has rights to clone. |
# cloneonly - filter by courses for which cloner has rights to clone. |
|
# createdbefore - include courses for which creation date preceeded this date. |
|
# createdafter - include courses for which creation date followed this date. |
|
# creationcontext - include courses created in specified context |
# |
# |
# $client - The socket open on the client. |
# $client - The socket open on the client. |
# Returns: |
# Returns: |
Line 3711 sub dump_course_id_handler {
|
Line 3737 sub dump_course_id_handler {
|
|
|
my ($udom,$since,$description,$instcodefilter,$ownerfilter,$coursefilter, |
my ($udom,$since,$description,$instcodefilter,$ownerfilter,$coursefilter, |
$typefilter,$regexp_ok,$rtn_as_hash,$selfenrollonly,$catfilter,$showhidden, |
$typefilter,$regexp_ok,$rtn_as_hash,$selfenrollonly,$catfilter,$showhidden, |
$caller,$cloner,$cc_clone_list,$cloneonly) =split(/:/,$tail); |
$caller,$cloner,$cc_clone_list,$cloneonly,$createdbefore,$createdafter, |
|
$creationcontext) =split(/:/,$tail); |
my $now = time; |
my $now = time; |
my ($cloneruname,$clonerudom,%cc_clone); |
my ($cloneruname,$clonerudom,%cc_clone); |
if (defined($description)) { |
if (defined($description)) { |
Line 3769 sub dump_course_id_handler {
|
Line 3796 sub dump_course_id_handler {
|
$cc_clone{$clonedom.'_'.$clonenum} = 1; |
$cc_clone{$clonedom.'_'.$clonenum} = 1; |
} |
} |
} |
} |
|
if ($createdbefore ne '') { |
|
$createdbefore = &unescape($createdbefore); |
|
} else { |
|
$createdbefore = 0; |
|
} |
|
if ($createdafter ne '') { |
|
$createdafter = &unescape($createdafter); |
|
} else { |
|
$createdafter = 0; |
|
} |
|
if ($creationcontext ne '') { |
|
$creationcontext = &unescape($creationcontext); |
|
} else { |
|
$creationcontext = '.'; |
|
} |
|
|
my $unpack = 1; |
my $unpack = 1; |
if ($description eq '.' && $instcodefilter eq '.' && $coursefilter eq '.' && |
if ($description eq '.' && $instcodefilter eq '.' && $coursefilter eq '.' && |
Line 3781 sub dump_course_id_handler {
|
Line 3823 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_end,$selfenroll_types); |
%unesc_val,$selfenroll_end,$selfenroll_types,$created, |
|
$context); |
$unesc_key = &unescape($key); |
$unesc_key = &unescape($key); |
if ($unesc_key =~ /^lasttime:/) { |
if ($unesc_key =~ /^lasttime:/) { |
next; |
next; |
Line 3795 sub dump_course_id_handler {
|
Line 3838 sub dump_course_id_handler {
|
my ($canclone,$valchange); |
my ($canclone,$valchange); |
my $items = &Apache::lonnet::thaw_unescape($value); |
my $items = &Apache::lonnet::thaw_unescape($value); |
if (ref($items) eq 'HASH') { |
if (ref($items) eq 'HASH') { |
|
if ($hashref->{$lasttime_key} eq '') { |
|
next if ($since > 1); |
|
} |
$is_hash = 1; |
$is_hash = 1; |
if (defined($clonerudom)) { |
if (defined($clonerudom)) { |
if ($items->{'cloners'}) { |
if ($items->{'cloners'}) { |
Line 3824 sub dump_course_id_handler {
|
Line 3870 sub dump_course_id_handler {
|
$items->{'cloners'} = $cloneruname.':'.$clonerudom; |
$items->{'cloners'} = $cloneruname.':'.$clonerudom; |
$valchange = 1; |
$valchange = 1; |
} |
} |
|
unless ($canclone) { |
|
if ($items->{'owner'} =~ /:/) { |
|
if ($items->{'owner'} eq $cloner) { |
|
$canclone = 1; |
|
} |
|
} elsif ($cloner eq $udom.':'.$items->{'owner'}) { |
|
$canclone = 1; |
|
} |
|
if ($canclone) { |
|
$items->{'cloners'} = $cloneruname.':'.$clonerudom; |
|
$valchange = 1; |
|
} |
|
} |
} |
} |
} |
} |
if ($unpack || !$rtn_as_hash) { |
if ($unpack || !$rtn_as_hash) { |
Line 3832 sub dump_course_id_handler {
|
Line 3891 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'}; |
$unesc_val{'cloners'} = $items->{'cloners'}; |
$unesc_val{'cloners'} = $items->{'cloners'}; |
|
$unesc_val{'created'} = $items->{'created'}; |
|
$unesc_val{'context'} = $items->{'context'}; |
} |
} |
$selfenroll_types = $items->{'selfenroll_types'}; |
$selfenroll_types = $items->{'selfenroll_types'}; |
$selfenroll_end = $items->{'selfenroll_end_date'}; |
$selfenroll_end = $items->{'selfenroll_end_date'}; |
|
$created = $items->{'created'}; |
|
$context = $items->{'context'}; |
if ($selfenrollonly) { |
if ($selfenrollonly) { |
next if (!$selfenroll_types); |
next if (!$selfenroll_types); |
if (($selfenroll_end > 0) && ($selfenroll_end <= $now)) { |
if (($selfenroll_end > 0) && ($selfenroll_end <= $now)) { |
next; |
next; |
} |
} |
} |
} |
|
if ($creationcontext ne '.') { |
|
next if (($context ne '') && ($context ne $creationcontext)); |
|
} |
|
if ($createdbefore > 0) { |
|
next if (($created eq '') || ($created > $createdbefore)); |
|
} |
|
if ($createdafter > 0) { |
|
next if (($created eq '') || ($created <= $createdafter)); |
|
} |
if ($catfilter ne '') { |
if ($catfilter ne '') { |
next if ($items->{'categories'} eq ''); |
next if ($items->{'categories'} eq ''); |
my @categories = split('&',$items->{'categories'}); |
my @categories = split('&',$items->{'categories'}); |
Line 3863 sub dump_course_id_handler {
|
Line 3935 sub dump_course_id_handler {
|
} else { |
} else { |
next if ($catfilter ne ''); |
next if ($catfilter ne ''); |
next if ($selfenrollonly); |
next if ($selfenrollonly); |
|
next if ($createdbefore || $createdafter); |
|
next if ($creationcontext ne '.'); |
if ((defined($clonerudom)) && (defined($cloneruname))) { |
if ((defined($clonerudom)) && (defined($cloneruname))) { |
if ($cc_clone{$unesc_key}) { |
if ($cc_clone{$unesc_key}) { |
$canclone = 1; |
$canclone = 1; |
Line 4009 sub dump_course_id_handler {
|
Line 4083 sub dump_course_id_handler {
|
} |
} |
®ister_handler("courseiddump", \&dump_course_id_handler, 0, 1, 0); |
®ister_handler("courseiddump", \&dump_course_id_handler, 0, 1, 0); |
|
|
|
sub course_lastaccess_handler { |
|
my ($cmd, $tail, $client) = @_; |
|
my $userinput = "$cmd:$tail"; |
|
my ($cdom,$cnum) = split(':',$tail); |
|
my (%lastaccess,$qresult); |
|
my $hashref = &tie_domain_hash($cdom, "nohist_courseids", &GDBM_WRCREAT()); |
|
if ($hashref) { |
|
while (my ($key,$value) = each(%$hashref)) { |
|
my ($unesc_key,$lasttime); |
|
$unesc_key = &unescape($key); |
|
if ($cnum) { |
|
next unless ($unesc_key =~ /\Q$cdom\E_\Q$cnum\E$/); |
|
} |
|
if ($unesc_key =~ /^lasttime:($LONCAPA::match_domain\_$LONCAPA::match_courseid)/) { |
|
$lastaccess{$1} = $value; |
|
} else { |
|
my $items = &Apache::lonnet::thaw_unescape($value); |
|
if (ref($items) eq 'HASH') { |
|
unless ($lastaccess{$unesc_key}) { |
|
$lastaccess{$unesc_key} = ''; |
|
} |
|
} else { |
|
my @courseitems = split(':',$value); |
|
$lastaccess{$unesc_key} = pop(@courseitems); |
|
} |
|
} |
|
} |
|
foreach my $cid (sort(keys(%lastaccess))) { |
|
$qresult.=&escape($cid).'='.$lastaccess{$cid}.'&'; |
|
} |
|
if (&untie_domain_hash($hashref)) { |
|
if ($qresult) { |
|
chop($qresult); |
|
} |
|
&Reply($client, \$qresult, $userinput); |
|
} else { |
|
&Failure($client, "error: ".($!+0)." untie(GDBM) Failed ". |
|
"while attempting lastacourseaccess\n", $userinput); |
|
} |
|
} else { |
|
&Failure($client, "error: ".($!+0)." tie(GDBM) Failed ". |
|
"while attempting lastcourseaccess\n", $userinput); |
|
} |
|
return 1; |
|
} |
|
®ister_handler("courselastaccess",\&course_lastaccess_handler, 0, 1, 0); |
|
|
# |
# |
# Puts an unencrypted entry in a namespace db file at the domain level |
# Puts an unencrypted entry in a namespace db file at the domain level |
# |
# |
Line 4052 sub put_domain_handler {
|
Line 4173 sub put_domain_handler {
|
} |
} |
®ister_handler("putdom", \&put_domain_handler, 0, 1, 0); |
®ister_handler("putdom", \&put_domain_handler, 0, 1, 0); |
|
|
# |
|
# Puts a piece of new data in a namespace db file at the domain level |
|
# returns error if key already exists |
|
# |
|
# Parameters: |
|
# $cmd - The command that got us here. |
|
# $tail - Tail of the command (remaining parameters). |
|
# $client - File descriptor connected to client. |
|
# Returns |
|
# 0 - Requested to exit, caller should shut down. |
|
# 1 - Continue processing. |
|
# Side effects: |
|
# reply is written to $client. |
|
# |
|
sub newput_domain_handler { |
|
my ($cmd, $tail, $client) = @_; |
|
|
|
my $userinput = "$cmd:$tail"; |
|
|
|
my ($udom,$namespace,$what) =split(/:/,$tail,3); |
|
chomp($what); |
|
my $hashref = &tie_domain_hash($udom, "$namespace", &GDBM_WRCREAT(), |
|
"N", $what); |
|
if(!$hashref) { |
|
&Failure( $client, "error: ".($!+0)." tie(GDBM) Failed ". |
|
"while attempting newputdom\n", $userinput); |
|
return 1; |
|
} |
|
|
|
my @pairs=split(/\&/,$what); |
|
foreach my $pair (@pairs) { |
|
my ($key,$value)=split(/=/,$pair); |
|
if (exists($hashref->{$key})) { |
|
&Failure($client, "key_exists: ".$key."\n",$userinput); |
|
return 1; |
|
} |
|
} |
|
|
|
foreach my $pair (@pairs) { |
|
my ($key,$value)=split(/=/,$pair); |
|
$hashref->{$key}=$value; |
|
} |
|
|
|
if (&untie_domain_hash($hashref)) { |
|
&Reply( $client, "ok\n", $userinput); |
|
} else { |
|
&Failure($client, "error: ".($!+0)." untie(GDBM) failed ". |
|
"while attempting newputdom\n", |
|
$userinput); |
|
} |
|
return 1; |
|
} |
|
®ister_handler("newputdom", \&newput_domain_handler, 0, 1, 0); |
|
|
|
# Unencrypted get from the namespace database file at the domain level. |
# Unencrypted get from the namespace database file at the domain level. |
# This function retrieves a keyed item from a specific named database in the |
# This function retrieves a keyed item from a specific named database in the |
# domain directory. |
# domain directory. |
Line 4156 sub get_domain_handler {
|
Line 4223 sub get_domain_handler {
|
®ister_handler("getdom", \&get_domain_handler, 0, 1, 0); |
®ister_handler("getdom", \&get_domain_handler, 0, 1, 0); |
|
|
# |
# |
# Deletes a key in a user profile database. |
|
# |
|
# Parameters: |
|
# $cmd - Command keyword (deldom). |
|
# $tail - Command tail. IN this case a colon |
|
# separated list containing: |
|
# the domain to which the database file belongs; |
|
# the namespace (name of the database file); |
|
# & separated list of keys to delete. |
|
# $client - File open on client socket. |
|
# Returns: |
|
# 1 - Continue processing |
|
# 0 - Exit server. |
|
# |
|
# |
|
sub delete_domain_entry { |
|
my ($cmd, $tail, $client) = @_; |
|
|
|
my $userinput = "cmd:$tail"; |
|
|
|
my ($udom,$namespace,$what) = split(/:/,$tail); |
|
chomp($what); |
|
my $hashref = &tie_domain_hash($udom, $namespace, &GDBM_WRCREAT(), |
|
"D",$what); |
|
if ($hashref) { |
|
my @keys=split(/\&/,$what); |
|
foreach my $key (@keys) { |
|
delete($hashref->{$key}); |
|
} |
|
if (&untie_user_hash($hashref)) { |
|
&Reply($client, "ok\n", $userinput); |
|
} else { |
|
&Failure($client, "error: ".($!+0)." untie(GDBM) Failed ". |
|
"while attempting deldom\n", $userinput); |
|
} |
|
} else { |
|
&Failure( $client, "error: ".($!+0)." tie(GDBM) Failed ". |
|
"while attempting deldom\n", $userinput); |
|
} |
|
return 1; |
|
} |
|
®ister_handler("deldom", \&delete_domain_entry, 0, 1, 0); |
|
|
|
# |
|
# Puts an id to a domains id database. |
# Puts an id to a domains id database. |
# |
# |
# Parameters: |
# Parameters: |
Line 4296 sub get_id_handler {
|
Line 4319 sub get_id_handler {
|
} |
} |
®ister_handler("idget", \&get_id_handler, 0, 1, 0); |
®ister_handler("idget", \&get_id_handler, 0, 1, 0); |
|
|
sub dump_dom_with_regexp { |
|
my ($cmd, $tail, $client) = @_; |
|
my $userinput = "$cmd:$tail"; |
|
my ($udom,$namespace,$regexp,$range)=split(/:/,$tail); |
|
if (defined($regexp)) { |
|
$regexp=&unescape($regexp); |
|
} else { |
|
$regexp='.'; |
|
} |
|
my ($start,$end); |
|
if (defined($range)) { |
|
if ($range =~/^(\d+)\-(\d+)$/) { |
|
($start,$end) = ($1,$2); |
|
} elsif ($range =~/^(\d+)$/) { |
|
($start,$end) = (0,$1); |
|
} else { |
|
undef($range); |
|
} |
|
} |
|
my $hashref = &tie_domain_hash($udom, $namespace, &GDBM_READER()); |
|
if ($hashref) { |
|
my $qresult=''; |
|
my $count=0; |
|
while (my ($key,$value) = each(%$hashref)) { |
|
if ($regexp eq '.') { |
|
$count++; |
|
if (defined($range) && $count >= $end) { last; } |
|
if (defined($range) && $count < $start) { next; } |
|
$qresult.=$key.'='.$value.'&'; |
|
} else { |
|
my $unescapeKey = &unescape($key); |
|
if (eval('$unescapeKey=~/$regexp/')) { |
|
$count++; |
|
if (defined($range) && $count >= $end) { last; } |
|
if (defined($range) && $count < $start) { next; } |
|
$qresult.="$key=$value&"; |
|
} |
|
} |
|
} |
|
if (&untie_user_hash($hashref)) { |
|
chop($qresult); |
|
&Reply($client, \$qresult, $userinput); |
|
} else { |
|
&Failure( $client, "error: ".($!+0)." untie(GDBM) Failed ". |
|
"while attempting dump\n", $userinput); |
|
} |
|
} else { |
|
&Failure($client, "error: ".($!+0)." tie(GDBM) Failed ". |
|
"while attempting dump\n", $userinput); |
|
} |
|
return 1; |
|
} |
|
®ister_handler("dumpdom", \&dump_dom_with_regexp, 0, 1, 0); |
|
|
|
# |
# |
# Puts broadcast e-mail sent by Domain Coordinator in nohist_dcmail database |
# Puts broadcast e-mail sent by Domain Coordinator in nohist_dcmail database |
# |
# |
Line 4870 sub enrollment_enabled_handler {
|
Line 4839 sub enrollment_enabled_handler {
|
®ister_handler("autorun", \&enrollment_enabled_handler, 0, 1, 0); |
®ister_handler("autorun", \&enrollment_enabled_handler, 0, 1, 0); |
|
|
# |
# |
# Validate an institutional code use for a LON-CAPA course. |
# Validate an institutional code used for a LON-CAPA course. |
# |
# |
# Formal Parameters: |
# Formal Parameters: |
# $cmd - The command request that got us dispatched. |
# $cmd - The command request that got us dispatched. |
# $tail - The tail of the command. In this case, |
# $tail - The tail of the command. In this case, |
# this is a colon separated set of words that will be split |
# this is a colon separated set of words that will be split |
# into: |
# into: |
# $inst_course_id - The institutional cod3 from the |
# $dom - The domain for which the check of |
# institutions point of view. |
# institutional course code will occur. |
# $cdom - The domain from the institutions |
# |
# point of view. |
# $instcode - The institutional code for the course |
|
# being requested, or validated for rights |
|
# to request. |
|
# |
|
# $owner - The course requestor (who will be the |
|
# course owner, in the form username:domain |
|
# |
# $client - Socket open on the client. |
# $client - Socket open on the client. |
# Returns: |
# Returns: |
# 1 - Indicating processing should continue. |
# 1 - Indicating processing should continue. |
Line 4889 sub validate_instcode_handler {
|
Line 4864 sub validate_instcode_handler {
|
my ($cmd, $tail, $client) = @_; |
my ($cmd, $tail, $client) = @_; |
my $userinput = "$cmd:$tail"; |
my $userinput = "$cmd:$tail"; |
my ($dom,$instcode,$owner) = split(/:/, $tail); |
my ($dom,$instcode,$owner) = split(/:/, $tail); |
my $outcome=&localenroll::validate_instcode($dom,$instcode,$owner); |
$instcode = &unescape($instcode); |
&Reply($client, \$outcome, $userinput); |
$owner = &unescape($owner); |
|
my ($outcome,$description) = |
|
&localenroll::validate_instcode($dom,$instcode,$owner); |
|
my $result = &escape($outcome).'&'.&escape($description); |
|
&Reply($client, \$result, $userinput); |
|
|
return 1; |
return 1; |
} |
} |
Line 5099 sub retrieve_auto_file_handler {
|
Line 5078 sub retrieve_auto_file_handler {
|
} |
} |
®ister_handler("autoretrieve", \&retrieve_auto_file_handler, 0,1,0); |
®ister_handler("autoretrieve", \&retrieve_auto_file_handler, 0,1,0); |
|
|
|
sub crsreq_checks_handler { |
|
my ($cmd, $tail, $client) = @_; |
|
my $userinput = "$cmd:$tail"; |
|
my $dom = $tail; |
|
my $result; |
|
my @reqtypes = ('official','unofficial','community'); |
|
eval { |
|
local($SIG{__DIE__})='DEFAULT'; |
|
my %validations; |
|
my $response = &localenroll::crsreq_checks($dom,\@reqtypes, |
|
\%validations); |
|
if ($response eq 'ok') { |
|
foreach my $key (keys(%validations)) { |
|
$result .= &escape($key).'='.&Apache::lonnet::freeze_escape($validations{$key}).'&'; |
|
} |
|
$result =~ s/\&$//; |
|
} else { |
|
$result = 'error'; |
|
} |
|
}; |
|
if (!$@) { |
|
&Reply($client, \$result, $userinput); |
|
} else { |
|
&Failure($client,"unknown_cmd\n",$userinput); |
|
} |
|
return 1; |
|
} |
|
®ister_handler("autocrsreqchecks", \&crsreq_checks_handler, 0, 1, 0); |
|
|
|
sub validate_crsreq_handler { |
|
my ($cmd, $tail, $client) = @_; |
|
my $userinput = "$cmd:$tail"; |
|
my ($dom,$owner,$crstype,$inststatuslist,$instcode,$instseclist) = split(/:/, $tail); |
|
$instcode = &unescape($instcode); |
|
$owner = &unescape($owner); |
|
$crstype = &unescape($crstype); |
|
$inststatuslist = &unescape($inststatuslist); |
|
$instcode = &unescape($instcode); |
|
$instseclist = &unescape($instseclist); |
|
my $outcome; |
|
eval { |
|
local($SIG{__DIE__})='DEFAULT'; |
|
$outcome = &localenroll::validate_crsreq($dom,$owner,$crstype, |
|
$inststatuslist,$instcode, |
|
$instseclist); |
|
}; |
|
if (!$@) { |
|
&Reply($client, \$outcome, $userinput); |
|
} else { |
|
&Failure($client,"unknown_cmd\n",$userinput); |
|
} |
|
return 1; |
|
} |
|
®ister_handler("autocrsreqvalidation", \&validate_crsreq_handler, 0, 1, 0); |
|
|
# |
# |
# Read and retrieve institutional code format (for support form). |
# Read and retrieve institutional code format (for support form). |
# Formal Parameters: |
# Formal Parameters: |
Line 6301 sub make_new_child {
|
Line 6335 sub make_new_child {
|
&ReadManagerTable(); |
&ReadManagerTable(); |
my $clientrec=defined(&Apache::lonnet::get_hosts_from_ip($outsideip)); |
my $clientrec=defined(&Apache::lonnet::get_hosts_from_ip($outsideip)); |
my $ismanager=($managers{$outsideip} ne undef); |
my $ismanager=($managers{$outsideip} ne undef); |
$clientname = "[unknonwn]"; |
$clientname = "[unknown]"; |
if($clientrec) { # Establish client type. |
if($clientrec) { # Establish client type. |
$ConnectionType = "client"; |
$ConnectionType = "client"; |
$clientname = (&Apache::lonnet::get_hosts_from_ip($outsideip))[-1]; |
$clientname = (&Apache::lonnet::get_hosts_from_ip($outsideip))[-1]; |
Line 6329 sub make_new_child {
|
Line 6363 sub make_new_child {
|
# |
# |
# If the remote is attempting a local init... give that a try: |
# If the remote is attempting a local init... give that a try: |
# |
# |
my ($i, $inittype) = split(/:/, $remotereq); |
(my $i, my $inittype, $clientversion) = split(/:/, $remotereq); |
|
|
# If the connection type is ssl, but I didn't get my |
# If the connection type is ssl, but I didn't get my |
# certificate files yet, then I'll drop back to |
# certificate files yet, then I'll drop back to |
Line 6349 sub make_new_child {
|
Line 6383 sub make_new_child {
|
} |
} |
|
|
if($inittype eq "local") { |
if($inittype eq "local") { |
|
$clientversion = $perlvar{'lonVersion'}; |
my $key = LocalConnection($client, $remotereq); |
my $key = LocalConnection($client, $remotereq); |
if($key) { |
if($key) { |
Debug("Got local key $key"); |
Debug("Got local key $key"); |
Line 6578 sub rewrite_password_file {
|
Line 6613 sub rewrite_password_file {
|
|
|
# Returns the authorization type or nouser if there is no such user. |
# Returns the authorization type or nouser if there is no such user. |
# |
# |
sub get_auth_type |
sub get_auth_type { |
{ |
|
|
|
my ($domain, $user) = @_; |
my ($domain, $user) = @_; |
|
|
Debug("get_auth_type( $domain, $user ) \n"); |
Debug("get_auth_type( $domain, $user ) \n"); |