--- loncom/lonnet/perl/lonnet.pm 2018/07/18 13:45:03 1.1379 +++ loncom/lonnet/perl/lonnet.pm 2018/08/09 14:04:35 1.1381 @@ -1,7 +1,7 @@ # The LearningOnline Network # TCP networking package # -# $Id: lonnet.pm,v 1.1379 2018/07/18 13:45:03 raeburn Exp $ +# $Id: lonnet.pm,v 1.1381 2018/08/09 14:04:35 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -10041,12 +10041,25 @@ sub is_course { my ($cdom, $cnum) = scalar(@_) == 1 ? ($_[0] =~ /^($match_domain)_($match_courseid)$/) : @_; - return unless $cdom and $cnum; - - my %courses = &courseiddump($cdom, '.', 1, '.', '.', $cnum, undef, undef, - '.'); - - return unless(exists($courses{$cdom.'_'.$cnum})); + return unless (($cdom =~ /^$match_domain$/) && ($cnum =~ /^$match_courseid$/)); + my $uhome=&homeserver($cnum,$cdom); + my $iscourse; + if (grep { $_ eq $uhome } current_machine_ids()) { + $iscourse = &Lond::is_course($cdom,$cnum); + } else { + my $hashid = $cdom.':'.$cnum; + ($iscourse,my $cached) = &is_cached_new('iscourse',$hashid); + unless (defined($cached)) { + my %courses = &courseiddump($cdom, '.', 1, '.', '.', + $cnum,undef,undef,'.'); + $iscourse = 0; + if (exists($courses{$cdom.'_'.$cnum})) { + $iscourse = 1; + } + &do_cache_new('iscourse',$hashid,$iscourse,3600); + } + } + return unless ($iscourse); return wantarray ? ($cdom, $cnum) : $cdom.'_'.$cnum; } @@ -13629,7 +13642,7 @@ sub fetch_crl_pemfile { sub save_crl_pem { my ($response) = @_; - my $msg; + my ($msg,$hadchanges); if (ref($response)) { my $now = time; my $lonca = $perlvar{'lonCertificateDirectory'}.'/'.$perlvar{'lonnetCertificateAuthority'}; @@ -13644,11 +13657,43 @@ sub save_crl_pem { chomp($check); if ($check eq 'verify OK') { my $dest = "$perlvar{'lonCertificateDirectory'}/$perlvar{'lonnetCertRevocationList'}"; + my $backup; if (-e $dest) { - &File::Copy::move($dest,"$dest.bak"); + if (&File::Copy::move($dest,"$dest.bak")) { + $backup = 'ok'; + } } if (&File::Copy::move($tmpcrl,$dest)) { $msg = 'ok'; + if ($backup) { + my (%oldnums,%newnums); + if (open(PIPE, "openssl crl -inform PEM -text -noout -in $dest.bak |grep 'Serial Number' |")) { + while () { + $oldnums{(split(/:/))[1]} = 1; + } + close(PIPE); + } + if (open(PIPE, "openssl crl -inform PEM -text -noout -in $dest |grep 'Serial Number' |")) { + while() { + $newnums{(split(/:/))[1]} = 1; + } + close(PIPE); + } + foreach my $key (sort {$b <=> $a } (keys(%newnums))) { + unless (exists($oldnums{$key})) { + $hadchanges = 1; + last; + } + } + unless ($hadchanges) { + foreach my $key (sort {$b <=> $a } (keys(%oldnums))) { + unless (exists($newnums{$key})) { + $hadchanges = 1; + last; + } + } + } + } } } else { unlink($tmpcrl); @@ -13661,7 +13706,7 @@ sub save_crl_pem { } } } - return $msg; + return ($msg,$hadchanges); } # ------------------------------------------------------------ Read domain file