--- loncom/lonnet/perl/londns.pm	2018/07/30 14:39:51	1.6
+++ loncom/lonnet/perl/londns.pm	2021/06/06 23:14:18	1.7
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # A debugging harness.
 #
-# $Id: londns.pm,v 1.6 2018/07/30 14:39:51 raeburn Exp $
+# $Id: londns.pm,v 1.7 2021/06/06 23:14:18 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -41,6 +41,7 @@ sub serve_file {
     }
     if (open(my $config,"<","$dir/$file")) {
         my $contents = join('',<$config>);
+        close($config);
         $r->content_type($type);
         $r->send_http_header;
         return OK if $r->header_only;
@@ -63,18 +64,15 @@ sub handler {
     }
 
     my $command = (split('/',$r->uri))[3];
-    my $dir = $Apache::lonnet::perlvar{'lonTabDir'};
-    if ($command eq 'hosts') {
-	return &serve_file($r,$dir,'dns_hosts.tab','loncapa/hosts');
-    } elsif ($command eq '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,$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');
+    my ($dir,$file) = &Apache::lonnet::parse_getdns_url($command,$r->uri);
+    my %types = (
+                    hosts      => 'loncapa/hosts',
+                    domain     => 'loncapa/domain',
+                    checksums  => 'loncapa/versions',
+                    loncapaCRL => 'application/x-pem-file',
+                );
+    if (exists($types{$command})) {
+        return &serve_file($r,$dir,$file,$types{$command});
     }
     return FORBIDDEN;
 }