aboutsummaryrefslogtreecommitdiffstats
path: root/fw-addr-lists.rsc
diff options
context:
space:
mode:
Diffstat (limited to 'fw-addr-lists.rsc')
-rw-r--r--fw-addr-lists.rsc28
1 files changed, 22 insertions, 6 deletions
diff --git a/fw-addr-lists.rsc b/fw-addr-lists.rsc
index 0c45f7e..c85cc8b 100644
--- a/fw-addr-lists.rsc
+++ b/fw-addr-lists.rsc
@@ -22,9 +22,12 @@
:global EitherOr;
:global FetchHuge;
:global HumanReadableNum;
+ :global IfThenElse;
:global LogPrint;
:global LogPrintOnce;
:global LogPrintVerbose;
+ :global NetMask4;
+ :global NetMask6;
:global ScriptLock;
:global WaitFullyConnected;
@@ -103,7 +106,7 @@
:foreach Line in=[ :deserialize $Data delimiter="\n" from=dsv options=dsv.plain ] do={
:set Line ($Line->0);
:local Address;
- :if ([ :pick $Line 0 1 ] = "{") do={
+ :if ([ :pick $Line 0 1 ] = "{" && [ :pick $Line ([ :len $Line ] - 1) ] = "}") do={
:do {
:set Address [ :tostr ([ :deserialize from=json $Line ]->"cidr") ];
} on-error={ }
@@ -111,22 +114,35 @@
:set Address ([ :pick $Line 0 [ $FindDelim $Line ] ] . ($List->"cidr"));
}
:do {
- :local Branch [ $GetBranch $Address ];
+ :local Branch;
:if ($Address ~ "^[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}(/[0-9]{1,2})?\$") do={
- :if ($Address ~ "/32\$") do={
- :set Address [ :pick $Address 0 ([ :len $Address ] - 3) ];
+ :local Net $Address;
+ :local CIDR 32;
+ :local Slash [ :find $Address "/" ];
+ :if ([ :typeof $Slash ] = "num") do={
+ :set Net [ :toip [ :pick $Address 0 $Slash ] ]
+ :set CIDR [ :pick $Address ($Slash + 1) [ :len $Address ] ];
+ :set Address [ :tostr (([ :toip $Net ] & [ $NetMask4 $CIDR ]) . [ $IfThenElse ($CIDR < 32) ("/" . $CIDR) ]) ];
}
+ :set Branch [ $GetBranch $Address ];
:set ($IPv4Addresses->$Branch->$Address) $TimeOut;
:error true;
}
:if ($Address ~ "^[0-9a-zA-Z]*:[0-9a-zA-Z:\\.]+(/[0-9]{1,3})?\$") do={
- :if ([ :typeof [ :find $Address "/" ] ] = "nil") do={
- :set Address ($Address . "/128");
+ :local Net $Address;
+ :local CIDR 128;
+ :local Slash [ :find $Address "/" ];
+ :if ([ :typeof $Slash ] = "num") do={
+ :set Net [ :toip6 [ :pick $Address 0 $Slash ] ]
+ :set CIDR [ :pick $Address ($Slash + 1) [ :len $Address ] ];
}
+ :set Address (([ :toip6 $Net ] & [ $NetMask6 $CIDR ]) . "/" . $CIDR);
+ :set Branch [ $GetBranch $Address ];
:set ($IPv6Addresses->$Branch->$Address) $TimeOut;
:error true;
}
:if ($Address ~ "^[\\.a-zA-Z0-9-]+\\.[a-zA-Z]{2,}\$") do={
+ :set Branch [ $GetBranch $Address ];
:set ($IPv4Addresses->$Branch->$Address) $TimeOut;
:set ($IPv6Addresses->$Branch->$Address) $TimeOut;
:error true;