--- loncom/lonnet/perl/londns.pm	2017/11/30 14:33:35	1.4
+++ loncom/lonnet/perl/londns.pm	2018/07/30 14:39:51	1.6
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # A debugging harness.
 #
-# $Id: londns.pm,v 1.4 2017/11/30 14:33:35 raeburn Exp $
+# $Id: londns.pm,v 1.6 2018/07/30 14:39:51 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -31,12 +31,15 @@ package Apache::londns;
 
 use strict;
 use LONCAPA;
-use Apache::Constants qw(:common :http);
+use Apache::Constants qw(:common :http :remotehost);
 use Apache::lonnet;
 
 sub serve_file {
-    my ($r,$file,$type)=@_;
-    if (open(my $config,"<","$Apache::lonnet::perlvar{'lonTabDir'}/$file")) {
+    my ($r,$dir,$file,$type)=@_;
+    if (($dir eq '') || ($file eq '')) {
+        return FORBIDDEN;
+    }
+    if (open(my $config,"<","$dir/$file")) {
         my $contents = join('',<$config>);
         $r->content_type($type);
         $r->send_http_header;
@@ -51,14 +54,27 @@ sub serve_file {
 sub handler {
     my ($r) = @_;
 
+    my $reqhost = $r->get_remote_host(REMOTE_NOLOOKUP);
+    my @hostids= &Apache::lonnet::get_hosts_from_ip($reqhost);
+    if (!@hostids && $reqhost ne '127.0.0.1' ) {
+        $r->log_reason("Unable to find a host for ".
+                       $r->get_remote_host(REMOTE_NOLOOKUP));
+        return FORBIDDEN;
+    }
+
     my $command = (split('/',$r->uri))[3];
+    my $dir = $Apache::lonnet::perlvar{'lonTabDir'};
     if ($command eq 'hosts') {
-	return &serve_file($r,'dns_hosts.tab','loncapa/hosts');
+	return &serve_file($r,$dir,'dns_hosts.tab','loncapa/hosts');
     } elsif ($command eq 'domain') {
-	return &serve_file($r,'dns_domain.tab','loncapa/domain');
+	return &serve_file($r,$dir,'dns_domain.tab','loncapa/domain');
     } elsif ($command eq 'checksums') {
         my $version = (split('/',$r->uri))[4];
-        return &serve_file($r,"dns_checksums/$version.tab",'loncapa/versions');
+        return &serve_file($r,$dir,"dns_checksums/$version.tab",'loncapa/versions');
+    } elsif ($command eq 'loncapaCRL') {
+        $dir = $Apache::lonnet::perlvar{'lonCertificateDirectory'};
+        return &serve_file($r,$dir,$Apache::lonnet::perlvar{'lonnetCertRevocationList'},
+                           'application/x-pem-file');
     }
     return FORBIDDEN;
 }