netwatch-notify: (mis-)use firewall address-list for lookup...

... and drop the racy code querying dns cache. 😁
This commit is contained in:
Christian Hesse 2024-03-01 12:09:29 +01:00
parent 20d1ad17d7
commit 50a6914907
2 changed files with 7 additions and 13 deletions

View file

@ -84,8 +84,8 @@ with a resolvable name:
/tool/netwatch/add comment="notify, name=example.com, resolve=example.com";
This supports multiple A or AAAA records for a name just fine, even a CNAME
to those. But be warned: CNAME chains to multiple records will cause a high
rate of configuration changes (and flash writes)!
to those. An update happens only if no more record with the configured host
address is found.
### No notification on host down

View file

@ -56,21 +56,15 @@
:local Name [ :tostr $1 ];
:local Expected [ :tostr $2 ];
:delay 100ms;
:global GetRandom20CharAlNum;
:if ([ :len [ /ip/dns/cache/find where name=$Name data=$Expected ] ] > 0) do={
:local FwAddrList ($0 . "-" . [ $GetRandom20CharAlNum ]);
/ip/firewall/address-list/add address=$Name list=$FwAddrList dynamic=yes timeout=1s;
:delay 20ms;
:if ([ :len [ /ip/firewall/address-list/find where list=$FwAddrList address=$Expected ] ] > 0) do={
:return true;
}
:local Cname [ /ip/dns/cache/find where name=$Name type="CNAME" ];
:if ([ :len $Cname ] > 0) do={
:set Cname [ /ip/dns/cache/get $Cname data ];
:set Cname [ :pick $Cname 0 ([ :len $Cname ] - 1) ];
:if ([ :len [ /ip/dns/cache/find where name=$Cname data=$Expected ] ] > 0) do={
:return true;
}
}
:return false;
}