#!/usr/bin/awk -f
function dform (date, time) {
gsub ("/", "", date)
gsub (":", "", time)
return (date time)
}
BEGIN {
OUTER = "yes"
PIPE = "date -u '+%Y%m%d%H%M%S'"
PIPE | getline NOW
close (PIPE)
}
{
if (OUTER == "yes"
{
if ($1 == "lease"
{
IP = $2
STARTS = ""
ENDS = ""
NAME = IP
gsub ("\\.", "-", NAME)
OUTER = "no"
}
} else {
sub (";$", ""
if ($1 == "starts"
{
STARTS = dform($3, $4)
}
if ($1 == "ends"
{
ENDS = dform($3, $4)
}
if ($1 == "client-hostname"
{
sub ("^\"", "", $2)
sub ("\"$", "", $2)
NAME = tolower ($2)
}
if ($1 == "}"
{
if (NOW > ENDS) { # lease is free
if (! ADDRS [IP]) ADDRS [IP] = ""
} else { # lease is bound
if (! ADDRS [IP] || TIMES [IP] < STARTS) {
ADDRS [IP] = NAME
TIMES [IP] = STARTS
}
}
OUTER = "yes"
}
}
}
END {
for (IP in ADDRS) print IP " " ADDRS [IP]
}
r1
как обычно парсер примитивный, но меня утешает мысль, что лизы тоже не руками пишутся, поэтому работать должно.
теперь предстоит основной геморрой -- ручное обновление динамических зон. а всё почему? а всё потому что в конце 2008 года опенбсд не в курсе, что дхцпд должен зоны обновлять сам. сру в кипу феде.