From 0f9476df281d54cfac14f10a43ed20ce92027651 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. Soon we will not need that, 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 b81cda3e..4301d171 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 f642b2f40d49ce1050417416547e1020d70b0568 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 4301d171..b9dc633e 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 14b8768b41d779d8be7a247551f34ad50c669071 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 b9dc633e..4b86aae7 100644 --- a/global-functions.rsc +++ b/global-functions.rsc @@ -1527,7 +1527,7 @@ :set GlobalConfigMigration; } } do={ - :global ExitError; $ExitError false $0 $Err; + :global ExitOnError; $ExitOnError $0 $Err; } } # lock script against multiple invocation From ce2ae4fdf755236d0ac608f2f8355974f7f19124 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 4b86aae7..5a388e48 100644 --- a/global-functions.rsc +++ b/global-functions.rsc @@ -1673,7 +1673,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 20307692168d0251b84f6e44db665fc75e1ee05d 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 fe09981801ececbfde1ec7c8de4c9266840c2101 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 f570b901a8abf49d22b12462a953c3319f3adf96 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 57d820f45403612a69c256da689af008da7c0119 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 0393a783c9958670f657a32405752abfec840d02 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 b48523cc3d290674b064ca527dbe9acdb97c8d55 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 a7217fa0cd9ed39e2fe0ee0a31f7067b5d69ce6e 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 e21495054b8de12fe2a8405f620e067729ffa65a 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 fe987304eab5686de0b0b59da4f0be24c47d899d 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 dd4421099f56802af5330628a77059949e1108ab 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 496bca336c7e9f65f7172160a7fa963bbcad3560 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 7e4463473d4ffedbd3728c451b79d222087b4250 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 20c904eea2703a4ae7c188e5799bfbc2a439dcc4 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; }