From 0d7d895668a009090661e136afaac6d1ace1b01e Mon Sep 17 00:00:00 2001 From: vados-dev Date: Sat, 16 May 2026 05:00:43 +0300 Subject: [PATCH] Backup for MikroGig created successfully at May 16 05:00:43. --- .../20260516/20260516050039-Binary.backup | Bin 0 -> 164162 bytes MikroGig/20260516/20260516050039-Config.rsc | 2667 +++++++++++++++++ .../20260516/20260516050039-Diff-Config.rsc | 367 +++ 3 files changed, 3034 insertions(+) create mode 100644 MikroGig/20260516/20260516050039-Binary.backup create mode 100644 MikroGig/20260516/20260516050039-Config.rsc create mode 100644 MikroGig/history/20260516/20260516050039-Diff-Config.rsc diff --git a/MikroGig/20260516/20260516050039-Binary.backup b/MikroGig/20260516/20260516050039-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..2c85afbf2fddbbc3e5cf130be99893c47b8432d0 GIT binary patch literal 164162 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

RhP|CWRz(z) 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 G{AdtB_Qq-e literal 0 HcmV?d00001 diff --git a/MikroGig/20260516/20260516050039-Config.rsc b/MikroGig/20260516/20260516050039-Config.rsc new file mode 100644 index 0000000..34ea8f9 --- /dev/null +++ b/MikroGig/20260516/20260516050039-Config.rsc @@ -0,0 +1,2667 @@ +# 2026-05-16 04:00:40 by RouterOS 7.21.4 +# software id = 2961-C4ZZ +# +# model = RBD52G-5HacD2HnD +# serial number = HCX084RAVFA +/interface bridge +add name=Bridge-LAN +/interface wireless +# managed by CAPsMAN +# channel: 2422/20-Ce/gn(17dBm), SSID: vados, local forwarding +set [ find default-name=wlan1 ] country=belarus disabled=no mode=ap-bridge \ + ssid=vados wps-mode=disabled +# managed by CAPsMAN +# channel: 5200/20-eCee/ac/P(20dBm), SSID: vados5g, local forwarding +set [ find default-name=wlan2 ] country=belarus disabled=no mode=ap-bridge \ + ssid=vados5g wps-mode=disabled +/interface list +add name=WAN +add name=LAN +/interface wireless security-profiles +set [ find default=yes ] supplicant-identity=MikroTik +/system logging action +add email-start-tls=yes email-to=vados@vados.ru name=email target=email +/user group +add name=backup policy="telnet,ssh,ftp,read,write,policy,test,sniff,sensitive,\ + !local,!reboot,!winbox,!password,!web,!api,!romon,!rest-api" +/certificate settings +set builtin-trust-store=fetch crl-store=system +/interface bridge port +add bridge=Bridge-LAN interface=ether1 +add bridge=Bridge-LAN interface=ether2 +add bridge=Bridge-LAN interface=ether3 +add bridge=Bridge-LAN interface=ether4 +add bridge=Bridge-LAN interface=ether5 +add bridge=Bridge-LAN interface=wlan2 +add bridge=Bridge-LAN interface=wlan1 +/ipv6 settings +set allow-fast-path=no disable-ipv6=yes disable-link-local-address=yes \ + forward=no +/interface list member +add interface=ether1 list=WAN +add interface=ether2 list=LAN +add interface=ether3 list=LAN +add interface=ether4 list=LAN +add interface=ether5 list=LAN +add interface=wlan2 list=LAN +add interface=wlan1 list=LAN +/interface wireless cap +# +set bridge=Bridge-LAN caps-man-addresses=10.30.30.10 \ + caps-man-certificate-common-names=CAPsMAN-51B25E507D07 certificate=\ + CAP-18FD746E5814 discovery-interfaces=Bridge-LAN enabled=yes interfaces=\ + wlan1,wlan2 lock-to-caps-man=yes +/ip address +add address=10.30.30.86/24 interface=Bridge-LAN network=10.30.30.0 +/ip dns +set servers=10.30.30.81 +/ip firewall service-port +set ftp disabled=yes +set tftp disabled=yes +set irc disabled=no +set sip disabled=yes +set pptp disabled=yes +set rtsp disabled=no +/ip hotspot walled-garden +add server=*1 +add server=*1 +/ip ipsec settings +set accounting=no +/ip ipsec policy +set 0 disabled=yes dst-address=0.0.0.0/0 src-address=0.0.0.0/0 +/ip ipsec profile +set [ find default=yes ] dpd-interval=2m dpd-maximum-failures=5 +/ip proxy +set cache-administrator="" max-cache-size=none port=80,443 src-address=\ + 0.0.0.0 +/ip route +add disabled=no dst-address=0.0.0.0/0 gateway=10.30.30.81 +/ip service +set ftp disabled=yes +set telnet disabled=yes +set ssh address=10.30.30.0/24 port=2222 +set winbox address=10.30.30.0/24 +set api address=10.30.30.0/24 disabled=yes +set api-ssl address=10.30.30.0/24 disabled=yes +set www-ssl port=18443 +set www address=10.30.30.0/24 disabled=yes port=18880 +/ip service webserver +set graphs-plain=no rest-plain=no webfig-plain=no +/ip ssh +set forwarding-enabled=both publickey-authentication-options=verify-required \ + strong-crypto=yes +/ip upnp +set enabled=yes +/ipv6 nd +set [ find default=yes ] advertise-dns=yes +/system clock +set time-zone-name=Europe/Amsterdam +/system clock manual +set time-zone=+03:00 +/system identity +set name=MikroGig +/system logging +add action=email disabled=yes regex="* added|changed|removed *" topics=\ + system,info +/system ntp client +set enabled=yes +/system ntp server +set enabled=yes manycast=yes multicast=yes use-local-clock=yes +/system ntp client servers +add address=10.30.30.81 +add address=10.30.30.10 +add address=0.ru.pool.ntp.org +add address=1.ru.pool.ntp.org +add address=2.ru.pool.ntp.org +add address=3.ru.pool.ntp.org +add address=time.google.com disabled=yes +/system package update +set channel=long-term +/system scheduler +add comment="Every Day Set Global Environment Variables" name=AM-SetGlobalEnv \ + on-event="/system/script { run AM-GlobalConfig; run AM-GlobalFunc; }" \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Every Day Check For Update Scripts" interval=1d name=\ + AM-ScriptInstallUpdate on-event=\ + ":global ScriptInstallUpdate; \$ScriptInstallUpdate;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +/system script +add comment="Script for setup routeros script system" \ + dont-require-permissions=no name=AM-setup owner=AM-setup policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-setup\r\ + \n# Script comment: Script for setup routeros script system\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# :local ScriptName [ :jobname ];\r\ + \n# Additional commands:\r\ + \n#\r\ + \n# For scripts:\r\ + \n#:global NewScript \"script_name\"; \r\ + \n#:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n#/system/script/add name=\$NewScript owner=\$NewScript source=([/tool/fe\ + tch check-certificate=yes-without-crl (\$GlobalScriptsUrl . \$ScriptAdd . \ + \".rsc\") output=user as-value ]->\"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\" } 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 :local Script \"mod/AM-Certs-By-Ident\";\r\ + \n \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/fetch \ + check-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".\ + rsc\") output=user as-value ]->\"data\");\r\ + \n /system/script run \$Script;\r\ + \n :global tmpAddCerts;\r\ + \n :while ([ \$tmpAddCerts ] = true) do={\r\ + \n :delay 1s;\r\ + \n }\r\ + \n :delay 1s;\r\ + \n :put \"Removing \$Script...\";\r\ + \n /system/script/remove [ find where name=\$Script ];\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 comment="Global Config Script" 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\r\ + \n# RouterOS script: AM-GlobalConfig\r\ + \n# Script comment: Global Config Script\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# Warning: Dont touch this line!\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global GlobalConfReady false;\r\ + \n#\r\ + \n#\r\ + \n# Global Url For Amster scripts to fetch\r\ + \n# most be defined in AM-Init-Script or AM-setup scripts\r\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n:global ScriptsUrlSuffix (a);\r\ + \n:global CheckSumsVerify true;\r\ + \n\r\ + \n:global ScriptUpdatesCRLF true;\r\ + \n:global CommentsInScripts true;\r\ + \n\r\ + \n# Debug output:\r\ + \n:global PrintDebug true; #false;\r\ + \n\r\ + \n# Debug output for specific script:\r\ + \n#:set (\$PrintDebugOverride->\"AM-GlobalFunc\") true;\r\ + \n\r\ + \n# Debug logs\r\ + \n# Other actions (disk, email, remote or support) can be used as well.\r\ + \n# I do not recommend using echo - use debug output instead (https://rsc.\ + eworm.de/main/DEBUG.html#debug-output).\r\ + \n#/system/logging/add topics=script,debug action=memory;\r\ + \n\r\ + \n:global MikrotikUpgradeUrl \"https://upgrade.mikrotik.com/routeros\";\r\ + \n:global Domain \"WORKGROUP\";\r\ + \n\r\ + \n:global EmailGeneralTo \"vados@vados.ru\";\r\ + \n#:global EmailGeneralCc \"\";\r\ + \n\r\ + \n# \$ScriptInstallUpdate mod/notification-telegram\r\ + \n:global TelegramTokenId \"8390868324:AAG3_d1hfVR2M6pGAgDK6ZvhOe4J97nyopw\ + \";\r\ + \n:global TelegramChatId \"-1003631309063\"; #\"454403445\";\r\ + \n# Use this to send notifications to a specific topic in group.\r\ + \n#:global TelegramThreadId \"30\";\r\ + \n# Using telegram-chat you have to define trusted chat ids (not group ids\ + !)\r\ + \n# or user names. Groups allow to chat with devices simultaneously.\r\ + \n:global TelegramChatIdsTrusted {\r\ + \n \"454403445\"\r\ + \n \"-1003631309063\"\r\ + \n \"-5124482807\"\r\ + \n \"1087968824\";\r\ + \n};\r\ + \n# \"-5294757340\";\r\ + \n\r\ + \n:global TelegramChatGroups \"(all)\";\r\ + \n#:global TelegramChatGroups \"(all|home|office)\";\r\ + \n\r\ + \n:global NotificationFunctions {\r\ + \n \"email\"\r\ + \n \"telegram\";\r\ + \n};\r\ + \n# Toggle this to disable symbols in notifications.\r\ + \n:global NotificationsWithSymbols true;\r\ + \n:global TerminalColorOutput true;\r\ + \n\r\ + \n:global DetectIpAddrDefault \"https://ipv4.mikrotik.ovh/\";\r\ + \n:global DetectIpAddrFallback \"https://api.ipify.org/\";\r\ + \n\r\ + \n## Update channel. Possible values: stable, long-term, testing, developm\ + ent\r\ + \n:global updateChannel \"stable\";\r\ + \n\r\ + \n:global CertRenewUrl (\$GlobalScriptsUrl . \"certs/\" . \$Identity . \"/\ + \");\r\ + \n:global CertRenewTime 2w;\r\ + \n:global CertRenewPass (a); #{\r\ + \n# \"\";\r\ + \n# \"v3ry-s3cr3t\";\r\ + \n# \"4n0th3r-s3cr3t\";\r\ + \n#};\r\ + \n:global CertWarnTime 1w;\r\ + \n:global CertIssuedExportPass (a); # {\r\ + \n# \"\";\r\ + \n# \"cert1-cn\"=\"v3ry-s3cr3t\";\r\ + \n# \"cert2-cn\"=\"4n0th3r-s3cr3t\";\r\ + \n#};\r\ + \n\r\ + \n# Script BackupAndUpdate mode, possible values: backup,\r\ + \n# updateOnce - Update once as \"osnotify\" and back \"osnotify\" mode (i\ + n terminal run :set OSUpdateMode updateOnce; \$OSUpdateMode;). \r\ + \n# osupdate - Update if available and creates backups before/after update\ + \_(ignores `forceBackup`)\r\ + \n# Set `forceBackup` to true to always create backups, even\ + \_without updates\r\ + \n# osnotify - Set `forceBackup` to always create backups on every run\r\ + \n:global DevInfoIncludeIP true;\r\ + \n:global BackupAndUpdateMode \"osnotify\"\r\ + \n\r\ + \n:global forceBackup true;\r\ + \n:global BackupPassword \"Peskar55\";\r\ + \n\r\ + \n# SFTP Backup Variables\r\ + \n:global BackupRandomDelay 0;\r\ + \n:global BackupUploadUrl \"sftp://amster.vados.ru/upload/\";\r\ + \n:global BackupUploadUser \$Identity;\r\ + \n:global BackupUploadPass \"root.mnuc.backuper\";\r\ + \n\r\ + \n:global BackupSendBinary true;\r\ + \n:global BackupSendExport true;\r\ + \n:global BackupSendGlobalConfig true;\r\ + \n:global BackupSendScripts true;\r\ + \n\r\ + \n# Remove local file after uploading if no errors\r\ + \n:global BackupRmLocal true;\r\ + \n\r\ + \n# Local Backups Root Directory \r\ + \n:global BackupLocalRoot \"tmpfs\";\r\ + \n\r\ + \n# Encrypt Backup\r\ + \n:global BackupEncrypt true;\r\ + \n\r\ + \n# Sensitive information in Backups\r\ + \n:global BackupSens true;\r\ + \n\r\ + \n# User Export\r\ + \n:global BackupUser true;\r\ + \n\r\ + \n# License Export (not for CHR, will silently skip)\r\ + \n:global BackupLicense false;\r\ + \n\r\ + \n# SSH Keys\r\ + \n:global BackupSshKeys true;\r\ + \n\r\ + \n# Certificate Export\r\ + \n:global BackupCerts true;\r\ + \n\r\ + \n# Certificate Password\r\ + \n:global BackupCertsPasswd \"\";\r\ + \n\r\ + \n# User-Manager Export\r\ + \n:global BackupUserMan false;\r\ + \n\r\ + \n# The Dude Export\r\ + \n:global BackupDude false;\r\ + \n\r\ + \n# User Files to export, comma-separated string or array of strings\r\ + \n# User Files are not removed on backup\r\ + \n# Any directory paths will be removed (/ -> _) on remote file\r\ + \n# Nonpresent files are silently skipped\r\ + \n:global BackupUserList \"autosupout.rif,autosupout.old.rif\";\r\ + \n\r\ + \n# load functions and any custom scripts\r\ + \n# [ /system/script/find where name=\"global-config-ov\ + erlay\" ], \\\r\ + \n# [ /system/script/find where name~\"^global-config-o\ + verlay\\\\.d/.\" ]\r\ + \n#\r\ + \n#:foreach Script in=([ /system/script/find where name=\"Amster-TGglobalV\ + ars\" ], [ /system/script/find where name=\"Amster-TGglobalFunc\" ]) do={\ + \r\ + \n# :onerror Err {\r\ + \n# /system/script/run \$Script;\r\ + \n# } do={\r\ + \n# :log error (\"Loading configuration from configs and functions\"\ + \_. [ /system/script/get \$Script name ] . \" failed: \" . \$Err);\r\ + \n# }\r\ + \n#}\r\ + \n#:log info \"\\ndevMode = \$devMode\";\r\ + \n#:log info \"\\ndevRunning = \$devRunning\";\r\ + \n:foreach Script in=[ /system/script/find where source~\"^#!rsc by Vados \ + GlobalRUN\\r\?\\n\" ] do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n :log error (\"Run script \" . [ /system/script/get \$Script name \ + ] . \" width marker \\\" GlobalRUN\\\" failed: \" . \$Err);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# signal we are ready\r\ + \n:set GlobalConfReady true;\r\ + \n:while (\$GlobalConfReady != true) do={:delay 500ms};\r\ + \n" +add comment="Global functions" 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\r\ + \n# RouterOS script: AM-GglobalFunc\r\ + \n# Script comment: Global functions\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n:local ExitOK false;\r\ + \n:local ScriptName [ :jobname ];\r\ + \n#:global checkRunJob \$SriptName;\r\ + \n#:global fixCRLF;\r\ + \n#:if (\$fixCRLF != false) do={\r\ + \n#:foreach fixScript in=([ /system/script/find where name~\"*\" ]) do={/s\ + ystem/script/set source=[ :tocrlf [ get \$fixScript source ] ] \$fixScript\ + }\r\ + \n#:if (\$fixCRLF != \"LF\") do={ /system/script/set source=[ :tocrlf [ g\ + et \$fixScript source ] ] \$fixScript};};\r\ + \n#}\r\ + \n:global GlobalFuncReady false;\r\ + \n\r\ + \n# Git commit id & info, expected configuration version\r\ + \n:global CommitId \"main/657/b0bd77b1\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 14:15:02 15.05.2026.\";\r\ + \n\r\ + \n# The variables are received right here.\r\ + \n:global GlobalConfVersion 140;\r\ + \n\r\ + \n:global SumsDirAndFileName \"tmp/checksums.json\";\r\ + \n\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global IdentityShort [:pick \$Identity 0 18];\r\ + \n\r\ + \n:global devBoardName [/system/resource/get board-name];\r\ + \n:global devMode [/system/device-mode/get mode];\r\ + \n:global devCurArch [/system/resource/get architecture-name];\r\ + \n:global devCurVersion [/system/resource/get version];\r\ + \n\r\ + \n# Variables defined in AM-GlobalConfig.rsc\r\ + \n:global TerminalColorOutput;\r\ + \n:global CommentsInScripts;\r\ + \n:global DetectIpAddrDefault;\r\ + \n:global DetectIpAddrFallback;\r\ + \n:global updateChannel;\r\ + \n:global Domain;\r\ + \n:global EmailGeneralTo;\r\ + \n:global BackupAndUpdateMode;\r\ + \n\r\ + \n# Single functions, without nested functions.\r\ + \n:global MiniDateTimeStamp;\r\ + \n:global MicroDateTimeStamp;\r\ + \n\r\ + \n# Include globals \$PrintDebug and \$PrintDebugOverride\r\ + \n:global LogPrint;\r\ + \n\r\ + \n# DeviceInfo and Updates\r\ + \n:global IsCheckUpdates;\r\ + \n:global WaitCheckUpdates;\r\ + \n:global GetPubIp;\r\ + \n\r\ + \n:global GetArrDeviceInfo;\r\ + \n:global WaitArrDeviceInfo;\r\ + \n\r\ + \n:global devModel;\r\ + \n:global devRunningMode;\r\ + \n\r\ + \n:global devRbRevision;\r\ + \n:global devRbSerialNumber;\r\ + \n:global devRbVerAvail;\r\ + \n\r\ + \n:global runningChannelVersion;\r\ + \n:global runningChannel;\r\ + \n:global runningVersion;\r\ + \n\r\ + \n:global devBuildTime;\r\ + \n:global ROsVerAvail;\r\ + \n:global PkgUpdStatus;\r\ + \n:global currentUpdateChannel;\r\ + \n\r\ + \n:global ScriptInstallUpdate;\r\ + \n\r\ + \n:global DeviceInfo;\r\ + \n\r\ + \n:global OldMode;\r\ + \n\r\ + \n:global ParseKeyValueStore;\r\ + \n:global RandomDelay;\r\ + \n:global GetRandomNumber;\r\ + \n:global EscapeForRegEx;\r\ + \n:global CharacterMultiply;\r\ + \n:global CharacterReplace;\r\ + \n:global CleanFilePath;\r\ + \n:global CleanName;\r\ + \n\r\ + \n:global CommitBrief;\r\ + \n\r\ + \n:global EitherOr;\r\ + \n:global FormatLine;\r\ + \n:global GetRandom20CharAlNum;\r\ + \n:global GetRandom20CharHex;\r\ + \n:global GetRandomNumber;\r\ + \n:global Grep;\r\ + \n:global IfThenElse;\r\ + \n:global MAX;\r\ + \n:global MIN;\r\ + \n:global HumanReadableNum;\r\ + \n\r\ + \n:global IsFullyConnected;\r\ + \n:global IsDNSResolving;\r\ + \n:global IsTimeSync;\r\ + \n:global IsTimeSyncCached;\r\ + \n:global IsTimeSyncResetNtp;\r\ + \n\r\ + \n:global MkDir;\r\ + \n:global RmDir;\r\ + \n:global RmFile;\r\ + \n:global FileGet;\r\ + \n:global Unix2Dos;\r\ + \n:global UrlEncode;\r\ + \n:global WaitForFile;\r\ + \n:global ScriptLock;\r\ + \n:global SendTelegram;\r\ + \n:global NotificationFunctions;\r\ + \n:global SendNotification;\r\ + \n:global SendNotification2;\r\ + \n:global SymbolForNotification;\r\ + \n:global SymbolByUnicodeName;\r\ + \n:global ValidateSyntax;\r\ + \n:global CheckSumsVerify;\r\ + \n:global GlobalConfChanges;\r\ + \n:global GlobalConfMigration;\r\ + \n:global VersionToNum;\r\ + \n:global RequiredRouterOS;\r\ + \n:global ExitError;\r\ + \n:global ExitOnError;\r\ + \n\r\ + \n:global FetchHugeFiles;\r\ + \n:global FetchUserAgentStr;\r\ + \n:global FileExists;\r\ + \n:global CertificateAvailable;\r\ + \n:global CertificateDownload;\r\ + \n:global CertificateNameByCN;\r\ + \n:global CharacterMultiply;\r\ + \n\r\ + \n:global InspectVar;\r\ + \n:global InspectVarRet;\r\ + \n:global ParseCustom;\r\ + \n\r\ + \n:set IsCheckUpdates do={\r\ + \n :local isInfo [:tobool \$1];\r\ + \n :global updateChannel;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :log info (\$0 . \" \\\$isInfo = \" . \$isInfo); \r\ + \n :local CurrentChannel [ /system/package/update/get channel ];\r\ + \n :if ([ :len \$updateChannel ] > 0 && \$CurrentChannel != \$updateChann\ + el) do={\r\ + \n :retry command={/system/package/update set channel=\$updateChannel} \ + \_delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" Set updates channel to: \$updateChannel\");\r\ + \n }\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local Channel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set currentUpdateChannel \$Channel;\r\ + \n :log info (\$0 . \" Update Channel: \" . \$Channel . \".\");\r\ + \n :local StatusPkg \"undefined\";\r\ + \n :log info (\$0 . \" Checking for updates...\");\r\ + \n :retry command={:set \$StatusPkg ([/system/package/update/check-for-up\ + dates without-paging as-value]->\"status\")} \\\r\ + \n delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" \\\$StatusPkg = \" . \$StatusPkg);\r\ + \n :if (\$StatusPkg = \"New version is available\") do={ :set PkgUpdStatu\ + s true; } else={ :set PkgUpdStatus false; }\r\ + \n :set ROsVerAvail [ :tostr [ /system/package/update/get latest-version \ + ] ];\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if (\$isInfo != false || \$PkgUpdStatus = true) do={\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :retry command={:set (\$arrDeviceInfo->\"devUpdates\") [ /system/pac\ + kage/update/get ]} delay=500ms max=5 on-error={:log error (\"Error\")};\r\ + \n :return true;\r\ + \n } else={\r\ + \n :return \$PkgUpdStatus;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set WaitCheckUpdates do={\r\ + \n :global IsCheckUpdates;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :local Status \"\";\r\ + \n :local Update;\r\ + \n :local WaitCount 0;\r\ + \n :if ([ \$IsCheckUpdates true ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n :while ((\$Status = \"\" || \$Status = \"finding out latest version...\ + \") && \$WaitCount < 60) do={\r\ + \n :delay 1s;\r\ + \n :set WaitCount (\$WaitCount + 1);\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n }\r\ + \n :set Update [ /system/package/update/get ];\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n :if ((\$Update->\"status\") = \"New version is available\") do={\r\ + \n :set PkgUpdStatus true;\r\ + \n } else={\r\ + \n :set PkgUpdStatus false;\r\ + \n }\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :set (\$arrDeviceInfo->\"devUpdates\") \$Update;\r\ + \n :if (\$Status = \"\" || \$Status = \"finding out latest version...\") \ + do={\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set WaitArrDeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :while ([ \$GetArrDeviceInfo ] = false) do={\r\ + \n :delay 1s;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set GetArrDeviceInfo do={\r\ + \n :global LogPrint;\r\ + \n :global arrDeviceInfo;\r\ + \n :global devBoardName;\r\ + \n :global devModel;\r\ + \n :global devRunning;\r\ + \n :global devCurArch;\r\ + \n :global devRbRevision;\r\ + \n :global devRbSerialNumber;\r\ + \n :global devBuildTime;\r\ + \n :global runningChannelVersion;\r\ + \n :global runningChannel;\r\ + \n :global runningVersion;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n\r\ + \n :local DeviceInfo;\r\ + \n :local Resource [/system/resource/get];\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local VersionString [ :tostr (\$Resource->\"version\") ];\r\ + \n :local ChannelStart [ :find \$VersionString \" (\" ];\r\ + \n :local RouterBoard;\r\ + \n :local IsRouterBoard false;\r\ + \n :local RunningMode \"\";\r\ + \n\r\ + \n :set devCurArch [ :tostr (\$Resource->\"architecture-name\") ];\r\ + \n :set devBuildTime [ :tostr (\$Resource->\"build-time\") ];\r\ + \n :set runningChannelVersion \$VersionString;\r\ + \n :set runningVersion \$VersionString;\r\ + \n :set runningChannel \"\";\r\ + \n\r\ + \n :if ([ :typeof \$ChannelStart ] = \"num\" && \$ChannelStart >= 0) do=\ + {\r\ + \n :set runningVersion [ :pick \$VersionString 0 \$ChannelStart ];\r\ + \n :local ChannelRest [ :pick \$VersionString (\$ChannelStart + 2) [ :\ + len \$VersionString ] ];\r\ + \n :local ChannelEnd [ :find \$ChannelRest \")\" ];\r\ + \n :if ([ :typeof \$ChannelEnd ] = \"num\" && \$ChannelEnd >= 0) do={\ + \r\ + \n :set runningChannel [ :pick \$ChannelRest 0 \$ChannelEnd ];\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([:pick \$devBoardName 0 3] != \"CHR\" or [:pick \$devBoardName 0\ + \_3] != \"x86\") do={\r\ + \n :do {\r\ + \n :set RouterBoard [[ :parse \"/system/routerboard/get\" ]];\r\ + \n# :set RouterBoard [ /system/routerboard/get ];\r\ + \n :if ((\$RouterBoard->\"routerboard\") = true) do={\r\ + \n :set IsRouterBoard true;\r\ + \n }\r\ + \n } on-error={}\r\ + \n }\r\ + \n\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get mode ];\r\ + \n } on-error={\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get running ];\r\ + \n } on-error={\r\ + \n :set RunningMode \"\";\r\ + \n }\r\ + \n }\r\ + \n :set devRunning \$RunningMode;\r\ + \n\r\ + \n :if (\$IsRouterBoard = true) do={\r\ + \n :set devModel [ :tostr (\$RouterBoard->\"model\") ];\r\ + \n :set devRbRevision [ :tostr (\$RouterBoard->\"revision\") ];\r\ + \n :set devRbSerialNumber [ :tostr (\$RouterBoard->\"serial-number\") \ + ];\r\ + \n } else={\r\ + \n :set devModel \$devBoardName;\r\ + \n :set devRbRevision \"\";\r\ + \n :set devRbSerialNumber \"\";\r\ + \n }\r\ + \n\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n\r\ + \n :set (\$DeviceInfo->\"board-name\") \$devBoardName;\r\ + \n :set (\$DeviceInfo->\"architecture-name\") \$devCurArch;\r\ + \n :set (\$DeviceInfo->\"model\") \$devModel;\r\ + \n :set (\$DeviceInfo->\"revision\") \$devRbRevision;\r\ + \n :set (\$DeviceInfo->\"serial-number\") \$devRbSerialNumber;\r\ + \n :set (\$DeviceInfo->\"running-mode\") \$devRunning;\r\ + \n :set (\$DeviceInfo->\"build-time\") \$devBuildTime;\r\ + \n :set (\$DeviceInfo->\"running-channel-version\") \$runningChannelVers\ + ion;\r\ + \n :set (\$DeviceInfo->\"running-version\") \$runningVersion;\r\ + \n :set (\$DeviceInfo->\"running-channel\") \$runningChannel;\r\ + \n :set (\$DeviceInfo->\"routerboard\") \$IsRouterBoard;\r\ + \n :set (\$DeviceInfo->\"current-firmware\") [ :tostr (\$RouterBoard->\"\ + current-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"upgrade-firmware\") [ :tostr (\$RouterBoard->\"\ + upgrade-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"package-channel\") \$currentUpdateChannel;\r\ + \n :set (\$DeviceInfo->\"installed-version\") [ :tostr (\$Update->\"inst\ + alled-version\") ];\r\ + \n :set (\$DeviceInfo->\"latest-version\") \$ROsVerAvail;\r\ + \n :set (\$DeviceInfo->\"update-status\") [ :tostr (\$Update->\"status\"\ + ) ];\r\ + \n\r\ + \n :set arrDeviceInfo \$DeviceInfo;\r\ + \n :return \$DeviceInfo;\r\ + \n}\r\ + \n\r\ + \n:set DeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global IfThenElse;\r\ + \n :global FormatLine;\r\ + \n :global CommitBrief;\r\ + \n\r\ + \n :local License [/system/license/get];\r\ + \n :local Snmp [ /snmp/get ];\r\ + \n :local Info [ \$GetArrDeviceInfo ];\r\ + \n\r\ + \n :if ([ :typeof \$Info ] != \"array\") do={\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :return ( \\\r\ + \n [ \$FormatLine \"Hostname\" \$Identity ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"location\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Location\" (\$Snmp->\"location\") ] . \"\\n\") ]\ + \_. \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"contact\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Contact\" (\$Snmp->\"contact\") ] . \"\\n\") ] .\ + \_\\\r\ + \n \"Hardware:\\n\" . \\\r\ + \n [ \$FormatLine \" Board\" (\$Info->\"board-name\") ] . \"\\n\" . \ + \\\r\ + \n [ \$FormatLine \" Arch\" (\$Info->\"architecture-name\") ] . \"\\\ + n\" . \\\r\ + \n [ \$FormatLine \" Model\" (\$Info->\"model\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"revision\") ] > 0) \\\r\ + \n (\" \" . (\$Info->\"revision\")) ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"serial-number\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Serial\" (\$Info->\"serial-number\") ] . \"\ + \\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"nlevel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"nlevel\ + \")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS:\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"level\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"level\ + \")) ] . \"\\n\") ] . \\\r\ + \n [ \$FormatLine \" Channel\" (\$Info->\"package-channel\") ] . \"\ + \\n\" . \\\r\ + \n [ \$FormatLine \" Installed\" (\$Info->\"installed-version\") ] .\ + \_\"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"running-channel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Running\" ((\$Info->\"running-version\") . \ + \" (\" . (\$Info->\"running-channel\") . \")\") ] . \"\\n\") \\\r\ + \n ([ \$FormatLine \" Running\" (\$Info->\"running-version\") ] . \ + \"\\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"latest-version\") ] > 0 && \\\r\ + \n (\$Info->\"installed-version\") != (\$Info->\"latest-version\"))\ + \_\\\r\ + \n ([ \$FormatLine \" Available\" (\$Info->\"latest-version\") ] .\ + \_\"\\n\") ] . \\\r\ + \n [ \$IfThenElse ((\$Info->\"routerboard\") = true && \\\r\ + \n (\$Info->\"current-firmware\") != (\$Info->\"upgrade-firmware\")\ + ) \\\r\ + \n ([ \$FormatLine \" Firmware\" ((\$Info->\"current-firmware\") .\ + \_\" -> \" . (\$Info->\"upgrade-firmware\")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS-Scripts:\\n\" . \\\r\ + \n [ \$FormatLine \" Commit\" [ \$CommitBrief ] ] . \"\\n\" . \\\r\ + \n [ \$FormatLine \" Version\" \$GlobalConfVersion ]);\r\ + \n}\r\ + \n\r\ + \n:if ([ :typeof \$NotificationFunctions ] != \"array\") do={:set Notifica\ + tionFunctions ({})}\r\ + \n\r\ + \n:set GetRandom20CharAlNum do={\r\ + \n :global EitherOr;\r\ + \n :return [ :rndstr length=[ \$EitherOr [ :tonum \$1 ] 20 ] from=\"ABCDE\ + FGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\" ];\r\ + \n}\r\ + \n\r\ + \n:set GetRandom20CharHex do={:global EitherOr; :return [ :rndstr length=[\ + \_\$EitherOr [ :tonum \$1 ] 20 ] from=\"0123456789abcdef\" ]; }\r\ + \n:set GetRandomNumber do={:global EitherOr; :return [ :rndnum from=0 to=[\ + \_\$EitherOr [ :tonum \$1 ] 4294967295 ] ]; }\r\ + \n\r\ + \n:global checkRunJob;\r\ + \n:set checkRunJob do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLock; \r\ + \n :if ([ \$ScriptLock \$Script ] = false) do={:return false}\r\ + \n :foreach Job in=[ /system/script/job/find where script=\$Script ] do={\ + :set Job [ /system/script/job/get \$Job ];\r\ + \n :while ([ :typeof (\$Job->\"parent\") ] = \"id\") do={:set Job [ /sy\ + stem/script/job/get [ find where .id=(\$Job->\"parent\") ] ]}\r\ + \n :if ((\$Job->\"type\") = \"login\") do={:return true};}; :return fa\ + lse; \r\ + \n}\r\ + \n\r\ + \n:set InspectVar do={\r\ + \n :global InspectVarRet;\r\ + \n :put [ :tocrlf [ \$InspectVarRet \$1 ] ];\r\ + \n}\r\ + \n\r\ + \n:set CommitBrief do={\r\ + \n :global CommitId;\r\ + \n :global CommitInfo;\r\ + \n :if (\$CommitId = \"unknown\") do={\r\ + \n :return \"unknown\";\r\ + \n }\r\ + \n :return (\$CommitInfo . \"/\" . [ :pick \$CommitId 0 8 ]);\r\ + \n}\r\ + \n\r\ + \n:set InspectVarRet do={\r\ + \n :local Input \$1;\r\ + \n :local Level (0 + [ :tonum \$2 ]);\r\ + \n :global CharacterReplace;\r\ + \n :global IfThenElse;\r\ + \n :global InspectVarRet;\r\ + \n :local IndentReturn do={\r\ + \n :local Prefix [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Level [ :tonum \$3 ];\r\ + \n :global CharacterMultiply;\r\ + \n :return ([ \$CharacterMultiply \" \" (\$Level * 2) ] . \"-\" . \$Pre\ + fix . \"-> \" . \$Value);\r\ + \n }\r\ + \n :local TypeOf [ :typeof \$Input ];\r\ + \n :local Len [ :len \$Input ];\r\ + \n :local Return [ \$IndentReturn \"type\" \$TypeOf \$Level ];\r\ + \n :if (\$TypeOf = \"array\") do={\r\ + \n :foreach Key,Value in=\$Input do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"key\" \$Key (\$Level + 1) ] . \"\\n\" . \\\r\ + \n [ \$InspectVarRet \$Value (\$Level + 2) ]);\r\ + \n }\r\ + \n } else={\r\ + \n :if (\$TypeOf = \"str\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"len\" \$Len \$Level ]);\r\ + \n :if ([ :typeof [ :find \$Input (\"\\r\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\r\") \"\" ];\r\ + \n }\r\ + \n :if ([ :typeof [ :find \$Input (\"\\n\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\n\") \" \" ];\r\ + \n }\r\ + \n }\r\ + \n :if (\$TypeOf != \"nothing\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"value\" [ \$IfThenElse ([ :len \$Input ] > 80)\ + \_\\\r\ + \n ([ :pick \$Input 0 77 ] . \"...\") \$Input ] \$Level ]);\r\ + \n }\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set GetPubIp do={\r\ + \n :global DetectIpAddrDefault;\r\ + \n :global DetectIpAddrFallback;\r\ + \n\r\ + \n :local PubIpAddr false;\r\ + \n :local Url \$DetectIpAddrDefault;\r\ + \n :local JobName [ :jobname ];\r\ + \n\r\ + \n :do {\r\ + \n :log debug (\$0 . \" Trying to detect public IP using default serv\ + ice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=50ms max=5 on-error={:log error (\$JobName . \" Failed to \ + detect public IP using default service: \" . \$Url . \".\")}\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed to detect public IP using default serv\ + ice: \" . \$Url . \".\");\r\ + \n :set Url \$DetectIpAddrFallBack;\r\ + \n :log debug (\$0 . \" Trying to detect public IP using fallback ser\ + vice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=200ms max=5 on-error={:log error (\$JobName . \" Failed to\ + \_detect public IP using fallback service: \" . \$Url . \".\")}\r\ + \n };\r\ + \n :local IpLen ([ :len \$PubIpAddr ] -1);\r\ + \n :if (\$PubIpAddr = false) do={:set PubIpAddr \"not-detected\"} else=\ + {:set PubIpAddr [:pick \$PubIpAddr 0 \$IpLen]}\r\ + \n :return \$PubIpAddr;\r\ + \n}\r\ + \n\r\ + \n:set FormatLine do={\r\ + \n :local Key [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Indent [ :tonum \$3 ];\r\ + \n :local Spaces;\r\ + \n :local Return \"\";\r\ + \n :global CharacterMultiply;\r\ + \n :global EitherOr;\r\ + \n :set Indent [ \$EitherOr \$Indent 16 ];\r\ + \n :local Spaces [ \$CharacterMultiply \" \" \$Indent ];\r\ + \n :if ([ :len \$Key ] > 0) do={ :set Return (\$Key . \":\")}\r\ + \n :if ([ :len \$Key ] > (\$Indent - 2)) do={:set Return (\$Return . \"\\\ + n\" . [ :pick \$Spaces 0 \$Indent ] . \$Value);\r\ + \n } else={:set Return (\$Return . [ :pick \$Spaces 0 (\$Indent - [ :len \ + \$Return ]) ] . \$Value)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ParseCustom do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Start [:find [ \$Str ] [:tostr \$2]];\r\ + \n :local End [ :tostr \$3 ];\r\ + \n :local Num [ :tonum \$4 ];\r\ + \n :local Return;\r\ + \n :if ([:len \$Num] = 0) do={:set Num \"0\"}\r\ + \n :local rest [:pick \$Str (\$Start+\$Num) [:len \$Str]]; \r\ + \n :if ([:len \$End ] = 0) do={:set Return [:pick \$Str \$Num \$Start]} e\ + lse={\r\ + \n :set End [:find \$rest \$End];\r\ + \n :set Return [:pick \$rest 0 \$End];\r\ + \n }\r\ + \n:return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set LogPrint do={\r\ + \n :local Severity [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Message [ :tostr \$3 ];\r\ + \n :global PrintDebug;\r\ + \n :global PrintDebugOverride;\r\ + \n :global EitherOr;\r\ + \n :local Debug [ \$EitherOr (\$PrintDebugOverride->\$Name) \$PrintDebug \ + ];\r\ + \n :local PrintSeverity do={\r\ + \n :global TerminalColorOutput;\r\ + \n :if (\$TerminalColorOutput != true) do={:return \$1}\r\ + \n :local Color { debug=96; info=97; warning=93; error=91 };\r\ + \n :return (\"\\1B[\" . \$Color->\$1 . \"m\" . \$1 . \"\\1B[0m\");\r\ + \n}\r\ + \n :local Log ([ \$EitherOr \$Name \"\" ] . \": \" . \$Message);\ + \r\ + \n :if (\$Severity ~ (\"^(custom|debug|error|info)\\\$\")) do={\r\ + \n :if (\$Severity = \"debug\") do={:log debug \$Log}\r\ + \n :if (\$Severity = \"error\") do={:log error \$Log}\r\ + \n :if (\$Severity = \"info\" ) do={:log info \$Log}\r\ + \n } else={:log warning \$Log; :set Severity \"warning\"}\r\ + \n :if (\$Severity != \"debug\" || \$Debug = true) do={:put ([ \$PrintSev\ + erity \$Severity ] . \": \" . \$Message)}\r\ + \n}\r\ + \n\r\ + \n:set CertificateAvailable do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :local UseFor [ :tostr \$2 ];\r\ + \n\r\ + \n :global CertificateDownload;\r\ + \n :global ParseKeyValueStore;\r\ + \n\r\ + \n :if ([ :len \$UseFor ] = 0) do={\r\ + \n :log warning (\$0 . \"The intended use is undefined!\");\r\ + \n :set UseFor \"undefined\";\r\ + \n }\r\ + \n :if ([ /system/resource/get free-hdd-space ] < 8388608 && \\\r\ + \n [ /certificate/settings/get crl-download ] = true && \\\r\ + \n [ /certificate/settings/get crl-store ] = \"system\") do={\r\ + \n :log warning (\$0 . \"This system has low free flash space but \" . \ + \\\r\ + \n \"is configured to download certificate CRLs to system!\");\r\ + \n }\r\ + \n :if ([ :len \$CommonName ] = 0) do={\r\ + \n :log warning (\$0 . \"No CommonName given!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if (((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" || \\\ + \r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \$UseFor || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CommonName\ + \_] ] > 0) do={\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n :log info (\$0 . \"Certificate with CommonName '\" . \$CommonName . \ + \"' not available.\");\r\ + \n :if ([ \$CertificateDownload \$CommonName ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] > 1\ + ) do={\r\ + \n :log info (\$0 . \"There are \" . \$CertCount . \" Certificates with\ + \_CommonName '\" . \$CommonName . \"'. Should be ok.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :local CertVal [ /certificate/get [ find where common-name=\$CommonNam\ + e ] ];\r\ + \n :while ((\$CertVal->\"akid\") != \"\" && (\$CertVal->\"akid\") != (\$C\ + ertVal->\"skid\")) do={\r\ + \n :if ([ :len [ /certificate/find where skid=(\$CertVal->\"akid\") ] ]\ + \_= 0) do={\r\ + \n :local IssuerCN ([ \$ParseKeyValueStore (\$CertVal->\"issuer\") ]-\ + >\"CN\");\r\ + \n :log info (\$0 . \"Certificate chain for '\" . \$CommonName . \"' \ + is incomplete, missing '\" . \$IssuerCN . \"'.\");\r\ + \n :if ([ \$CertificateDownload \$IssuerCN ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :set CertVal [ /certificate/get [ find where skid=(\$CertVal->\"akid\ + \") ] ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateDownload do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :global ScriptUpdatesBaseUrl;\r\ + \n :global ScriptUpdatesUrlSuffix;\r\ + \n :global CertificateNameByCN;\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :log info (\$0 . \"Downloading and importing certificate with \" . \\\ + \r\ + \n \"CommonName '\" . \$CommonName . \"'.\");\r\ + \n :local FileName ([ \$CleanName \$CommonName ] . \".pem\");\r\ + \n :do {\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-header\ + -field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n (\$ScriptUpdatesBaseUrl . \"certs/\" . \$FileName . \$ScriptUpdate\ + sUrlSuffix) \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n } on-error={\r\ + \n :log warning (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \\\r\ + \n \"' from repository! Trying fallback to mkcert.org...\");\r\ + \n :do {\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where common-name=\"ISRG Root X1\"\ + \_] ] = 0 && \\\r\ + \n !(((\$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=\"ISRG\ + \_Root X1\" ] ] > 0)) do={\r\ + \n :log error (\$0 . \" Required certificate is not available.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-head\ + er-field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n url=\"https://mkcert.org/generate/\" http-data=[ :serialize to=jso\ + n ({ \$CommonName }) ] \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n :if ([ /file/get \$FileName size ] = 0) do={\r\ + \n \$RmFile \$FileName;\r\ + \n :error false;\r\ + \n }\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \"'!\");\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n /certificate/import file-name=\$FileName passphrase=\"\" as-value;\r\ + \n :delay 1s;\r\ + \n \$RmFile \$FileName;\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n /certificate/remove [ find where name~(\"^\" . \$FileName . \"_[0-9]\ + +\\\$\") ];\r\ + \n :log warning (\$0 . \" Certificate with CommonName '\" . \$CommonNam\ + e . \"' still unavailable!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :foreach Cert in=[ /certificate/find where name~(\"^\" . \$FileName . \ + \"_[0-9]+\\\$\") ] do={\r\ + \n \$CertificateNameByCN [ /certificate/get \$Cert common-name ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateNameByCN do={\r\ + \n :local Match [ :tostr \$1 ];\r\ + \n :global CleanName;\r\ + \n :local Cert ([ /certificate/find where (common-name=\$Match or fingerp\ + rint=\$Match or name=\$Match) ]->0);\r\ + \n :if ([ :len \$Cert ] = 0) do={\r\ + \n :log warning (\$0 .\" No matching certificate found.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CommonName [ /certificate/get \$Cert common-name ];\r\ + \n /certificate/set \$Cert name=[ \$CleanName \$CommonName ];\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FileExists do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local Type [ :tostr \$2 ];\r\ + \n :global FileGet;\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={ :return false; }\r\ + \n :if ([ :len (\$FileVal->\"size\") ] = 0) do={ :return false; }\r\ + \n :if ([ :len \$Type ] = 0 || \$FileVal->\"type\" = \$Type) do={ :return\ + \_true; }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set Grep do={\r\ + \n :local Input ([ :tostr \$1 ] . \"\\n\");\r\ + \n :local Pattern [ :tostr \$2 ];\r\ + \n :if ([ :typeof [ :find \$Input \$Pattern ] ] = \"nil\") do={:return []\ + }\r\ + \n :do {\r\ + \n :local Line [ :pick \$Input 0 [ :find \$Input \"\\n\" ] ];\r\ + \n :if ([ :typeof [ :find \$Line \$Pattern ] ] = \"num\") do={:return \ + \$Line}\r\ + \n :set Input [ :pick \$Input ([ :find \$Input \"\\n\" ] + 1) [ :len \$\ + Input ] ];\r\ + \n } while=([ :len \$Input ] > 0);\r\ + \n :return [];\r\ + \n}\r\ + \n\r\ + \n:set HumanReadableNum do={\r\ + \n :local Input [ :tonum \$1 ];\r\ + \n :local Base [ :tonum \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global IfThenElse;\r\ + \n :local Prefix \"kMGTPE\";\r\ + \n :local Pow 1;\r\ + \n :set Base [ \$EitherOr \$Base 1024 ];\r\ + \n :local Bin [ \$IfThenElse (\$Base = 1024) \"i\" \"\" ];\r\ + \n :if (\$Input < \$Base) do={:return \$Input}\r\ + \n :for I from=0 to=[ :len \$Prefix ] do={\r\ + \n :set Pow (\$Pow * \$Base);\r\ + \n :if (\$Input / \$Base < \$Pow) do={\r\ + \n :set Prefix [ :pick \$Prefix \$I ];\r\ + \n :local Tmp1 (\$Input * 100 / \$Pow);\r\ + \n :local Tmp2 (\$Tmp1 / 100);\r\ + \n :if (\$Tmp2 >= 100) do={:return (\$Tmp2 . \$Prefix . \$Bin)}\r\ + \n :return (\$Tmp2 . \".\" . \\\r\ + \n [ :pick \$Tmp1 [ :len \$Tmp2 ] ([ :len \$Tmp1 ] - [ :len \$Tmp\ + 2 ] + 1) ] . \\\r\ + \n \$Prefix . \$Bin);\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set CleanFilePath do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CharacterReplace;\r\ + \n :while (\$Path ~ \"//\") do={ :set \$Path [ \$CharacterReplace \$Path \ + \"//\" \"/\" ]; }\r\ + \n :if ([ :pick \$Path 0 ] = \"/\") do={ :set Path [ :pick \$Path 1 [ :le\ + n \$Path ] ]; }\r\ + \n :if ([ :pick \$Path ([ :len \$Path ] - 1) ] = \"/\") do={ :set Path [ \ + :pick \$Path 0 ([ :len \$Path ] - 1) ]; }\r\ + \n :return \$Path;\r\ + \n}\r\ + \n\r\ + \n:set CleanName do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Return \"\";\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :typeof [ find \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr\ + stuvwxyz0123456789\" \$Char ] ] = \"nil\") do={\r\ + \n :do {:if ([ :len \$Return ] = 0) do={:error true};\r\ + \n :if ([ :pick \$Return ([ :len \$Return ] - 1) ] = \"-\") do={:er\ + ror true}; :set Char \"-\"} on-error={:set Char \"\"}; \r\ + \n };\r\ + \n :set Return (\$Return . \$Char)};\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set RandomDelay do={\r\ + \n :local Time [ :tonum \$1 ];\r\ + \n :local Unit [ :tostr \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global GetRandomNumber;\r\ + \n :global MAX;\r\ + \n :if (\$Time = 0) do={:return false}\r\ + \n :delay ([ \$MAX 10 [ \$GetRandomNumber ([ :tonsec [ :totime (\$Time . \ + [ \$EitherOr \$Unit \"s\" ]) ] ] / 1000000) ] ] . \"ms\");\r\ + \n}\r\ + \n\r\ + \n:set EscapeForRegEx do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"^.[]\\\$()|*+\?{}\\\\\");\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :find \$Chars \$Char ]) do={:set Char (\"\\\\\" . \$Char)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ExitError do={\r\ + \n :local ExitOK [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Error [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :if (\$ExitOK = \"false\") do={\r\ + \n :log error (\$Name [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\\\$\") \ + \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with er\ + ror\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \ + \$Error) \".\" ]);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set ExitOnError do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :local Error [ :tostr \$2 ];\r\ + \n :global IfThenElse;\r\ + \n :log error (\$Name . \" \" . [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\ + \\\$\") \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with erro\ + r\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \$E\ + rror) \".\" ]);\r\ + \n}\r\ + \n\r\ + \n:set MiniDateTimeStamp do={\r\ + \n :local mikro [ :tobool \$1 ];\r\ + \n /system/clock;\r\ + \n :local vdate [get date];\r\ + \n :local vtime [get time];\r\ + \n :local vdoff [:toarray \"0,4,5,7,8,10\"];\r\ + \n :local MM [:pick \$vdate (\$vdoff->2) (\$vdoff->3)];\r\ + \n :local M [:tonum \$MM];\r\ + \n :if (\$vdate ~ \".../../....\") do={\r\ + \n :set vdoff [:toarray \"7,11,1,3,4,6\"];\r\ + \n :set M ([:find \"xxanebarprayunulugepctovecANEBARPRAYUNULUGE\ + PCTOVEC\" [:pick \$vdate (\$vdoff->2) (\$vdoff->3)] -1] / 2);\r\ + \n :if (\$M>12) do={:set M (\$M - 12)}\r\ + \n :set MM [:pick (100 + \$M) 1 3];\r\ + \n }\r\ + \n :local yyyy [:pick \$vdate (\$vdoff->0) (\$vdoff->1)];\r\ + \n :local dd [:pick \$vdate (\$vdoff->4) (\$vdoff->5)];\r\ + \n :local HH [:pick \$vtime 0 2];\r\ + \n :local mm [:pick \$vtime 3 5];\r\ + \n :local ss [:pick \$vtime 6 8];\r\ + \n :local Return;\r\ + \n :if (\$mikro = true) do={\r\ + \n :set Return ([:pick \$yyyy 2 4] . [:pick \$dd 0 1] . [:pick \$HH 0\ + \_1] . [:pick \$mm 3 4] . [:pick \$ss 6 7]);\r\ + \n } else={\r\ + \n :set Return ([\$yyyy] . [\$MM] . [\$dd] . [\$HH] . [\$mm] . [\$ss]);\ + \r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set WaitForFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local WaitTime [ :totime \$2 ];\r\ + \n :global CleanFilePath;\r\ + \n :global EitherOr;\r\ + \n :global MAX;\r\ + \n :set FileName [ \$CleanFilePath \$FileName ];\r\ + \n :local Delay ([ \$MAX [ \$EitherOr \$WaitTime 2s ] 100ms ] / 9);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } delay=\$Delay max=10;\r\ + \n } on-error={ }\r\ + \n :while ([ :len [ /file/find where name=\$FileName ] ] > 0) do={\r\ + \n :do {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } on-error={ }\r\ + \n :delay \$Delay;\r\ + \n :set Delay (\$Delay * 3 / 2);\r\ + \n }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set FileGet do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global WaitForFile;\r\ + \n :if ([ \$WaitForFile \$FileName 0s ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n :local FileVal false;\r\ + \n :do {\r\ + \n :set FileVal [ /file/get \$FileName ];\r\ + \n } on-error={ }\r\ + \n :return \$FileVal;\r\ + \n}\r\ + \n\r\ + \n:set RmDir do={\r\ + \n :local DirName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :log debug (\$0 . \" Removing directory: \". \$DirName);\r\ + \n :local DirVal [ \$FileGet \$DirName ];\r\ + \n :if (\$DirVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n };\r\ + \n :if (\$DirVal->\"type\" != \"directory\") do={\r\ + \n :log error (\$0 . \" Directory '\" . \$DirName . \"' is not a direct\ + ory.\");\r\ + \n :return false;\r\ + \n };\r\ + \n :onerror Err {\r\ + \n /file/remove \$DirName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing directory '\" . \$DirName . \"' failed\ + : \" . \$Err);\r\ + \n :return false;\r\ + \n };\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set RmFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :log debug (\$0 . \" Removing file: \". \$FileName);\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if (\$FileVal->\"type\" = \"directory\" || \$FileVal->\"type\" = \"di\ + sk\") do={\r\ + \n :log error (\$0 . \" File '\" . \$FileName . \"' is not a file.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/remove \$FileName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing file '\" . \$FileName . \"' failed: \"\ + \_. \$Err); :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MkDir do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CleanFilePath;\r\ + \n :global FileGet;\r\ + \n :global RmDir;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :local MkTmpfs do={\r\ + \n :global WaitForFile;\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 (\$0 . \" The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\$0 . \" Creating disk of type tmpfs.\");\r\ + \n \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource\ + /get total-memory ] / 3);\r\ + \n \$WaitForFile \"tmpfs\";\r\ + \n } do={\r\ + \n :log warning (\$0 . \" Creating disk of type tmpfs failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :set Path [ \$CleanFilePath \$Path ];\r\ + \n :if (\$Path = \"\") do={\r\ + \n :return true;\r\ + \n }\r\ + \n :log debug (\$0 . \" Making directory: \" . \$Path);\r\ + \n :local PathVal [ \$FileGet \$Path ];\r\ + \n :if (\$PathVal->\"type\" = \"directory\") do={\r\ + \n :log debug (\$0 . \" ... which already exists.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :pick \$Path 0 5 ] = \"tmpfs\") do={\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=\$Path;\r\ + \n \$WaitForFile \$Path;\r\ + \n } do={\r\ + \n :log warning (\$0 . \" Making directory '\" . \$Path . \"' failed: \ + \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MAX do={:if (\$1 > \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n:set MIN do={:if (\$1 < \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set CharacterReplace do={\r\ + \n :local String [ :tostr \$1 ];\r\ + \n :local ReplaceFrom [ :tostr \$2 ];\r\ + \n :local ReplaceWith [ :tostr \$3 ];\r\ + \n :local Return \"\";\r\ + \n :if (\$ReplaceFrom = \"\") do={:return \$String}\r\ + \n :while ([ :typeof [ :find \$String \$ReplaceFrom ] ] != \"nil\") do={\ + \r\ + \n :local Pos [ :find \$String \$ReplaceFrom ];\r\ + \n :set Return (\$Return . [ :pick \$String 0 \$Pos ] . \$ReplaceWith);\ + \r\ + \n :set String [ :pick \$String (\$Pos + [ :len \$ReplaceFrom ]) [ :len\ + \_\$String ] ];\r\ + \n }\r\ + \n :return (\$Return . \$String);\r\ + \n}\r\ + \n\r\ + \n:set IfThenElse do={\r\ + \n :if ([ :tostr \$1 ] = \"true\" || [ :tobool \$1 ] = true) do={:return \ + \$2};\r\ + \n :return \$3;\r\ + \n}\r\ + \n\r\ + \n:set EitherOr do={\r\ + \n :global IfThenElse;\r\ + \n :if ([ :typeof \$1 ] = \"num\") do={:return [ \$IfThenElse (\$1 != 0) \ + \$1 \$2 ]}\r\ + \n :if ([ :typeof \$1 ] = \"time\") do={:return [ \$IfThenElse (\$1 > 0s)\ + \_\$1 \$2 ]}\r\ + \n# this works for boolean values, literal ones with parentheses\r\ + \n :return [ \$IfThenElse ([ :len [ :tostr \$1 ] ] > 0) \$1 \$2 ];\r\ + \n}\r\ + \n\r\ + \n:set ParseKeyValueStore do={\r\ + \n :local Source \$1;\r\ + \n :if ([ :pick \$Source 0 1 ] = \"{\") do={\r\ + \n :do {\r\ + \n :return [ :deserialize from=json \$Source ];\r\ + \n } on-error={ }\r\ + \n } \r\ + \n :if ([ :typeof \$Source ] != \"array\") do={:set Source [ :tostr \$1 ]\ + }\r\ + \n :local Result ({});\r\ + \n :foreach KeyValue in=[ :toarray \$Source ] do={\r\ + \n :if ([ :find \$KeyValue \"=\" ]) do={\r\ + \n :local Key [ :pick \$KeyValue 0 [ :find \$KeyValue \"=\" ] ];\r\ + \n :local Value [ :pick \$KeyValue ([ :find \$KeyValue \"=\" ] + 1) [\ + \_:len \$KeyValue ] ];\r\ + \n :if (\$Value=\"true\") do={:set Value true}\r\ + \n :if (\$Value=\"false\") do={:set Value false}\r\ + \n :set (\$Result->\$Key) \$Value;\r\ + \n } else={:set (\$Result->\$KeyValue) true}\r\ + \n }\r\ + \n :return \$Result;\r\ + \n}\r\ + \n:set RequiredRouterOS do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :local Required [ :tostr \$2 ];\r\ + \n :local Warn [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :global VersionToNum;\r\ + \n :if (!(\$Required ~ \"^\\\\d+\\\\.\\\\d+((alpha|beta|rc|\\\\.)\\\\d+|)\ + \\\$\")) do={\r\ + \n :log error (\$0 . \" No valid RouterOS version: \" . \$Required);\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$VersionToNum \$Required ] > [ \$VersionToNum [ /system/packag\ + e/update/get installed-version ] ]) do={\r\ + \n :if (\$Warn = \"true\") do={\r\ + \n :log warning (\$0 . \" This \" . [ \$IfThenElse ([ :pick \$Caller \ + 0 ] = (\"\\\$\")) \"function\" \"script\" ] . \\\r\ + \n \" '\" . \$Caller . \"' (at least specific functionality) requir\ + es RouterOS \" . \$Required . \". Please update!\");\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set ValidateSyntax do={\r\ + \n :local Code [ :tostr \$1 ];\r\ + \n :global LogPrint;\r\ + \n :onerror Err {\r\ + \n [ :parse (\":local Validate do={\\n\" . \$Code . \"\\n}\") ];\r\ + \n } do={\r\ + \n \$LogPrint debug \$0 (\"Valdation failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set VersionToNum do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Multi 0x1000000;\r\ + \n :local Return 0;\r\ + \n :global CharacterReplace;\r\ + \n :set Input [ \$CharacterReplace \$Input \".\" \",\" ];\r\ + \n :foreach I in={ \"zero\"; \"alpha\"; \"beta\"; \"rc\" } do={\r\ + \n :set Input [ \$CharacterReplace \$Input \$I (\",\" . \$I . \",\") ];\ + \r\ + \n }\r\ + \n :foreach Value in=([ :toarray \$Input ], 0) do={\r\ + \n :local Num [ :tonum \$Value ];\r\ + \n :if (\$Multi = 0x100) do={\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={\r\ + \n :set Return (\$Return + 0xff00);\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n } else={\r\ + \n :if (\$Value = \"zero\") do={ }\r\ + \n :if (\$Value = \"alpha\") do={ :set Return (\$Return + 0x3f00); \ + }\r\ + \n :if (\$Value = \"beta\") do={ :set Return (\$Return + 0x5f00); }\ + \r\ + \n :if (\$Value = \"rc\") do={ :set Return (\$Return + 0x7f00); }\r\ + \n }\r\ + \n }\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={ :set Return (\$Return + (\$Va\ + lue * \$Multi)); }\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ScriptLock do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local WaitMax [ :totime \$2 ];\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global ScriptLockOrder;\r\ + \n :if ([ :typeof \$ScriptLockOrder ] = \"nothing\") do={\r\ + \n :set ScriptLockOrder ({});\r\ + \n }\r\ + \n :if ([ :typeof (\$ScriptLockOrder->\$Script) ] = \"nothing\") do={\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :local JobCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :return [ :len [ /system/script/job/find where script=\$Script ] ];\ + \r\ + \n }\r\ + \n :local TicketCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :local Count 0;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:set Count (\$Count \ + + 1)}\r\ + \n }\r\ + \n :return \$Count;\r\ + \n }\r\ + \n :local IsFirstTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Check [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if (\$Ticket = \$Check) do={:return true}\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\" && \$Ticket != \$Check) d\ + o={:return false}\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :local AddTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Add [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :while (true) do={\r\ + \n :local Pos [ :len (\$ScriptLockOrder->\$Script) ];\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Pos) \$Add;\r\ + \n :delay 10ms;\r\ + \n :if ((\$ScriptLockOrder->\$Script->\$Pos) = \$Add) do={:return tru\ + e}\r\ + \n }\r\ + \n }\r\ + \n :local RemoveTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Remove [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Id,Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :while ((\$ScriptLockOrder->\$Script->\$Id) = \$Remove) do={\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Id);\r\ + \n :delay 10ms;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :local CleanupTickets do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:return false}\r\ + \n }\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :if ([ :typeof \$WaitMax ] = \"nil\" ) do={:set WaitMax 0s}\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\r\ + \n :log error (\$0 . \" A script named '\" . \$Script . \"' does not ex\ + ist!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$JobCount \$Script ] = 0) do={\r\ + \n \$LogPrint error \$0 (\"No script '\" . \$Script . \"' is running!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$TicketCount \$Script ] >= [ \$JobCount \$Script ]) do={\r\ + \n :log error (\$0 . \" More tickets than running scripts '\" . \$Scrip\ + t . \"', resetting!\");\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n /system/script/job/remove [ find where script=\$Script ];\r\ + \n }\r\ + \n :local MyTicket [ \$GetRandom20CharAlNum 6 ];\r\ + \n \$AddTicket \$Script \$MyTicket;\r\ + \n :local WaitInterval (\$WaitMax / 20);\r\ + \n :local WaitTime \$WaitMax;\r\ + \n :while (\$WaitTime > 0 && \\\r\ + \n ([ \$IsFirstTicket \$Script \$MyTicket ] = false || \\\r\ + \n [ \$TicketCount \$Script ] < [ \$JobCount \$Script ])) do={\r\ + \n :set WaitTime (\$WaitTime - \$WaitInterval);\r\ + \n :delay \$WaitInterval;\r\ + \n }\r\ + \n :if ([ \$IsFirstTicket \$Script \$MyTicket ] = true && \\\r\ + \n [ \$TicketCount \$Script ] = [ \$JobCount \$Script ]) do={\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$CleanupTickets \$Script;\r\ + \n :return true;\r\ + \n }\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$LogPrint debug \$0 (\"Script '\" . \$Script . \"' started more than \ + once\" . \\\r\ + \n [ \$IfThenElse (\$WaitTime < \$WaitMax) \" and timed out waiting for\ + \_lock\" \"\" ] . \"...\");\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set SendNotification do={ :onerror Err {\r\ + \n :global SendNotification2;\r\ + \n \$SendNotification2 ({ origin=\$0; subject=\$1; message=\$2; link=\$3;\ + \_silent=\$4 });\r\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err}\r\ + \n}\r\ + \n\r\ + \n:set SendNotification2 do={\r\ + \n :local Notification \$1;\r\ + \n :global NotificationFunctions;\r\ + \n :foreach FunctionName,Discard in=\$NotificationFunctions do={\r\ + \n (\$NotificationFunctions->\$FunctionName) (\"\\\$NotificationFunctio\ + ns->\\\"\" . \$FunctionName . \"\\\"\") \$Notification;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set SymbolByUnicodeName do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :global EitherOr;\r\ + \n :global SymbolsExtra;\r\ + \n :local Symbols ({\r\ + \n \"abacus\"=\"\\F0\\9F\\A7\\AE\";\r\ + \n \"alarm-clock\"=\"\\E2\\8F\\B0\";\r\ + \n \"arrow-down\"=\"\\E2\\AC\\87\";\r\ + \n \"arrow-up\"=\"\\E2\\AC\\86\";\r\ + \n \"calendar\"=\"\\F0\\9F\\93\\85\";\r\ + \n \"card-file-box\"=\"\\F0\\9F\\97\\83\";\r\ + \n \"chart-decreasing\"=\"\\F0\\9F\\93\\89\";\r\ + \n \"chart-increasing\"=\"\\F0\\9F\\93\\88\";\r\ + \n \"cloud\"=\"\\E2\\98\\81\";\r\ + \n \"cross-mark\"=\"\\E2\\9D\\8C\";\r\ + \n \"earth\"=\"\\F0\\9F\\8C\\8D\";\r\ + \n \"fire\"=\"\\F0\\9F\\94\\A5\";\r\ + \n \"floppy-disk\"=\"\\F0\\9F\\92\\BE\";\r\ + \n \"gear\"=\"\\E2\\9A\\99\";\r\ + \n \"heart\"=\"\\E2\\99\\A5\";\r\ + \n \"high-voltage-sign\"=\"\\E2\\9A\\A1\";\r\ + \n \"incoming-envelope\"=\"\\F0\\9F\\93\\A8\";\r\ + \n \"information\"=\"\\E2\\84\\B9\";\r\ + \n \"large-orange-circle\"=\"\\F0\\9F\\9F\\A0\";\r\ + \n \"large-red-circle\"=\"\\F0\\9F\\94\\B4\";\r\ + \n \"link\"=\"\\F0\\9F\\94\\97\";\r\ + \n \"lock-with-ink-pen\"=\"\\F0\\9F\\94\\8F\";\r\ + \n \"memo\"=\"\\F0\\9F\\93\\9D\";\r\ + \n \"mobile-phone\"=\"\\F0\\9F\\93\\B1\";\r\ + \n \"pushpin\"=\"\\F0\\9F\\93\\8C\";\r\ + \n \"scissors\"=\"\\E2\\9C\\82\";\r\ + \n \"scroll\"=\"\\F0\\9F\\93\\9C\";\r\ + \n \"smiley-partying-face\"=\"\\F0\\9F\\A5\\B3\";\r\ + \n \"smiley-smiling-face\"=\"\\E2\\98\\BA\";\r\ + \n \"smiley-winking-face-with-tongue\"=\"\\F0\\9F\\98\\9C\";\r\ + \n \"sparkles\"=\"\\E2\\9C\\A8\";\r\ + \n \"speech-balloon\"=\"\\F0\\9F\\92\\AC\";\r\ + \n \"star\"=\"\\E2\\AD\\90\";\r\ + \n \"warning-sign\"=\"\\E2\\9A\\A0\";\r\ + \n \"white-heavy-check-mark\"=\"\\E2\\9C\\85\"\r\ + \n }, \$SymbolsExtra);\r\ + \n :local Magic [ :pick [ /system/clock/get date ] 4 10 ];\r\ + \n :local Special {\r\ + \n \"information-04-01\"=\"\\F0\\9F\\9A\\BB\";\r\ + \n \"large-orange-circle-04-01\"=\"\\F0\\9F\\8D\\8A\";\r\ + \n \"large-orange-circle-10-31\"=\"\\F0\\9F\\8E\\83\";\r\ + \n \"large-red-circle-04-01\"=\"\\F0\\9F\\8D\\92\" };\r\ + \n :if ([ :len (\$Symbols->\$Name) ] = 0) do={\r\ + \n :log warning (\$0 . \"No symbol available for name '\" . \$Name . \"\ + '!\");\r\ + \n :return \"\";\r\ + \n }\r\ + \n :return ([ \$EitherOr (\$Special->(\$Name . \$Magic)) (\$Symbols->\$Na\ + me) ] . \"\\EF\\B8\\8F\");\r\ + \n}\r\ + \n\r\ + \n:set SymbolForNotification do={\r\ + \n :global NotificationsWithSymbols;\r\ + \n :global SymbolByUnicodeName;\r\ + \n :global IfThenElse;\r\ + \n :if (\$NotificationsWithSymbols != true) do={:return [ \$IfThenElse ([\ + \_:len \$2 ] > 0) ([ :tostr \$2 ] . \" \") \"\" ]}\r\ + \n :local Return \"\";\r\ + \n :foreach Symbol in=[ :toarray \$1 ] do={:set Return (\$Return . [ \$Sy\ + mbolByUnicodeName \$Symbol ])}\r\ + \n :return (\$Return . \" \");\r\ + \n}\r\ + \n\r\ + \n:set Unix2Dos do={:return [ :tocrlf [ :tostr \$1 ] ]}\r\ + \n:set UrlEncode do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"\\n\\r !\\\"#\\\$%&'()*+,:;<=>\?@[\\\\]^`{|}~\");\r\ + \n :local Subs { \"%0A\"; \"%0D\"; \"%20\"; \"%21\"; \"%22\"; \"%23\"; \"\ + %24\"; \"%25\"; \"%26\"; \"%27\";\r\ + \n \"%28\"; \"%29\"; \"%2A\"; \"%2B\"; \"%2C\"; \"%3A\"; \"%3B\"; \ + \"%3C\"; \"%3D\"; \"%3E\"; \"%3F\";\r\ + \n \"%40\"; \"%5B\"; \"%5C\"; \"%5D\"; \"%5E\"; \"%60\"; \"%7B\"; \ + \"%7C\"; \"%7D\"; \"%7E\" };\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :local Replace [ :find \$Chars \$Char ];\r\ + \n :if ([ :typeof \$Replace ] = \"num\") do={:set Char (\$Subs->\$Repla\ + ce)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set IsDNSResolving do={\r\ + \n :do {:resolve \"api.telegram.org\"} on-error={:return false}\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set IsFullyConnected do={\r\ + \n :global IsDNSResolving;\r\ + \n :global IsTimeSync;\r\ + \n :if ([ \$IsDNSResolving ] = false) do={:return false};\r\ + \n :if ([ \$IsTimeSync ] = false) do={:return false};\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set IsTimeSync do={\r\ + \n :global IsTimeSyncCached;\r\ + \n :global IsTimeSyncResetNtp;\r\ + \n :if (\$IsTimeSyncCached = true) do={:return true}\r\ + \n :if ([ /system/ntp/client/get enabled ] = true) do={\r\ + \n :if ([ /system/ntp/client/get status ] = \"synchronized\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :local Uptime [ /system/resource/get uptime ];\r\ + \n :if ([ :typeof \$IsTimeSyncResetNtp ] = \"nothing\") do={\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n }\r\ + \n :if (\$Uptime - \$IsTimeSyncResetNtp < 3m) do={:return false}\r\ + \n :log warning \"\$0 The ntp client is configured, but did not sync.\"\ + ;\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n /system/ntp/client/set enabled=no;\r\ + \n :delay 20ms;\r\ + \n /system/ntp/client/set enabled=yes;\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ /system/license/get ]->\"level\" = \"free\" || \\\r\ + \n [ /system/resource/get ]->\"board-name\" = \"x86\") do={\r\ + \n :log debug \"\$0 No ntp client configured, relying on RTC for CHR fr\ + ee license and x86.\";\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ /ip/cloud/get update-time ] = true) do={\r\ + \n :if ([ :typeof [ /ip/cloud/get public-address ] ] = \"ip\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :log debug \"\$0 No time source configured! Returning gracefully...\";\ + \r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set FetchHugeFiles do={\r\ + \n :local ScriptName [ :tostr \$1 ];\r\ + \n :local Url [ :tostr \$2 ];\r\ + \n :local CheckCert [ :tostr \$3 ];\r\ + \n\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global MkDir;\r\ + \n :global RmDir;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :set CheckCert [ \$IfThenElse (\$CheckCert = \"false\") \"no\" \"yes-w\ + ithout-crl\" ];\r\ + \n\r\ + \n :local DirName (\"tmpfs/\" . [ \$CleanName \$ScriptName ]);\r\ + \n :if ([ \$MkDir \$DirName ] = false) do={\r\ + \n \$LogPrint error \$0 (\"Failed creating directory!\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileName (\$DirName . \"/\" . [ \$CleanName \$0 ] . \"-\" . [ \ + \$GetRandom20CharAlNum ]);\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName \ + \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-va\ + lue;\r\ + \n } do={\r\ + \n :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\r\ + \n \$RmFile \$FileName;\r\ + \n }\r\ + \n \$LogPrint debug \$0 (\"Failed downloading from \" . \$Url . \" - \"\ + \_. \$Err);\r\ + \n \$RmDir \$DirName;\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n \$LogPrint debug \$0 (\"The file downloaded from \" . \$Url . \" did\ + \_not show up.\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileSize [ /file/get \$FileName size ];\r\ + \n :local Return \"\";\r\ + \n :local VarSize 0;\r\ + \n :while (\$VarSize != \$FileSize) do={\r\ + \n :set Return (\$Return . ([ /file/read offset=\$VarSize chunk-size=32\ + 768 file=\$FileName as-value ]->\"data\"));\r\ + \n :set FileSize [ /file/get \$FileName size ];\r\ + \n :set VarSize [ :len \$Return ];\r\ + \n :if (\$VarSize > \$FileSize) do={\r\ + \n :delay 100ms;\r\ + \n }\r\ + \n }\r\ + \n \$RmDir \$DirName;\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FetchUserAgentStr do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global CommitBrief;\r\ + \n :global IfThenElse;\r\ + \n :local Resource [ /system/resource/get ];\r\ + \n :return (\"User-Agent: Mikrotik/\" . \$Resource->\"version\" . \" \" .\ + \_\$Resource->\"architecture-name\" . \\\r\ + \n \" \" . \$Caller . \"/Fetch (\" . \$GlobalScriptsUrl . \"; \" . [ \$\ + CommitBrief ] . \")\");\r\ + \n}\r\ + \n\r\ + \n:set ScriptInstallUpdate do={ :onerror Err {\r\ + \n :local Scripts [ :toarray \$1 ];\r\ + \n :local NewComment [ :tostr \$2 ];\r\ + \n :global InitSetup;\r\ + \n\r\ + \n :global CommitId;\r\ + \n :global ScriptUpdatesCRLF;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global CertificateAvailable;\r\ + \n :global CheckSumsVerify;\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SumsDirAndFileName;\r\ + \n :global GlobalScriptsUrlSuffix;\r\ + \n :global EitherOr;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global Grep;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :global RequiredRouterOS;\r\ + \n :global SendNotification2;\r\ + \n :global SymbolForNotification;\r\ + \n :global ValidateSyntax;\r\ + \n :global CommentsInScripts;\r\ + \n\r\ + \n :if ([ \$CertificateAvailable \"Root YE\" \"fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, trying wit\ + hout.\");\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=\$Scripts do={\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\ + \r\ + \n \$LogPrint info \$0 (\"Adding new script: \" . \$Script);\r\ + \n /system/script/add name=\$Script owner=\$Script source=\"#!rsc by \ + Vados\\n\" comment=\$NewComment;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local CommitIdBefore \$CommitId;\r\ + \n :local GlobalConfVersionBefore \$GlobalConfVersion;\r\ + \n :local ReloadGlobal false;\r\ + \n :local DeviceMode [ /system/device-mode/get ];\r\ + \n\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSums ({});\r\ + \n :do {\r\ + \n :local Url (\$GlobalScriptsUrl . \$SumsDirAndFileName . \$GlobalScr\ + iptsUrlSuffix);\r\ + \n \$LogPrint debug \$0 (\"Fetching checksums from url: \" . \$Url);\ + \r\ + \n :set CheckSums [ :deserialize from=json ([ /tool/fetch check-certi\ + ficate=yes-without-crl \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url output\ + =user as-value ]->\"data\") ];\r\ + \n } on-error={ \$LogPrint warning \$0 (\"Err = \" . \$Err); }\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vado\ + s\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :local ScriptInfo [ \$ParseKeyValueStore (\$ScriptVal->\"comment\") \ + ];\r\ + \n :local SourceNew;\r\ + \n\r\ + \n :foreach Scheduler in=[ /system/scheduler/find where on-event~(\"\\\ + \\b\" . \$ScriptVal->\"name\" . \"\\\\b\") ] do={\r\ + \n :local SchedulerVal [ /system/scheduler/get \$Scheduler ];\r\ + \n :if (\$ScriptVal->\"policy\" != \$SchedulerVal->\"policy\") do={\r\ + \n \$LogPrint warning \$0 (\"Policies differ for script '\" . \$Scr\ + iptVal->\"name\" . \"' and its scheduler '\" . \$SchedulerVal->\"name\" . \ + \"'!\");\r\ + \n }\r\ + \n }\r\ + \n :do {\r\ + \n :if (\$ScriptInfo->\"ignore\" = true) do={\r\ + \n \$LogPrint debug \$0 (\"Ignoring script '\" . \$ScriptVal->\"nam\ + e\" . \"', as requested.\");\r\ + \n :error true;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSum (\$CheckSums->(\$ScriptVal->\"name\"));\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Scri\ + ptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :convert transform=md5 to=hex [ :tolf (\$ScriptVal->\"sou\ + rce\") ] ] = \$CheckSum) do={\r\ + \n \$LogPrint debug \$0 (\"Checksum for script '\" . \$ScriptVal-\ + >\"name\" . \"' matches, ignoring.\");\r\ + \n :error true;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len (\$ScriptInfo->\"certificate\") ] > 0) do={\r\ + \n :if ([ \$CertificateAvailable (\$ScriptInfo->\"certificate\") \"\ + fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, tryi\ + ng without.\");\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n :local BaseUrl [ \$EitherOr (\$ScriptInfo->\"base-url\") \$Globa\ + lScriptsUrl ];\r\ + \n :local UrlSuffix [ \$EitherOr (\$ScriptInfo->\"url-suffix\") \$G\ + lobalScriptsUrlSuffix ];\r\ + \n :local Url (\$BaseUrl . \$ScriptVal->\"name\" . \".rsc\" . \$Url\ + Suffix);\r\ + \n \$LogPrint warning \$0 (\"Fetching script '\" . (\$ScriptVal->\"\ + name\") . \"' from url: \" . \$Url);\r\ + \n :local Result [ /tool/fetch check-certificate=yes-without-crl \\\ + \r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url outp\ + ut=user as-value ];\r\ + \n :if (\$Result->\"status\" = \"finished\") do={\r\ + \n :set SourceNew [ :tolf (\$Result->\"data\") ];\r\ + \n } \r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Failed fetching script '\" . \$ScriptV\ + al->\"name\" . \"': \" . \$Err);\r\ + \n :if (\$Err != \"Fetch failed with status 404\") do={\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$ScriptVal->\"source\" = \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Removing dummy. Typo on installation\ + \?\");\r\ + \n /system/script/remove \$Script;\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Sc\ + riptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :len \$CheckSum ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Added the script manually\? Skip u\ + pdates with 'ignore=true' in comment.\");\r\ + \n }\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$SourceNew ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"No update for script '\" . (\$ScriptVal-\ + >\"name\") . \"'.\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :local SourceCRLF [ :tocrlf \$SourceNew ];\r\ + \n :if (\$InitSetup != true && ((\$ScriptVal->\"name\") != \"AM-Globa\ + lConfig\" || (\$ScriptVal->\"name\") != \"AM-GlobalFunc\")) do={\r\ + \n :if (\$SourceNew = (\$ScriptVal->\"source\") || \$SourceCRLF = (\ + \$ScriptVal->\"source\")) do={\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\") \ + . \"' source did not change. End of lines set to CRLF.\");\r\ + \n if (\$ScriptUpdatesCRLF = false) do={\r\ + \n :put [ :tolf \$SourceNew ];\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\"\ + ) . \"' source update end of lines to LF.\");\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([ :pick \$SourceNew 0 14 ] != \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Looks like new script '\" . \$ScriptVa\ + l->\"name\" . \"' is not valid (missing shebang = '\$shebang') Ignoring!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if (\$CommentsInScripts = true) do={\r\ + \n :local CommentLine [ \$Grep \$SourceNew (\"\\23 Script comment:\ + \_\") ];\r\ + \n :if ([ :len \$CommentLine ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"The search in new script '\" . (\$Scr\ + iptVal->\"name\") . \"' for comment in script body, is not found result Ig\ + noring!\");\r\ + \n :error false;\r\ + \n } else={\r\ + \n :if ([ :len (\$ScriptVal->\"comment\")] = 0 || [ :len (\$Scri\ + ptVal->\"comment\")] != [ :pick \$CommentLine ([ :find \$CommentLine \":\"\ + ] + 2) [ :len \$CommentLine] ]) do={\r\ + \n \$LogPrint debug \$0 (\"Exsiting comment for script '\" . (\ + \$ScriptVal->\"name\") . \"' is '\" . (\$ScriptVal->\"comment\") . \"'.\")\ + ;\r\ + \n :set (\$ScriptVal->\"comment\") [ :pick \$CommentLine ([ :f\ + ind \$CommentLine \":\"] + 2) [ :len \$CommentLine] ];\r\ + \n \$LogPrint debug \$0 (\"New comment (\" . (\$ScriptVal->\"c\ + omment\") . \") for script '\" . (\$ScriptVal->\"name\") . \"' has been ad\ + ded!\");\r\ + \n } else={\r\ + \n \$LogPrint debug \$0 (\"Comment for script '\" . (\$ScriptV\ + al->\"name\") . \"' did not change.\");\r\ + \n :error false;\r\ + \n }\r\ + \n } \r\ + \n }\r\ + \n\r\ + \n :local RequiredROS ([ \$ParseKeyValueStore [ \$Grep \$SourceNew (\ + \"\\23 requires RouterOS, \") ] ]->version);\r\ + \n :if ([ \$RequiredRouterOS \$0 [ \$EitherOr \$RequiredROS \"0.0\" ]\ + \_false ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires RouterOS \" . \\\r\ + \n \$RequiredROS . \", which is not met by your installation. I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :local RequiredDM [ \$ParseKeyValueStore [ \$Grep \$SourceNew (\"\ + \\23 requires device-mode, \") ] ];\r\ + \n :local MissingDM ({});\r\ + \n :foreach Feature,Value in=\$RequiredDM do={\r\ + \n :if ([ :typeof (\$DeviceMode->\$Feature) ] = \"bool\" && (\$Devi\ + ceMode->\$Feature) = false) do={\r\ + \n :set MissingDM (\$MissingDM, \$Feature);\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len \$MissingDM ] > 0) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires disabled \" . \\\r\ + \n \"device-mode features (\" . [ :tostr \$MissingDM ] . \"). I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$ValidateSyntax \$SourceNew ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Syntax validation for script '\" . (\$\ + ScriptVal->\"name\") . \"' failed! Ignoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n \r\ + \n :log info (\"Updating script: \" . (\$ScriptVal->\"name\") . \" Sc\ + ript comment: \" . (\$ScriptVal->\"comment\"));\r\ + \n\r\ + \n /system/script/set owner=(\$ScriptVal->\"name\") comment=(\$Script\ + Val->\"comment\") \\\r\ + \n source=[ \$IfThenElse (\$ScriptUpdatesCRLF = true) \$SourceCRL\ + F \$SourceNew ] \$Script;\r\ + \n :if (\$ScriptVal->\"name\" = \"AM-GlobalConfig\" || \\\r\ + \n \$ScriptVal->\"name\" = \"AM-GlobalFunc\" || \\\r\ + \n \$ScriptVal->\"name\" ~ (\"^(AM-GlobalFunc\\\\.d|mod)/.\")) d\ + o={\r\ + \n :set ReloadGlobal true;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n :if (\$ReloadGlobal = true) do={\r\ + \n \$LogPrint info \$0 (\"Reloading global configuration and functions.\ + \");\r\ + \n :onerror Err {\r\ + \n :global InitSetup (a);\r\ + \n /system/script {run AM-GlobalConfig; run AM-GlobalFunc;};\r\ + \n } do={\$LogPrint error \$0 (\"Reloading global configuration and fun\ + ctions failed! \" . \$Err)}\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore > \$GlobalConfVersion) do={\r\ + \n \$LogPrint warning \$0 (\"The configuration version decreased from \ + \" . \\\r\ + \n \$GlobalConfVersionBefore . \" to \" . \$GlobalConfVersion . \\\r\ + \n \". Installed an older version\?\");\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore < \$GlobalConfVersion) do={\r\ + \n :global GlobalConfChanges;\r\ + \n :global GlobalConfMigration;\r\ + \n :local ChangeLogCode;\r\ + \n :if ([ :len \$ChangeLogCode ] > 0) do={\r\ + \n :if ([ \$ValidateSyntax \$ChangeLogCode ] = true) do={\r\ + \n :onerror Err {\r\ + \n [ :parse \$ChangeLogCode ];\r\ + \n } do={\$LogPrint warning \$0 (\"The changelog failed to run: \" \ + . \$Err)}\r\ + \n } else={\$LogPrint warning \$0 (\"The changelog failed syntax vali\ + dation!\")}\r\ + \n }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Migration (\$GlobalConfMigration->[ :tostr \$I ]);\r\ + \n :do {\r\ + \n :if ([ :typeof \$Migration ] != \"str\") do={\r\ + \n \$LogPrint debug \$0 (\"Migration code for change \" . \$I .\ + \_\" is not available.\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$ValidateSyntax \$Migration ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Migration code for change \" . \$I\ + \_. \" failed syntax validation!\");\r\ + \n :error false}\r\ + \n \$LogPrint info \$0 (\"Applying migration for change \" . \$I \ + . \": \" . \$Migration);\r\ + \n :onerror Err {\r\ + \n [ :parse \$Migration ];\r\ + \n } do={\$LogPrint warning \$0 (\"Migration code for change \" .\ + \_\$I . \" failed to run: \" . \$Err)}\r\ + \n } on-error={ }\r\ + \n }\r\ + \n }\r\ + \n :local NotificationMessage (\"The configuration version on \" . \$Id\ + entity . \" increased \" . \\\r\ + \n \"to \" . \$GlobalConfVersion . \", current configuration may nee\ + d modification. \" . \\\r\ + \n \"Please review and update global-config-overlay, then re-run glo\ + bal-config.\");\r\ + \n \$LogPrint info \$0 (\$NotificationMessage);\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nChanges:\ + \");\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Change (\$GlobalConfChanges->[ :tostr \$I ]);\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n \" . \\\ + \r\ + \n [ \$SymbolForNotification \"pushpin\" \"*\" ] . \$Change);\r\ + \n \$LogPrint info \$0 (\"Change \" . \$I . \": \" . \$Change);\r\ + \n }\r\ + \n } else={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nNews and\ + \_changes are not available.\");\r\ + \n\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={ :set GlobalConfChanges; \ + } else={ :global GlobalConfChanges (a); }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={ :set GlobalConfMigrati\ + on; } else={ :global GlobalConfMigration (a); }\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n} }\r\ + \n\r\ + \n# load modules\r\ + \n:foreach Script in=[ /system/script/find where name ~ \"^(global-functio\ + ns\\\\.d|mod)/.\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :if ([ \$ValidateSyntax (\$ScriptVal->\"source\") ] = true) do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' f\ + ailed to run: \" . \$Err);\r\ + \n }\r\ + \n } else={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' fai\ + led syntax validation, skipping.\");\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# Add and fix global scheduler\r\ + \n:put \"Add or/and fix Global scheduler...\";\r\ + \n:local OnEvent \"/system/script { run AM-GlobalConfig; run AM-GlobalFunc\ + ; }\";\r\ + \n:local Comment \"Every Day Set Global Environment Variables\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-SetGlobalEnv\" ] ] \ + = 0) do={\r\ + \n /system/scheduler/add name=\"AM-SetGlobalEnv\" comment=\$Comment on-ev\ + ent=\$OnEvent start-time=startup;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" comment ] != \$Comment)\ + \_do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" comment=\$Comment;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" on-event ] != \$OnEvent\ + ) do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" on-event=\$OnEvent;\r\ + \n}\r\ + \n# Add Update Script scheduler\r\ + \n:put \"Add or/and fix Update Script scheduler\";\r\ + \n:set OnEvent \":global ScriptInstallUpdate; \\\$ScriptInstallUpdate;\";\ + \r\ + \n:set Comment \"Every Day Check For Update Scripts\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-ScriptInstallUpdate\ + \" ] ] = 0) do={\r\ + \n/system/scheduler/add name=\"AM-ScriptInstallUpdate\" comment=\$Comment \ + start-time=startup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady;\r\ + \n :retry { :if (\$GlobalConfReady != true) do={ :error (\"Global configs\ + \_not ready.\"); }; } delay=100ms max=5;\r\ + \n\r\ + \n:log warning (\"This script \$ScriptName Loaded \" . \\\r\ + \n [ \$IfThenElse (\$CommitId != \"unknown\") ([ \$CommitBrief ] . \" \ + \") ] . \\\r\ + \n \"on \" . \$devBoardName . \"\\nRouterOS: \" . \$devCurVersion . \"\ + \\nArchitecture: \" . \$devCurArch . \"\\nIdentity: \" . \$Identity);\r\ + \n # signal we are ready\r\ + \n:set GlobalFuncReady true;\r\ + \n:set ExitOK true;\r\ + \n\r\ + \n:log info (\$0 . \"Global configs ready!\");\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n}\r\ + \n" +add comment="Download custom Certificates By Routers Identity " \ + dont-require-permissions=no name=mod/AM-Certs-By-Ident owner=\ + mod/AM-Certs-By-Ident policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-Certs-By-Ident\r\ + \n# Script comment: Download custom Certificates By Routers Identity \r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n#:local ScriptName [ :jobname ];\r\ + \n#\r\ + \n# CloudFlare\r\ + \n#/tool/fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalR\ + ootCA.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalRootCA.crt.pem passphrase=\ + \"\";\r\ + \n#/tool/ fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobal\ + G2TLSRSASHA2562020CA1-1.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalG2TLSRSASHA2562020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n# Quad9\r\ + \n#/tool/fetch mode=https url=\"https://cacerts.digicert.com/DigiCertGloba\ + lG3TLSECCSHA3842020CA1-1.crt.pem\"\r\ + \n#/certificate/import file-name=DigiCertGlobalG3TLSECCSHA3842020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n:global tmpAddCerts true; \r\ + \n\r\ + \n:global GlobalScriptsUrl;\r\ + \n:local UrlSuffix [/system/identity/get name];\r\ + \n:local UrlDir \"certs/\";\r\ + \n:local CertUrl (\$GlobalScriptsUrl . \$UrlDir . \$UrlSuffix .\"/\");\r\ + \n\r\ + \n:log error \$CertUrl;\r\ + \n\r\ + \n:local CertName \"DigiCert-Global-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-CA\" [ find where common-na\ + me=\"DigiCert Global Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-CA\" [ find where commo\ + n-name=\"DigiCert Assured ID Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G2\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G3\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \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\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \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\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G2\" [ find where common-na\ + me=\"DigiCert Global Root G2\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G3\" [ find where common-na\ + me=\"DigiCert Global Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-ECC-P384-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-ECC-P384-Root-G5\" [ find where com\ + mon-name=\"DigiCert TLS ECC P384 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-RSA4096-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-RSA4096-Root-G5\" [ find where comm\ + on-name=\"DigiCert TLS RSA4096 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Trusted-Root-G4.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Trusted-Root-G4\" [ find where common-n\ + ame=\"DigiCert Trusted Root G4\" ];\r\ + \n\r\ + \n:set CertName \"GTS-Root-R4.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"GTS-Root-R4\" [ find where common-name=\"GTS Roo\ + t R4\" ];\r\ + \n\r\ + \n:set CertName \"Go-Daddy-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Go-Daddy-Root-Certificate-Authority-G2\" [ find \ + where common-name=\"Go Daddy Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"ISRG-Root-X1.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"ISRG-Root-X1\" [ find where common-name=\"ISRG R\ + oot X1\" ];\r\ + \n\r\ + \n:set CertName \"Root-YE.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Root-YE\" [ find where common-name=\"Root YE\" ]\ + ;\r\ + \n\r\ + \n:set CertName \"Starfield-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Starfield-Root-Certificate-Authority-G2\" [ find\ + \_where common-name=\"Starfield Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"USERTrust-RSA-Certification-Authority.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"USERTrust-RSA-Certification-Authority\" [ find w\ + here common-name=\"USERTrust RSA Certification Authority\" ];\r\ + \n\r\ + \n:global tmpAddCerts (a);\r\ + \n\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"GTS-Root-RX.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#internet\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"ISRG-Root-X2.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n\r\ + \n\r\ + \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;\r\ + \n#/ip/dns/static remove [find where address=1.1.1.1];\r\ + \n#/ip/dns/static add address=1.1.1.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 1\";\r\ + \n#/ip/dns/ static remove [find where address=1.0.0.1];\r\ + \n#/ip/dns/static add address=1.0.0.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 2\"\r\ + \n#/ip dns static add address=2606:4700:4700::1111 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip dns static add address=2606:4700:4700::1001 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip/dns set servers=\"1.0.0.1, 8.8.4.4\";\r\ + \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/20260516/20260516050039-Diff-Config.rsc b/MikroGig/history/20260516/20260516050039-Diff-Config.rsc new file mode 100644 index 0000000..1893732 --- /dev/null +++ b/MikroGig/history/20260516/20260516050039-Diff-Config.rsc @@ -0,0 +1,367 @@ +303c303,304 +< \n :foreach Script in={ \"AM-GlobalConfig\"; \"AM-GlobalFunc\" } do={\r\ +--- +> \n :foreach Script in={ \"AM-GlobalConfig\"; \"AM-GlobalFunc\"; \"mod/AM-\ +> Certs-By-Ident\" } do={\r\ +314,329d314 +< \n :local Script \"mod/AM-Certs-By-Ident\";\r\ +< \n \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/fetch \ +< check-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".\ +< rsc\") output=user as-value ]->\"data\");\r\ +< \n /system/script run \$Script;\r\ +< \n :global tmpAddCerts;\r\ +< \n :while ([ \$tmpAddCerts ] = true) do={\r\ +< \n :delay 1s;\r\ +< \n }\r\ +< \n :delay 1s;\r\ +< \n :put \"Removing \$Script...\";\r\ +< \n /system/script/remove [ find where name=\$Script ];\r\ +< \n\r\ +579c564 +< \n:global CommitId \"main/657/b0bd77b1\";\r\ +--- +> \n:global CommitId \"main/635/33f8040a\";\r\ +582c567 +< r: root, in 14:15:02 15.05.2026.\";\r\ +--- +> r: root, in 13:30:03 11.05.2026.\";\r\ +671a657,659 +> \n:global WaitDNSResolving;\r\ +> \n:global WaitFullyConnected;\r\ +> \n:global WaitTimeSync;\r\ +2487,2502c2475,2488 +< add comment="Download custom Certificates By Routers Identity " \ +< dont-require-permissions=no name=mod/AM-Certs-By-Ident owner=\ +< mod/AM-Certs-By-Ident policy=\ +< ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ +< !rsc by Vados\r\ +< \n# RouterOS script: AM-Certs-By-Ident\r\ +< \n# Script comment: Download custom Certificates By Routers Identity \r\ +< \n# Copyright (c) 2005-2026 Vados \r\ +< \n#\r\ +< \n#\r\ +< \n# requires RouterOS, version=7.19\r\ +< \n# requires device-mode, fetch\r\ +< \n#\r\ +< \n#:local ScriptName [ :jobname ];\r\ +< \n#\r\ +< \n# CloudFlare\r\ +--- +> 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\ +2504c2490 +< ootCA.crt.pem;\r\ +--- +> ootCA.crt.pem;\ +2506c2492 +< \"\";\r\ +--- +> \"\";\ +2508c2494 +< G2TLSRSASHA2562020CA1-1.crt.pem;\r\ +--- +> G2TLSRSASHA2562020CA1-1.crt.pem;\ +2510,2511c2496,2497 +< .pem passphrase=\"\";\r\ +< \n# Quad9\r\ +--- +> .pem passphrase=\"\";\ +> \n# Quad9\ +2513c2499 +< lG3TLSECCSHA3842020CA1-1.crt.pem\"\r\ +--- +> lG3TLSECCSHA3842020CA1-1.crt.pem\"\ +2515,2527c2501,2512 +< .pem passphrase=\"\";\r\ +< \n:global tmpAddCerts true; \r\ +< \n\r\ +< \n:global GlobalScriptsUrl;\r\ +< \n:local UrlSuffix [/system/identity/get name];\r\ +< \n:local UrlDir \"certs/\";\r\ +< \n:local CertUrl (\$GlobalScriptsUrl . \$UrlDir . \$UrlSuffix .\"/\");\r\ +< \n\r\ +< \n:log error \$CertUrl;\r\ +< \n\r\ +< \n:local CertName \"DigiCert-Global-Root-CA.pem\";\r\ +< \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ +< \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ +--- +> .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=\"\";\ +2529,2533c2514,2518 +< me=\"DigiCert Global Root CA\" ];\r\ +< \n\r\ +< \n:set CertName \"DigiCert-Assured-ID-Root-CA.pem\";\r\ +< \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ +< \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ +--- +> 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=\"\";\ +2535,2539c2520,2524 +< n-name=\"DigiCert Assured ID Root CA\" ];\r\ +< \n\r\ +< \n:set CertName \"DigiCert-Assured-ID-Root-G2.pem\";\r\ +< \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ +< \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ +--- +> 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=\"\";\ +2541,2545c2526,2530 +< n-name=\"DigiCert Assured ID Root G3\" ];\r\ +< \n\r\ +< \n:set CertName \"DigiCert-Assured-ID-Root-G3.pem\";\r\ +< \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ +< \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ +--- +> 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=\"\";\ +2547,2551c2532,2536 +< n-name=\"DigiCert Assured ID Root G3\" ];\r\ +< \n\r\ +< \n:set CertName \"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1.pem\";\r\ +< \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ +< \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ +--- +> 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=\"\";\ +2553,2557c2538,2542 +< ind where common-name=\"DigiCert Global G2 TLS RSA SHA256 2020 CA1\" ];\r\ +< \n\r\ +< \n:set CertName \"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1.pem\";\r\ +< \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ +< \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ +--- +> 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=\"\";\ +2559,2563c2544,2548 +< ind where common-name=\"DigiCert Global G3 TLS ECC SHA384 2020 CA1\" ];\r\ +< \n\r\ +< \n:set CertName \"DigiCert-Global-Root-G2.pem\";\r\ +< \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ +< \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ +--- +> 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=\"\";\ +2565,2569c2550,2554 +< me=\"DigiCert Global Root G2\" ];\r\ +< \n\r\ +< \n:set CertName \"DigiCert-Global-Root-G3.pem\";\r\ +< \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ +< \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ +--- +> 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=\"\";\ +2571,2575c2556,2560 +< me=\"DigiCert Global Root G3\" ];\r\ +< \n\r\ +< \n:set CertName \"DigiCert-TLS-ECC-P384-Root-G5.pem\";\r\ +< \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ +< \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ +--- +> 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=\"\";\ +2577,2581c2562,2566 +< mon-name=\"DigiCert TLS ECC P384 Root G5\" ];\r\ +< \n\r\ +< \n:set CertName \"DigiCert-TLS-RSA4096-Root-G5.pem\";\r\ +< \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ +< \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ +--- +> 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=\"\";\ +2583,2587c2568,2572 +< on-name=\"DigiCert TLS RSA4096 Root G5\" ];\r\ +< \n\r\ +< \n:set CertName \"DigiCert-Trusted-Root-G4.pem\";\r\ +< \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ +< \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ +--- +> 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=\"\";\ +2589,2593c2574,2578 +< ame=\"DigiCert Trusted Root G4\" ];\r\ +< \n\r\ +< \n:set CertName \"GTS-Root-R4.pem\";\r\ +< \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ +< \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ +--- +> 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=\"\";\ +2595,2599c2580,2584 +< t R4\" ];\r\ +< \n\r\ +< \n:set CertName \"Go-Daddy-Root-Certificate-Authority-G2.pem\";\r\ +< \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ +< \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ +--- +> 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=\"\";\ +2601,2605c2586,2590 +< where common-name=\"Go Daddy Root Certificate Authority - G2\" ];\r\ +< \n\r\ +< \n:set CertName \"ISRG-Root-X1.pem\";\r\ +< \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ +< \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ +--- +> 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=\"\";\ +2607,2611c2592,2596 +< oot X1\" ];\r\ +< \n\r\ +< \n:set CertName \"Root-YE.pem\";\r\ +< \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ +< \n/certificate/import file-name=\$CertName passphrase=\"\";\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=\"\";\ +2613,2617c2598,2602 +< ;\r\ +< \n\r\ +< \n:set CertName \"Starfield-Root-Certificate-Authority-G2.pem\";\r\ +< \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ +< \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ +--- +> ;\ +> \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=\"\";\ +2619,2623c2604,2608 +< \_where common-name=\"Starfield Root Certificate Authority - G2\" ];\r\ +< \n\r\ +< \n:set CertName \"USERTrust-RSA-Certification-Authority.pem\";\r\ +< \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ +< \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ +--- +> \_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=\"\";\ +2625,2631c2610,2614 +< here common-name=\"USERTrust RSA Certification Authority\" ];\r\ +< \n\r\ +< \n:global tmpAddCerts (a);\r\ +< \n\r\ +< \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ +< \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ +< \n#:set CertName \"GTS-Root-RX.pem\";\r\ +--- +> 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\";\ +2633,2637c2616,2619 +< \r\ +< \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ +< \n#internet\r\ +< \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ +< \n#:set CertName \"ISRG-Root-X2.pem\";\r\ +--- +> \n#/certificate/import file-name=\$CertName passphrase=\"\";\ +> \n#internet\ +> \n#/certificate/import file-name=\$CertName passphrase=\"\";\ +> \n#:set CertName \"ISRG-Root-X2.pem\";\ +2639,2642c2621,2623 +< \r\ +< \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ +< \n\r\ +< \n\r\ +--- +> \n#/certificate/import file-name=\$CertName passphrase=\"\";\ +> \n\ +> \n\ +2645,2646c2626,2627 +< .com/dns-query verify-doh-cert=yes;\r\ +< \n#/ip/dns/static remove [find where address=1.1.1.1];\r\ +--- +> .com/dns-query verify-doh-cert=yes;\ +> \n#/ip/dns/static remove [find where address=1.1.1.1];\ +2648,2649c2629,2630 +< ment=\"cloudflare-dns IPv4 1\";\r\ +< \n#/ip/dns/ static remove [find where address=1.0.0.1];\r\ +--- +> ment=\"cloudflare-dns IPv4 1\";\ +> \n#/ip/dns/ static remove [find where address=1.0.0.1];\ +2651c2632 +< ment=\"cloudflare-dns IPv4 2\"\r\ +--- +> ment=\"cloudflare-dns IPv4 2\"\ +2653c2634 +< e-dns.com type=AAAA\r\ +--- +> e-dns.com type=AAAA\ +2655,2656c2636,2637 +< e-dns.com type=AAAA\r\ +< \n#/ip/dns set servers=\"1.0.0.1, 8.8.4.4\";\r\ +--- +> e-dns.com type=AAAA\ +> \n#/ip/dns set servers=\"1.0.0.1, 8.8.4.4\";\ -- 2.52.0