subtree updates

meta-raspberrypi: 95a9103f91..92a9b7a012:
  Michał Kluska (1):
        rpi-base: Added missing HiFiBerry

meta-openembedded: 9f0e513211..a0237019f5:
  Alexander Stein (1):
        libkcapi: Update HOMEPAGE url

  Changqing Li (4):
        syslog-ng: upgrade 4.0.1 -> 4.6.0
        multipath-tools: upgrade 0.9.3 -> 0.9.8
        nodejs: upgrade 20.11.0 -> 20.11.1
        postgresql: upgrade 15.5 -> 16.2

  Joe Slater (1):
        googletest: allow for shared libraries

  Khem Raj (17):
        python3-fastjsonschema: Add missing ptest deps
        python3-gpiod: Tests rely on configfs support in kernel
        python3-pyzmq: Add missing dep on python3-unixadmin for ptests
        python3-betamax: Upgrade to 0.9.0
        libgpiod: Tests rely on configfs support in kernel
        keyutils: Add missing rdep for ptests
        fuse3: Make kmod as a recommendation instead of rdep for ptests
        drbd-utils: Disable warnings as errors
        influxdb: Define GOPROXY
        crucible: Define GOPROXY
        syzkaller: Fix build with go 1.21
        e2tools: Delete unneeded files from ptest package
        ptest-packagelists-meta-oe: Move libgpiod out of PTESTS_PROBLEMS_META_OE
        ptest-packagelists-meta-python: Move py3-libgpiod out of PTESTS_PROBLEMS_META_PYTHON
        pgpool2: Upgrade to 4.5.1
        pgpool2: Fix build with postgresql 16+
        emacs: Add packageconfig for selinux support

  Krupal Ka Patel (1):
        python3-aiohappyeyeballs: Correct the typo of BBCLASSEXTEND

  Markus Volk (3):
        folks: update 0.15.6 -> 0.15.7
        mozjs-115: update 115.6.0 -> 115.8.0
        polkit: update 123 -> 124

  Martin Jansa (3):
        ristretto: use python3native and depend on glib-2.0-native, python3-packaging-native
        xfce4-notifyd: use python3native and depend on python3-packaging-native
        fuse3: use 4 spaces for indentation

  Mingli Yu (1):
        nlohmann-json: Upgrade to 3.11.3

  Randolph Sapp (1):
        glmark2: add upstream patch to not care about stencil config

  Ulrich Ölmann (1):
        signing.bbclass: fix typos

  Xiangyu Chen (3):
        iperf3: upgrade 3.15 -> 3.16
        grpc: upgrade 1.60.0 -> 1.60.1
        drbd-utils: upgrade 9.22.0 -> 9.27.0

  Yi Zhao (7):
        openipmi: fix do_configure error when using dash
        cryptsetup: upgrade 2.6.1 -> 2.7.0
        layer.conf: Add nativesdk-libdevmapper PREFERRED_RPROVIDER
        krb5: upgrade 1.20.2 -> 1.21.2
        postfix: upgrade 3.7.3 -> 3.8.5
        openldap: upgrade 2.5.16 -> 2.6.7
        openvpn: upgrade 2.6.7 -> 2.6.9

  Yoann Congal (3):
        drbd-utils: Drop a duplicated line in DESCRIPTION
        drbd-utils: Fix a udev rule reproducibility
        toybox-inittab: Fix serial getty reproducibility

  alperak (9):
        python3-google-auth: upgrade 2.28.0 -> 2.28.1
        python3-netaddr: upgrade 0.10.1 -> 1.2.1 and add ptest
        ptest-packagelists-meta-python: Move python3-xlrd from PTESTS_PROBLEMS_META_PYTHON to PTESTS_FAST_META_PYTHON
        python3-wrapt: add ptest
        python3-freezegun: add recipe and add ptest
        python3-dateutil: upgrade 2.8.2 -> 2.9.0
        python3-types-python-dateutil: add recipe
        python3-arrow: add ptest, update backend and runtime dependencies
        python3-marshmallow: upgrade 3.20.2 -> 3.21.1 and add ptest

poky: 25d60ac6f6..7165c23237:
  Alexander Kanavin (48):
        xz: correct upstream version check
        python3-sphinxcontrib-jquery: add a recipe and make python3-sphinx-rtd-theme depend on it
        acl: upgrade 2.3.1 -> 2.3.2
        appstream: upgrade 1.0.0 -> 1.0.2
        boost: upgrade 1.83.0 -> 1.84.0
        btrfs-tools: upgrade 6.5.3 -> 6.7.1
        dnf: upgrade 4.18.2 -> 4.19.0
        diffoscope: upgrade 253 -> 259
        ell: upgrade 0.62 -> 0.63
        elfutils: upgrade 0.189 -> 0.191
        epiphany: upgrade 45.1 -> 45.3
        gettext: upgrade 0.22.4 -> 0.22.5
        glib-2.0: upgrade 2.78.3 -> 2.78.4
        glib-networking: upgrade 2.78.0 -> 2.78.1
        kmscube: upgrade to latest revision
        libbsd: upgrade 0.11.8 -> 0.12.1
        libdnf: update 0.72.0 -> 0.73.0
        libpciaccess: upgrade 0.17 -> 0.18
        libpcre2: upgrade 10.42 -> 10.43
        librepo: update 1.16.0 -> 1.17.0
        libusb1: upgrade 1.0.26 -> 1.0.27
        libxml2: upgrade 2.11.5 -> 2.12.5
        linux-firmware: upgrade 20231211 -> 20240220
        librsvg: upgrade 2.56.3 -> 2.57.1
        lsof: upgrade 4.98.0 -> 4.99.3
        man-pages: upgrade 6.05.01 -> 6.06
        mc: upgrade 4.8.30 -> 4.8.31
        mesa: upgrade 24.0.1 -> 24.0.2
        minicom: upgrade 2.8 -> 2.9
        nghttp2: upgrade 1.59.0 -> 1.60.0
        orc: upgrade 0.4.37 -> 0.4.38
        puzzles: upgrade to latest revision
        piglit: upgrade to latest revision
        python3-build: upgrade 1.0.3 -> 1.1.1
        python3-dtschema: upgrade 2023.7 -> 2024.2
        python3-jsonschema: upgrade 4.17.3 -> 4.21.1 and add new dependencies
        python3-ruamel-yaml: upgrade 0.17.35 -> 0.18.6
        python3-setuptools: upgrade 69.0.3 -> 69.1.1
        python3-wcwidth: upgrade 0.2.12 -> 0.2.13
        repo: upgrade 2.41 -> 2.42
        shaderc: update 2023.7 -> 2023.8
        systemd: upgrade 255.1 -> 255.4
        ttyrun: upgrade 2.30.0 -> 2.31.0
        taglib: upgrade 1.13.1 -> 2.0 and add utfcpp recipe to support that
        update-rc.d: upgrade to latest revision
        vala: upgrade 0.56.13 -> 0.56.15
        vulkan: upgrade 1.3.268.0 -> 1.3.275.0
        webkitgtk: upgrade 2.42.2 -> 2.42.5

  Bruce Ashfield (3):
        linux-yocto/cfg/6.6: drop CONFIG_DEBUG_CREDENTIALS
        linux-yocto/6.6: update to v6.6.20
        linux-yocto/6.6: update CVE exclusions

  Changqing Li (3):
        rxvt-unicode: Fix installing of terminfo
        systemd: fix dead link /var/log/README
        go: filter out build specific path from the linker flags

  Chen Qi (2):
        systemd: use RDEPENDS for systemd-vconsole-setup
        systemd: remove systemd-bus-proxy settings

  Christian Taedcke (1):
        image_types.bbclass: fix vfat image names

  Eilís 'pidge' Ní Fhlannagáin (6):
        qemurunner.py: Fix error on calls to run_monitor
        screenshot-tests: Add initial screenshot test png files for core-image-sato
        oeqa/runtime/login: Proof of concept for screenshot testcases
        oeqa/runtime/login: Exclude qemuriscv64
        oeqa/runtime/login: Add screenshot sample logic/timeout/dbus-wait
        sstatetests.py: Add testing for correct sstate permissions

  Fabio Estevam (1):
        u-boot: Move UBOOT_INITIAL_ENV back to u-boot.inc

  Geoff Parker (1):
        ref-manual: variables: adding multiple groups in GROUPADD_PARAM

  Johan Bezem (1):
        ref-manual: variables: correct sdk installation default path

  Jose Quaresma (7):
        go: rework patch to avoid identation
        go: bump 1.21.0
        goarch: disable dynamic linking globally
        oeqa/gotoolchain: set GOPROXY
        go: upgrade 1.21.0 -> 1.21.5
        go: upgrade 1.21.5 -> 1.21.7
        go: bump 1.22.0

  Khem Raj (4):
        mesa,mesa-gl: Fix build when dri3 is not enabled
        linux-yocto: Enable gpio-sim with ptests
        rust: Fix build failure re-appeared on riscv32
        gdb: Upgrade 14.1 -> 14.2

  Luca Ceresoli (2):
        ref-manual: tasks: do_cleanall: recommend using '-f' instead
        ref-manual: tasks: do_cleansstate: recommend using '-f' instead for a shared sstate

  Markus Volk (1):
        gtk+3: update 3.24.38 -> 3.24.41

  Michael Opdenacker (4):
        core-image-full-cmdline: add package-management
        bitbake: utils: remove BB_ENV_PASSTHROUGH from preserved_envvars()
        dev-manual: packages: fix capitalization
        manuals: document VIRTUAL-RUNTIME variables

  Randy MacLeod (1):
        valgrind: skip intermittently failing ptests

  Richard Purdie (9):
        no-gplv3: Tweak for packagemangement in core-image-full-cmdline
        qemu: Replace workaround with proper usermode fix for shmat
        bitbake: fetch/git: Avoid clean upon failure
        go: Further tweak indentation in patch
        go: Drop linkmode with nativesdk/cross-canadian
        libpng: Update SRC_URI to avoid redirects
        oeqa/runtime/login: Various code improvements and fixes
        oeqa/runtime/login: Mask out the mouse panel icon for now
        oeqa/runtime/login: Fix dbus-wait timeout and loop conditional

  Robert P. J. Day (1):
        python3-cryptography_42.0.5.bb: delete redundant ptest packaging

  Ross Burton (2):
        Add genericarm64 MACHINE
        rxvt: add rxvt to desktop entry name

  Simone Weiß (4):
        coreutils: backport patch to fix heap overflow in split
        qemu: backport patch for ui/clipboard issue
        ref-manual: classes: add cve status check for oe.qa
        contributor-guide: add notes for tests

  Tim Orling (1):
        python3-hypothesis: upgrade 6.98.12 -> 6.98.15

  Trevor Woerner (2):
        bmaptool: now part of Yocto Project
        dev-manual: bmaptool: rename

  Yi Zhao (1):
        expat: upgrdae 2.6.0 -> 2.6.1

  Yoann Congal (1):
        bitbake: prserv/serv: Fix a PID file removal race on prserv stop

Change-Id: Ie94e4df79e3d8f68aea3377f816d7106987a05f8
Signed-off-by: Patrick Williams <patrick@stwcx.xyz>
diff --git a/poky/meta/lib/oeqa/runtime/cases/login.py b/poky/meta/lib/oeqa/runtime/cases/login.py
new file mode 100644
index 0000000..e1bc60d
--- /dev/null
+++ b/poky/meta/lib/oeqa/runtime/cases/login.py
@@ -0,0 +1,116 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+import shutil
+import subprocess
+import tempfile
+import time
+import os
+from datetime import datetime
+from oeqa.runtime.case import OERuntimeTestCase
+from oeqa.runtime.decorator.package import OEHasPackage
+
+### Status of qemu images.
+#   - runqemu qemuppc64 comes up blank. (skip)
+#   - qemuarmv5 comes up with multiple heads but sending "head" to screendump.
+#     seems to create a png with a bad header? (skip for now, but come back to fix)
+#   - qemuriscv32 and qemuloongarch64 doesn't work with testimage apparently? (skip)
+#   - qemumips64 is missing mouse icon.
+#   - qemumips takes forever to render and is missing mouse icon.
+#   - qemuarm and qemuppc are odd as they don't resize so we need to just set width.
+#   - All images have home and screen flipper icons not always rendered fully at first.
+#     the sleep seems to help this out some, depending on machine load.
+###
+
+class LoginTest(OERuntimeTestCase):
+    @OEHasPackage(['matchbox-desktop', 'dbus-wait'])
+    def test_screenshot(self):
+        if self.td.get('MACHINE') in ("qemuppc64", "qemuarmv5", "qemuriscv32", "qemuriscv64", "qemuloongarch64"):
+            self.skipTest("{0} is not currently supported.".format(self.td.get('MACHINE')))
+
+        pn = self.td.get('PN')
+
+        ourenv = os.environ.copy()
+        origpath = self.td.get("ORIGPATH")
+        if origpath:
+            ourenv['PATH'] = ourenv['PATH'] + ":" + origpath
+
+        for cmd in ["identify.im7", "convert.im7", "compare.im7"]:
+            try:
+                subprocess.check_output(["which", cmd], env=ourenv)
+            except subprocess.CalledProcessError:
+                self.skipTest("%s (from imagemagick) not available" % cmd)
+
+
+        # Store images so we can debug them if needed
+        saved_screenshots_dir = self.td.get('T') + "/saved-screenshots/"
+
+        ###
+        # This is a really horrible way of doing this but I've not found the
+        # right event to determine "The system is loaded and screen is rendered"
+        #
+        # Using dbus-wait for matchbox is the wrong answer because while it
+        # ensures the system is up, it doesn't mean the screen is rendered.
+        #
+        # Checking the qmp socket doesn't work afaik either.
+        #
+        # One way to do this is to do compares of known good screendumps until
+        # we either get expected or close to expected or we time out. Part of the
+        # issue here with that is that there is a very fine difference in the
+        # diff between a screendump where the icons haven't loaded yet and
+        # one where they won't load. I'll look at that next, but, for now, this.
+        #
+        # Which is ugly and I hate it but it 'works' for various definitions of
+        # 'works'.
+        ###
+        # RP: if the signal is sent before we run this, it will never be seen and we'd timeout
+        #status, output = self.target.run('dbus-wait org.matchbox_project.desktop Loaded')
+        #if status != 0 or "Timeout" in output:
+        #    self.fail('dbus-wait failed (%s, %s). This could mean that the image never loaded the matchbox desktop.' % (status, output))
+
+        # Start taking screenshots every 2 seconds until diff=0 or timeout is 60 seconds
+        timeout = time.time() + 60
+        diff = True
+        with tempfile.NamedTemporaryFile(prefix="oeqa-screenshot-login", suffix=".png") as t:
+            while diff != 0 and time.time() < timeout:
+                time.sleep(2)
+                ret = self.target.runner.run_monitor("screendump", args={"filename": t.name, "format":"png"})
+
+                # Find out size of image so we can determine where to blank out clock.
+                # qemuarm and qemuppc are odd as it doesn't resize the window and returns
+                # incorrect widths
+                if self.td.get('MACHINE') == "qemuarm" or self.td.get('MACHINE') == "qemuppc":
+                    width = "640"
+                else:
+                    cmd = "identify.im7 -ping -format '%w' {0}".format(t.name)
+                    width = subprocess.check_output(cmd, shell=True, env=ourenv).decode()
+
+                rblank = int(float(width))
+                lblank = rblank-80
+
+                # Use the meta-oe version of convert, along with it's suffix. This blanks out the clock.
+                cmd = "convert.im7 {0} -fill white -draw 'rectangle {1},4 {2},28' {3}".format(t.name, str(rblank), str(lblank), t.name)
+                convert_out=subprocess.check_output(cmd, shell=True, env=ourenv).decode()
+
+                bb.utils.mkdirhier(saved_screenshots_dir)
+                savedfile = "{0}/saved-{1}-{2}-{3}.png".format(saved_screenshots_dir, \
+                                                                            datetime.timestamp(datetime.now()), \
+                                                                            pn, \
+                                                                            self.td.get('MACHINE'))
+                shutil.copy2(t.name, savedfile)
+
+                refimage = self.td.get('COREBASE') + "/meta/files/screenshot-tests/" + pn + "-" + self.td.get('MACHINE') +".png"
+                if not os.path.exists(refimage):
+                    self.skipTest("No reference image for comparision (%s)" % refimage)
+
+                cmd = "compare.im7 -metric MSE {0} {1} /dev/null".format(t.name, refimage)
+                compare_out = subprocess.run(cmd, shell=True, capture_output=True, text=True, env=ourenv)
+                diff=float(compare_out.stderr.replace("(", "").replace(")","").split()[1])
+            if diff > 0:
+                # Keep a copy of the failed screenshot so we can see what happened.
+                self.fail("Screenshot diff is {0}. Failed image stored in {1}".format(str(diff), savedfile))
+            else:
+                self.assertEqual(0, diff, "Screenshot diff is {0}.".format(str(diff)))
diff --git a/poky/meta/lib/oeqa/selftest/cases/devtool.py b/poky/meta/lib/oeqa/selftest/cases/devtool.py
index ecff3a9..a1cccc3 100644
--- a/poky/meta/lib/oeqa/selftest/cases/devtool.py
+++ b/poky/meta/lib/oeqa/selftest/cases/devtool.py
@@ -1165,9 +1165,10 @@
         result = runCmd('git commit -m "Add a new file"', cwd=tempdir)
         self.add_command_to_tearDown('cd %s; rm %s/*.patch; git checkout %s %s' % (os.path.dirname(recipefile), testrecipe, testrecipe, os.path.basename(recipefile)))
         result = runCmd('devtool update-recipe %s' % testrecipe)
+        result = runCmd('git add minicom', cwd=os.path.dirname(recipefile))
         expected_status = [(' M', '.*/%s$' % os.path.basename(recipefile)),
-                           ('??', '.*/0001-Change-the-README.patch$'),
-                           ('??', '.*/0002-Add-a-new-file.patch$')]
+                           ('A ', '.*/0001-Change-the-README.patch$'),
+                           ('A ', '.*/0002-Add-a-new-file.patch$')]
         self._check_repo_status(os.path.dirname(recipefile), expected_status)
 
     def test_devtool_update_recipe_git(self):
diff --git a/poky/meta/lib/oeqa/selftest/cases/gotoolchain.py b/poky/meta/lib/oeqa/selftest/cases/gotoolchain.py
index 74c1c48..ee2cf4b 100644
--- a/poky/meta/lib/oeqa/selftest/cases/gotoolchain.py
+++ b/poky/meta/lib/oeqa/selftest/cases/gotoolchain.py
@@ -54,6 +54,7 @@
         cmd = cmd + "export GOPATH=%s; " % self.go_path
         cmd = cmd + "export GOFLAGS=-modcacherw; "
         cmd = cmd + "export CGO_ENABLED=1; "
+        cmd = cmd + "export GOPROXY=https://proxy.golang.org,direct; "
         cmd = cmd + "${CROSS_COMPILE}go %s" % gocmd
         return runCmd(cmd).status
 
diff --git a/poky/meta/lib/oeqa/selftest/cases/sstatetests.py b/poky/meta/lib/oeqa/selftest/cases/sstatetests.py
index 56dfcdb..031c226 100644
--- a/poky/meta/lib/oeqa/selftest/cases/sstatetests.py
+++ b/poky/meta/lib/oeqa/selftest/cases/sstatetests.py
@@ -79,7 +79,7 @@
                         result.append(f)
         return result
 
-    # Test sstate files creation and their location
+    # Test sstate files creation and their location and directory perms
     def run_test_sstate_creation(self, targets, distro_specific=True, distro_nonspecific=True, temp_sstate_location=True, should_pass=True):
         self.config_sstate(temp_sstate_location, [self.sstate_path])
 
@@ -88,6 +88,19 @@
         else:
             bitbake(['-ccleansstate'] + targets)
 
+        # We need to test that the env umask have does not effect sstate directory creation
+        # So, first, we'll get the current umask and set it to something we know incorrect
+        # See: sstate_task_postfunc for correct umask of os.umask(0o002)
+        import os
+        def current_umask():
+            current_umask = os.umask(0)
+            os.umask(current_umask)
+            return current_umask
+
+        orig_umask = current_umask()
+        # Set it to a umask we know will be 'wrong'
+        os.umask(0o022)
+
         bitbake(targets)
         file_tracker = []
         results = self.search_sstate('|'.join(map(str, targets)), distro_specific, distro_nonspecific)
@@ -104,6 +117,19 @@
         else:
             self.assertTrue(not file_tracker , msg="Found sstate files in the wrong place for: %s (found %s)" % (', '.join(map(str, targets)), str(file_tracker)))
 
+        # Now we'll walk the tree to check the mode and see if things are incorrect.
+        badperms = []
+        for root, dirs, files in os.walk(self.sstate_path):
+            for directory in dirs:
+                if (os.stat(os.path.join(root, directory)).st_mode & 0o777) != 0o775:
+                    badperms.append(os.path.join(root, directory))
+
+        # Return to original umask
+        os.umask(orig_umask)
+
+        if should_pass:
+            self.assertTrue(badperms , msg="Found sstate directories with the wrong permissions: %s (found %s)" % (', '.join(map(str, targets)), str(badperms)))
+
     # Test the sstate files deletion part of the do_cleansstate task
     def run_test_cleansstate_task(self, targets, distro_specific=True, distro_nonspecific=True, temp_sstate_location=True):
         self.config_sstate(temp_sstate_location, [self.sstate_path])
diff --git a/poky/meta/lib/oeqa/utils/qemurunner.py b/poky/meta/lib/oeqa/utils/qemurunner.py
index 277cd32..cda43aa 100644
--- a/poky/meta/lib/oeqa/utils/qemurunner.py
+++ b/poky/meta/lib/oeqa/utils/qemurunner.py
@@ -650,9 +650,9 @@
         if hasattr(self, 'qmp') and self.qmp:
             self.qmp.settimeout(timeout)
             if args is not None:
-                return self.qmp.cmd(command, args)
+                return self.qmp.cmd_raw(command, args)
             else:
-                return self.qmp.cmd(command)
+                return self.qmp.cmd_raw(command)
 
     def run_serial(self, command, raw=False, timeout=60):
         # Returns (status, output) where status is 1 on success and 0 on error