From 898cb3c39ac1dc9c1b00a2eaec3c39eb8fb28ad0 Mon Sep 17 00:00:00 2001 From: Valko Laszlo Date: Sun, 16 Apr 2023 02:06:54 +0200 Subject: [PATCH] Improved patch recognition. --- pkgtool.pm | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/pkgtool.pm b/pkgtool.pm index 40f509d..b5faf34 100644 --- a/pkgtool.pm +++ b/pkgtool.pm @@ -754,6 +754,39 @@ sub read_os_patches ($$$) } print_log('global', DEBUG3, 'Found OS patch information for %s: kbnum=%s current=%s', $kb, $number, $$p{Current}); } + elsif ($installname =~ /^Package_for_([0-9a-zA-Z_]+)~/o) { + my $kb = $1; + if ($installname =~ /^[^~]*~[^~]*~[^~]*~[^~]*~(\d+(\.\d+)*)/o) { + my $version = $1; + if (defined $version && $version ne '') { + my @versionlist = split /\./, $version; + my $revnum = $versionlist[2]; + if (defined $revnum && $revnum =~ /^\d+$/o && $revnum > 1) { + $kb .= 'v'.$revnum; + } + } + } + my $p = $$patches{$kb}; + if (! defined $p) { + $p = $$patches{$kb} = { + Type => 'OS', + Packages => { OS => 1 }, + InstallName => $name, + InstallClient => $installclient, + Original => $original, + Update => $update, + KB => $kb, + Number => $kb, + Current => 0, + Flags => 0 + }; + } + if (defined $state) { + $$p{Flags} |= $state; + $$p{Current} = 1 if $state & 0x20; + } + print_log('global', DEBUG3, 'Found OS patch information for %s: kbnum=%s current=%s', $kb, $kb, $$p{Current}); + } if ($name =~ /^([^~]*)~([^~]*)~([^~]*)~([^~]*)~([^~]*)$/o) { my $pkg = $$pkgs{$name}; if (! defined $pkg) {