* checklinks.awk: Check for duplicate links and zones. Prompted by a problem report from Daniel Schultze in: http://mm.icann.org/pipermail/tz/2015-September/022650.html --- checklinks.awk | 39 ++++++++++++++++++++++++++++++++++----- 1 file changed, 34 insertions(+), 5 deletions(-) diff --git a/checklinks.awk b/checklinks.awk index f57f736..f0ff726 100644 --- a/checklinks.awk +++ b/checklinks.awk @@ -2,14 +2,43 @@ # Contributed by Paul Eggert. -/^Link/ { used[$2] = 1 } -/^Zone/ { defined[$2] = 1 } +BEGIN { + # Special marker indicating that the name is defined as a Zone. + # It is a newline so that it cannot match a valid name. + # It is not null so that its slot does not appear unset. + Zone = "\n" +} -END { - status = 0 +/^Zone/ { + if (defined[$2]) { + if (defined[$2] == Zone) { + printf "%s: Zone has duplicate definition\n", $2 + } else { + printf "%s: Link with same name as Zone\n", $2 + } + status = 1 + } + defined[$2] = Zone +} +/^Link/ { + if (defined[$3]) { + if (defined[$3] == Zone) { + printf "%s: Link with same name as Zone\n", $3 + } else if (defined[$3] == $2) { + printf "%s: Link has duplicate definition\n", $3 + } else { + printf "%s: Link to both %s and %s\n", $3, defined[$3], $2 + } + status = 1 + } + used[$2] = 1 + defined[$3] = $2 +} + +END { for (tz in used) { - if (!defined[tz]) { + if (defined[tz] != Zone) { printf "%s: Link to non-zone\n", tz status = 1 } -- 2.1.4