]> granicus.if.org Git - icinga2/commitdiff
Fix the Icinga2 version check for versions with more than 5 characters
authorMax Rosin <git@hackrid.de>
Fri, 19 Oct 2018 13:37:32 +0000 (15:37 +0200)
committerMichael Friedrich <michael.friedrich@icinga.com>
Mon, 29 Oct 2018 12:51:09 +0000 (13:51 +0100)
The previous implementation assumed that every version number will have
5 characters. With the release of 2.10.0 this does not work anymore.
The new implementation extracts everything from the second character to
the first dash. This should work as long as the version string is in a
format like 'v2.10.1-8-gaebe6da'.

fixes Icinga#6703

lib/methods/icingachecktask.cpp

index 0c85de6d48b38c2af2ed99ed79bae48224773a60..75f301f5fe273d2528330514789c5a68ac384181 100644 (file)
@@ -174,9 +174,12 @@ void IcingaCheckTask::ScriptFunc(const Checkable::Ptr& checkable, const CheckRes
                cr->SetState(ServiceWarning);
        }
 
-       /* Return an error if the version is less than specified (optional). */
-       String parsedAppVersion = appVersion.SubStr(1,5);
+       /* Extract the version number of the running Icinga2 instance.
+        * We assume that appVersion will allways be something like 'v2.10.1-8-gaebe6da' and we want to extract '2.10.1'. */
+       int endOfVersionNumber = appVersion.FindFirstOf("-") - 1;
+       String parsedAppVersion = appVersion.SubStr(1,endOfVersionNumber);
 
+       /* Return an error if the version is less than specified (optional). */
        if (missingIcingaMinVersion.IsEmpty() && !icingaMinVersion.IsEmpty() && Utility::CompareVersion(icingaMinVersion, parsedAppVersion) < 0) {
                output += "; Minimum version " + icingaMinVersion + " is not installed.";
                cr->SetState(ServiceCritical);