From 2e267ad2c1b3c917989ab10f35e5330319cfd322 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Tue, 5 May 2026 04:59:28 +0300 Subject: [PATCH] Backup for MikroGig created successfully at May 05 04:59:28. --- .../20260505/20260505045924-Binary.backup | Bin 0 -> 155327 bytes MikroGig/20260505/20260505045924-Config.rsc | 2613 +++++++++++++++++ .../20260505/20260505045924-Diff-Config.rsc | 1 + 3 files changed, 2614 insertions(+) create mode 100644 MikroGig/20260505/20260505045924-Binary.backup create mode 100644 MikroGig/20260505/20260505045924-Config.rsc create mode 100644 MikroGig/history/20260505/20260505045924-Diff-Config.rsc diff --git a/MikroGig/20260505/20260505045924-Binary.backup b/MikroGig/20260505/20260505045924-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..46746eb3e7b83660f18fe269e71f14424715ff8f GIT binary patch literal 155327 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\"data\");\r\ + \n#:global NewScript (a);\r\ + \n#:global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n#\r\ + \n# For run from terminal:\r\ + \n#/system/script/add name=AM-setup owner=AM-Setup source=([/tool/fetch ch\ + eck-certificate=yes-without-crl \"https://ros.vados.ru/AM-setup.rsc\" outp\ + ut=user as-value ]->\"data\");\r\ + \n#\r\ + \n\r\ + \n:global ScriptUpdatesCRLF \"LF\";\r\ + \n#:if (\$ScriptUpdatesCRLF != false) do={\r\ + \n# :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vad\ + os\" ] do={\r\ + \n# if (\$ScriptUpdatesCRLF = true) do={\r\ + \n# /system/script/set source=[ :tocrlf [ get \$Script source ] ] \$S\ + cript;\r\ + \n# } else={\r\ + \n# /system/script/set source=[ :tolf [ get \$Script source ] ] \$Scr\ + ipt;\r\ + \n# }\r\ + \n# }\r\ + \n#}\r\ + \n\r\ + \n# /import verbose=no \$ScriptName\r\ + \n:global Identity [ /system identity get name ];\r\ + \n:global SetupScript [ :jobname ];\r\ + \n:global RemoveMe true;\r\ + \n:global RunOnce (a);\r\ + \n:global InitSetup true;\r\ + \n:global tmpfs false;\r\ + \n\r\ + \n{\r\ + \n :local RmMe [:tobool \$1];\r\ + \n\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SetupScript;\r\ + \n :global RemoveMe;\r\ + \n :global InitSetup;\r\ + \n :global tmpfs;\r\ + \n\r\ + \n :local UrlSuffix \$Identity;\r\ + \n :local UrlDir \"certs/\";\r\ + \n :local CertUrl (\$GlobalScriptsUrl . \$UrlDir . \$UrlSuffix .\"/\"); \ + \r\ + \n :local CertCommonName \"Root YE\";\r\ + \n :local CertFileName \"Root-YE.pem\";\r\ + \n :local CertFingerprint \"e14ffcad5b0025731006caa43a121a22d8e9700f4fb9c\ + f852f02a708aa5d5666\";\r\ + \n\r\ + \n :if (\$SetupScript = false) do={\r\ + \n :global SetupScript \"AM-setup\";\r\ + \n }\r\ + \n :if (\$RemoveMe != false) do={\r\ + \n :set RemoveMe true;\r\ + \n }\r\ + \n\r\ + \n :log warning (\"\\n\\\$GlobalScriptsUrl = \" . \$GlobalScriptsUrl);\r\ + \n \r\ + \n\r\ + \n :if (!(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" ||\ + \_\\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CertComm\ + onName ] ] > 0)) do={\r\ + \n :put \"Importing certificate...\";\r\ + \n /tool/fetch (\$CertUrl . \$CertFileName) dst-path=\$CertFileName\ + \_as-value;\r\ + \n :delay 1s;\r\ + \n /certificate/import file-name=\$CertFileName passphrase=\"\";\r\ + \n /certificate/set name=\"Root-YE\" [ find where common-name=\"Roo\ + t YE\" ];\r\ + \n :delay 1s;\r\ + \n };\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] != 1) do={\r\ + \n :error \"Something is wrong with your certificates!\";\r\ + \n };\r\ + \n\r\ + \n:local MkTmpfs do={\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\"The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\"Try to removing directory 'tmpfs'.\");\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/remove tmpfs;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n# \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource/g\ + et total-memory ] / 3);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get tmpfs;\r\ + \n :return true;\r\ + \n } delay=222ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\"Creating disk of type tmpfs failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n}\r\ + \n:if (\$tmpfs = true) do={\r\ + \n :put \"Tmpfs variable is true. Checking for tmpfs/scripts directory...\ + \";\r\ + \n :if ([/file find name=\"tmpfs/scripts\"] != \"\") do={\r\ + \n :log info (\$0 . \"Directory tmpfs/scripts exsist.\");\r\ + \n :return \$true;\r\ + \n } else={\r\ + \n :log warning (\$0 . \"Directory tmpfs/scripts does't exsist.\");\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :log error (\$0 . \"Directory tmpfs is not created!\");\r\ + \n :return false;\r\ + \n } else={\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=/tmpfs/scripts;\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get /tmpfs/scripts;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\$0 . \"Making directory 'scripts' failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n# [ /file/get \$FileName ]\r\ + \n }\r\ + \n# :log error (\$0 . \"Directory tmpfs/scripts does not exsist. Remove\ + \_global variable tmpfs!\");\r\ + \n# :global tmpfs (a);\r\ + \n# return false;\r\ + \n }\r\ + \n}\r\ + \n :put \"Renaming AM-GlobalConfig, if exists...\";\r\ + \n :local ConfOldName (\"AM-GlobalConfig-\" . [ /system/clock/get date ] \ + . [ /system/clock/get time ] . \".rsc\");\r\ + \n /system/script/set name=\$ConfOldName [ find where name=\"AM-GlobalCon\ + fig\" ];\r\ + \n :foreach Script in={ \"AM-GlobalConfig\"; \"AM-GlobalFunc\"; \"mod/AM-\ + Certs-By-Ident\" } do={\r\ + \n :put \"Installing \$Script...\";\r\ + \n /system/script/remove [ find where name=\$Script ];\r\ + \n /system/script/add name=\$Script owner=\$Script source=([ /tool/fetc\ + h check-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n \r\ + \n /system/script run \$Script;\r\ + \n :delay 2s;\r\ + \n };\r\ + \n\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] > 0) do={\r\ + \n :put \"Renaming certificate by its common-name...\";\r\ + \n :global CertificateNameByCN;\r\ + \n \$CertificateNameByCN \$CertFingerprint;\r\ + \n };\r\ + \n\r\ + \n :if (\$RemoveMe = true) do={\r\ + \n :put \"Add Scheduler for remove this script...\";\r\ + \n :local OnEvent (\":delay 30s;\\n\" . \"/system/script/remove [ find \ + where name=\\\"\$SetupScript\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \"/system/scheduler/remove [ find where name=\\\ + \"_RemoveSetup\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \":global RemoveMe (a);\\n\");\r\ + \n :local Comment \"_RemoveSetup tmp scheduler for remove setup script.\ + \";\r\ + \n /system/scheduler/add name=\"_RemoveSetup\" comment=\$Comment start-\ + time=startup interval=30s on-event=\$OnEvent;\r\ + \n :log warning (\$0 . \"\\nI've done everything, and now I'm tired..\ + . I'm leaving.\\nThere will be an error below, this is normal.\");\r\ + \n }\r\ + \n :delay 1;\r\ + \n :put \"Loading configuration and functions...\";\r\ + \n :do { \r\ + \n :global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n :put \"Normal removing temporary global environment variables.\";\ + \r\ + \n :global SetupScript (a);\r\ + \n :global InitSetup (a);\r\ + \n :global RemoveMe (a);\r\ + \n } on-error={\r\ + \n :local ErrorMsg \"Loading configuration and functions error!\";\r\ + \n :log error (\$0 . \$ErrorMsg . :error);\r\ + \n :error \$ErrorMsg;\r\ + \n }\r\ + \n}\r\ + \n" +add dont-require-permissions=no name=AM-GlobalConfig owner=AM-GlobalConfig \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\ + \n# RouterOS script: AM-GlobalConfig\ + \n# Script comment: Global Config Script\ + \n# Copyright (c) 2007-2026 Vados \ + \n#\ + \n#\ + \n# Warning: Dont touch this line!\ + \n:global Identity [ /system identity get name ];\ + \n:global GlobalConfReady false;\ + \n#\ + \n#\ + \n# Global Url For Amster scripts to fetch\ + \n# most be defined in AM-Init-Script or AM-setup scripts\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\ + \n:global ScriptsUrlSuffix (a);\ + \n:global CheckSumsVerify true;\ + \n\ + \n:global ScriptUpdatesCRLF true;\ + \n:global CommentsInScripts true;\ + \n\ + \n# Debug output:\ + \n:global PrintDebug true; #false;\ + \n\ + \n# Debug output for specific script:\ + \n#:set (\$PrintDebugOverride->\"AM-GlobalFunc\") true;\ + \n\ + \n# Debug logs\ + \n# Other actions (disk, email, remote or support) can be used as well.\ + \n# I do not recommend using echo - use debug output instead (https://rsc.\ + eworm.de/main/DEBUG.html#debug-output).\ + \n#/system/logging/add topics=script,debug action=memory;\ + \n\ + \n:global MikrotikUpgradeUrl \"https://upgrade.mikrotik.com/routeros\";\ + \n:global Domain \"WORKGROUP\";\ + \n\ + \n:global EmailGeneralTo \"vados@vados.ru\";\ + \n#:global EmailGeneralCc \"\";\ + \n\ + \n# \$ScriptInstallUpdate mod/notification-telegram\ + \n:global TelegramTokenId \"8390868324:AAG3_d1hfVR2M6pGAgDK6ZvhOe4J97nyopw\ + \";\ + \n:global TelegramChatId \"-1003631309063\"; #\"454403445\";\ + \n# Use this to send notifications to a specific topic in group.\ + \n#:global TelegramThreadId \"30\";\ + \n# Using telegram-chat you have to define trusted chat ids (not group ids\ + !)\ + \n# or user names. Groups allow to chat with devices simultaneously.\ + \n:global TelegramChatIdsTrusted {\ + \n \"454403445\"\ + \n \"-1003631309063\"\ + \n \"-5124482807\"\ + \n \"1087968824\";\ + \n};\ + \n# \"-5294757340\";\ + \n\ + \n:global TelegramChatGroups \"(all)\";\ + \n#:global TelegramChatGroups \"(all|home|office)\";\ + \n\ + \n:global NotificationFunctions {\ + \n \"email\"\ + \n \"telegram\";\ + \n};\ + \n# Toggle this to disable symbols in notifications.\ + \n:global NotificationsWithSymbols true;\ + \n:global TerminalColorOutput true;\ + \n\ + \n:global DetectIpAddrDefault \"https://ipv4.mikrotik.ovh/\";\ + \n:global DetectIpAddrFallback \"https://api.ipify.org/\";\ + \n\ + \n## Update channel. Possible values: stable, long-term, testing, developm\ + ent\ + \n:global updateChannel \"stable\";\ + \n\ + \n:global CertRenewUrl (\$GlobalScriptsUrl . \"certs/\" . \$Identity . \"/\ + \");\ + \n:global CertRenewTime 2w;\ + \n:global CertRenewPass (a); #{\ + \n# \"\";\ + \n# \"v3ry-s3cr3t\";\ + \n# \"4n0th3r-s3cr3t\";\ + \n#};\ + \n:global CertWarnTime 1w;\ + \n:global CertIssuedExportPass (a); # {\ + \n# \"\";\ + \n# \"cert1-cn\"=\"v3ry-s3cr3t\";\ + \n# \"cert2-cn\"=\"4n0th3r-s3cr3t\";\ + \n#};\ + \n\ + \n# Script BackupAndUpdate mode, possible values: backup,\ + \n# updateOnce - Update once as \"osnotify\" and back \"osnotify\" mode (i\ + n terminal run :set OSUpdateMode updateOnce; \$OSUpdateMode;). \ + \n# osupdate - Update if available and creates backups before/after update\ + \_(ignores `forceBackup`)\ + \n# Set `forceBackup` to true to always create backups, even\ + \_without updates\ + \n# osnotify - Set `forceBackup` to always create backups on every run\ + \n:global DevInfoIncludeIP true;\ + \n:global BackupAndUpdateMode \"osnotify\"\ + \n\ + \n:global forceBackup true;\ + \n:global BackupPassword \"Peskar55\";\ + \n\ + \n# SFTP Backup Variables\ + \n:global BackupRandomDelay 0;\ + \n:global BackupUploadUrl \"sftp://amster.vados.ru/upload/\";\ + \n:global BackupUploadUser \$Identity;\ + \n:global BackupUploadPass \"root.mnuc.backuper\";\ + \n\ + \n:global BackupSendBinary true;\ + \n:global BackupSendExport true;\ + \n:global BackupSendGlobalConfig true;\ + \n:global BackupSendScripts true;\ + \n\ + \n# Remove local file after uploading if no errors\ + \n:global BackupRmLocal true;\ + \n\ + \n# Local Backups Root Directory \ + \n:global BackupLocalRoot \"tmpfs\";\ + \n\ + \n# Encrypt Backup\ + \n:global BackupEncrypt true;\ + \n\ + \n# Sensitive information in Backups\ + \n:global BackupSens true;\ + \n\ + \n# User Export\ + \n:global BackupUser true;\ + \n\ + \n# License Export (not for CHR, will silently skip)\ + \n:global BackupLicense false;\ + \n\ + \n# SSH Keys\ + \n:global BackupSshKeys true;\ + \n\ + \n# Certificate Export\ + \n:global BackupCerts true;\ + \n\ + \n# Certificate Password\ + \n:global BackupCertsPasswd \"\";\ + \n\ + \n# User-Manager Export\ + \n:global BackupUserMan false;\ + \n\ + \n# The Dude Export\ + \n:global BackupDude false;\ + \n\ + \n# User Files to export, comma-separated string or array of strings\ + \n# User Files are not removed on backup\ + \n# Any directory paths will be removed (/ -> _) on remote file\ + \n# Nonpresent files are silently skipped\ + \n:global BackupUserList \"autosupout.rif,autosupout.old.rif\";\ + \n\ + \n# load functions and any custom scripts\ + \n# [ /system/script/find where name=\"global-config-ov\ + erlay\" ], \\\ + \n# [ /system/script/find where name~\"^global-config-o\ + verlay\\\\.d/.\" ]\ + \n#\ + \n#:foreach Script in=([ /system/script/find where name=\"Amster-TGglobalV\ + ars\" ], [ /system/script/find where name=\"Amster-TGglobalFunc\" ]) do={\ + \n# :onerror Err {\ + \n# /system/script/run \$Script;\ + \n# } do={\ + \n# :log error (\"Loading configuration from configs and functions\"\ + \_. [ /system/script/get \$Script name ] . \" failed: \" . \$Err);\ + \n# }\ + \n#}\ + \n#:log info \"\\ndevMode = \$devMode\";\ + \n#:log info \"\\ndevRunning = \$devRunning\";\ + \n:foreach Script in=[ /system/script/find where source~\"^#!rsc by Vados \ + GlobalRUN\\r\?\\n\" ] do={\ + \n :onerror Err {\ + \n /system/script/run \$Script;\ + \n } do={\ + \n :log error (\"Run script \" . [ /system/script/get \$Script name \ + ] . \" width marker \\\" GlobalRUN\\\" failed: \" . \$Err);\ + \n }\ + \n}\ + \n\ + \n# signal we are ready\ + \n:set GlobalConfReady true;\ + \n:while (\$GlobalConfReady != true) do={:delay 500ms};\ + \n" +add dont-require-permissions=no name=AM-GlobalFunc owner=AM-GlobalFunc \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\ + \n# RouterOS script: AM-GglobalFunc\ + \n# Script comment: Global functions\ + \n# Copyright (c) 2005-2026 Vados \ + \n#\ + \n#\ + \n# requires RouterOS, version=7.19\ + \n# requires device-mode, fetch, scheduler\ + \n:local ExitOK false;\ + \n:local ScriptName [ :jobname ];\ + \n#:global checkRunJob \$SriptName;\ + \n#:global fixCRLF;\ + \n#:if (\$fixCRLF != false) do={\ + \n#:foreach fixScript in=([ /system/script/find where name~\"*\" ]) do={/s\ + ystem/script/set source=[ :tocrlf [ get \$fixScript source ] ] \$fixScript\ + }\ + \n#:if (\$fixCRLF != \"LF\") do={ /system/script/set source=[ :tocrlf [ g\ + et \$fixScript source ] ] \$fixScript};};\ + \n#}\ + \n:global GlobalFuncReady false;\ + \n\ + \n# Git commit id & info, expected configuration version\ + \n:global CommitId \"main/625/14252114\";\ + \n:global CommitTAG \"unknown\";\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 02:45:03 05.05.2026.\";\ + \n\ + \n# The variables are received right here.\ + \n:global GlobalConfVersion 140;\ + \n\ + \n:global SumsDirAndFileName \"tmp/checksums.json\";\ + \n\ + \n:global Identity [/system/identity/get name];\ + \n:global IdentityShort [:pick \$Identity 0 18];\ + \n\ + \n:global devBoardName [/system/resource/get board-name];\ + \n:global devMode [/system/device-mode/get mode];\ + \n:global devCurArch [/system/resource/get architecture-name];\ + \n:global devCurVersion [/system/resource/get version];\ + \n\ + \n# Variables defined in AM-GlobalConfig.rsc\ + \n:global TerminalColorOutput;\ + \n:global CommentsInScripts;\ + \n:global DetectIpAddrDefault;\ + \n:global DetectIpAddrFallback;\ + \n:global updateChannel;\ + \n:global Domain;\ + \n:global EmailGeneralTo;\ + \n:global BackupAndUpdateMode;\ + \n\ + \n# Single functions, without nested functions.\ + \n:global MiniDateTimeStamp;\ + \n:global MicroDateTimeStamp;\ + \n\ + \n# Include globals \$PrintDebug and \$PrintDebugOverride\ + \n:global LogPrint;\ + \n\ + \n# DeviceInfo and Updates\ + \n:global IsCheckUpdates;\ + \n:global WaitCheckUpdates;\ + \n:global GetPubIp;\ + \n\ + \n:global GetArrDeviceInfo;\ + \n:global WaitArrDeviceInfo;\ + \n\ + \n:global devModel;\ + \n:global devRunningMode;\ + \n\ + \n:global devRbRevision;\ + \n:global devRbSerialNumber;\ + \n:global devRbVerAvail;\ + \n\ + \n:global runningChannelVersion;\ + \n:global runningChannel;\ + \n:global runningVersion;\ + \n\ + \n:global devBuildTime;\ + \n:global ROsVerAvail;\ + \n:global PkgUpdStatus;\ + \n:global currentUpdateChannel;\ + \n\ + \n:global ScriptInstallUpdate;\ + \n\ + \n:global DeviceInfo;\ + \n\ + \n:global OldMode;\ + \n\ + \n:global ParseKeyValueStore;\ + \n:global RandomDelay;\ + \n:global GetRandomNumber;\ + \n:global EscapeForRegEx;\ + \n:global CharacterMultiply;\ + \n:global CharacterReplace;\ + \n:global CleanFilePath;\ + \n:global CleanName;\ + \n\ + \n:global CommitBrief;\ + \n\ + \n:global EitherOr;\ + \n:global FormatLine;\ + \n:global GetRandom20CharAlNum;\ + \n:global GetRandom20CharHex;\ + \n:global GetRandomNumber;\ + \n:global Grep;\ + \n:global IfThenElse;\ + \n:global MAX;\ + \n:global MIN;\ + \n:global HumanReadableNum;\ + \n\ + \n:global IsFullyConnected;\ + \n:global IsDNSResolving;\ + \n:global IsTimeSync;\ + \n:global IsTimeSyncCached;\ + \n:global IsTimeSyncResetNtp;\ + \n\ + \n:global WaitDNSResolving;\ + \n:global WaitFullyConnected;\ + \n:global WaitTimeSync;\ + \n:global MkDir;\ + \n:global RmDir;\ + \n:global RmFile;\ + \n:global FileGet;\ + \n:global Unix2Dos;\ + \n:global UrlEncode;\ + \n:global WaitForFile;\ + \n:global ScriptLock;\ + \n:global SendTelegram;\ + \n:global NotificationFunctions;\ + \n:global SendNotification;\ + \n:global SendNotification2;\ + \n:global SymbolForNotification;\ + \n:global SymbolByUnicodeName;\ + \n:global ValidateSyntax;\ + \n:global CheckSumsVerify;\ + \n:global GlobalConfChanges;\ + \n:global GlobalConfMigration;\ + \n:global VersionToNum;\ + \n:global RequiredRouterOS;\ + \n:global ExitError;\ + \n:global ExitOnError;\ + \n\ + \n:global FetchHugeFiles;\ + \n:global FetchUserAgentStr;\ + \n:global FileExists;\ + \n:global CertificateAvailable;\ + \n:global CertificateDownload;\ + \n:global CertificateNameByCN;\ + \n:global CharacterMultiply;\ + \n\ + \n:global InspectVar;\ + \n:global InspectVarRet;\ + \n:global ParseCustom;\ + \n\ + \n:set IsCheckUpdates do={\ + \n :local isInfo [:tobool \$1];\ + \n :global updateChannel;\ + \n :global PkgUpdStatus;\ + \n :global currentUpdateChannel;\ + \n :global ROsVerAvail;\ + \n :global arrDeviceInfo;\ + \n :log info (\$0 . \" \\\$isInfo = \" . \$isInfo); \ + \n :local CurrentChannel [ /system/package/update/get channel ];\ + \n :if ([ :len \$updateChannel ] > 0 && \$CurrentChannel != \$updateChann\ + el) do={\ + \n :retry command={/system/package/update set channel=\$updateChannel} \ + \_delay=300ms max=5 on-error={};\ + \n :log info (\$0 . \" Set updates channel to: \$updateChannel\");\ + \n }\ + \n :local Update [ /system/package/update/get ];\ + \n :local Channel [ :tostr (\$Update->\"channel\") ];\ + \n :set currentUpdateChannel \$Channel;\ + \n :log info (\$0 . \" Update Channel: \" . \$Channel . \".\");\ + \n :local StatusPkg \"undefined\";\ + \n :log info (\$0 . \" Checking for updates...\");\ + \n :retry command={:set \$StatusPkg ([/system/package/update/check-for-up\ + dates without-paging as-value]->\"status\")} \\\ + \n delay=300ms max=5 on-error={};\ + \n :log info (\$0 . \" \\\$StatusPkg = \" . \$StatusPkg);\ + \n :if (\$StatusPkg = \"New version is available\") do={ :set PkgUpdStatu\ + s true; } else={ :set PkgUpdStatus false; }\ + \n :set ROsVerAvail [ :tostr [ /system/package/update/get latest-version \ + ] ];\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\ + \n :if (\$isInfo != false || \$PkgUpdStatus = true) do={\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\ + \n }\ + \n :retry command={:set (\$arrDeviceInfo->\"devUpdates\") [ /system/pac\ + kage/update/get ]} delay=500ms max=5 on-error={:log error (\"Error\")};\ + \n :return true;\ + \n } else={\ + \n :return \$PkgUpdStatus;\ + \n }\ + \n}\ + \n\ + \n:set WaitCheckUpdates do={\ + \n :global IsCheckUpdates;\ + \n :global PkgUpdStatus;\ + \n :global currentUpdateChannel;\ + \n :global ROsVerAvail;\ + \n :global arrDeviceInfo;\ + \n :local Status \"\";\ + \n :local Update;\ + \n :local WaitCount 0;\ + \n :if ([ \$IsCheckUpdates true ] = false) do={\ + \n :return false;\ + \n }\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\ + \n :while ((\$Status = \"\" || \$Status = \"finding out latest version...\ + \") && \$WaitCount < 60) do={\ + \n :delay 1s;\ + \n :set WaitCount (\$WaitCount + 1);\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\ + \n }\ + \n :set Update [ /system/package/update/get ];\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\ + \n :if ((\$Update->\"status\") = \"New version is available\") do={\ + \n :set PkgUpdStatus true;\ + \n } else={\ + \n :set PkgUpdStatus false;\ + \n }\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\ + \n }\ + \n :set (\$arrDeviceInfo->\"devUpdates\") \$Update;\ + \n :if (\$Status = \"\" || \$Status = \"finding out latest version...\") \ + do={\ + \n :return false;\ + \n }\ + \n :return true;\ + \n}\ + \n\ + \n:set WaitArrDeviceInfo do={\ + \n :global GetArrDeviceInfo;\ + \n :while ([ \$GetArrDeviceInfo ] = false) do={\ + \n :delay 1s;\ + \n }\ + \n}\ + \n\ + \n:set GetArrDeviceInfo do={\ + \n :global LogPrint;\ + \n :global arrDeviceInfo;\ + \n :global devBoardName;\ + \n :global devModel;\ + \n :global devRunning;\ + \n :global devCurArch;\ + \n :global devRbRevision;\ + \n :global devRbSerialNumber;\ + \n :global devBuildTime;\ + \n :global runningChannelVersion;\ + \n :global runningChannel;\ + \n :global runningVersion;\ + \n :global currentUpdateChannel;\ + \n :global ROsVerAvail;\ + \n\ + \n :local DeviceInfo;\ + \n :local Resource [/system/resource/get];\ + \n :local Update [ /system/package/update/get ];\ + \n :local VersionString [ :tostr (\$Resource->\"version\") ];\ + \n :local ChannelStart [ :find \$VersionString \" (\" ];\ + \n :local RouterBoard;\ + \n :local IsRouterBoard false;\ + \n :local RunningMode \"\";\ + \n\ + \n :set devCurArch [ :tostr (\$Resource->\"architecture-name\") ];\ + \n :set devBuildTime [ :tostr (\$Resource->\"build-time\") ];\ + \n :set runningChannelVersion \$VersionString;\ + \n :set runningVersion \$VersionString;\ + \n :set runningChannel \"\";\ + \n\ + \n :if ([ :typeof \$ChannelStart ] = \"num\" && \$ChannelStart >= 0) do=\ + {\ + \n :set runningVersion [ :pick \$VersionString 0 \$ChannelStart ];\ + \n :local ChannelRest [ :pick \$VersionString (\$ChannelStart + 2) [ :\ + len \$VersionString ] ];\ + \n :local ChannelEnd [ :find \$ChannelRest \")\" ];\ + \n :if ([ :typeof \$ChannelEnd ] = \"num\" && \$ChannelEnd >= 0) do={\ + \n :set runningChannel [ :pick \$ChannelRest 0 \$ChannelEnd ];\ + \n }\ + \n }\ + \n\ + \n :if ([:pick \$devBoardName 0 3] != \"CHR\" or [:pick \$devBoardName 0\ + \_3] != \"x86\") do={\ + \n :do {\ + \n :set RouterBoard [[ :parse \"/system/routerboard/get\" ]];\ + \n# :set RouterBoard [ /system/routerboard/get ];\ + \n :if ((\$RouterBoard->\"routerboard\") = true) do={\ + \n :set IsRouterBoard true;\ + \n }\ + \n } on-error={}\ + \n }\ + \n\ + \n :do {\ + \n :set RunningMode [ /system/device-mode/get mode ];\ + \n } on-error={\ + \n :do {\ + \n :set RunningMode [ /system/device-mode/get running ];\ + \n } on-error={\ + \n :set RunningMode \"\";\ + \n }\ + \n }\ + \n :set devRunning \$RunningMode;\ + \n\ + \n :if (\$IsRouterBoard = true) do={\ + \n :set devModel [ :tostr (\$RouterBoard->\"model\") ];\ + \n :set devRbRevision [ :tostr (\$RouterBoard->\"revision\") ];\ + \n :set devRbSerialNumber [ :tostr (\$RouterBoard->\"serial-number\") \ + ];\ + \n } else={\ + \n :set devModel \$devBoardName;\ + \n :set devRbRevision \"\";\ + \n :set devRbSerialNumber \"\";\ + \n }\ + \n\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\ + \n\ + \n :set (\$DeviceInfo->\"board-name\") \$devBoardName;\ + \n :set (\$DeviceInfo->\"architecture-name\") \$devCurArch;\ + \n :set (\$DeviceInfo->\"model\") \$devModel;\ + \n :set (\$DeviceInfo->\"revision\") \$devRbRevision;\ + \n :set (\$DeviceInfo->\"serial-number\") \$devRbSerialNumber;\ + \n :set (\$DeviceInfo->\"running-mode\") \$devRunning;\ + \n :set (\$DeviceInfo->\"build-time\") \$devBuildTime;\ + \n :set (\$DeviceInfo->\"running-channel-version\") \$runningChannelVers\ + ion;\ + \n :set (\$DeviceInfo->\"running-version\") \$runningVersion;\ + \n :set (\$DeviceInfo->\"running-channel\") \$runningChannel;\ + \n :set (\$DeviceInfo->\"routerboard\") \$IsRouterBoard;\ + \n :set (\$DeviceInfo->\"current-firmware\") [ :tostr (\$RouterBoard->\"\ + current-firmware\") ];\ + \n :set (\$DeviceInfo->\"upgrade-firmware\") [ :tostr (\$RouterBoard->\"\ + upgrade-firmware\") ];\ + \n :set (\$DeviceInfo->\"package-channel\") \$currentUpdateChannel;\ + \n :set (\$DeviceInfo->\"installed-version\") [ :tostr (\$Update->\"inst\ + alled-version\") ];\ + \n :set (\$DeviceInfo->\"latest-version\") \$ROsVerAvail;\ + \n :set (\$DeviceInfo->\"update-status\") [ :tostr (\$Update->\"status\"\ + ) ];\ + \n\ + \n :set arrDeviceInfo \$DeviceInfo;\ + \n :return \$DeviceInfo;\ + \n}\ + \n\ + \n:set DeviceInfo do={\ + \n :global GetArrDeviceInfo;\ + \n :global GlobalConfVersion;\ + \n :global Identity;\ + \n :global IfThenElse;\ + \n :global FormatLine;\ + \n :global CommitBrief;\ + \n\ + \n :local License [/system/license/get];\ + \n :local Snmp [ /snmp/get ];\ + \n :local Info [ \$GetArrDeviceInfo ];\ + \n\ + \n :if ([ :typeof \$Info ] != \"array\") do={\ + \n :return false;\ + \n }\ + \n\ + \n :return ( \\\ + \n [ \$FormatLine \"Hostname\" \$Identity ] . \"\\n\" . \\\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"location\") ] > 0) \\\ + \n ([ \$FormatLine \"Location\" (\$Snmp->\"location\") ] . \"\\n\") ]\ + \_. \\\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"contact\") ] > 0) \\\ + \n ([ \$FormatLine \"Contact\" (\$Snmp->\"contact\") ] . \"\\n\") ] .\ + \_\\\ + \n \"Hardware:\\n\" . \\\ + \n [ \$FormatLine \" Board\" (\$Info->\"board-name\") ] . \"\\n\" . \ + \\\ + \n [ \$FormatLine \" Arch\" (\$Info->\"architecture-name\") ] . \"\\\ + n\" . \\\ + \n [ \$FormatLine \" Model\" (\$Info->\"model\") ] . \\\ + \n [ \$IfThenElse ([ :len (\$Info->\"revision\") ] > 0) \\\ + \n (\" \" . (\$Info->\"revision\")) ] . \"\\n\" . \\\ + \n [ \$IfThenElse ([ :len (\$Info->\"serial-number\") ] > 0) \\\ + \n ([ \$FormatLine \" Serial\" (\$Info->\"serial-number\") ] . \"\ + \\n\") ] . \\\ + \n [ \$IfThenElse ([ :len (\$License->\"nlevel\") ] > 0) \\\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"nlevel\ + \")) ] . \"\\n\") ] . \\\ + \n \"RouterOS:\\n\" . \\\ + \n [ \$IfThenElse ([ :len (\$License->\"level\") ] > 0) \\\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"level\ + \")) ] . \"\\n\") ] . \\\ + \n [ \$FormatLine \" Channel\" (\$Info->\"package-channel\") ] . \"\ + \\n\" . \\\ + \n [ \$FormatLine \" Installed\" (\$Info->\"installed-version\") ] .\ + \_\"\\n\" . \\\ + \n [ \$IfThenElse ([ :len (\$Info->\"running-channel\") ] > 0) \\\ + \n ([ \$FormatLine \" Running\" ((\$Info->\"running-version\") . \ + \" (\" . (\$Info->\"running-channel\") . \")\") ] . \"\\n\") \\\ + \n ([ \$FormatLine \" Running\" (\$Info->\"running-version\") ] . \ + \"\\n\") ] . \\\ + \n [ \$IfThenElse ([ :len (\$Info->\"latest-version\") ] > 0 && \\\ + \n (\$Info->\"installed-version\") != (\$Info->\"latest-version\"))\ + \_\\\ + \n ([ \$FormatLine \" Available\" (\$Info->\"latest-version\") ] .\ + \_\"\\n\") ] . \\\ + \n [ \$IfThenElse ((\$Info->\"routerboard\") = true && \\\ + \n (\$Info->\"current-firmware\") != (\$Info->\"upgrade-firmware\")\ + ) \\\ + \n ([ \$FormatLine \" Firmware\" ((\$Info->\"current-firmware\") .\ + \_\" -> \" . (\$Info->\"upgrade-firmware\")) ] . \"\\n\") ] . \\\ + \n \"RouterOS-Scripts:\\n\" . \\\ + \n [ \$FormatLine \" Commit\" [ \$CommitBrief ] ] . \"\\n\" . \\\ + \n [ \$FormatLine \" Version\" \$GlobalConfVersion ]);\ + \n}\ + \n\ + \n:if ([ :typeof \$NotificationFunctions ] != \"array\") do={:set Notifica\ + tionFunctions ({})}\ + \n\ + \n:set GetRandom20CharAlNum do={\ + \n :global EitherOr;\ + \n :return [ :rndstr length=[ \$EitherOr [ :tonum \$1 ] 20 ] from=\"ABCDE\ + FGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\" ];\ + \n}\ + \n\ + \n:set GetRandom20CharHex do={:global EitherOr; :return [ :rndstr length=[\ + \_\$EitherOr [ :tonum \$1 ] 20 ] from=\"0123456789abcdef\" ]; }\ + \n:set GetRandomNumber do={:global EitherOr; :return [ :rndnum from=0 to=[\ + \_\$EitherOr [ :tonum \$1 ] 4294967295 ] ]; }\ + \n\ + \n:global checkRunJob;\ + \n:set checkRunJob do={\ + \n :local Script [ :tostr \$1 ];\ + \n :global ScriptLock; \ + \n :if ([ \$ScriptLock \$Script ] = false) do={:return false}\ + \n :foreach Job in=[ /system/script/job/find where script=\$Script ] do={\ + :set Job [ /system/script/job/get \$Job ];\ + \n :while ([ :typeof (\$Job->\"parent\") ] = \"id\") do={:set Job [ /sy\ + stem/script/job/get [ find where .id=(\$Job->\"parent\") ] ]}\ + \n :if ((\$Job->\"type\") = \"login\") do={:return true};}; :return fa\ + lse; \ + \n}\ + \n\ + \n:set InspectVar do={\ + \n :global InspectVarRet;\ + \n :put [ :tocrlf [ \$InspectVarRet \$1 ] ];\ + \n}\ + \n\ + \n:set CommitBrief do={\ + \n :global CommitId;\ + \n :global CommitInfo;\ + \n :if (\$CommitId = \"unknown\") do={\ + \n :return \"unknown\";\ + \n }\ + \n :return (\$CommitInfo . \"/\" . [ :pick \$CommitId 0 8 ]);\ + \n}\ + \n\ + \n:set InspectVarRet do={\ + \n :local Input \$1;\ + \n :local Level (0 + [ :tonum \$2 ]);\ + \n :global CharacterReplace;\ + \n :global IfThenElse;\ + \n :global InspectVarRet;\ + \n :local IndentReturn do={\ + \n :local Prefix [ :tostr \$1 ];\ + \n :local Value [ :tostr \$2 ];\ + \n :local Level [ :tonum \$3 ];\ + \n :global CharacterMultiply;\ + \n :return ([ \$CharacterMultiply \" \" (\$Level * 2) ] . \"-\" . \$Pre\ + fix . \"-> \" . \$Value);\ + \n }\ + \n :local TypeOf [ :typeof \$Input ];\ + \n :local Len [ :len \$Input ];\ + \n :local Return [ \$IndentReturn \"type\" \$TypeOf \$Level ];\ + \n :if (\$TypeOf = \"array\") do={\ + \n :foreach Key,Value in=\$Input do={\ + \n :set \$Return (\$Return . \"\\n\" . \\\ + \n [ \$IndentReturn \"key\" \$Key (\$Level + 1) ] . \"\\n\" . \\\ + \n [ \$InspectVarRet \$Value (\$Level + 2) ]);\ + \n }\ + \n } else={\ + \n :if (\$TypeOf = \"str\") do={\ + \n :set \$Return (\$Return . \"\\n\" . \\\ + \n [ \$IndentReturn \"len\" \$Len \$Level ]);\ + \n :if ([ :typeof [ :find \$Input (\"\\r\") ] ] = \"num\") do={\ + \n :set Input [ \$CharacterReplace \$Input (\"\\r\") \"\" ];\ + \n }\ + \n :if ([ :typeof [ :find \$Input (\"\\n\") ] ] = \"num\") do={\ + \n :set Input [ \$CharacterReplace \$Input (\"\\n\") \" \" ];\ + \n }\ + \n }\ + \n :if (\$TypeOf != \"nothing\") do={\ + \n :set \$Return (\$Return . \"\\n\" . \\\ + \n [ \$IndentReturn \"value\" [ \$IfThenElse ([ :len \$Input ] > 80)\ + \_\\\ + \n ([ :pick \$Input 0 77 ] . \"...\") \$Input ] \$Level ]);\ + \n }\ + \n }\ + \n :return \$Return;\ + \n}\ + \n\ + \n:set GetPubIp do={\ + \n :global DetectIpAddrDefault;\ + \n :global DetectIpAddrFallback;\ + \n\ + \n :local PubIpAddr false;\ + \n :local Url \$DetectIpAddrDefault;\ + \n :local JobName [ :jobname ];\ + \n\ + \n :do {\ + \n :log debug (\$0 . \" Trying to detect public IP using default serv\ + ice: \" . \$Url . \"...\");\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\ + \n delay=50ms max=5 on-error={:log error (\$JobName . \" Failed to \ + detect public IP using default service: \" . \$Url . \".\")}\ + \n } on-error={\ + \n :log error (\$0 . \" Failed to detect public IP using default serv\ + ice: \" . \$Url . \".\");\ + \n :set Url \$DetectIpAddrFallBack;\ + \n :log debug (\$0 . \" Trying to detect public IP using fallback ser\ + vice: \" . \$Url . \"...\");\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\ + \n delay=200ms max=5 on-error={:log error (\$JobName . \" Failed to\ + \_detect public IP using fallback service: \" . \$Url . \".\")}\ + \n };\ + \n :local IpLen ([ :len \$PubIpAddr ] -1);\ + \n :if (\$PubIpAddr = false) do={:set PubIpAddr \"not-detected\"} else=\ + {:set PubIpAddr [:pick \$PubIpAddr 0 \$IpLen]}\ + \n :return \$PubIpAddr;\ + \n}\ + \n\ + \n:set FormatLine do={\ + \n :local Key [ :tostr \$1 ];\ + \n :local Value [ :tostr \$2 ];\ + \n :local Indent [ :tonum \$3 ];\ + \n :local Spaces;\ + \n :local Return \"\";\ + \n :global CharacterMultiply;\ + \n :global EitherOr;\ + \n :set Indent [ \$EitherOr \$Indent 16 ];\ + \n :local Spaces [ \$CharacterMultiply \" \" \$Indent ];\ + \n :if ([ :len \$Key ] > 0) do={ :set Return (\$Key . \":\")}\ + \n :if ([ :len \$Key ] > (\$Indent - 2)) do={:set Return (\$Return . \"\\\ + n\" . [ :pick \$Spaces 0 \$Indent ] . \$Value);\ + \n } else={:set Return (\$Return . [ :pick \$Spaces 0 (\$Indent - [ :len \ + \$Return ]) ] . \$Value)}\ + \n :return \$Return;\ + \n}\ + \n\ + \n:set ParseCustom do={\ + \n :local Str [ :tostr \$1 ];\ + \n :local Start [:find [ \$Str ] [:tostr \$2]];\ + \n :local End [ :tostr \$3 ];\ + \n :local Num [ :tonum \$4 ];\ + \n :local Return;\ + \n :if ([:len \$Num] = 0) do={:set Num \"0\"}\ + \n :local rest [:pick \$Str (\$Start+\$Num) [:len \$Str]]; \ + \n :if ([:len \$End ] = 0) do={:set Return [:pick \$Str \$Num \$Start]} e\ + lse={\ + \n :set End [:find \$rest \$End];\ + \n :set Return [:pick \$rest 0 \$End];\ + \n }\ + \n:return \$Return;\ + \n}\ + \n\ + \n:set LogPrint do={\ + \n :local Severity [ :tostr \$1 ];\ + \n :local Name [ :tostr \$2 ];\ + \n :local Message [ :tostr \$3 ];\ + \n :global PrintDebug;\ + \n :global PrintDebugOverride;\ + \n :global EitherOr;\ + \n :local Debug [ \$EitherOr (\$PrintDebugOverride->\$Name) \$PrintDebug \ + ];\ + \n :local PrintSeverity do={\ + \n :global TerminalColorOutput;\ + \n :if (\$TerminalColorOutput != true) do={:return \$1}\ + \n :local Color { debug=96; info=97; warning=93; error=91 };\ + \n :return (\"\\1B[\" . \$Color->\$1 . \"m\" . \$1 . \"\\1B[0m\");\ + \n}\ + \n :local Log ([ \$EitherOr \$Name \"\" ] . \": \" . \$Message);\ + \n :if (\$Severity ~ (\"^(custom|debug|error|info)\\\$\")) do={\ + \n :if (\$Severity = \"debug\") do={:log debug \$Log}\ + \n :if (\$Severity = \"error\") do={:log error \$Log}\ + \n :if (\$Severity = \"info\" ) do={:log info \$Log}\ + \n } else={:log warning \$Log; :set Severity \"warning\"}\ + \n :if (\$Severity != \"debug\" || \$Debug = true) do={:put ([ \$PrintSev\ + erity \$Severity ] . \": \" . \$Message)}\ + \n}\ + \n\ + \n:set CertificateAvailable do={\ + \n :local CommonName [ :tostr \$1 ];\ + \n :local UseFor [ :tostr \$2 ];\ + \n\ + \n :global CertificateDownload;\ + \n :global ParseKeyValueStore;\ + \n\ + \n :if ([ :len \$UseFor ] = 0) do={\ + \n :log warning (\$0 . \"The intended use is undefined!\");\ + \n :set UseFor \"undefined\";\ + \n }\ + \n :if ([ /system/resource/get free-hdd-space ] < 8388608 && \\\ + \n [ /certificate/settings/get crl-download ] = true && \\\ + \n [ /certificate/settings/get crl-store ] = \"system\") do={\ + \n :log warning (\$0 . \"This system has low free flash space but \" . \ + \\\ + \n \"is configured to download certificate CRLs to system!\");\ + \n }\ + \n :if ([ :len \$CommonName ] = 0) do={\ + \n :log warning (\$0 . \"No CommonName given!\");\ + \n :return false;\ + \n }\ + \n :local CertSettings [ /certificate/settings/get ];\ + \n :if (((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" || \\\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \$UseFor || \\\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\ + \n [ :len [ /certificate/builtin/find where common-name=\$CommonName\ + \_] ] > 0) do={\ + \n :return true;\ + \n }\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\ + \n :log info (\$0 . \"Certificate with CommonName '\" . \$CommonName . \ + \"' not available.\");\ + \n :if ([ \$CertificateDownload \$CommonName ] = false) do={\ + \n :return false;\ + \n }\ + \n }\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] > 1\ + ) do={\ + \n :log info (\$0 . \"There are \" . \$CertCount . \" Certificates with\ + \_CommonName '\" . \$CommonName . \"'. Should be ok.\");\ + \n :return true;\ + \n }\ + \n :local CertVal [ /certificate/get [ find where common-name=\$CommonNam\ + e ] ];\ + \n :while ((\$CertVal->\"akid\") != \"\" && (\$CertVal->\"akid\") != (\$C\ + ertVal->\"skid\")) do={\ + \n :if ([ :len [ /certificate/find where skid=(\$CertVal->\"akid\") ] ]\ + \_= 0) do={\ + \n :local IssuerCN ([ \$ParseKeyValueStore (\$CertVal->\"issuer\") ]-\ + >\"CN\");\ + \n :log info (\$0 . \"Certificate chain for '\" . \$CommonName . \"' \ + is incomplete, missing '\" . \$IssuerCN . \"'.\");\ + \n :if ([ \$CertificateDownload \$IssuerCN ] = false) do={\ + \n :return false;\ + \n }\ + \n }\ + \n :set CertVal [ /certificate/get [ find where skid=(\$CertVal->\"akid\ + \") ] ];\ + \n }\ + \n :return true;\ + \n}\ + \n\ + \n:set CertificateDownload do={\ + \n :local CommonName [ :tostr \$1 ];\ + \n :global ScriptUpdatesBaseUrl;\ + \n :global ScriptUpdatesUrlSuffix;\ + \n :global CertificateNameByCN;\ + \n :global CleanName;\ + \n :global FetchUserAgentStr;\ + \n :global RmFile;\ + \n :global WaitForFile;\ + \n\ + \n :log info (\$0 . \"Downloading and importing certificate with \" . \\\ + \n \"CommonName '\" . \$CommonName . \"'.\");\ + \n :local FileName ([ \$CleanName \$CommonName ] . \".pem\");\ + \n :do {\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-header\ + -field=({ [ \$FetchUserAgentStr \$0 ] }) \\\ + \n (\$ScriptUpdatesBaseUrl . \"certs/\" . \$FileName . \$ScriptUpdate\ + sUrlSuffix) \\\ + \n dst-path=\$FileName as-value;\ + \n \$WaitForFile \$FileName;\ + \n } on-error={\ + \n :log warning (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \\\ + \n \"' from repository! Trying fallback to mkcert.org...\");\ + \n :do {\ + \n :local CertSettings [ /certificate/settings/get ];\ + \n :if ([ :len [ /certificate/find where common-name=\"ISRG Root X1\"\ + \_] ] = 0 && \\\ + \n !(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" \ + || \\\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \ + \\\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\ + \n [ :len [ /certificate/builtin/find where common-name=\"ISRG\ + \_Root X1\" ] ] > 0)) do={\ + \n :log error (\$0 . \" Required certificate is not available.\");\ + \n :return false;\ + \n }\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-head\ + er-field=({ [ \$FetchUserAgentStr \$0 ] }) \\\ + \n url=\"https://mkcert.org/generate/\" http-data=[ :serialize to=jso\ + n ({ \$CommonName }) ] \\\ + \n dst-path=\$FileName as-value;\ + \n \$WaitForFile \$FileName;\ + \n :if ([ /file/get \$FileName size ] = 0) do={\ + \n \$RmFile \$FileName;\ + \n :error false;\ + \n }\ + \n } on-error={\ + \n :log error (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \"'!\");\ + \n :return false;\ + \n }\ + \n }\ + \n /certificate/import file-name=\$FileName passphrase=\"\" as-value;\ + \n :delay 1s;\ + \n \$RmFile \$FileName;\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\ + \n /certificate/remove [ find where name~(\"^\" . \$FileName . \"_[0-9]\ + +\\\$\") ];\ + \n :log warning (\$0 . \" Certificate with CommonName '\" . \$CommonNam\ + e . \"' still unavailable!\");\ + \n :return false;\ + \n }\ + \n :foreach Cert in=[ /certificate/find where name~(\"^\" . \$FileName . \ + \"_[0-9]+\\\$\") ] do={\ + \n \$CertificateNameByCN [ /certificate/get \$Cert common-name ];\ + \n }\ + \n :return true;\ + \n}\ + \n\ + \n:set CertificateNameByCN do={\ + \n :local Match [ :tostr \$1 ];\ + \n :global CleanName;\ + \n :local Cert ([ /certificate/find where (common-name=\$Match or fingerp\ + rint=\$Match or name=\$Match) ]->0);\ + \n :if ([ :len \$Cert ] = 0) do={\ + \n :log warning (\$0 .\" No matching certificate found.\");\ + \n :return false;\ + \n }\ + \n :local CommonName [ /certificate/get \$Cert common-name ];\ + \n /certificate/set \$Cert name=[ \$CleanName \$CommonName ];\ + \n :return true;\ + \n}\ + \n\ + \n:set CharacterMultiply do={\ + \n :local Str [ :tostr \$1 ];\ + \n :local Num [ :tonum \$2 ];\ + \n :if (\$Num = 0) do={:return \"\"}\ + \n :local Return \"\";\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\ + \n :return \$Return;\ + \n}\ + \n\ + \n:set FileExists do={\ + \n :local FileName [ :tostr \$1 ];\ + \n :local Type [ :tostr \$2 ];\ + \n :global FileGet;\ + \n :local FileVal [ \$FileGet \$FileName ];\ + \n :if (\$FileVal = false) do={ :return false; }\ + \n :if ([ :len (\$FileVal->\"size\") ] = 0) do={ :return false; }\ + \n :if ([ :len \$Type ] = 0 || \$FileVal->\"type\" = \$Type) do={ :return\ + \_true; }\ + \n :return false;\ + \n}\ + \n\ + \n:set Grep do={\ + \n :local Input ([ :tostr \$1 ] . \"\\n\");\ + \n :local Pattern [ :tostr \$2 ];\ + \n :if ([ :typeof [ :find \$Input \$Pattern ] ] = \"nil\") do={:return []\ + }\ + \n :do {\ + \n :local Line [ :pick \$Input 0 [ :find \$Input \"\\n\" ] ];\ + \n :if ([ :typeof [ :find \$Line \$Pattern ] ] = \"num\") do={:return \ + \$Line}\ + \n :set Input [ :pick \$Input ([ :find \$Input \"\\n\" ] + 1) [ :len \$\ + Input ] ];\ + \n } while=([ :len \$Input ] > 0);\ + \n :return [];\ + \n}\ + \n\ + \n:set HumanReadableNum do={\ + \n :local Input [ :tonum \$1 ];\ + \n :local Base [ :tonum \$2 ];\ + \n :global EitherOr;\ + \n :global IfThenElse;\ + \n :local Prefix \"kMGTPE\";\ + \n :local Pow 1;\ + \n :set Base [ \$EitherOr \$Base 1024 ];\ + \n :local Bin [ \$IfThenElse (\$Base = 1024) \"i\" \"\" ];\ + \n :if (\$Input < \$Base) do={:return \$Input}\ + \n :for I from=0 to=[ :len \$Prefix ] do={\ + \n :set Pow (\$Pow * \$Base);\ + \n :if (\$Input / \$Base < \$Pow) do={\ + \n :set Prefix [ :pick \$Prefix \$I ];\ + \n :local Tmp1 (\$Input * 100 / \$Pow);\ + \n :local Tmp2 (\$Tmp1 / 100);\ + \n :if (\$Tmp2 >= 100) do={:return (\$Tmp2 . \$Prefix . \$Bin)}\ + \n :return (\$Tmp2 . \".\" . \\\ + \n [ :pick \$Tmp1 [ :len \$Tmp2 ] ([ :len \$Tmp1 ] - [ :len \$Tmp\ + 2 ] + 1) ] . \\\ + \n \$Prefix . \$Bin);\ + \n }\ + \n }\ + \n}\ + \n\ + \n:set CleanFilePath do={\ + \n :local Path [ :tostr \$1 ];\ + \n :global CharacterReplace;\ + \n :while (\$Path ~ \"//\") do={ :set \$Path [ \$CharacterReplace \$Path \ + \"//\" \"/\" ]; }\ + \n :if ([ :pick \$Path 0 ] = \"/\") do={ :set Path [ :pick \$Path 1 [ :le\ + n \$Path ] ]; }\ + \n :if ([ :pick \$Path ([ :len \$Path ] - 1) ] = \"/\") do={ :set Path [ \ + :pick \$Path 0 ([ :len \$Path ] - 1) ]; }\ + \n :return \$Path;\ + \n}\ + \n\ + \n:set CleanName do={\ + \n :local Input [ :tostr \$1 ];\ + \n :local Return \"\";\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\ + \n :local Char [ :pick \$Input \$I ];\ + \n :if ([ :typeof [ find \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr\ + stuvwxyz0123456789\" \$Char ] ] = \"nil\") do={\ + \n :do {:if ([ :len \$Return ] = 0) do={:error true};\ + \n :if ([ :pick \$Return ([ :len \$Return ] - 1) ] = \"-\") do={:er\ + ror true}; :set Char \"-\"} on-error={:set Char \"\"}; \ + \n };\ + \n :set Return (\$Return . \$Char)};\ + \n :return \$Return;\ + \n}\ + \n\ + \n:set RandomDelay do={\ + \n :local Time [ :tonum \$1 ];\ + \n :local Unit [ :tostr \$2 ];\ + \n :global EitherOr;\ + \n :global GetRandomNumber;\ + \n :global MAX;\ + \n :if (\$Time = 0) do={:return false}\ + \n :delay ([ \$MAX 10 [ \$GetRandomNumber ([ :tonsec [ :totime (\$Time . \ + [ \$EitherOr \$Unit \"s\" ]) ] ] / 1000000) ] ] . \"ms\");\ + \n}\ + \n\ + \n:set EscapeForRegEx do={\ + \n :local Input [ :tostr \$1 ];\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\ + \n :local Return \"\";\ + \n :local Chars (\"^.[]\\\$()|*+\?{}\\\\\");\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\ + \n :local Char [ :pick \$Input \$I ];\ + \n :if ([ :find \$Chars \$Char ]) do={:set Char (\"\\\\\" . \$Char)}\ + \n :set Return (\$Return . \$Char);\ + \n }\ + \n :return \$Return;\ + \n}\ + \n\ + \n:set ExitError do={\ + \n :local ExitOK [ :tostr \$1 ];\ + \n :local Name [ :tostr \$2 ];\ + \n :local Error [ :tostr \$3 ];\ + \n :global IfThenElse;\ + \n :if (\$ExitOK = \"false\") do={\ + \n :log error (\$Name [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\\\$\") \ + \\\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with er\ + ror\" . \\\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \ + \$Error) \".\" ]);\ + \n }\ + \n}\ + \n\ + \n:set ExitOnError do={\ + \n :local Name [ :tostr \$1 ];\ + \n :local Error [ :tostr \$2 ];\ + \n :global IfThenElse;\ + \n :log error (\$Name . \" \" . [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\ + \\\$\") \\\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with erro\ + r\" . \\\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \$E\ + rror) \".\" ]);\ + \n}\ + \n\ + \n:set MiniDateTimeStamp do={\ + \n :local mikro [ :tobool \$1 ];\ + \n /system/clock;\ + \n :local vdate [get date];\ + \n :local vtime [get time];\ + \n :local vdoff [:toarray \"0,4,5,7,8,10\"];\ + \n :local MM [:pick \$vdate (\$vdoff->2) (\$vdoff->3)];\ + \n :local M [:tonum \$MM];\ + \n :if (\$vdate ~ \".../../....\") do={\ + \n :set vdoff [:toarray \"7,11,1,3,4,6\"];\ + \n :set M ([:find \"xxanebarprayunulugepctovecANEBARPRAYUNULUGE\ + PCTOVEC\" [:pick \$vdate (\$vdoff->2) (\$vdoff->3)] -1] / 2);\ + \n :if (\$M>12) do={:set M (\$M - 12)}\ + \n :set MM [:pick (100 + \$M) 1 3];\ + \n }\ + \n :local yyyy [:pick \$vdate (\$vdoff->0) (\$vdoff->1)];\ + \n :local dd [:pick \$vdate (\$vdoff->4) (\$vdoff->5)];\ + \n :local HH [:pick \$vtime 0 2];\ + \n :local mm [:pick \$vtime 3 5];\ + \n :local ss [:pick \$vtime 6 8];\ + \n :local Return;\ + \n :if (\$mikro = true) do={\ + \n :set Return ([:pick \$yyyy 2 4] . [:pick \$dd 0 1] . [:pick \$HH 0\ + \_1] . [:pick \$mm 3 4] . [:pick \$ss 6 7]);\ + \n } else={\ + \n :set Return ([\$yyyy] . [\$MM] . [\$dd] . [\$HH] . [\$mm] . [\$ss]);\ + \n }\ + \n :return \$Return;\ + \n}\ + \n\ + \n:set WaitForFile do={\ + \n :local FileName [ :tostr \$1 ];\ + \n :local WaitTime [ :totime \$2 ];\ + \n :global CleanFilePath;\ + \n :global EitherOr;\ + \n :global MAX;\ + \n :set FileName [ \$CleanFilePath \$FileName ];\ + \n :local Delay ([ \$MAX [ \$EitherOr \$WaitTime 2s ] 100ms ] / 9);\ + \n :do {\ + \n :retry {\ + \n /file/get \$FileName;\ + \n :return true;\ + \n } delay=\$Delay max=10;\ + \n } on-error={ }\ + \n :while ([ :len [ /file/find where name=\$FileName ] ] > 0) do={\ + \n :do {\ + \n /file/get \$FileName;\ + \n :return true;\ + \n } on-error={ }\ + \n :delay \$Delay;\ + \n :set Delay (\$Delay * 3 / 2);\ + \n }\ + \n :return false;\ + \n}\ + \n\ + \n:set FileGet do={\ + \n :local FileName [ :tostr \$1 ];\ + \n :global WaitForFile;\ + \n :if ([ \$WaitForFile \$FileName 0s ] = false) do={\ + \n :return false;\ + \n }\ + \n :local FileVal false;\ + \n :do {\ + \n :set FileVal [ /file/get \$FileName ];\ + \n } on-error={ }\ + \n :return \$FileVal;\ + \n}\ + \n\ + \n:set RmDir do={\ + \n :local DirName [ :tostr \$1 ];\ + \n :global FileGet;\ + \n :log debug (\$0 . \" Removing directory: \". \$DirName);\ + \n :local DirVal [ \$FileGet \$DirName ];\ + \n :if (\$DirVal = false) do={\ + \n :log debug (\$0 . \" ... which does not exist.\");\ + \n :return true;\ + \n };\ + \n :if (\$DirVal->\"type\" != \"directory\") do={\ + \n :log error (\$0 . \" Directory '\" . \$DirName . \"' is not a direct\ + ory.\");\ + \n :return false;\ + \n };\ + \n :onerror Err {\ + \n /file/remove \$DirName;\ + \n } do={\ + \n :log error (\$0 . \" Removing directory '\" . \$DirName . \"' failed\ + : \" . \$Err);\ + \n :return false;\ + \n };\ + \n :return true;\ + \n}\ + \n\ + \n:set RmFile do={\ + \n :local FileName [ :tostr \$1 ];\ + \n :global FileGet;\ + \n :log debug (\$0 . \" Removing file: \". \$FileName);\ + \n :local FileVal [ \$FileGet \$FileName ];\ + \n :if (\$FileVal = false) do={\ + \n :log debug (\$0 . \" ... which does not exist.\");\ + \n :return true;\ + \n }\ + \n :if (\$FileVal->\"type\" = \"directory\" || \$FileVal->\"type\" = \"di\ + sk\") do={\ + \n :log error (\$0 . \" File '\" . \$FileName . \"' is not a file.\");\ + \n :return false;\ + \n }\ + \n :onerror Err {\ + \n /file/remove \$FileName;\ + \n } do={\ + \n :log error (\$0 . \" Removing file '\" . \$FileName . \"' failed: \"\ + \_. \$Err); :return false;\ + \n }\ + \n :return true;\ + \n}\ + \n\ + \n:set MkDir do={\ + \n :local Path [ :tostr \$1 ];\ + \n :global CleanFilePath;\ + \n :global FileGet;\ + \n :global RmDir;\ + \n :global WaitForFile;\ + \n\ + \n :local MkTmpfs do={\ + \n :global WaitForFile;\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\ + \n :if ([ :len \$TmpFs ] = 1) do={\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\ + \n :log info (\$0 . \" The tmpfs is disabled, enabling.\");\ + \n /disk/enable \$TmpFs;\ + \n }\ + \n :return true;\ + \n }\ + \n :log info (\$0 . \" Creating disk of type tmpfs.\");\ + \n \$RmDir \"tmpfs\";\ + \n :onerror Err {\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource\ + /get total-memory ] / 3);\ + \n \$WaitForFile \"tmpfs\";\ + \n } do={\ + \n :log warning (\$0 . \" Creating disk of type tmpfs failed: \" . \$\ + Err);\ + \n :return false;\ + \n }\ + \n :return true;\ + \n }\ + \n :set Path [ \$CleanFilePath \$Path ];\ + \n :if (\$Path = \"\") do={\ + \n :return true;\ + \n }\ + \n :log debug (\$0 . \" Making directory: \" . \$Path);\ + \n :local PathVal [ \$FileGet \$Path ];\ + \n :if (\$PathVal->\"type\" = \"directory\") do={\ + \n :log debug (\$0 . \" ... which already exists.\");\ + \n :return true;\ + \n }\ + \n :if ([ :pick \$Path 0 5 ] = \"tmpfs\") do={\ + \n :if ([ \$MkTmpfs ] = false) do={\ + \n :return false;\ + \n }\ + \n }\ + \n :onerror Err {\ + \n /file/add type=\"directory\" name=\$Path;\ + \n \$WaitForFile \$Path;\ + \n } do={\ + \n :log warning (\$0 . \" Making directory '\" . \$Path . \"' failed: \ + \" . \$Err);\ + \n :return false;\ + \n }\ + \n :return true;\ + \n}\ + \n\ + \n:set MAX do={:if (\$1 > \$2) do={:return \$1}\ + \n :return \$2;\ + \n}\ + \n:set MIN do={:if (\$1 < \$2) do={:return \$1}\ + \n :return \$2;\ + \n}\ + \n\ + \n:set CharacterMultiply do={\ + \n :local Str [ :tostr \$1 ];\ + \n :local Num [ :tonum \$2 ];\ + \n :if (\$Num = 0) do={:return \"\"}\ + \n :local Return \"\";\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\ + \n :return \$Return;\ + \n}\ + \n\ + \n:set CharacterReplace do={\ + \n :local String [ :tostr \$1 ];\ + \n :local ReplaceFrom [ :tostr \$2 ];\ + \n :local ReplaceWith [ :tostr \$3 ];\ + \n :local Return \"\";\ + \n :if (\$ReplaceFrom = \"\") do={:return \$String}\ + \n :while ([ :typeof [ :find \$String \$ReplaceFrom ] ] != \"nil\") do={\ + \n :local Pos [ :find \$String \$ReplaceFrom ];\ + \n :set Return (\$Return . [ :pick \$String 0 \$Pos ] . \$ReplaceWith);\ + \n :set String [ :pick \$String (\$Pos + [ :len \$ReplaceFrom ]) [ :len\ + \_\$String ] ];\ + \n }\ + \n :return (\$Return . \$String);\ + \n}\ + \n\ + \n:set IfThenElse do={\ + \n :if ([ :tostr \$1 ] = \"true\" || [ :tobool \$1 ] = true) do={:return \ + \$2};\ + \n :return \$3;\ + \n}\ + \n\ + \n:set EitherOr do={\ + \n :global IfThenElse;\ + \n :if ([ :typeof \$1 ] = \"num\") do={:return [ \$IfThenElse (\$1 != 0) \ + \$1 \$2 ]}\ + \n :if ([ :typeof \$1 ] = \"time\") do={:return [ \$IfThenElse (\$1 > 0s)\ + \_\$1 \$2 ]}\ + \n# this works for boolean values, literal ones with parentheses\ + \n :return [ \$IfThenElse ([ :len [ :tostr \$1 ] ] > 0) \$1 \$2 ];\ + \n}\ + \n\ + \n:set ParseKeyValueStore do={\ + \n :local Source \$1;\ + \n :if ([ :pick \$Source 0 1 ] = \"{\") do={\ + \n :do {\ + \n :return [ :deserialize from=json \$Source ];\ + \n } on-error={ }\ + \n } \ + \n :if ([ :typeof \$Source ] != \"array\") do={:set Source [ :tostr \$1 ]\ + }\ + \n :local Result ({});\ + \n :foreach KeyValue in=[ :toarray \$Source ] do={\ + \n :if ([ :find \$KeyValue \"=\" ]) do={\ + \n :local Key [ :pick \$KeyValue 0 [ :find \$KeyValue \"=\" ] ];\ + \n :local Value [ :pick \$KeyValue ([ :find \$KeyValue \"=\" ] + 1) [\ + \_:len \$KeyValue ] ];\ + \n :if (\$Value=\"true\") do={:set Value true}\ + \n :if (\$Value=\"false\") do={:set Value false}\ + \n :set (\$Result->\$Key) \$Value;\ + \n } else={:set (\$Result->\$KeyValue) true}\ + \n }\ + \n :return \$Result;\ + \n}\ + \n:set RequiredRouterOS do={\ + \n :local Caller [ :tostr \$1 ];\ + \n :local Required [ :tostr \$2 ];\ + \n :local Warn [ :tostr \$3 ];\ + \n :global IfThenElse;\ + \n :global VersionToNum;\ + \n :if (!(\$Required ~ \"^\\\\d+\\\\.\\\\d+((alpha|beta|rc|\\\\.)\\\\d+|)\ + \\\$\")) do={\ + \n :log error (\$0 . \" No valid RouterOS version: \" . \$Required);\ + \n :return false;\ + \n }\ + \n :if ([ \$VersionToNum \$Required ] > [ \$VersionToNum [ /system/packag\ + e/update/get installed-version ] ]) do={\ + \n :if (\$Warn = \"true\") do={\ + \n :log warning (\$0 . \" This \" . [ \$IfThenElse ([ :pick \$Caller \ + 0 ] = (\"\\\$\")) \"function\" \"script\" ] . \\\ + \n \" '\" . \$Caller . \"' (at least specific functionality) requir\ + es RouterOS \" . \$Required . \". Please update!\");\ + \n }\ + \n :return false;\ + \n }\ + \n :return true;\ + \n}\ + \n\ + \n:set ValidateSyntax do={\ + \n :local Code [ :tostr \$1 ];\ + \n :global LogPrint;\ + \n :onerror Err {\ + \n [ :parse (\":local Validate do={\\n\" . \$Code . \"\\n}\") ];\ + \n } do={\ + \n \$LogPrint debug \$0 (\"Valdation failed: \" . \$Err);\ + \n :return false;\ + \n }\ + \n :return true;\ + \n}\ + \n\ + \n:set VersionToNum do={\ + \n :local Input [ :tostr \$1 ];\ + \n :local Multi 0x1000000;\ + \n :local Return 0;\ + \n :global CharacterReplace;\ + \n :set Input [ \$CharacterReplace \$Input \".\" \",\" ];\ + \n :foreach I in={ \"zero\"; \"alpha\"; \"beta\"; \"rc\" } do={\ + \n :set Input [ \$CharacterReplace \$Input \$I (\",\" . \$I . \",\") ];\ + \n }\ + \n :foreach Value in=([ :toarray \$Input ], 0) do={\ + \n :local Num [ :tonum \$Value ];\ + \n :if (\$Multi = 0x100) do={\ + \n :if ([ :typeof \$Num ] = \"num\") do={\ + \n :set Return (\$Return + 0xff00);\ + \n :set Multi (\$Multi / 0x100);\ + \n } else={\ + \n :if (\$Value = \"zero\") do={ }\ + \n :if (\$Value = \"alpha\") do={ :set Return (\$Return + 0x3f00); \ + }\ + \n :if (\$Value = \"beta\") do={ :set Return (\$Return + 0x5f00); }\ + \n :if (\$Value = \"rc\") do={ :set Return (\$Return + 0x7f00); }\ + \n }\ + \n }\ + \n :if ([ :typeof \$Num ] = \"num\") do={ :set Return (\$Return + (\$Va\ + lue * \$Multi)); }\ + \n :set Multi (\$Multi / 0x100);\ + \n }\ + \n :return \$Return;\ + \n}\ + \n\ + \n:set ScriptLock do={\ + \n :local Script [ :tostr \$1 ];\ + \n :local WaitMax [ :totime \$2 ];\ + \n :global GetRandom20CharAlNum;\ + \n :global IfThenElse;\ + \n :global ScriptLockOrder;\ + \n :if ([ :typeof \$ScriptLockOrder ] = \"nothing\") do={\ + \n :set ScriptLockOrder ({});\ + \n }\ + \n :if ([ :typeof (\$ScriptLockOrder->\$Script) ] = \"nothing\") do={\ + \n :set (\$ScriptLockOrder->\$Script) ({});\ + \n }\ + \n :local JobCount do={\ + \n :local Script [ :tostr \$1 ];\ + \n :return [ :len [ /system/script/job/find where script=\$Script ] ];\ + \n }\ + \n :local TicketCount do={\ + \n :local Script [ :tostr \$1 ];\ + \n :global ScriptLockOrder;\ + \n :local Count 0;\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:set Count (\$Count \ + + 1)}\ + \n }\ + \n :return \$Count;\ + \n }\ + \n :local IsFirstTicket do={\ + \n :local Script [ :tostr \$1 ];\ + \n :local Check [ :tostr \$2 ];\ + \n :global ScriptLockOrder;\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\ + \n :if (\$Ticket = \$Check) do={:return true}\ + \n :if ([ :typeof \$Ticket ] != \"nothing\" && \$Ticket != \$Check) d\ + o={:return false}\ + \n }\ + \n :return false;\ + \n }\ + \n :local AddTicket do={\ + \n :local Script [ :tostr \$1 ];\ + \n :local Add [ :tostr \$2 ];\ + \n :global ScriptLockOrder;\ + \n :while (true) do={\ + \n :local Pos [ :len (\$ScriptLockOrder->\$Script) ];\ + \n :set (\$ScriptLockOrder->\$Script->\$Pos) \$Add;\ + \n :delay 10ms;\ + \n :if ((\$ScriptLockOrder->\$Script->\$Pos) = \$Add) do={:return tru\ + e}\ + \n }\ + \n }\ + \n :local RemoveTicket do={\ + \n :local Script [ :tostr \$1 ];\ + \n :local Remove [ :tostr \$2 ];\ + \n :global ScriptLockOrder;\ + \n :foreach Id,Ticket in=(\$ScriptLockOrder->\$Script) do={\ + \n :while ((\$ScriptLockOrder->\$Script->\$Id) = \$Remove) do={\ + \n :set (\$ScriptLockOrder->\$Script->\$Id);\ + \n :delay 10ms;\ + \n }\ + \n }\ + \n }\ + \n :local CleanupTickets do={\ + \n :local Script [ :tostr \$1 ];\ + \n :global ScriptLockOrder;\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:return false}\ + \n }\ + \n :set (\$ScriptLockOrder->\$Script) ({});\ + \n }\ + \n :if ([ :typeof \$WaitMax ] = \"nil\" ) do={:set WaitMax 0s}\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\ + \n :log error (\$0 . \" A script named '\" . \$Script . \"' does not ex\ + ist!\");\ + \n :error false;\ + \n }\ + \n :if ([ \$JobCount \$Script ] = 0) do={\ + \n \$LogPrint error \$0 (\"No script '\" . \$Script . \"' is running!\"\ + );\ + \n :error false;\ + \n }\ + \n :if ([ \$TicketCount \$Script ] >= [ \$JobCount \$Script ]) do={\ + \n :log error (\$0 . \" More tickets than running scripts '\" . \$Scrip\ + t . \"', resetting!\");\ + \n :set (\$ScriptLockOrder->\$Script) ({});\ + \n /system/script/job/remove [ find where script=\$Script ];\ + \n }\ + \n :local MyTicket [ \$GetRandom20CharAlNum 6 ];\ + \n \$AddTicket \$Script \$MyTicket;\ + \n :local WaitInterval (\$WaitMax / 20);\ + \n :local WaitTime \$WaitMax;\ + \n :while (\$WaitTime > 0 && \\\ + \n ([ \$IsFirstTicket \$Script \$MyTicket ] = false || \\\ + \n [ \$TicketCount \$Script ] < [ \$JobCount \$Script ])) do={\ + \n :set WaitTime (\$WaitTime - \$WaitInterval);\ + \n :delay \$WaitInterval;\ + \n }\ + \n :if ([ \$IsFirstTicket \$Script \$MyTicket ] = true && \\\ + \n [ \$TicketCount \$Script ] = [ \$JobCount \$Script ]) do={\ + \n \$RemoveTicket \$Script \$MyTicket;\ + \n \$CleanupTickets \$Script;\ + \n :return true;\ + \n }\ + \n \$RemoveTicket \$Script \$MyTicket;\ + \n \$LogPrint debug \$0 (\"Script '\" . \$Script . \"' started more than \ + once\" . \\\ + \n [ \$IfThenElse (\$WaitTime < \$WaitMax) \" and timed out waiting for\ + \_lock\" \"\" ] . \"...\");\ + \n :return false;\ + \n}\ + \n\ + \n:set SendNotification do={ :onerror Err {\ + \n :global SendNotification2;\ + \n \$SendNotification2 ({ origin=\$0; subject=\$1; message=\$2; link=\$3;\ + \_silent=\$4 });\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err}\ + \n}\ + \n\ + \n:set SendNotification2 do={\ + \n :local Notification \$1;\ + \n :global NotificationFunctions;\ + \n :foreach FunctionName,Discard in=\$NotificationFunctions do={\ + \n (\$NotificationFunctions->\$FunctionName) (\"\\\$NotificationFunctio\ + ns->\\\"\" . \$FunctionName . \"\\\"\") \$Notification;\ + \n }\ + \n}\ + \n\ + \n:set SymbolByUnicodeName do={\ + \n :local Name [ :tostr \$1 ];\ + \n :global EitherOr;\ + \n :global SymbolsExtra;\ + \n :local Symbols ({\ + \n \"abacus\"=\"\\F0\\9F\\A7\\AE\";\ + \n \"alarm-clock\"=\"\\E2\\8F\\B0\";\ + \n \"arrow-down\"=\"\\E2\\AC\\87\";\ + \n \"arrow-up\"=\"\\E2\\AC\\86\";\ + \n \"calendar\"=\"\\F0\\9F\\93\\85\";\ + \n \"card-file-box\"=\"\\F0\\9F\\97\\83\";\ + \n \"chart-decreasing\"=\"\\F0\\9F\\93\\89\";\ + \n \"chart-increasing\"=\"\\F0\\9F\\93\\88\";\ + \n \"cloud\"=\"\\E2\\98\\81\";\ + \n \"cross-mark\"=\"\\E2\\9D\\8C\";\ + \n \"earth\"=\"\\F0\\9F\\8C\\8D\";\ + \n \"fire\"=\"\\F0\\9F\\94\\A5\";\ + \n \"floppy-disk\"=\"\\F0\\9F\\92\\BE\";\ + \n \"gear\"=\"\\E2\\9A\\99\";\ + \n \"heart\"=\"\\E2\\99\\A5\";\ + \n \"high-voltage-sign\"=\"\\E2\\9A\\A1\";\ + \n \"incoming-envelope\"=\"\\F0\\9F\\93\\A8\";\ + \n \"information\"=\"\\E2\\84\\B9\";\ + \n \"large-orange-circle\"=\"\\F0\\9F\\9F\\A0\";\ + \n \"large-red-circle\"=\"\\F0\\9F\\94\\B4\";\ + \n \"link\"=\"\\F0\\9F\\94\\97\";\ + \n \"lock-with-ink-pen\"=\"\\F0\\9F\\94\\8F\";\ + \n \"memo\"=\"\\F0\\9F\\93\\9D\";\ + \n \"mobile-phone\"=\"\\F0\\9F\\93\\B1\";\ + \n \"pushpin\"=\"\\F0\\9F\\93\\8C\";\ + \n \"scissors\"=\"\\E2\\9C\\82\";\ + \n \"scroll\"=\"\\F0\\9F\\93\\9C\";\ + \n \"smiley-partying-face\"=\"\\F0\\9F\\A5\\B3\";\ + \n \"smiley-smiling-face\"=\"\\E2\\98\\BA\";\ + \n \"smiley-winking-face-with-tongue\"=\"\\F0\\9F\\98\\9C\";\ + \n \"sparkles\"=\"\\E2\\9C\\A8\";\ + \n \"speech-balloon\"=\"\\F0\\9F\\92\\AC\";\ + \n \"star\"=\"\\E2\\AD\\90\";\ + \n \"warning-sign\"=\"\\E2\\9A\\A0\";\ + \n \"white-heavy-check-mark\"=\"\\E2\\9C\\85\"\ + \n }, \$SymbolsExtra);\ + \n :local Magic [ :pick [ /system/clock/get date ] 4 10 ];\ + \n :local Special {\ + \n \"information-04-01\"=\"\\F0\\9F\\9A\\BB\";\ + \n \"large-orange-circle-04-01\"=\"\\F0\\9F\\8D\\8A\";\ + \n \"large-orange-circle-10-31\"=\"\\F0\\9F\\8E\\83\";\ + \n \"large-red-circle-04-01\"=\"\\F0\\9F\\8D\\92\" };\ + \n :if ([ :len (\$Symbols->\$Name) ] = 0) do={\ + \n :log warning (\$0 . \"No symbol available for name '\" . \$Name . \"\ + '!\");\ + \n :return \"\";\ + \n }\ + \n :return ([ \$EitherOr (\$Special->(\$Name . \$Magic)) (\$Symbols->\$Na\ + me) ] . \"\\EF\\B8\\8F\");\ + \n}\ + \n\ + \n:set SymbolForNotification do={\ + \n :global NotificationsWithSymbols;\ + \n :global SymbolByUnicodeName;\ + \n :global IfThenElse;\ + \n :if (\$NotificationsWithSymbols != true) do={:return [ \$IfThenElse ([\ + \_:len \$2 ] > 0) ([ :tostr \$2 ] . \" \") \"\" ]}\ + \n :local Return \"\";\ + \n :foreach Symbol in=[ :toarray \$1 ] do={:set Return (\$Return . [ \$Sy\ + mbolByUnicodeName \$Symbol ])}\ + \n :return (\$Return . \" \");\ + \n}\ + \n\ + \n:set Unix2Dos do={:return [ :tocrlf [ :tostr \$1 ] ]}\ + \n:set UrlEncode do={\ + \n :local Input [ :tostr \$1 ];\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\ + \n :local Return \"\";\ + \n :local Chars (\"\\n\\r !\\\"#\\\$%&'()*+,:;<=>\?@[\\\\]^`{|}~\");\ + \n :local Subs { \"%0A\"; \"%0D\"; \"%20\"; \"%21\"; \"%22\"; \"%23\"; \"\ + %24\"; \"%25\"; \"%26\"; \"%27\";\ + \n \"%28\"; \"%29\"; \"%2A\"; \"%2B\"; \"%2C\"; \"%3A\"; \"%3B\"; \ + \"%3C\"; \"%3D\"; \"%3E\"; \"%3F\";\ + \n \"%40\"; \"%5B\"; \"%5C\"; \"%5D\"; \"%5E\"; \"%60\"; \"%7B\"; \ + \"%7C\"; \"%7D\"; \"%7E\" };\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\ + \n :local Char [ :pick \$Input \$I ];\ + \n :local Replace [ :find \$Chars \$Char ];\ + \n :if ([ :typeof \$Replace ] = \"num\") do={:set Char (\$Subs->\$Repla\ + ce)}\ + \n :set Return (\$Return . \$Char);\ + \n }\ + \n :return \$Return;\ + \n}\ + \n\ + \n:set IsDNSResolving do={\ + \n :do {:resolve \"api.telegram.org\"} on-error={:return false}\ + \n :return true;\ + \n}\ + \n\ + \n:set IsFullyConnected do={\ + \n :global IsDNSResolving;\ + \n :global IsTimeSync;\ + \n :if ([ \$IsDNSResolving ] = false) do={:return false};\ + \n :if ([ \$IsTimeSync ] = false) do={:return false};\ + \n :return true;\ + \n}\ + \n\ + \n:set IsTimeSync do={\ + \n :global IsTimeSyncCached;\ + \n :global IsTimeSyncResetNtp;\ + \n :if (\$IsTimeSyncCached = true) do={:return true}\ + \n :if ([ /system/ntp/client/get enabled ] = true) do={\ + \n :if ([ /system/ntp/client/get status ] = \"synchronized\") do={\ + \n :set IsTimeSyncCached true;\ + \n :return true;\ + \n }\ + \n :local Uptime [ /system/resource/get uptime ];\ + \n :if ([ :typeof \$IsTimeSyncResetNtp ] = \"nothing\") do={\ + \n :set IsTimeSyncResetNtp \$Uptime;\ + \n }\ + \n :if (\$Uptime - \$IsTimeSyncResetNtp < 3m) do={:return false}\ + \n :log warning \"\$0 The ntp client is configured, but did not sync.\"\ + ;\ + \n :set IsTimeSyncResetNtp \$Uptime;\ + \n /system/ntp/client/set enabled=no;\ + \n :delay 20ms;\ + \n /system/ntp/client/set enabled=yes;\ + \n :return false;\ + \n }\ + \n :if ([ /system/license/get ]->\"level\" = \"free\" || \\\ + \n [ /system/resource/get ]->\"board-name\" = \"x86\") do={\ + \n :log debug \"\$0 No ntp client configured, relying on RTC for CHR fr\ + ee license and x86.\";\ + \n :return true;\ + \n }\ + \n :if ([ /ip/cloud/get update-time ] = true) do={\ + \n :if ([ :typeof [ /ip/cloud/get public-address ] ] = \"ip\") do={\ + \n :set IsTimeSyncCached true;\ + \n :return true;\ + \n }\ + \n :return false;\ + \n }\ + \n :log debug \"\$0 No time source configured! Returning gracefully...\";\ + \n :return true;\ + \n}\ + \n\ + \n:set FetchHugeFiles do={\ + \n :local ScriptName [ :tostr \$1 ];\ + \n :local Url [ :tostr \$2 ];\ + \n :local CheckCert [ :tostr \$3 ];\ + \n\ + \n :global CleanName;\ + \n :global FetchUserAgentStr;\ + \n :global GetRandom20CharAlNum;\ + \n :global IfThenElse;\ + \n :global LogPrint;\ + \n :global MkDir;\ + \n :global RmDir;\ + \n :global RmFile;\ + \n :global WaitForFile;\ + \n\ + \n :set CheckCert [ \$IfThenElse (\$CheckCert = \"false\") \"no\" \"yes-w\ + ithout-crl\" ];\ + \n\ + \n :local DirName (\"tmpfs/\" . [ \$CleanName \$ScriptName ]);\ + \n :if ([ \$MkDir \$DirName ] = false) do={\ + \n \$LogPrint error \$0 (\"Failed creating directory!\");\ + \n :return false;\ + \n }\ + \n\ + \n :local FileName (\$DirName . \"/\" . [ \$CleanName \$0 ] . \"-\" . [ \ + \$GetRandom20CharAlNum ]);\ + \n :onerror Err {\ + \n /tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName \ + \\\ + \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-va\ + lue;\ + \n } do={\ + \n :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\ + \n \$RmFile \$FileName;\ + \n }\ + \n \$LogPrint debug \$0 (\"Failed downloading from \" . \$Url . \" - \"\ + \_. \$Err);\ + \n \$RmDir \$DirName;\ + \n :return false;\ + \n }\ + \n\ + \n :if ([ \$WaitForFile \$FileName 5s ] = false) do={\ + \n \$LogPrint debug \$0 (\"The file downloaded from \" . \$Url . \" did\ + \_not show up.\");\ + \n :return false;\ + \n }\ + \n\ + \n :local FileSize [ /file/get \$FileName size ];\ + \n :local Return \"\";\ + \n :local VarSize 0;\ + \n :while (\$VarSize != \$FileSize) do={\ + \n :set Return (\$Return . ([ /file/read offset=\$VarSize chunk-size=32\ + 768 file=\$FileName as-value ]->\"data\"));\ + \n :set FileSize [ /file/get \$FileName size ];\ + \n :set VarSize [ :len \$Return ];\ + \n :if (\$VarSize > \$FileSize) do={\ + \n :delay 100ms;\ + \n }\ + \n }\ + \n \$RmDir \$DirName;\ + \n :return \$Return;\ + \n}\ + \n\ + \n:set FetchUserAgentStr do={\ + \n :local Caller [ :tostr \$1 ];\ + \n :global GlobalScriptsUrl;\ + \n :global CommitBrief;\ + \n :global IfThenElse;\ + \n :local Resource [ /system/resource/get ];\ + \n :return (\"User-Agent: Mikrotik/\" . \$Resource->\"version\" . \" \" .\ + \_\$Resource->\"architecture-name\" . \\\ + \n \" \" . \$Caller . \"/Fetch (\" . \$GlobalScriptsUrl . \"; \" . [ \$\ + CommitBrief ] . \")\");\ + \n}\ + \n\ + \n:set ScriptInstallUpdate do={ :onerror Err {\ + \n :local Scripts [ :toarray \$1 ];\ + \n :local NewComment [ :tostr \$2 ];\ + \n :global InitSetup;\ + \n\ + \n :global CommitId;\ + \n :global ScriptUpdatesCRLF;\ + \n :global GlobalConfVersion;\ + \n :global Identity;\ + \n :global CertificateAvailable;\ + \n :global CheckSumsVerify;\ + \n :global GlobalScriptsUrl;\ + \n :global SumsDirAndFileName;\ + \n :global GlobalScriptsUrlSuffix;\ + \n :global EitherOr;\ + \n :global FetchUserAgentStr;\ + \n :global Grep;\ + \n :global IfThenElse;\ + \n :global LogPrint;\ + \n :global ParseKeyValueStore;\ + \n :global RequiredRouterOS;\ + \n :global SendNotification2;\ + \n :global SymbolForNotification;\ + \n :global ValidateSyntax;\ + \n :global CommentsInScripts;\ + \n\ + \n :if ([ \$CertificateAvailable \"Root YE\" \"fetch\" ] = false) do={\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, trying wit\ + hout.\");\ + \n }\ + \n\ + \n :foreach Script in=\$Scripts do={\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\ + \n \$LogPrint info \$0 (\"Adding new script: \" . \$Script);\ + \n /system/script/add name=\$Script owner=\$Script source=\"#!rsc by \ + Vados\\n\" comment=\$NewComment;\ + \n }\ + \n }\ + \n\ + \n :local CommitIdBefore \$CommitId;\ + \n :local GlobalConfVersionBefore \$GlobalConfVersion;\ + \n :local ReloadGlobal false;\ + \n :local DeviceMode [ /system/device-mode/get ];\ + \n\ + \n :if (\$CheckSumsVerify = true) do={\ + \n :local CheckSums ({});\ + \n :do {\ + \n :local Url (\$GlobalScriptsUrl . \$SumsDirAndFileName . \$GlobalScr\ + iptsUrlSuffix);\ + \n \$LogPrint debug \$0 (\"Fetching checksums from url: \" . \$Url);\ + \n :set CheckSums [ :deserialize from=json ([ /tool/fetch check-certi\ + ficate=yes-without-crl \\\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url output\ + =user as-value ]->\"data\") ];\ + \n } on-error={ \$LogPrint warning \$0 (\"Err = \" . \$Err); }\ + \n }\ + \n\ + \n :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vado\ + s\" ] do={\ + \n :local ScriptVal [ /system/script/get \$Script ];\ + \n :local ScriptInfo [ \$ParseKeyValueStore (\$ScriptVal->\"comment\") \ + ];\ + \n :local SourceNew;\ + \n\ + \n :foreach Scheduler in=[ /system/scheduler/find where on-event~(\"\\\ + \\b\" . \$ScriptVal->\"name\" . \"\\\\b\") ] do={\ + \n :local SchedulerVal [ /system/scheduler/get \$Scheduler ];\ + \n :if (\$ScriptVal->\"policy\" != \$SchedulerVal->\"policy\") do={\ + \n \$LogPrint warning \$0 (\"Policies differ for script '\" . \$Scr\ + iptVal->\"name\" . \"' and its scheduler '\" . \$SchedulerVal->\"name\" . \ + \"'!\");\ + \n }\ + \n }\ + \n :do {\ + \n :if (\$ScriptInfo->\"ignore\" = true) do={\ + \n \$LogPrint debug \$0 (\"Ignoring script '\" . \$ScriptVal->\"nam\ + e\" . \"', as requested.\");\ + \n :error true;\ + \n }\ + \n :if (\$CheckSumsVerify = true) do={\ + \n :local CheckSum (\$CheckSums->(\$ScriptVal->\"name\"));\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Scri\ + ptInfo->\"url-suffix\") ] = 0 && \\\ + \n [ :convert transform=md5 to=hex [ :tolf (\$ScriptVal->\"sou\ + rce\") ] ] = \$CheckSum) do={\ + \n \$LogPrint debug \$0 (\"Checksum for script '\" . \$ScriptVal-\ + >\"name\" . \"' matches, ignoring.\");\ + \n :error true;\ + \n }\ + \n }\ + \n :if ([ :len (\$ScriptInfo->\"certificate\") ] > 0) do={\ + \n :if ([ \$CertificateAvailable (\$ScriptInfo->\"certificate\") \"\ + fetch\" ] = false) do={\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, tryi\ + ng without.\");\ + \n }\ + \n }\ + \n :onerror Err {\ + \n :local BaseUrl [ \$EitherOr (\$ScriptInfo->\"base-url\") \$Globa\ + lScriptsUrl ];\ + \n :local UrlSuffix [ \$EitherOr (\$ScriptInfo->\"url-suffix\") \$G\ + lobalScriptsUrlSuffix ];\ + \n :local Url (\$BaseUrl . \$ScriptVal->\"name\" . \".rsc\" . \$Url\ + Suffix);\ + \n \$LogPrint warning \$0 (\"Fetching script '\" . (\$ScriptVal->\"\ + name\") . \"' from url: \" . \$Url);\ + \n :local Result [ /tool/fetch check-certificate=yes-without-crl \\\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url outp\ + ut=user as-value ];\ + \n :if (\$Result->\"status\" = \"finished\") do={\ + \n :set SourceNew [ :tolf (\$Result->\"data\") ];\ + \n } \ + \n } do={\ + \n \$LogPrint warning \$0 (\"Failed fetching script '\" . \$ScriptV\ + al->\"name\" . \"': \" . \$Err);\ + \n :if (\$Err != \"Fetch failed with status 404\") do={\ + \n :error false;\ + \n }\ + \n :if (\$ScriptVal->\"source\" = \"#!rsc by Vados\") do={\ + \n \$LogPrint warning \$0 (\"Removing dummy. Typo on installation\ + \?\");\ + \n /system/script/remove \$Script;\ + \n :error false;\ + \n }\ + \n :if (\$CheckSumsVerify = true) do={\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Sc\ + riptInfo->\"url-suffix\") ] = 0 && \\\ + \n [ :len \$CheckSum ] = 0) do={\ + \n \$LogPrint warning \$0 (\"Added the script manually\? Skip u\ + pdates with 'ignore=true' in comment.\");\ + \n }\ + \n }\ + \n :error false;\ + \n }\ + \n\ + \n :if ([ :len \$SourceNew ] = 0) do={\ + \n \$LogPrint debug \$0 (\"No update for script '\" . (\$ScriptVal-\ + >\"name\") . \"'.\");\ + \n :error false;\ + \n }\ + \n\ + \n :local SourceCRLF [ :tocrlf \$SourceNew ];\ + \n :if (\$InitSetup != true && ((\$ScriptVal->\"name\") != \"AM-Globa\ + lConfig\" || (\$ScriptVal->\"name\") != \"AM-GlobalFunc\")) do={\ + \n :if (\$SourceNew = (\$ScriptVal->\"source\") || \$SourceCRLF = (\ + \$ScriptVal->\"source\")) do={\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\") \ + . \"' source did not change. End of lines set to CRLF.\");\ + \n if (\$ScriptUpdatesCRLF = false) do={\ + \n :put [ :tolf \$SourceNew ];\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\"\ + ) . \"' source update end of lines to LF.\");\ + \n }\ + \n :error false;\ + \n }\ + \n }\ + \n\ + \n :if ([ :pick \$SourceNew 0 14 ] != \"#!rsc by Vados\") do={\ + \n \$LogPrint warning \$0 (\"Looks like new script '\" . \$ScriptVa\ + l->\"name\" . \"' is not valid (missing shebang = '\$shebang') Ignoring!\"\ + );\ + \n :error false;\ + \n }\ + \n\ + \n :if (\$CommentsInScripts = true) do={\ + \n :local CommentLine [ \$Grep \$SourceNew (\"\\23 Script comment:\ + \_\") ];\ + \n :if ([ :len \$CommentLine ] = 0) do={\ + \n \$LogPrint debug \$0 (\"The search in new script '\" . (\$Scr\ + iptVal->\"name\") . \"' for comment in script body, is not found result Ig\ + noring!\");\ + \n :error false;\ + \n } else={\ + \n :if ([ :len (\$ScriptVal->\"comment\")] = 0 || [ :len (\$Scri\ + ptVal->\"comment\")] != [ :pick \$CommentLine ([ :find \$CommentLine \":\"\ + ] + 2) [ :len \$CommentLine] ]) do={\ + \n \$LogPrint debug \$0 (\"Exsiting comment for script '\" . (\ + \$ScriptVal->\"name\") . \"' is '\" . (\$ScriptVal->\"comment\") . \"'.\")\ + ;\ + \n :set (\$ScriptVal->\"comment\") [ :pick \$CommentLine ([ :f\ + ind \$CommentLine \":\"] + 2) [ :len \$CommentLine] ];\ + \n \$LogPrint debug \$0 (\"New comment (\" . (\$ScriptVal->\"c\ + omment\") . \") for script '\" . (\$ScriptVal->\"name\") . \"' has been ad\ + ded!\");\ + \n } else={\ + \n \$LogPrint debug \$0 (\"Comment for script '\" . (\$ScriptV\ + al->\"name\") . \"' did not change.\");\ + \n :error false;\ + \n }\ + \n } \ + \n }\ + \n\ + \n :local RequiredROS ([ \$ParseKeyValueStore [ \$Grep \$SourceNew (\ + \"\\23 requires RouterOS, \") ] ]->version);\ + \n :if ([ \$RequiredRouterOS \$0 [ \$EitherOr \$RequiredROS \"0.0\" ]\ + \_false ] = false) do={\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires RouterOS \" . \\\ + \n \$RequiredROS . \", which is not met by your installation. I\ + gnoring!\");\ + \n :error false;\ + \n }\ + \n :local RequiredDM [ \$ParseKeyValueStore [ \$Grep \$SourceNew (\"\ + \\23 requires device-mode, \") ] ];\ + \n :local MissingDM ({});\ + \n :foreach Feature,Value in=\$RequiredDM do={\ + \n :if ([ :typeof (\$DeviceMode->\$Feature) ] = \"bool\" && (\$Devi\ + ceMode->\$Feature) = false) do={\ + \n :set MissingDM (\$MissingDM, \$Feature);\ + \n }\ + \n }\ + \n :if ([ :len \$MissingDM ] > 0) do={\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires disabled \" . \\\ + \n \"device-mode features (\" . [ :tostr \$MissingDM ] . \"). I\ + gnoring!\");\ + \n :error false;\ + \n }\ + \n\ + \n :if ([ \$ValidateSyntax \$SourceNew ] = false) do={\ + \n \$LogPrint warning \$0 (\"Syntax validation for script '\" . (\$\ + ScriptVal->\"name\") . \"' failed! Ignoring!\");\ + \n :error false;\ + \n }\ + \n \ + \n :log info (\"Updating script: \" . (\$ScriptVal->\"name\") . \" Sc\ + ript comment: \" . (\$ScriptVal->\"comment\"));\ + \n\ + \n /system/script/set owner=(\$ScriptVal->\"name\") comment=(\$Script\ + Val->\"comment\") \\\ + \n source=[ \$IfThenElse (\$ScriptUpdatesCRLF = true) \$SourceCRL\ + F \$SourceNew ] \$Script;\ + \n :if (\$ScriptVal->\"name\" = \"AM-GlobalConfig\" || \\\ + \n \$ScriptVal->\"name\" = \"AM-GlobalFunc\" || \\\ + \n \$ScriptVal->\"name\" ~ (\"^(AM-GlobalFunc\\\\.d|mod)/.\")) d\ + o={\ + \n :set ReloadGlobal true;\ + \n }\ + \n } on-error={ }\ + \n }\ + \n :if (\$ReloadGlobal = true) do={\ + \n \$LogPrint info \$0 (\"Reloading global configuration and functions.\ + \");\ + \n :onerror Err {\ + \n :global InitSetup (a);\ + \n /system/script {run AM-GlobalConfig; run AM-GlobalFunc;};\ + \n } do={\$LogPrint error \$0 (\"Reloading global configuration and fun\ + ctions failed! \" . \$Err)}\ + \n }\ + \n :if (\$GlobalConfVersionBefore > \$GlobalConfVersion) do={\ + \n \$LogPrint warning \$0 (\"The configuration version decreased from \ + \" . \\\ + \n \$GlobalConfVersionBefore . \" to \" . \$GlobalConfVersion . \\\ + \n \". Installed an older version\?\");\ + \n }\ + \n :if (\$GlobalConfVersionBefore < \$GlobalConfVersion) do={\ + \n :global GlobalConfChanges;\ + \n :global GlobalConfMigration;\ + \n :local ChangeLogCode;\ + \n :if ([ :len \$ChangeLogCode ] > 0) do={\ + \n :if ([ \$ValidateSyntax \$ChangeLogCode ] = true) do={\ + \n :onerror Err {\ + \n [ :parse \$ChangeLogCode ];\ + \n } do={\$LogPrint warning \$0 (\"The changelog failed to run: \" \ + . \$Err)}\ + \n } else={\$LogPrint warning \$0 (\"The changelog failed syntax vali\ + dation!\")}\ + \n }\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\ + \n :local Migration (\$GlobalConfMigration->[ :tostr \$I ]);\ + \n :do {\ + \n :if ([ :typeof \$Migration ] != \"str\") do={\ + \n \$LogPrint debug \$0 (\"Migration code for change \" . \$I .\ + \_\" is not available.\");\ + \n :error false;\ + \n }\ + \n :if ([ \$ValidateSyntax \$Migration ] = false) do={\ + \n \$LogPrint warning \$0 (\"Migration code for change \" . \$I\ + \_. \" failed syntax validation!\");\ + \n :error false}\ + \n \$LogPrint info \$0 (\"Applying migration for change \" . \$I \ + . \": \" . \$Migration);\ + \n :onerror Err {\ + \n [ :parse \$Migration ];\ + \n } do={\$LogPrint warning \$0 (\"Migration code for change \" .\ + \_\$I . \" failed to run: \" . \$Err)}\ + \n } on-error={ }\ + \n }\ + \n }\ + \n :local NotificationMessage (\"The configuration version on \" . \$Id\ + entity . \" increased \" . \\\ + \n \"to \" . \$GlobalConfVersion . \", current configuration may nee\ + d modification. \" . \\\ + \n \"Please review and update global-config-overlay, then re-run glo\ + bal-config.\");\ + \n \$LogPrint info \$0 (\$NotificationMessage);\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nChanges:\ + \");\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\ + \n :local Change (\$GlobalConfChanges->[ :tostr \$I ]);\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n \" . \\\ + \n [ \$SymbolForNotification \"pushpin\" \"*\" ] . \$Change);\ + \n \$LogPrint info \$0 (\"Change \" . \$I . \": \" . \$Change);\ + \n }\ + \n } else={\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nNews and\ + \_changes are not available.\");\ + \n\ + \n }\ + \n\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={ :set GlobalConfChanges; \ + } else={ :global GlobalConfChanges (a); }\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={ :set GlobalConfMigrati\ + on; } else={ :global GlobalConfMigration (a); }\ + \n }\ + \n} do={\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\ + \n} }\ + \n\ + \n# load modules\ + \n:foreach Script in=[ /system/script/find where name ~ \"^(global-functio\ + ns\\\\.d|mod)/.\" ] do={\ + \n :local ScriptVal [ /system/script/get \$Script ];\ + \n :if ([ \$ValidateSyntax (\$ScriptVal->\"source\") ] = true) do={\ + \n :onerror Err {\ + \n /system/script/run \$Script;\ + \n } do={\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' f\ + ailed to run: \" . \$Err);\ + \n }\ + \n } else={\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' fai\ + led syntax validation, skipping.\");\ + \n }\ + \n}\ + \n\ + \n# Add and fix global scheduler\ + \n:put \"Add or/and fix Global scheduler...\";\ + \n:local OnEvent \"/system/script { run AM-GlobalConfig; run AM-GlobalFunc\ + ; }\";\ + \n:local Comment \"Every Day Set Global Environment Variables\";\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-SetGlobalEnv\" ] ] \ + = 0) do={\ + \n /system/scheduler/add name=\"AM-SetGlobalEnv\" comment=\$Comment on-ev\ + ent=\$OnEvent start-time=startup;\ + \n}\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" comment ] != \$Comment)\ + \_do={\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" comment=\$Comment;\ + \n}\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" on-event ] != \$OnEvent\ + ) do={\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" on-event=\$OnEvent;\ + \n}\ + \n# Add Update Script scheduler\ + \n:put \"Add or/and fix Update Script scheduler\";\ + \n:set OnEvent \":global ScriptInstallUpdate; \\\$ScriptInstallUpdate;\";\ + \n:set Comment \"Every Day Check For Update Scripts\";\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-ScriptInstallUpdate\ + \" ] ] = 0) do={\ + \n/system/scheduler/add name=\"AM-ScriptInstallUpdate\" comment=\$Comment \ + start-time=startup interval=1d on-event=\$OnEvent;\ + \n}\ + \n\ + \n:onerror Err {\ + \n :global GlobalConfReady;\ + \n :retry { :if (\$GlobalConfReady != true) do={ :error (\"Global configs\ + \_not ready.\"); }; } delay=100ms max=5;\ + \n\ + \n:log warning (\"This script \$ScriptName Loaded \" . \\\ + \n [ \$IfThenElse (\$CommitId != \"unknown\") ([ \$CommitBrief ] . \" \ + \") ] . \\\ + \n \"on \" . \$devBoardName . \"\\nRouterOS: \" . \$devCurVersion . \"\ + \\nArchitecture: \" . \$devCurArch . \"\\nIdentity: \" . \$Identity);\ + \n # signal we are ready\ + \n:set GlobalFuncReady true;\ + \n:set ExitOK true;\ + \n\ + \n:log info (\$0 . \"Global configs ready!\");\ + \n} do={\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\ + \n}\ + \n" +add dont-require-permissions=no name=mod/AM-Certs-By-Ident owner=admin \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\ + \n# RouterOS script: AM-Certs-By-Ident\ + \n# Script comment: Download custom Certificates By Routers Identity \ + \n# Copyright (c) 2005-2026 Vados \ + \n#\ + \n#\ + \n# requires RouterOS, version=7.19\ + \n# requires device-mode, fetch\ + \n#\ + \n# :local ScriptName [ :jobname ];\ + \n#\ + \n# CloudFlare\ + \n#/tool/fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalR\ + ootCA.crt.pem;\ + \n#/certificate/import file-name=DigiCertGlobalRootCA.crt.pem passphrase=\ + \"\";\ + \n#/tool/ fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobal\ + G2TLSRSASHA2562020CA1-1.crt.pem;\ + \n#/certificate/import file-name=DigiCertGlobalG2TLSRSASHA2562020CA1-1.crt\ + .pem passphrase=\"\";\ + \n# Quad9\ + \n#/tool/fetch mode=https url=\"https://cacerts.digicert.com/DigiCertGloba\ + lG3TLSECCSHA3842020CA1-1.crt.pem\"\ + \n#/certificate/import file-name=DigiCertGlobalG3TLSECCSHA3842020CA1-1.crt\ + .pem passphrase=\"\";\ + \n\ + \n:global GlobalScriptsUrl;\ + \n:local UrlSuffix [/system/identity/get name];\ + \n:local UrlDir \"certs/\";\ + \n:local CertUrl (\$GlobalScriptsUrl . \$UrlDir . \$UrlSuffix .\"/\");\ + \n\ + \n:log error \$CertUrl;\ + \n\ + \n:local CertName \"DigiCert-Global-Root-CA.pem\";\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\ + \n/certificate/set name=\"DigiCert-Global-Root-CA\" [ find where common-na\ + me=\"DigiCert Global Root CA\" ];\ + \n\ + \n:set CertName \"DigiCert-Assured-ID-Root-CA.pem\";\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-CA\" [ find where commo\ + n-name=\"DigiCert Assured ID Root CA\" ];\ + \n\ + \n:set CertName \"DigiCert-Assured-ID-Root-G2.pem\";\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G2\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\ + \n\ + \n:set CertName \"DigiCert-Assured-ID-Root-G3.pem\";\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G3\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\ + \n\ + \n:set CertName \"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1.pem\";\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\ + \n/certificate/set name=\"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G2 TLS RSA SHA256 2020 CA1\" ];\ + \n\ + \n:set CertName \"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1.pem\";\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\ + \n/certificate/set name=\"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G3 TLS ECC SHA384 2020 CA1\" ];\ + \n\ + \n:set CertName \"DigiCert-Global-Root-G2.pem\";\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\ + \n/certificate/set name=\"DigiCert-Global-Root-G2\" [ find where common-na\ + me=\"DigiCert Global Root G2\" ];\ + \n\ + \n:set CertName \"DigiCert-Global-Root-G3.pem\";\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\ + \n/certificate/set name=\"DigiCert-Global-Root-G3\" [ find where common-na\ + me=\"DigiCert Global Root G3\" ];\ + \n\ + \n:set CertName \"DigiCert-TLS-ECC-P384-Root-G5.pem\";\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\ + \n/certificate/set name=\"DigiCert-TLS-ECC-P384-Root-G5\" [ find where com\ + mon-name=\"DigiCert TLS ECC P384 Root G5\" ];\ + \n\ + \n:set CertName \"DigiCert-TLS-RSA4096-Root-G5.pem\";\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\ + \n/certificate/set name=\"DigiCert-TLS-RSA4096-Root-G5\" [ find where comm\ + on-name=\"DigiCert TLS RSA4096 Root G5\" ];\ + \n\ + \n:set CertName \"DigiCert-Trusted-Root-G4.pem\";\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\ + \n/certificate/set name=\"DigiCert-Trusted-Root-G4\" [ find where common-n\ + ame=\"DigiCert Trusted Root G4\" ];\ + \n\ + \n:set CertName \"GTS-Root-R4.pem\";\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\ + \n/certificate/set name=\"GTS-Root-R4\" [ find where common-name=\"GTS Roo\ + t R4\" ];\ + \n\ + \n:set CertName \"Go-Daddy-Root-Certificate-Authority-G2.pem\";\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\ + \n/certificate/set name=\"Go-Daddy-Root-Certificate-Authority-G2\" [ find \ + where common-name=\"Go Daddy Root Certificate Authority - G2\" ];\ + \n\ + \n:set CertName \"ISRG-Root-X1.pem\";\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\ + \n/certificate/set name=\"ISRG-Root-X1\" [ find where common-name=\"ISRG R\ + oot X1\" ];\ + \n\ + \n:set CertName \"Root-YE.pem\";\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\ + \n/certificate/set name=\"Root-YE\" [ find where common-name=\"Root YE\" ]\ + ;\ + \n\ + \n:set CertName \"Starfield-Root-Certificate-Authority-G2.pem\";\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\ + \n/certificate/set name=\"Starfield-Root-Certificate-Authority-G2\" [ find\ + \_where common-name=\"Starfield Root Certificate Authority - G2\" ];\ + \n\ + \n:set CertName \"USERTrust-RSA-Certification-Authority.pem\";\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\ + \n/certificate/set name=\"USERTrust-RSA-Certification-Authority\" [ find w\ + here common-name=\"USERTrust RSA Certification Authority\" ];\ + \n\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\ + \n#:set CertName \"GTS-Root-RX.pem\";\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\ + \n#internet\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\ + \n#:set CertName \"ISRG-Root-X2.pem\";\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\ + \n\ + \n\ + \n#/ip/dns/set allow-remote-requests=yes doh-max-concurrent-queries=100 do\ + h-max-server-connections=20 use-doh-server=https://security.cloudflare-dns\ + .com/dns-query verify-doh-cert=yes;\ + \n#/ip/dns/static remove [find where address=1.1.1.1];\ + \n#/ip/dns/static add address=1.1.1.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 1\";\ + \n#/ip/dns/ static remove [find where address=1.0.0.1];\ + \n#/ip/dns/static add address=1.0.0.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 2\"\ + \n#/ip dns static add address=2606:4700:4700::1111 name=security.cloudflar\ + e-dns.com type=AAAA\ + \n#/ip dns static add address=2606:4700:4700::1001 name=security.cloudflar\ + e-dns.com type=AAAA\ + \n#/ip/dns set servers=\"1.0.0.1, 8.8.4.4\";\ + \n#/ip/dns set servers=\"\";" +add dont-require-permissions=no name=fetchCustom owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="\ + \r\ + \n:global GlobalScriptsUrl;\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@10\ + .30.30.86.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.86.pub\";\ + \n" +/tool e-mail +set certificate-verification=no from=MikroVados port=587 \ + server=smtp.mail.me.com tls=starttls user=vadossio@icloud.com diff --git a/MikroGig/history/20260505/20260505045924-Diff-Config.rsc b/MikroGig/history/20260505/20260505045924-Diff-Config.rsc new file mode 100644 index 0000000..59b23d1 --- /dev/null +++ b/MikroGig/history/20260505/20260505045924-Diff-Config.rsc @@ -0,0 +1 @@ +First run: no precedent config -- 2.52.0