Disable OS version check in status screen

The code is not able to accurately detect the correct distro/version at
the moment.

Upstream-Status: Inappropriate

Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>

--- a/webmin/webmin-lib.pl
+++ b/webmin/webmin-lib.pl
@@ -1234,52 +1234,6 @@ my %miniserv;
 &get_miniserv_config(\%miniserv);
 &load_theme_library();	# So that UI functions work
 
-# Need OS upgrade, but only once per day or if the system was rebooted
-my $now = time();
-my $uptime = &get_system_uptime();
-if (&foreign_available("webmin")) {
-	my %realos;
-	my @st = stat($realos_cache_file);
-	if (!@st || $now - $st[9] > 24*60*60 ||
-	    $uptime && $now - $st[9] > $uptime) {
-		%realos = &detect_operating_system(undef, 1);
-		&write_file($realos_cache_file, \%realos);
-		}
-	else {
-		&read_file($realos_cache_file, \%realos);
-		}
-	my $new_real = $realos{'real_os_version'};
-	my $old_real = $gconfig{'real_os_version'};
-	$new_real =~ s/\.\d+$//;
-	$old_real =~ s/\.\d+$//;
-	if ($realos{'real_os_type'} eq $gconfig{'real_os_type'} &&
-	    $new_real eq $old_real &&
-	    $realos{'real_os_version'} ne $gconfig{'real_os_version'}) {
-		# Only the minor OS version has changed, just silently update it
-		&lock_file("$config_directory/config");
-		$gconfig{'real_os_version'} = $realos{'real_os_version'};
-		$gconfig{'os_version'} = $realos{'os_version'};
-		&write_file("$config_directory/config", \%gconfig);
-		&unlock_file("$config_directory/config");
-		}
-	if (($realos{'os_version'} ne $gconfig{'os_version'} ||
-	     $realos{'real_os_version'} ne $gconfig{'real_os_version'} ||
-	     $realos{'os_type'} ne $gconfig{'os_type'}) &&
-	    $realos{'os_version'} && $realos{'os_type'} &&
-	    &foreign_available("webmin")) {
-		# Tell the user that OS version was updated
-		push(@notifs,
-		    &ui_form_start("@{[&get_webprefix()]}/webmin/fix_os.cgi").
-		    &text('os_incorrect',
-			  $realos{'real_os_type'},
-			  $realos{'real_os_version'}).
-		    &show_os_release_notes($realos{'real_os_version'}).
-		    "<p>\n".
-		    &ui_form_end([ [ undef, $text{'os_fix'} ] ])
-		    );
-		}
-	}
-
 # Password close to expiry
 my $warn_days = $config{'warn_days'};
 if (&foreign_check("acl")) {
