]> git.openstreetmap.org Git - dns.git/blobdiff - bin/mksshfp
Improve name selection in SSHFP record generation
[dns.git] / bin / mksshfp
index 56c7bbb50086cb3ac3e24649c1df2a2e2f876f99..3c1cd1dd49c4e327f8dd81d7629696b5ca63e148 100755 (executable)
@@ -1,9 +1,6 @@
 #!/usr/bin/perl
 
-
-open(SSHFP_JS, ">", "include/sshfp.js") || die $!;
-
-print SSHFP_JS qq|var SSHFP_RECORDS = [\n|;
+my %hosts;
 
 if (-f "/etc/ssh/ssh_known_hosts")
 {
@@ -11,14 +8,42 @@ if (-f "/etc/ssh/ssh_known_hosts")
 
     while (my $line = <SSHFP>)
     {
-        if ($line =~ /^(\S+) IN SSHFP (\d+) (\d+) ([0-9A-F]+)$/)
+        if ($line =~ /^(\S+)\.openstreetmap\.org IN SSHFP (\d+) (\d+) ([0-9A-F]+)$/)
         {
             my $host = $1;
             my $algorithm = $2;
             my $type = $3;
             my $value = $4;
 
-            print SSHFP_JS qq|  SSHFP("${host}", ${algorithm}, ${type}, "${value}");\n|;
+            if ($type == 2 && $algorithm != 2)
+            {
+                my $wanted = 0;
+
+                if (exists($hosts{$host}))
+                {
+                    if ($algorithm == 3)
+                    {
+                        $wanted = 1;
+                    }
+                    elsif ($algorithm == 4 && $hosts{$host}->{algorithm} != 3)
+                    {
+                        $wanted = 1;
+                    }
+                }
+                else
+                {
+                    $wanted = 1;
+                }
+
+                if ($wanted)
+                {
+                    $hosts{$host} = {
+                        algorithm => $algorithm,
+                        type => $type,
+                        value => $value
+                    };
+                }
+            }
         }
         else
         {
@@ -29,6 +54,19 @@ if (-f "/etc/ssh/ssh_known_hosts")
     close(SSHFP);
 }
 
+open(SSHFP_JS, ">", "include/sshfp.js") || die $!;
+
+print SSHFP_JS qq|var SSHFP_RECORDS = [\n|;
+
+foreach my $host (sort keys %hosts)
+{
+    my $algorithm = $hosts{$host}->{algorithm};
+    my $type = $hosts{$host}->{type};
+    my $value = $hosts{$host}->{value};
+
+    print SSHFP_JS qq|  SSHFP("${host}", ${algorithm}, ${type}, "${value}"),\n|;
+}
+
 print SSHFP_JS qq|];\n|;
 
 close(SSHFP_JS);