From bbf2f5abbf280b2ff7c420838eb9e95cf8100338 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Tue, 20 Jan 2026 10:31:51 +0100 Subject: [PATCH 01/17] global-functions: introduce $ExitOnError This is just like $ExitError, but first parameter is dropped. We will not need it now that we can exit a script with :exit. --- global-functions.rsc | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/global-functions.rsc b/global-functions.rsc index 7c40632c..34125892 100644 --- a/global-functions.rsc +++ b/global-functions.rsc @@ -36,6 +36,7 @@ :global EitherOr; :global EscapeForRegEx; :global ExitError; +:global ExitOnError; :global FetchHuge; :global FetchUserAgentStr; :global FileExists; @@ -489,6 +490,19 @@ } } +# simple macro to print error message on unintentional error +:set ExitOnError do={ + :local Name [ :tostr $1 ]; + :local Error [ :tostr $2 ]; + + :global IfThenElse; + :global LogPrint; + + $LogPrint error $Name ([ $IfThenElse ([ :pick $Name 0 1 ] = "\$") \ + "Function" "Script" ] . " '" . $Name . "' exited with error" . \ + [ $IfThenElse (!($Error ~ "^(|true|false)\$")) (": " . $Error) "." ]); +} + # fetch huge data to file, read in chunks :set FetchHuge do={ :local ScriptName [ :tostr $1 ]; From 843ec3030ce7459aff2361c0ac178c94e682e9be Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Tue, 20 Jan 2026 10:35:12 +0100 Subject: [PATCH 02/17] global-functions: make $ExitError a wrapper for $ExitOnError --- global-functions.rsc | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/global-functions.rsc b/global-functions.rsc index 34125892..4ef824b0 100644 --- a/global-functions.rsc +++ b/global-functions.rsc @@ -474,19 +474,16 @@ :return $Return; } -# simple macro to print error message on unintentional error +# wrapper for $ExitOnError with additional parameter :set ExitError do={ :local ExitOK [ :tostr $1 ]; :local Name [ :tostr $2 ]; :local Error [ :tostr $3 ]; - :global IfThenElse; - :global LogPrint; + :global ExitOnError; :if ($ExitOK = "false") do={ - $LogPrint error $Name ([ $IfThenElse ([ :pick $Name 0 1 ] = "\$") \ - "Function" "Script" ] . " '" . $Name . "' exited with error" . \ - [ $IfThenElse (!($Error ~ "^(|true|false)\$")) (": " . $Error) "." ]); + $ExitOnError $Name $Error; } } From 7bb6a3f8431c1c2980ba185743c04cb44bd78947 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Tue, 20 Jan 2026 10:39:38 +0100 Subject: [PATCH 03/17] global-functions: $ScriptInstallUpdate: use $ExitOnError --- global-functions.rsc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/global-functions.rsc b/global-functions.rsc index 4ef824b0..c5e562c5 100644 --- a/global-functions.rsc +++ b/global-functions.rsc @@ -1528,7 +1528,7 @@ :set GlobalConfigMigration; } } do={ - :global ExitError; $ExitError false $0 $Err; + :global ExitOnError; $ExitOnError $0 $Err; } } # lock script against multiple invocation From 5dcd63eed0ea5847376caaed86c7c30a592054f1 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Tue, 20 Jan 2026 10:40:13 +0100 Subject: [PATCH 04/17] global-functions: $SendNotification: use $ExitOnError --- global-functions.rsc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/global-functions.rsc b/global-functions.rsc index c5e562c5..44c3e563 100644 --- a/global-functions.rsc +++ b/global-functions.rsc @@ -1674,7 +1674,7 @@ $SendNotification2 ({ origin=$0; subject=$1; message=$2; link=$3; silent=$4 }); } do={ - :global ExitError; $ExitError false $0 $Err; + :global ExitOnError; $ExitOnError $0 $Err; } } # send notification via NotificationFunctions - expects one array argument From 19dcddf4066cf397676b392abdced31db27c0413 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Tue, 20 Jan 2026 10:40:42 +0100 Subject: [PATCH 05/17] accesslist-duplicates: use $ExitOnError --- accesslist-duplicates.capsman.rsc | 2 +- accesslist-duplicates.local.rsc | 2 +- accesslist-duplicates.template.rsc | 2 +- accesslist-duplicates.wifi.rsc | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/accesslist-duplicates.capsman.rsc b/accesslist-duplicates.capsman.rsc index d9017472..56c34731 100644 --- a/accesslist-duplicates.capsman.rsc +++ b/accesslist-duplicates.capsman.rsc @@ -32,5 +32,5 @@ :set ($Seen->$Mac) 1; } } do={ - :global ExitError; $ExitError false [ :jobname ] $Err; + :global ExitOnError; $ExitOnError [ :jobname ] $Err; } diff --git a/accesslist-duplicates.local.rsc b/accesslist-duplicates.local.rsc index 614b4da6..37eb7168 100644 --- a/accesslist-duplicates.local.rsc +++ b/accesslist-duplicates.local.rsc @@ -32,5 +32,5 @@ :set ($Seen->$Mac) 1; } } do={ - :global ExitError; $ExitError false [ :jobname ] $Err; + :global ExitOnError; $ExitOnError [ :jobname ] $Err; } diff --git a/accesslist-duplicates.template.rsc b/accesslist-duplicates.template.rsc index dad9fc63..cf869c05 100644 --- a/accesslist-duplicates.template.rsc +++ b/accesslist-duplicates.template.rsc @@ -41,5 +41,5 @@ :set ($Seen->$Mac) 1; } } do={ - :global ExitError; $ExitError false [ :jobname ] $Err; + :global ExitOnError; $ExitOnError [ :jobname ] $Err; } diff --git a/accesslist-duplicates.wifi.rsc b/accesslist-duplicates.wifi.rsc index c935420f..88c39e59 100644 --- a/accesslist-duplicates.wifi.rsc +++ b/accesslist-duplicates.wifi.rsc @@ -32,5 +32,5 @@ :set ($Seen->$Mac) 1; } } do={ - :global ExitError; $ExitError false [ :jobname ] $Err; + :global ExitOnError; $ExitOnError [ :jobname ] $Err; } From 5cc9b8c775fdd87800bcf9fa31f7dff73afa95c1 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Tue, 20 Jan 2026 10:41:26 +0100 Subject: [PATCH 06/17] mod/bridge-port-to: use $ExitOnError --- mod/bridge-port-to.rsc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mod/bridge-port-to.rsc b/mod/bridge-port-to.rsc index b14926bb..c4d0e0a9 100644 --- a/mod/bridge-port-to.rsc +++ b/mod/bridge-port-to.rsc @@ -66,5 +66,5 @@ /interface/ethernet/enable $InterfaceReEnable; } } do={ - :global ExitError; $ExitError false $0 $Err; + :global ExitOnError; $ExitOnError $0 $Err; } } From 5d0760e4223261cadc1559921c504b1f59c2713e Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Tue, 20 Jan 2026 10:41:38 +0100 Subject: [PATCH 07/17] mod/bridge-port-vlan: use $ExitOnError --- mod/bridge-port-vlan.rsc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mod/bridge-port-vlan.rsc b/mod/bridge-port-vlan.rsc index 3d9567a9..15e7afa5 100644 --- a/mod/bridge-port-vlan.rsc +++ b/mod/bridge-port-vlan.rsc @@ -75,5 +75,5 @@ /interface/ethernet/enable $InterfaceReEnable; } } do={ - :global ExitError; $ExitError false $0 $Err; + :global ExitOnError; $ExitOnError $0 $Err; } } From 9ae01995d7e5d0720f7b608a8c6ac1bdcd316beb Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Tue, 20 Jan 2026 10:41:55 +0100 Subject: [PATCH 08/17] mod/inspectvar: use $ExitOnError --- mod/inspectvar.rsc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mod/inspectvar.rsc b/mod/inspectvar.rsc index d8c0bc79..cc745b1a 100644 --- a/mod/inspectvar.rsc +++ b/mod/inspectvar.rsc @@ -17,7 +17,7 @@ :put [ :tocrlf [ $InspectVarReturn $1 ] ]; } do={ - :global ExitError; $ExitError false $0 $Err; + :global ExitOnError; $ExitOnError $0 $Err; } } # inspect variable and return formatted string From da516a5102103034f66fe75d0ac66d299be9f580 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Tue, 20 Jan 2026 10:42:20 +0100 Subject: [PATCH 09/17] mod/ipcalc: use $ExitOnError --- mod/ipcalc.rsc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mod/ipcalc.rsc b/mod/ipcalc.rsc index a485468e..2a6fd1b5 100644 --- a/mod/ipcalc.rsc +++ b/mod/ipcalc.rsc @@ -28,7 +28,7 @@ [ $FormatLine "HostMax" ($Values->"hostmax") ] . "\n" . \ [ $FormatLine "Broadcast" ($Values->"broadcast") ]) ]; } do={ - :global ExitError; $ExitError false $0 $Err; + :global ExitOnError; $ExitOnError $0 $Err; } } # calculate and return netmask, network, min host, max host and broadcast From 4841c2c58d544ec8abaaa97400b4e468bb7f70fb Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Tue, 20 Jan 2026 10:42:31 +0100 Subject: [PATCH 10/17] mod/notification-email: use $ExitOnError --- mod/notification-email.rsc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mod/notification-email.rsc b/mod/notification-email.rsc index 1ca76f62..832174e0 100644 --- a/mod/notification-email.rsc +++ b/mod/notification-email.rsc @@ -146,7 +146,7 @@ /system/scheduler/set interval=(($SchedVal->"run-count") . "m") \ comment="Waiting for retry..." $Scheduler; } do={ - :global ExitError; $ExitError false $0 $Err; + :global ExitOnError; $ExitOnError $0 $Err; } } # generate filter for log-forward @@ -274,7 +274,7 @@ $SendEMail2 ({ origin=$0; subject=$1; message=$2; link=$3 }); } do={ - :global ExitError; $ExitError false $0 $Err; + :global ExitOnError; $ExitOnError $0 $Err; } } # send notification via e-mail - expects one array argument From faad9c5b2ae7de6b37b6219a363ae37c000d4a27 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Tue, 20 Jan 2026 10:42:42 +0100 Subject: [PATCH 11/17] mod/notification-gotify: use $ExitOnError --- mod/notification-gotify.rsc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mod/notification-gotify.rsc b/mod/notification-gotify.rsc index 677d993c..e919cf42 100644 --- a/mod/notification-gotify.rsc +++ b/mod/notification-gotify.rsc @@ -54,7 +54,7 @@ :set GotifyQueue; } } do={ - :global ExitError; $ExitError false $0 $Err; + :global ExitOnError; $ExitOnError $0 $Err; } } # send notification via Gotify - expects one array argument @@ -126,7 +126,7 @@ $SendGotify2 ({ origin=$0; subject=$1; message=$2; link=$3; silent=$4 }); } do={ - :global ExitError; $ExitError false $0 $Err; + :global ExitOnError; $ExitOnError $0 $Err; } } # send notification via Gotify - expects one array argument From 98178d15620428b604b5ece7ae4d0a52a612b24a Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Tue, 20 Jan 2026 10:42:52 +0100 Subject: [PATCH 12/17] mod/notification-matrix: use $ExitOnError --- mod/notification-matrix.rsc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mod/notification-matrix.rsc b/mod/notification-matrix.rsc index b78b1132..0dacf836 100644 --- a/mod/notification-matrix.rsc +++ b/mod/notification-matrix.rsc @@ -59,7 +59,7 @@ :set MatrixQueue; } } do={ - :global ExitError; $ExitError false $0 $Err; + :global ExitOnError; $ExitOnError $0 $Err; } } # send notification via Matrix - expects one array argument @@ -172,7 +172,7 @@ $SendMatrix2 ({ origin=$0; subject=$1; message=$2; link=$3 }); } do={ - :global ExitError; $ExitError false $0 $Err; + :global ExitOnError; $ExitOnError $0 $Err; } } # send notification via Matrix - expects one array argument From d00c500609b51198e12cc54a57b5de6f8f4a7fef Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Tue, 20 Jan 2026 10:43:00 +0100 Subject: [PATCH 13/17] mod/notification-ntfy: use $ExitOnError --- mod/notification-ntfy.rsc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mod/notification-ntfy.rsc b/mod/notification-ntfy.rsc index ac1792d4..cc48e748 100644 --- a/mod/notification-ntfy.rsc +++ b/mod/notification-ntfy.rsc @@ -53,7 +53,7 @@ :set NtfyQueue; } } do={ - :global ExitError; $ExitError false $0 $Err; + :global ExitOnError; $ExitOnError $0 $Err; } } # send notification via ntfy - expects one array argument @@ -148,7 +148,7 @@ $SendNtfy2 ({ origin=$0; subject=$1; message=$2; link=$3; silent=$4 }); } do={ - :global ExitError; $ExitError false $0 $Err; + :global ExitOnError; $ExitOnError $0 $Err; } } # send notification via ntfy - expects one array argument From d1c02fe19b66ecdb200764dd7cf0770bc2b20331 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Tue, 20 Jan 2026 10:43:10 +0100 Subject: [PATCH 14/17] mod/notification-telegram: use $ExitOnError --- mod/notification-telegram.rsc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mod/notification-telegram.rsc b/mod/notification-telegram.rsc index 9e9ae57e..f75d2fc4 100644 --- a/mod/notification-telegram.rsc +++ b/mod/notification-telegram.rsc @@ -62,7 +62,7 @@ :set TelegramQueue; } } do={ - :global ExitError; $ExitError false $0 $Err; + :global ExitOnError; $ExitOnError $0 $Err; } } # get the chat id @@ -101,7 +101,7 @@ $LogPrint info $0 ("The thread id is: " . ($Message->"message_thread_id")); } } do={ - :global ExitError; $ExitError false $0 $Err; + :global ExitOnError; $ExitOnError $0 $Err; } } # send notification via telegram - expects one array argument @@ -237,7 +237,7 @@ $SendTelegram2 ({ origin=$0; subject=$1; message=$2; link=$3; silent=$4 }); } do={ - :global ExitError; $ExitError false $0 $Err; + :global ExitOnError; $ExitOnError $0 $Err; } } # send notification via telegram - expects one array argument From 87f82d736fa8e42a421c255e18ea5b0383edab94 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Tue, 20 Jan 2026 10:43:29 +0100 Subject: [PATCH 15/17] mod/scriptrunonce: use $ExitOnError --- mod/scriptrunonce.rsc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mod/scriptrunonce.rsc b/mod/scriptrunonce.rsc index 598c7602..39067d95 100644 --- a/mod/scriptrunonce.rsc +++ b/mod/scriptrunonce.rsc @@ -52,5 +52,5 @@ :return true; } } do={ - :global ExitError; $ExitError false $0 $Err; + :global ExitOnError; $ExitOnError $0 $Err; } } From 5ed1c3db662a13e4ce5df1527434ffc9979af359 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Tue, 20 Jan 2026 10:43:40 +0100 Subject: [PATCH 16/17] mod/ssh-keys-import: use $ExitOnError --- mod/ssh-keys-import.rsc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mod/ssh-keys-import.rsc b/mod/ssh-keys-import.rsc index 16a02859..1bb283d4 100644 --- a/mod/ssh-keys-import.rsc +++ b/mod/ssh-keys-import.rsc @@ -68,7 +68,7 @@ :return false; } } do={ - :global ExitError; $ExitError false $0 $Err; + :global ExitOnError; $ExitOnError $0 $Err; } } # import keys from a file @@ -110,5 +110,5 @@ } } } do={ - :global ExitError; $ExitError false $0 $Err; + :global ExitOnError; $ExitOnError $0 $Err; } } From fe9d0a0bb4f5da74a642fcc03b9fe5766e270ab2 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Tue, 20 Jan 2026 10:44:03 +0100 Subject: [PATCH 17/17] mode-button: use $ExitOnError --- mode-button.rsc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mode-button.rsc b/mode-button.rsc index b5c89c7a..6dc1e43e 100644 --- a/mode-button.rsc +++ b/mode-button.rsc @@ -82,7 +82,7 @@ $LogPrint info $FuncName ("No action defined for " . $Count . " mode-button presses."); } } do={ - :global ExitError; $ExitError false $0 $Err; + :global ExitOnError; $ExitOnError $0 $Err; } } /system/scheduler/add name="_ModeButtonScheduler" \ on-event=":global ModeButtonScheduler; \$ModeButtonScheduler;" interval=3s; @@ -91,5 +91,5 @@ /system/scheduler/set $Scheduler start-time=[ /system/clock/get time ]; } } do={ - :global ExitError; $ExitError false [ :jobname ] $Err; + :global ExitOnError; $ExitOnError [ :jobname ] $Err; }