global-functions: $ScriptInstallUpdate: add syntax validation

This commit is contained in:
Christian Hesse 2021-02-25 16:36:44 +01:00
parent d0cdad791c
commit bd6b67ad7a

View file

@ -670,26 +670,38 @@
:if ([ :len $SourceNew ] > 0) do={ :if ([ :len $SourceNew ] > 0) do={
:if ($SourceNew != $ScriptVal->"source") do={ :if ($SourceNew != $ScriptVal->"source") do={
:if ([ :pick $SourceNew 0 18 ] = "#!rsc by RouterOS\n") do={ :if ([ :pick $SourceNew 0 18 ] = "#!rsc by RouterOS\n") do={
:local DontRequirePermissions \ :local SyntaxOK true;
($SourceNew~"\n# requires: dont-require-permissions=yes\n"); :do {
$LogPrintExit2 info $0 ("Updating script: " . $ScriptVal->"name") false; [ :parse (":local ValidateFunction do={ " . $SourceNew . " }") ]
/ system script set owner=($ScriptVal->"name") source=$SourceNew \ } on-error={
dont-require-permissions=$DontRequirePermissions $Script; :set SyntaxOK false;
:if ($ScriptVal->"name" = "global-config") do={
$LogPrintExit2 info $0 ("Reloading global configuration and overlay.") false;
:do {
/ system script { run global-config; run global-config-overlay; }
} on-error={
$LogPrintExit2 error $0 ("Reloading global configuration and overlay failed! Syntax error\?") false;
}
} }
:if ($ScriptVal->"name" = "global-functions") do={ :if ($SyntaxOK = true) do={
$LogPrintExit2 info $0 ("Reloading global functions.") false; :local DontRequirePermissions \
:do { ($SourceNew~"\n# requires: dont-require-permissions=yes\n");
/ system script run global-functions; $LogPrintExit2 info $0 ("Updating script: " . $ScriptVal->"name") false;
} on-error={ / system script set owner=($ScriptVal->"name") source=$SourceNew \
$LogPrintExit2 error $0 ("Reloading global functions failed!") false; dont-require-permissions=$DontRequirePermissions $Script;
:if ($ScriptVal->"name" = "global-config") do={
$LogPrintExit2 info $0 ("Reloading global configuration and overlay.") false;
:do {
/ system script { run global-config; run global-config-overlay; }
} on-error={
$LogPrintExit2 error $0 ("Reloading global configuration and overlay failed!" . \
" Syntax error or missing overlay\?") false;
}
} }
:if ($ScriptVal->"name" = "global-functions") do={
$LogPrintExit2 info $0 ("Reloading global functions.") false;
:do {
/ system script run global-functions;
} on-error={
$LogPrintExit2 error $0 ("Reloading global functions failed!") false;
}
}
} else={
$LogPrintExit2 warning $0 ("Syntax validation for script " . $ScriptVal->"name" . \
" failed! Ignoring!") false;
} }
} else={ } else={
$LogPrintExit2 warning $0 ("Looks like new script " . $ScriptVal->"name" . \ $LogPrintExit2 warning $0 ("Looks like new script " . $ScriptVal->"name" . \