Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package sysextmgr for openSUSE:Factory 
checked in at 2026-08-21 16:50:18
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/sysextmgr (Old)
 and      /work/SRC/openSUSE:Factory/.sysextmgr.new.1258 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "sysextmgr"

Fri Aug 21 16:50:18 2026 rev:12 rq:1372294 version:1.3.0+git20260820.0628c3a

Changes:
--------
--- /work/SRC/openSUSE:Factory/sysextmgr/sysextmgr.changes      2026-08-18 
16:35:56.422763223 +0200
+++ /work/SRC/openSUSE:Factory/.sysextmgr.new.1258/sysextmgr.changes    
2026-08-21 16:51:04.585174433 +0200
@@ -1,0 +2,9 @@
+Thu Aug 20 13:36:40 UTC 2026 - Thorsten Kukuk <[email protected]>
+
+- Update to version 1.3.0+git20260820.0628c3a:
+  * Release version 1.3.0
+  * ID_LIKE is optional, don't error out
+  * Update ci-opensuse. remove outdated meson*.yml
+  * Add a PCRE2 regular expression filter to list
+
+-------------------------------------------------------------------

Old:
----
  sysextmgr-1.2.0+git20260817.3f4cd50.tar.xz

New:
----
  sysextmgr-1.3.0+git20260820.0628c3a.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ sysextmgr.spec ++++++
--- /var/tmp/diff_new_pack.mU7uGE/_old  2026-08-21 16:51:06.163231107 +0200
+++ /var/tmp/diff_new_pack.mU7uGE/_new  2026-08-21 16:51:06.168231287 +0200
@@ -16,7 +16,7 @@
 #
 
 Name:           sysextmgr
-Version:        1.2.0+git20260817.3f4cd50
+Version:        1.3.0+git20260820.0628c3a
 Release:        0
 Summary:        Tools to manage systemd-sysext images
 License:        GPL-2.0-or-later
@@ -28,6 +28,7 @@
 BuildRequires:  pkgconfig
 BuildRequires:  pkgconfig(libeconf)
 BuildRequires:  pkgconfig(libsystemd) >= 257
+BuildRequires:  pkgconfig(libpcre2-8)
 BuildRequires:  pkgconfig(smartcols)
 BuildRequires:  pkgconfig(zlib)
 Requires:       %{_bindir}/systemd-dissect

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.mU7uGE/_old  2026-08-21 16:51:06.314236530 +0200
+++ /var/tmp/diff_new_pack.mU7uGE/_new  2026-08-21 16:51:06.333237213 +0200
@@ -1,6 +1,6 @@
 <servicedata>
 <service name="tar_scm">
                 <param 
name="url">https://github.com/openSUSE/sysextmgr.git</param>
-<param 
name="changesrevision">3f4cd502eb4b280d5defe0367b3dc10f3a9fbdb3</param></service></servicedata>
+<param 
name="changesrevision">0628c3a76e4d7d07e7087c3bac1a31f3f0b617a5</param></service></servicedata>
 (No newline at EOF)
 

++++++ sysextmgr-1.2.0+git20260817.3f4cd50.tar.xz -> 
sysextmgr-1.3.0+git20260820.0628c3a.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/sysextmgr-1.2.0+git20260817.3f4cd50/.github/workflows/ci-opensuse.yml 
new/sysextmgr-1.3.0+git20260820.0628c3a/.github/workflows/ci-opensuse.yml
--- old/sysextmgr-1.2.0+git20260817.3f4cd50/.github/workflows/ci-opensuse.yml   
2026-08-17 16:47:00.000000000 +0200
+++ new/sysextmgr-1.3.0+git20260820.0628c3a/.github/workflows/ci-opensuse.yml   
2026-08-20 15:36:39.000000000 +0200
@@ -8,12 +8,12 @@
     container: registry.opensuse.org/opensuse/tumbleweed:latest
     steps:
     - name: Checkout repository
-      uses: actions/checkout@v4
+      uses: actions/checkout@v7
 
     - name: Install devel packages
       run: |
         zypper ref
-        zypper --non-interactive in --no-recommends meson gcc libeconf-devel 
systemd-devel valgrind diffutils libzio-devel zlib-devel 
docbook5-xsl-stylesheets libxslt-tools libsmartcols-devel
+        zypper --non-interactive in --no-recommends meson gcc libeconf-devel 
systemd-devel valgrind diffutils libzio-devel zlib-devel 
docbook5-xsl-stylesheets libxslt-tools libsmartcols-devel pcre2-devel
 
     - name: Setup meson
       run: meson setup build --auto-features=enabled
@@ -34,7 +34,7 @@
     - name: Install devel packages
       run: |
         zypper ref
-        zypper --non-interactive in --no-recommends meson gcc libeconf-devel 
systemd-devel valgrind diffutils libzio-devel zlib-devel 
docbook5-xsl-stylesheets libxslt-tools libsmartcols-devel
+        zypper --non-interactive in --no-recommends meson gcc libeconf-devel 
systemd-devel valgrind diffutils libzio-devel zlib-devel 
docbook5-xsl-stylesheets libxslt-tools libsmartcols-devel pcre2-devel
 
     - name: Setup meson
       run: meson setup build --auto-features=enabled 
-Db_sanitize=address,undefined
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/sysextmgr-1.2.0+git20260817.3f4cd50/.github/workflows/meson-sanitizer.yml 
new/sysextmgr-1.3.0+git20260820.0628c3a/.github/workflows/meson-sanitizer.yml
--- 
old/sysextmgr-1.2.0+git20260817.3f4cd50/.github/workflows/meson-sanitizer.yml   
    2026-08-17 16:47:00.000000000 +0200
+++ 
new/sysextmgr-1.3.0+git20260820.0628c3a/.github/workflows/meson-sanitizer.yml   
    1970-01-01 01:00:00.000000000 +0100
@@ -1,26 +0,0 @@
-name: meson sanitizer
-
-on: [push, pull_request]
-
-jobs:
-  build:
-
-    runs-on: ubuntu-latest
-    steps:
-    - name: Install pam-devel
-      run: sudo apt-get install libeconf-dev libsystemd-dev
-    - uses: actions/checkout@v3
-    - uses: BSFishy/[email protected]
-      with:
-        action: build
-        directory: build
-        setup-options: -Db_sanitize=address,undefined
-        options: --verbose
-        meson-version: 0.61.4
-    - uses: BSFishy/[email protected]
-      with:
-        action: test
-        directory: build
-        setup-options: -Db_sanitize=address,undefined
-        options: --verbose
-        meson-version: 0.61.4
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/sysextmgr-1.2.0+git20260817.3f4cd50/.github/workflows/meson.yml 
new/sysextmgr-1.3.0+git20260820.0628c3a/.github/workflows/meson.yml
--- old/sysextmgr-1.2.0+git20260817.3f4cd50/.github/workflows/meson.yml 
2026-08-17 16:47:00.000000000 +0200
+++ new/sysextmgr-1.3.0+git20260820.0628c3a/.github/workflows/meson.yml 
1970-01-01 01:00:00.000000000 +0100
@@ -1,22 +0,0 @@
-name: meson build & test
-
-on: [push, pull_request]
-
-jobs:
-  build:
-
-    runs-on: ubuntu-latest
-    steps:
-    - name: Install pam-devel
-      run: sudo apt-get install libeconf-dev libsystemd-dev
-    - uses: actions/checkout@v3
-    - uses: BSFishy/[email protected]
-      with:
-        action: build
-        options: --verbose
-        meson-version: 0.61.4
-    - uses: BSFishy/[email protected]
-      with:
-        action: test
-        options: --verbose
-        meson-version: 0.61.4
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sysextmgr-1.2.0+git20260817.3f4cd50/README.md 
new/sysextmgr-1.3.0+git20260820.0628c3a/README.md
--- old/sysextmgr-1.2.0+git20260817.3f4cd50/README.md   2026-08-17 
16:47:00.000000000 +0200
+++ new/sysextmgr-1.3.0+git20260820.0628c3a/README.md   2026-08-20 
15:36:39.000000000 +0200
@@ -114,6 +114,7 @@
 * *url* - URL from where to get sysext images
 * *sysext_store_dir* - Local directory where to store sysext images, default: 
`/var/lib/sysext-store`
 * *extensions_dir* - Directory with symlinks pointing to sysext images which 
systemd-sysext will enable at startup, default: `/etc/extensions`
+* *filter* - PCRE2 regular expression used by `sysextmgrcli list` to filter 
the images shown by name; can be overridden with `--filter`
 
 ### Example configuration file:
 ```
@@ -123,3 +124,11 @@
 [sysextmgrd]
 verbose=true
 ```
+
+### Example configuration file with a filter:
+
+Only show sysext images ending with `.sysext.raw` which don't start with 
`uki-rescue-`:
+```
+[default]
+filter=^(?!uki-rescue-).*\.sysext\.raw$
+```
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/sysextmgr-1.2.0+git20260817.3f4cd50/bash-completion/sysextmgrcli 
new/sysextmgr-1.3.0+git20260820.0628c3a/bash-completion/sysextmgrcli
--- old/sysextmgr-1.2.0+git20260817.3f4cd50/bash-completion/sysextmgrcli        
2026-08-17 16:47:00.000000000 +0200
+++ new/sysextmgr-1.3.0+git20260820.0628c3a/bash-completion/sysextmgrcli        
2026-08-20 15:36:39.000000000 +0200
@@ -40,7 +40,7 @@
             opts='-u --url -v --verbose -h --help'
             ;;
         list)
-            opts='-u --url -a --all -v --verbose -h --help'
+            opts='-u --url -a --all -f --filter -v --verbose -h --help'
             ;;
         merge-json)
             opts='-o --output -h --help'
@@ -62,7 +62,7 @@
             _filedir -d
             return
             ;;
-        -u|--url|-n|--name)
+        -u|--url|-n|--name|-f|--filter)
             return
             ;;
     esac
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/sysextmgr-1.2.0+git20260817.3f4cd50/include/sysextmgr.h 
new/sysextmgr-1.3.0+git20260820.0628c3a/include/sysextmgr.h
--- old/sysextmgr-1.2.0+git20260817.3f4cd50/include/sysextmgr.h 2026-08-17 
16:47:00.000000000 +0200
+++ new/sysextmgr-1.3.0+git20260820.0628c3a/include/sysextmgr.h 2026-08-20 
15:36:39.000000000 +0200
@@ -12,6 +12,7 @@
   char *url;
   char *sysext_store_dir;
   char *extensions_dir;
+  char *filter;
 };
 
 extern struct config config;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/sysextmgr-1.2.0+git20260817.3f4cd50/man/sysextmgr.conf.5.xml 
new/sysextmgr-1.3.0+git20260820.0628c3a/man/sysextmgr.conf.5.xml
--- old/sysextmgr-1.2.0+git20260817.3f4cd50/man/sysextmgr.conf.5.xml    
2026-08-17 16:47:00.000000000 +0200
+++ new/sysextmgr-1.3.0+git20260820.0628c3a/man/sysextmgr.conf.5.xml    
2026-08-20 15:36:39.000000000 +0200
@@ -97,6 +97,19 @@
           </para>
         </listitem>
       </varlistentry>
+
+      <varlistentry>
+        <term><varname>filter=</varname></term>
+        <listitem>
+          <para>
+            Specifies a PCRE2 regular expression (see
+            
<citerefentry><refentrytitle>pcre2syntax</refentrytitle><manvolnum>3</manvolnum></citerefentry>)
+            used to filter the images shown by <command>sysextmgrcli 
list</command>. Only images
+            whose name matches are listed. Can be overridden with the 
<option>--filter</option>
+            command line option.
+          </para>
+        </listitem>
+      </varlistentry>
     </variablelist>
   </refsect1>
 
@@ -110,6 +123,11 @@
 [sysextmgrd]
 verbose=true]]></programlisting>
     </example>
+    <example>
+      <title>A sysextmgr.conf file only showing images ending with 
".sysext.raw" which don't start with "uki-rescue-"</title>
+      <programlisting><![CDATA[[default]
+filter=^(?!uki-rescue-).*\.sysext\.raw$]]></programlisting>
+    </example>
   </refsect1>
 
   <refsect1>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/sysextmgr-1.2.0+git20260817.3f4cd50/man/sysextmgrcli.1.xml 
new/sysextmgr-1.3.0+git20260820.0628c3a/man/sysextmgrcli.1.xml
--- old/sysextmgr-1.2.0+git20260817.3f4cd50/man/sysextmgrcli.1.xml      
2026-08-17 16:47:00.000000000 +0200
+++ new/sysextmgr-1.3.0+git20260820.0628c3a/man/sysextmgrcli.1.xml      
2026-08-20 15:36:39.000000000 +0200
@@ -47,6 +47,10 @@
               <listitem><para>List images with incompatible architecture 
too.</para></listitem>
             </varlistentry>
             <varlistentry>
+              <term><option>-f</option>, <option>--filter</option> 
<replaceable>REGEX</replaceable></term>
+              <listitem><para>Only list images whose name matches the PCRE2 
regular expression <replaceable>REGEX</replaceable>.</para></listitem>
+            </varlistentry>
+            <varlistentry>
               <term><option>-u</option>, <option>--url URL</option></term>
               <listitem><para>Remote directory URL with sysext 
images.</para></listitem>
             </varlistentry>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sysextmgr-1.2.0+git20260817.3f4cd50/meson.build 
new/sysextmgr-1.3.0+git20260820.0628c3a/meson.build
--- old/sysextmgr-1.2.0+git20260817.3f4cd50/meson.build 2026-08-17 
16:47:00.000000000 +0200
+++ new/sysextmgr-1.3.0+git20260820.0628c3a/meson.build 2026-08-20 
15:36:39.000000000 +0200
@@ -13,7 +13,7 @@
                   'c_std=gnu17',
                  'warning_level=2'],
   license : ['GPL-2.0-or-later', 'LGPL-2.1-or-later'],
-  version : '1.2.0',
+  version : '1.3.0',
 )
 
 conf = configuration_data()
@@ -73,6 +73,7 @@
 smartcols = dependency('smartcols', required : true)
 libsystemd = dependency('libsystemd', version: '>= 257', required : true)
 libz = dependency('zlib', required : true)
+libpcre2 = dependency('libpcre2-8', required : true)
 #libzio = dependency('libzio', required : true)
 libzio = declare_dependency(dependencies : cc.find_library('zio'))
 
@@ -106,7 +107,7 @@
 executable('sysextmgrd',
            sysextmgrd_c,
            include_directories : inc,
-           dependencies : [libeconf, libsystemd, libzio, libz],
+           dependencies : [libeconf, libsystemd, libzio, libz, libpcre2],
            install_dir : libexecdir,
            install : true)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sysextmgr-1.2.0+git20260817.3f4cd50/src/config.c 
new/sysextmgr-1.3.0+git20260820.0628c3a/src/config.c
--- old/sysextmgr-1.2.0+git20260817.3f4cd50/src/config.c        2026-08-17 
16:47:00.000000000 +0200
+++ new/sysextmgr-1.3.0+git20260820.0628c3a/src/config.c        2026-08-20 
15:36:39.000000000 +0200
@@ -15,7 +15,8 @@
   .verify_signature = true,
   .url = NULL,
   .sysext_store_dir = SYSEXT_STORE_DIR,
-  .extensions_dir = EXTENSIONS_DIR
+  .extensions_dir = EXTENSIONS_DIR,
+  .filter = NULL
 };
 
 static econf_err
@@ -115,6 +116,9 @@
       r = getStringValueDef(key_file, defgroup, "extensions_dir", 
&config.extensions_dir, config.extensions_dir);
       if (r < 0)
        return r;
+      r = getStringValueDef(key_file, defgroup, "filter", &config.filter, 
config.filter);
+      if (r < 0)
+       return r;
     }
 
   return 0;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sysextmgr-1.2.0+git20260817.3f4cd50/src/main-list.c 
new/sysextmgr-1.3.0+git20260820.0628c3a/src/main-list.c
--- old/sysextmgr-1.2.0+git20260817.3f4cd50/src/main-list.c     2026-08-17 
16:47:00.000000000 +0200
+++ new/sysextmgr-1.3.0+git20260820.0628c3a/src/main-list.c     2026-08-20 
15:36:39.000000000 +0200
@@ -13,6 +13,7 @@
 
 static bool arg_verbose = false;
 static bool arg_all = false;
+static char *arg_filter = NULL;
 
 struct list_images {
   bool success;
@@ -115,6 +116,17 @@
         }
     }
 
+  if (arg_filter)
+    {
+      r = sd_json_variant_merge_objectbo(&params,
+                                         SD_JSON_BUILD_PAIR("Filter", 
SD_JSON_BUILD_STRING(arg_filter)));
+      if (r < 0)
+        {
+          fprintf(stderr, "Failed to add \"filter\" to parameter list: %s\n", 
strerror(-r));
+          return r;
+        }
+    }
+
   r = sd_varlink_call(link, "org.openSUSE.sysextmgr.ListImages", params, 
&result, &error_id);
   if (r < 0)
     {
@@ -247,12 +259,14 @@
   struct option const longopts[] = {
     {"url", required_argument, NULL, 'u'},
     {"verbose", no_argument, NULL, 'v'},
+    {"all", no_argument, NULL, 'a'},
+    {"filter", required_argument, NULL, 'f'},
     {NULL, 0, NULL, '\0'}
   };
   char *url = NULL;
   int c, r;
 
-  while ((c = getopt_long(argc, argv, "u:va", longopts, NULL)) != -1)
+  while ((c = getopt_long(argc, argv, "u:vaf:", longopts, NULL)) != -1)
     {
       switch (c)
         {
@@ -265,6 +279,9 @@
        case 'a':
          arg_all = true;
          break;
+       case 'f':
+         arg_filter = optarg;
+         break;
         default:
           usage(EXIT_FAILURE);
           break;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sysextmgr-1.2.0+git20260817.3f4cd50/src/osrelease.c 
new/sysextmgr-1.3.0+git20260820.0628c3a/src/osrelease.c
--- old/sysextmgr-1.2.0+git20260817.3f4cd50/src/osrelease.c     2026-08-17 
16:47:00.000000000 +0200
+++ new/sysextmgr-1.3.0+git20260820.0628c3a/src/osrelease.c     2026-08-20 
15:36:39.000000000 +0200
@@ -89,16 +89,17 @@
       return -1;
     }
 
-  if ((error = econf_getStringValue(key_file, NULL, "ID_LIKE", 
&(*res)->id_like)))
+  if ((error = econf_getStringValue(key_file, NULL, "VERSION_ID", 
&(*res)->version_id)))
     {
-      fprintf(stderr, "ERROR: couldn't get key 'ID_LIKE' from %s: %s\n",
-             osrelease, econf_errString(error));
+      fprintf(stderr, "ERROR: couldn't get key 'VERSION_ID' from %s: %s\n", 
osrelease, econf_errString(error));
       return -1;
     }
 
-  if ((error = econf_getStringValue(key_file, NULL, "VERSION_ID", 
&(*res)->version_id)))
+  if ((error = econf_getStringValue(key_file, NULL, "ID_LIKE", 
&(*res)->id_like))
+      && error != ECONF_NOKEY)
     {
-      fprintf(stderr, "ERROR: couldn't get key 'VERSION_ID' from %s: %s\n", 
osrelease, econf_errString(error));
+      fprintf(stderr, "ERROR: couldn't get key 'ID_LIKE' from %s: %s\n",
+             osrelease, econf_errString(error));
       return -1;
     }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/sysextmgr-1.2.0+git20260817.3f4cd50/src/sysextmgrcli.c 
new/sysextmgr-1.3.0+git20260820.0628c3a/src/sysextmgrcli.c
--- old/sysextmgr-1.2.0+git20260817.3f4cd50/src/sysextmgrcli.c  2026-08-17 
16:47:00.000000000 +0200
+++ new/sysextmgr-1.3.0+git20260820.0628c3a/src/sysextmgrcli.c  2026-08-20 
15:36:39.000000000 +0200
@@ -56,9 +56,10 @@
   fputs("\n", output);
 
   fputs("list - list all images and if they are compatible\n", output);
-  fputs("Options for merge-json:\n", output);
+  fputs("Options for list:\n", output);
   fputs("  -u, --url URL         Remote directory with sysext images\n", 
output);
   fputs("  -a, --all             List images with incompatible architecture 
too\n", output);
+  fputs("  -f, --filter REGEX    Only list images matching the PCRE2 regular 
expression\n", output);
   fputs("  -v, --verbose         Verbose output\n", output);
   fputs("\n", output);
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sysextmgr-1.2.0+git20260817.3f4cd50/src/sysextmgrd.c 
new/sysextmgr-1.3.0+git20260820.0628c3a/src/sysextmgrd.c
--- old/sysextmgr-1.2.0+git20260817.3f4cd50/src/sysextmgrd.c    2026-08-17 
16:47:00.000000000 +0200
+++ new/sysextmgr-1.3.0+git20260820.0628c3a/src/sysextmgrd.c    2026-08-20 
15:36:39.000000000 +0200
@@ -29,6 +29,9 @@
 #include <string.h>
 #include <ctype.h>
 
+#define PCRE2_CODE_UNIT_WIDTH 8
+#include <pcre2.h>
+
 #include <systemd/sd-daemon.h>
 #include <systemd/sd-varlink.h>
 #include <sys/stat.h>
@@ -339,6 +342,7 @@
   bool all_architecture;
   char *install;
   char *prefix;
+  char *filter;
 };
 
 static void
@@ -347,6 +351,21 @@
   var->url = mfree(var->url);
   var->install = mfree(var->install);
   var->prefix = mfree(var->prefix);
+  var->filter = mfree(var->filter);
+}
+
+static void
+pcre2_code_freep(pcre2_code **p)
+{
+  if (*p)
+    pcre2_code_free(*p);
+}
+
+static void
+pcre2_match_data_freep(pcre2_match_data **p)
+{
+  if (*p)
+    pcre2_match_data_free(*p);
 }
 
 static int
@@ -361,19 +380,24 @@
     .all_architecture = false,
     .install = NULL,
     .prefix = NULL,
+    .filter = NULL,
   };
   static const sd_json_dispatch_field dispatch_table[] = {
     { "URL",     SD_JSON_VARIANT_STRING,  sd_json_dispatch_string,  
offsetof(struct parameters, url), 0},
     { "Verbose", SD_JSON_VARIANT_BOOLEAN, sd_json_dispatch_stdbool, 
offsetof(struct parameters, verbose), 0},
     { "All", SD_JSON_VARIANT_BOOLEAN, sd_json_dispatch_stdbool, 
offsetof(struct parameters, all_architecture), 0},
+    { "Filter", SD_JSON_VARIANT_STRING, sd_json_dispatch_string, 
offsetof(struct parameters, filter), 0},
     {}
   };
   _cleanup_(free_os_releasep) struct osrelease *osrelease = NULL;
   _cleanup_(free_image_entry_list) struct image_entry **images = NULL;
   _cleanup_(free_image_entry_list) struct image_entry **images_remote = NULL;
   _cleanup_(free_image_entry_list) struct image_entry **images_local = NULL;
+  _cleanup_(pcre2_code_freep) pcre2_code *filter_regex = NULL;
+  _cleanup_(pcre2_match_data_freep) pcre2_match_data *filter_match_data = NULL;
   size_t n_remote = 0, n_local = 0, n_etc = 0;
   const char *url = NULL;
+  const char *filter = NULL;
   int r;
 
   log_msg(LOG_INFO, "Varlink method \"ListImages\" called...");
@@ -526,10 +550,40 @@
   /* sort list */
   qsort(images, n, sizeof(struct image_entry *), image_cmp);
 
+  /* use filter from config if none got provided via parameter */
+  filter = p.filter ? p.filter : config.filter;
+
+  if (filter)
+    {
+      int errorcode;
+      PCRE2_SIZE erroroffset;
+
+      filter_regex = pcre2_compile((PCRE2_SPTR)filter, PCRE2_ZERO_TERMINATED, 
0,
+                                   &errorcode, &erroroffset, NULL);
+      if (filter_regex == NULL)
+        {
+         PCRE2_UCHAR errbuf[256];
+
+         pcre2_get_error_message(errorcode, errbuf, sizeof(errbuf));
+         return api_error(link, "Invalid filter regular expression '%s' at 
offset %zu: %s",
+                           filter, erroroffset, errbuf);
+       }
+
+      filter_match_data = pcre2_match_data_create_from_pattern(filter_regex, 
NULL);
+      if (filter_match_data == NULL)
+        {
+         reset_verbose_log();
+         return out_of_memory_error(link);
+       }
+    }
+
   for (size_t i = 0; images[i] != NULL; i++)
     {
       if (images[i]->deps &&
-         (p.all_architecture || 
extention_architecture_compatible(images[i]->deps->architecture)))
+         (p.all_architecture || 
extention_architecture_compatible(images[i]->deps->architecture)) &&
+         (!filter_regex ||
+          pcre2_match(filter_regex, (PCRE2_SPTR)images[i]->image_name,
+                      PCRE2_ZERO_TERMINATED, 0, 0, filter_match_data, NULL) >= 
0))
        {
          log_msg(LOG_INFO, "--------");
          log_msg(LOG_INFO, "name: %s", images[i]->name);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/sysextmgr-1.2.0+git20260817.3f4cd50/src/varlink-org.openSUSE.sysextmgr.c 
new/sysextmgr-1.3.0+git20260820.0628c3a/src/varlink-org.openSUSE.sysextmgr.c
--- 
old/sysextmgr-1.2.0+git20260817.3f4cd50/src/varlink-org.openSUSE.sysextmgr.c    
    2026-08-17 16:47:00.000000000 +0200
+++ 
new/sysextmgr-1.3.0+git20260820.0628c3a/src/varlink-org.openSUSE.sysextmgr.c    
    2026-08-20 15:36:39.000000000 +0200
@@ -83,6 +83,8 @@
                SD_VARLINK_DEFINE_INPUT(Verbose, SD_VARLINK_BOOL, 
SD_VARLINK_NULLABLE),
                SD_VARLINK_FIELD_COMMENT("Show all architectures"),
                SD_VARLINK_DEFINE_INPUT(All, SD_VARLINK_BOOL, 
SD_VARLINK_NULLABLE),
+               SD_VARLINK_FIELD_COMMENT("PCRE2 regular expression to filter 
the list of images by name"),
+               SD_VARLINK_DEFINE_INPUT(Filter, SD_VARLINK_STRING, 
SD_VARLINK_NULLABLE),
                SD_VARLINK_FIELD_COMMENT("If call succeeded"),
                SD_VARLINK_DEFINE_OUTPUT(Success, SD_VARLINK_BOOL, 0),
                 SD_VARLINK_FIELD_COMMENT("Data of sysext images"),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/sysextmgr-1.2.0+git20260817.3f4cd50/sysextmgr.conf.example 
new/sysextmgr-1.3.0+git20260820.0628c3a/sysextmgr.conf.example
--- old/sysextmgr-1.2.0+git20260817.3f4cd50/sysextmgr.conf.example      
1970-01-01 01:00:00.000000000 +0100
+++ new/sysextmgr-1.3.0+git20260820.0628c3a/sysextmgr.conf.example      
2026-08-20 15:36:39.000000000 +0200
@@ -0,0 +1,15 @@
+# Example sysextmgr.conf
+#
+# Only show sysext images for openSUSE MicroOS, whose (full) image name
+# ends with ".sysext.raw" and which do not start with "uki-rescue-" in
+# the output of "sysextmgrcli list". The filter is a PCRE2 regular
+# expression (see pcre2syntax(3)) matched against the image name.
+#
+# Install this as one of:
+#   /etc/sysextmgr/sysextmgr.conf
+#   /usr/share/sysextmgr/sysextmgr.conf
+# to make the filter the default for all users.
+
+[default]
+url=https://download.opensuse.org/tumbleweed/appliances/
+filter=^(?!uki-rescue-).*\.sysext\.raw$

Reply via email to