6
0
forked from pool/util-linux

33 Commits

Author SHA256 Message Date
27748685ae Accepting request 1291647 from Base:System
- agetty: Implement netlink based IP address detection

OBS-URL: https://build.opensuse.org/request/show/1291647
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/util-linux?expand=0&rev=299
2025-07-14 08:49:38 +00:00
f3ed77a008 Add upstream issue links
OBS-URL: https://build.opensuse.org/package/show/Base:System/util-linux?expand=0&rev=595
2025-07-10 09:41:40 +00:00
b226ea0a85 - Implement netlink based IP address detection and issue reload.
It makes possible to identify IP addresses usability and prefer
  stable global addresses over ephemeral or link-local addresses.
  New issue keywords \a and \A were added. (boo#1139983,
  jsc#PED-8734, util-linux-lib-netlink.patch,
  util-linux-agetty-netlink.patch)

OBS-URL: https://build.opensuse.org/package/show/Base:System/util-linux?expand=0&rev=594
2025-07-10 09:40:23 +00:00
7af9873028 Accepting request 1288490 from Base:System
- Update to version 2.41.1... (forwarded request 1288403 from sbrabec)

OBS-URL: https://build.opensuse.org/request/show/1288490
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/util-linux?expand=0&rev=298
2025-06-27 21:00:06 +00:00
d87bf9940a - Update to version 2.41.1...
OBS-URL: https://build.opensuse.org/package/show/Base:System/util-linux?expand=0&rev=593
2025-06-25 09:57:08 +00:00
6bdafd9994 Accepting request 1285089 from Base:System
OBS-URL: https://build.opensuse.org/request/show/1285089
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/util-linux?expand=0&rev=297
2025-06-16 09:11:33 +00:00
526351100b - Fix libmount --no-canonicalize regression (boo#1244251,
gh#util-linux/util-linux#3479,
  libmount-fix-no-canonicalize-regression.patch).

OBS-URL: https://build.opensuse.org/package/show/Base:System/util-linux?expand=0&rev=592
2025-06-12 10:05:25 +00:00
d065ff5434 Accepting request 1283407 from Base:System
OBS-URL: https://build.opensuse.org/request/show/1283407
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/util-linux?expand=0&rev=296
2025-06-06 20:32:23 +00:00
bf27a97789 - Add ul_ prefix to functions with common names. Fixes btrfsprogs
build failure (gh#util-linux/util-linux#3603,
  util-linux-rename-common-symbols-1.patch,
  util-linux-rename-common-symbols-2.patch,
  util-linux-rename-common-symbols-3.patch,
  util-linux-rename-common-symbols-4.patch).

OBS-URL: https://build.opensuse.org/package/show/Base:System/util-linux?expand=0&rev=591
2025-06-05 15:06:36 +00:00
d056d99bac - Fix segfault of findmnt (boo#1242705,
gh#util-linux/util-linux#3574,
  util-linux-libblkid-econf-parse.patch).
- And removine git workflow files, as util-linux is currently developed in OBS.

OBS-URL: https://build.opensuse.org/package/show/Base:System/util-linux?expand=0&rev=590
2025-05-20 14:53:55 +00:00
f93ce2303c - Enable mountfd support again (jsc#PED-9752).
BREAKING CHANGE
  Mountfd is nearly completely compatible with the old mount. There
  is a special case that cannot be handled by mountfd, and it needs
  to be handled by applications:
  Mountfd discriminates between physical mount layer and virtual
  mount layer. Once the physical mount layer is read-only,
  read-write mount on the virtual layer is not possible.
  If the first mount is read only, then the physical filesystem is
  mounted read-only, and later mount of the same file system as
  read-write is not possible. To solve this problem, the first
  mount needs to be read-only only on the virtual layer, keeping
  the physical layer read-write.
  The user space fix is simple:
  Instead of
    mount -oro
  use
    mount -oro=vfs
  This will keep the physical layer read-write, but the virtual
  file system layer (and the user space access) will be read-only.

OBS-URL: https://build.opensuse.org/package/show/Base:System/util-linux?expand=0&rev=589
2025-04-25 10:12:33 +00:00
85211d2fa9 - Update to version 2.41...
OBS-URL: https://build.opensuse.org/package/show/Base:System/util-linux?expand=0&rev=588
2025-04-09 11:11:35 +00:00
6e30656a72 Accepting request 1248301 from Base:System
- Delete /usr/sbin/rc* symlinks
- Drop bashisms from build recipe

OBS-URL: https://build.opensuse.org/request/show/1248301
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/util-linux?expand=0&rev=295
2025-02-27 13:48:59 +00:00
0209a3bc33 Delete rc symlinks
OBS-URL: https://build.opensuse.org/package/show/Base:System/util-linux?expand=0&rev=587
2025-02-25 08:35:01 +00:00
aea0e5246b - Delete /usr/sbin/rc* symlinks
- Drop bashisms from build recipe

OBS-URL: https://build.opensuse.org/package/show/Base:System/util-linux?expand=0&rev=586
2025-02-24 17:20:24 +00:00
165fabd559 Accepting request 1242132 from Base:System
OBS-URL: https://build.opensuse.org/request/show/1242132
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/util-linux?expand=0&rev=294
2025-02-05 11:39:24 +00:00
549d330fc6 - Create and own directories /etc/blkid.conf.d and
/usr/etc/blkid.conf.d (boo#1235887#c3).
- Add missingok for /etc/blkid.conf.

OBS-URL: https://build.opensuse.org/package/show/Base:System/util-linux?expand=0&rev=585
2025-02-01 17:49:33 +00:00
d2055a82f3 Accepting request 1239319 from Base:System
OBS-URL: https://build.opensuse.org/request/show/1239319
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/util-linux?expand=0&rev=293
2025-01-24 12:39:40 +00:00
c0ae35c85a - Move blkid.conf to /usr/etc (boo#1235887).
OBS-URL: https://build.opensuse.org/package/show/Base:System/util-linux?expand=0&rev=584
2025-01-21 14:56:28 +00:00
6858402110 Accepting request 1237948 from Base:System
- Update to version 2.40.4...

OBS-URL: https://build.opensuse.org/request/show/1237948
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/util-linux?expand=0&rev=292
2025-01-17 17:36:41 +00:00
fa208609dd Typo fix.
OBS-URL: https://build.opensuse.org/package/show/Base:System/util-linux?expand=0&rev=583
2025-01-14 23:19:01 +00:00
25172ba59e - Update to version 2.40.4...
OBS-URL: https://build.opensuse.org/package/show/Base:System/util-linux?expand=0&rev=582
2025-01-14 23:15:16 +00:00
ed47084f94 Accepting request 1235054 from Base:System
OBS-URL: https://build.opensuse.org/request/show/1235054
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/util-linux?expand=0&rev=291
2025-01-07 19:51:13 +00:00
b1afa335f2 Cherry-pick changes from pool/util-linux#1
OBS-URL: https://build.opensuse.org/package/show/Base:System/util-linux?expand=0&rev=581
2025-01-05 16:18:20 +00:00
31d054b433 Restore r577 (changes from Nov 17 2024)
OBS-URL: https://build.opensuse.org/package/show/Base:System/util-linux?expand=0&rev=580
2025-01-05 15:47:05 +00:00
fdc0dc88f2 [info=7c038e86c636e915f24991a04859286d25213a6c34932d623636efffdd11c0c9]
OBS-URL: https://build.opensuse.org/package/show/Base:System/util-linux?expand=0&rev=579
2025-01-05 01:57:57 +00:00
b3f37b0f2b [info=7c038e86c636e915f24991a04859286d25213a6c34932d623636efffdd11c0c9]
OBS-URL: https://build.opensuse.org/package/show/Base:System/util-linux?expand=0&rev=578
2025-01-05 01:56:02 +00:00
ed19b913bf Accepting request 1225398 from Base:System
- Skip aarch64 decode path for rest of the architectures
  (bsc#1229476, util-linux-lscpu-skip-aarch64-decode.patch).
- agetty: Prevent login cursor escape (bsc#1194818,
  util-linux-agetty-prevent-cursor-escape.patch).
- Document unexpected side effects of lazy destruction
  (bsc#1159034, util-linux-umount-losetup-lazy-destruction.patch,
  util-linux-umount-losetup-lazy-destruction-generated.patch).

OBS-URL: https://build.opensuse.org/request/show/1225398
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/util-linux?expand=0&rev=290
2024-11-22 22:50:12 +00:00
3dd6c5f458 [info=1f607dd355d8ca2a0fa48e4d3662cad355a81b877985b076ecc7a1527d45771c]
OBS-URL: https://build.opensuse.org/package/show/Base:System/util-linux?expand=0&rev=577
2024-11-20 18:37:33 +00:00
5070c16a96 Backport fixes from SLE15:
- Skip aarch64 decode path for rest of the architectures
  (bsc#1229476, util-linux-lscpu-skip-aarch64-decode.patch).
- agetty: Prevent login cursor escape (bsc#1194818,
  util-linux-agetty-prevent-cursor-escape.patch).
- Document unexpected side effects of lazy destruction
  (bsc#1159034, util-linux-umount-losetup-lazy-destruction.patch,
  util-linux-umount-losetup-lazy-destruction-generated.patch).
- And add more bug references.

OBS-URL: https://build.opensuse.org/package/show/Base:System/util-linux?expand=0&rev=576
2024-11-20 18:30:01 +00:00
7c038e86c6 Accepting request 1216844 from Base:System
OBS-URL: https://build.opensuse.org/request/show/1216844
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/util-linux?expand=0&rev=289
2024-10-24 13:40:29 +00:00
794b3b8aac - Disable mountfd API again.
(https://github.com/util-linux/util-linux/issues/3158)

OBS-URL: https://build.opensuse.org/package/show/Base:System/util-linux?expand=0&rev=574
2024-10-21 23:29:26 +00:00
b59c309bd1 Accepting request 1191776 from home:sbrabec:branches:util-linux-2.40.2
- Update to version 2.40.2...
- Enable kernel mountfd API, as it should be already stable
  (PED-9752).
- Move autoreconf back to %build.
- Add devel dependencies.
- Remove util-linux-rpmlintrc. It is no more needed with multibuild.

OBS-URL: https://build.opensuse.org/request/show/1191776
OBS-URL: https://build.opensuse.org/package/show/Base:System/util-linux?expand=0&rev=573
2024-08-09 22:52:38 +00:00
16 changed files with 2657 additions and 801 deletions

View File

@ -1,32 +0,0 @@
From: Xi Ruoyao <xry111@xry111.site>
Date: Sun, 31 Mar 2024 00:42:03 +0800
Subject: include: Include <unistd.h> in pidfd-utils.h for syscall()
Git-repo: https://github.com/util-linux/util-linux.git
Git-commit: 10add327c608b11b3d70215048aade4d1797b1fd
Patch-mainline: yes
References: kernel 6.9
In Glibc, <sys/syscall.h> only contains SYS_* macros and the syscall()
function is in <unistd.h>. So include it.
Signed-off-by: Xi Ruoyao <xry111@xry111.site>
Signed-off-by: Jiri Slaby <jslaby@suse.cz>
---
include/pidfd-utils.h | 1 +
1 file changed, 1 insertion(+)
diff --git a/include/pidfd-utils.h b/include/pidfd-utils.h
index ff0bc4c7..0ee55f3b 100644
--- a/include/pidfd-utils.h
+++ b/include/pidfd-utils.h
@@ -7,6 +7,7 @@
#ifdef HAVE_SYS_SYSCALL_H
# include <sys/syscall.h>
+# include <unistd.h>
/*
* If the kernel headers are too old to provide the syscall numbers, let's
--
2.45.0

View File

@ -1,319 +0,0 @@
From: Xi Ruoyao <xry111@xry111.site>
Date: Wed, 3 Apr 2024 15:29:34 +0800
Subject: lsfd: Refactor the pidfd logic into lsfd-pidfd.c
Git-repo: https://github.com/util-linux/util-linux.git
Git-commit: bf6645dc1edef09ad378cc5b9eb2c93861408735
Patch-mainline: yes
References: kernel 6.9
We'll reuse these logic for pidfd support on Linux >= 6.9. This should
be a no-functional change.
Besides moving the code, this change also renames anon_pidfd_data to
pidfd_data, and removes a redundant nullity check for free (because
free(NULL) will just do nothing per the C standard).
Signed-off-by: Xi Ruoyao <xry111@xry111.site>
Signed-off-by: Jiri Slaby <jslaby@suse.cz>
---
misc-utils/Makemodule.am | 4 +-
misc-utils/lsfd-pidfd.c | 95 ++++++++++++++++++++++++++++++++++++++++
misc-utils/lsfd-pidfd.h | 37 ++++++++++++++++
misc-utils/lsfd-unkn.c | 71 +++++-------------------------
misc-utils/meson.build | 1 +
5 files changed, 147 insertions(+), 61 deletions(-)
create mode 100644 misc-utils/lsfd-pidfd.c
create mode 100644 misc-utils/lsfd-pidfd.h
diff --git a/misc-utils/Makemodule.am b/misc-utils/Makemodule.am
index 9edf3d98..7622a5d7 100644
--- a/misc-utils/Makemodule.am
+++ b/misc-utils/Makemodule.am
@@ -298,7 +298,9 @@ lsfd_SOURCES = \
misc-utils/lsfd-sock.h \
misc-utils/lsfd-sock-xinfo.c \
misc-utils/lsfd-unkn.c \
- misc-utils/lsfd-fifo.c
+ misc-utils/lsfd-fifo.c \
+ misc-utils/lsfd-pidfd.h \
+ misc-utils/lsfd-pidfd.c
lsfd_LDADD = $(LDADD) $(MQ_LIBS) libsmartcols.la libcommon.la
lsfd_CFLAGS = $(AM_CFLAGS) -I$(ul_libsmartcols_incdir)
endif
diff --git a/misc-utils/lsfd-pidfd.c b/misc-utils/lsfd-pidfd.c
new file mode 100644
index 00000000..430a8028
--- /dev/null
+++ b/misc-utils/lsfd-pidfd.c
@@ -0,0 +1,95 @@
+/*
+ * lsfd-pidfd.c - handle pidfd (from anon_inode or pidfs)
+ *
+ * Copyright (C) 2024 Xi Ruoyao <xry111@xry111.site>
+ *
+ * Refactored and moved out from lsfd-unkn.c (originally authored by
+ * Masatake YAMATO <yamato@redhat.com>).
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it would be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <string.h>
+
+#include "strutils.h"
+#include "xalloc.h"
+
+#include "lsfd.h"
+#include "lsfd-pidfd.h"
+
+int pidfd_handle_fdinfo(struct pidfd_data *data, const char *key,
+ const char *value)
+{
+ if (strcmp(key, "Pid") == 0) {
+ uint64_t pid;
+ int rc = ul_strtou64(value, &pid, 10);
+
+ if (rc < 0)
+ return 0; /* ignore -- parse failed */
+
+ data->pid = (pid_t)pid;
+ return 1;
+ } else if (strcmp(key, "NSpid") == 0) {
+ data->nspid = xstrdup(value);
+ return 1;
+ }
+
+ return 0;
+}
+
+char *pidfd_get_name(struct pidfd_data *data)
+{
+ char *str = NULL;
+ char *comm = NULL;
+ struct proc *proc = get_proc(data->pid);
+
+ if (proc)
+ comm = proc->command;
+
+ xasprintf(&str, "pid=%d comm=%s nspid=%s",
+ data->pid,
+ comm ? comm : "",
+ data->nspid ? data->nspid : "");
+ return str;
+}
+
+bool pidfd_fill_column(struct pidfd_data *data, int column_id, char **str)
+{
+ switch(column_id) {
+ case COL_PIDFD_COMM: {
+ struct proc *pidfd_proc = get_proc(data->pid);
+ char *pidfd_comm = NULL;
+
+ if (pidfd_proc)
+ pidfd_comm = pidfd_proc->command;
+ if (pidfd_comm) {
+ *str = xstrdup(pidfd_comm);
+ return true;
+ }
+ break;
+ }
+ case COL_PIDFD_NSPID:
+ if (data->nspid) {
+ *str = xstrdup(data->nspid);
+ return true;
+ }
+ break;
+ case COL_PIDFD_PID:
+ xasprintf(str, "%d", (int)data->pid);
+ return true;
+ }
+
+ return false;
+}
diff --git a/misc-utils/lsfd-pidfd.h b/misc-utils/lsfd-pidfd.h
new file mode 100644
index 00000000..2f65d3b3
--- /dev/null
+++ b/misc-utils/lsfd-pidfd.h
@@ -0,0 +1,37 @@
+/*
+ * lsfd-pidfd.h - handle pidfd (from anon_inode or pidfs)
+ *
+ * Copyright (C) 2024 Xi Ruoyao <xry111@xry111.site>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it would be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <stdbool.h>
+#include <sys/types.h>
+
+struct pidfd_data {
+ pid_t pid;
+ char *nspid;
+};
+
+int pidfd_handle_fdinfo(struct pidfd_data *, const char *, const char *);
+char *pidfd_get_name(struct pidfd_data *);
+bool pidfd_fill_column(struct pidfd_data *, int, char **);
+
+static inline void __attribute__((nonnull(1)))
+pidfd_free(struct pidfd_data *data)
+{
+ free(data->nspid);
+}
diff --git a/misc-utils/lsfd-unkn.c b/misc-utils/lsfd-unkn.c
index 8f6e9084..8e257f47 100644
--- a/misc-utils/lsfd-unkn.c
+++ b/misc-utils/lsfd-unkn.c
@@ -28,6 +28,7 @@
#include "timeutils.h"
#include "lsfd.h"
+#include "lsfd-pidfd.h"
#define offsetofend(TYPE, MEMBER) \
(offsetof(TYPE, MEMBER) + sizeof_member(TYPE, MEMBER))
@@ -183,10 +184,6 @@ static int unkn_handle_fdinfo(struct file *file, const char *key, const char *va
/*
* pidfd
*/
-struct anon_pidfd_data {
- pid_t pid;
- char *nspid;
-};
static bool anon_pidfd_probe(const char *str)
{
@@ -195,51 +192,28 @@ static bool anon_pidfd_probe(const char *str)
static char *anon_pidfd_get_name(struct unkn *unkn)
{
- char *str = NULL;
- struct anon_pidfd_data *data = (struct anon_pidfd_data *)unkn->anon_data;
+ struct pidfd_data *data = (struct pidfd_data *)unkn->anon_data;
- char *comm = NULL;
- struct proc *proc = get_proc(data->pid);
- if (proc)
- comm = proc->command;
-
- xasprintf(&str, "pid=%d comm=%s nspid=%s",
- data->pid,
- comm? comm: "",
- data->nspid? data->nspid: "");
- return str;
+ return pidfd_get_name(data);
}
static void anon_pidfd_init(struct unkn *unkn)
{
- unkn->anon_data = xcalloc(1, sizeof(struct anon_pidfd_data));
+ unkn->anon_data = xcalloc(1, sizeof(struct pidfd_data));
}
static void anon_pidfd_free(struct unkn *unkn)
{
- struct anon_pidfd_data *data = (struct anon_pidfd_data *)unkn->anon_data;
+ struct pidfd_data *data = (struct pidfd_data *)unkn->anon_data;
- if (data->nspid)
- free(data->nspid);
+ pidfd_free(data);
free(data);
}
static int anon_pidfd_handle_fdinfo(struct unkn *unkn, const char *key, const char *value)
{
- if (strcmp(key, "Pid") == 0) {
- uint64_t pid;
-
- int rc = ul_strtou64(value, &pid, 10);
- if (rc < 0)
- return 0; /* ignore -- parse failed */
- ((struct anon_pidfd_data *)unkn->anon_data)->pid = (pid_t)pid;
- return 1;
- } else if (strcmp(key, "NSpid") == 0) {
- ((struct anon_pidfd_data *)unkn->anon_data)->nspid = xstrdup(value);
- return 1;
-
- }
- return 0;
+ return pidfd_handle_fdinfo((struct pidfd_data *)unkn->anon_data,
+ key, value);
}
static bool anon_pidfd_fill_column(struct proc *proc __attribute__((__unused__)),
@@ -249,32 +223,9 @@ static bool anon_pidfd_fill_column(struct proc *proc __attribute__((__unused__)
size_t column_index __attribute__((__unused__)),
char **str)
{
- struct anon_pidfd_data *data = (struct anon_pidfd_data *)unkn->anon_data;
-
- switch(column_id) {
- case COL_PIDFD_COMM: {
- struct proc *pidfd_proc = get_proc(data->pid);
- char *pidfd_comm = NULL;
- if (pidfd_proc)
- pidfd_comm = pidfd_proc->command;
- if (pidfd_comm) {
- *str = xstrdup(pidfd_comm);
- return true;
- }
- break;
- }
- case COL_PIDFD_NSPID:
- if (data->nspid) {
- *str = xstrdup(data->nspid);
- return true;
- }
- break;
- case COL_PIDFD_PID:
- xasprintf(str, "%d", (int)data->pid);
- return true;
- }
-
- return false;
+ return pidfd_fill_column((struct pidfd_data *)unkn->anon_data,
+ column_id,
+ str);
}
static const struct anon_ops anon_pidfd_ops = {
diff --git a/misc-utils/meson.build b/misc-utils/meson.build
index 847b1012..68ea9777 100644
--- a/misc-utils/meson.build
+++ b/misc-utils/meson.build
@@ -56,6 +56,7 @@ lsfd_sources = files (
'lsfd-sock-xinfo.c',
'lsfd-unkn.c',
'lsfd-fifo.c',
+ 'lsfd-pidfd.c',
)
uuidgen_sources = files(
--
2.45.0

View File

@ -1,186 +0,0 @@
From: Xi Ruoyao <xry111@xry111.site>
Date: Wed, 3 Apr 2024 15:46:57 +0800
Subject: lsfd: Support pidfs
Git-repo: https://github.com/util-linux/util-linux.git
Git-commit: b1a48efd173c7f37d8df39a84eb25b4440335661
Patch-mainline: yes
References: kernel 6.9
In Linux 6.9 pidfds are moved from the anonymous inode infrastructure to
a tiny pseudo filesystem named pidfs. Recognize it properly.
Fixes #2865.
Signed-off-by: Xi Ruoyao <xry111@xry111.site>
Signed-off-by: Jiri Slaby <jslaby@suse.cz>
---
misc-utils/lsfd-file.c | 96 ++++++++++++++++++++++++++++++++++++++++++
misc-utils/lsfd.c | 3 ++
misc-utils/lsfd.h | 7 ++-
3 files changed, 105 insertions(+), 1 deletion(-)
diff --git a/misc-utils/lsfd-file.c b/misc-utils/lsfd-file.c
index 9b91462d..3f330146 100644
--- a/misc-utils/lsfd-file.c
+++ b/misc-utils/lsfd-file.c
@@ -45,6 +45,8 @@
#include "procfs.h"
#include "lsfd.h"
+#include "lsfd-pidfd.h"
+#include "pidfd-utils.h"
static struct idcache *username_cache;
@@ -492,6 +494,22 @@ static unsigned long get_minor_for_mqueue(void)
return minor(sb.st_dev);
}
+static unsigned long get_minor_for_pidfs(void)
+{
+ int fd = pidfd_open(getpid(), 0);
+ struct stat sb;
+ unsigned long ret = 0;
+
+ if (fd < 0)
+ return 0;
+
+ if (fstat(fd, &sb) == 0 && (sb.st_mode & S_IFMT) == S_IFREG)
+ ret = minor(sb.st_dev);
+
+ close(fd);
+ return ret;
+}
+
static void file_class_initialize(void)
{
unsigned long m;
@@ -510,6 +528,10 @@ static void file_class_initialize(void)
m = get_minor_for_mqueue();
if (m)
add_nodev(m, "mqueue");
+
+ m = get_minor_for_pidfs();
+ if (m)
+ add_nodev(m, "pidfs");
}
static void file_class_finalize(void)
@@ -783,3 +805,77 @@ const struct file_class mqueue_file_class = {
.fill_column = mqueue_file_fill_column,
.get_ipc_class = mqueue_file_get_ipc_class,
};
+
+struct pidfs_file {
+ struct file file;
+ struct pidfd_data data;
+};
+
+static void init_pidfs_file_content(struct file *file)
+{
+ struct pidfs_file *pidfs_file = (struct pidfs_file *)file;
+
+ memset(&pidfs_file->data, 0, sizeof(pidfs_file->data));
+}
+
+static int pidfs_file_handle_fdinfo(struct file *file, const char *key, const char *value)
+{
+ struct pidfs_file *pidfs_file = (struct pidfs_file *)file;
+
+ return pidfd_handle_fdinfo(&pidfs_file->data, key, value);
+}
+
+static void pidfs_file_free_content(struct file *file)
+{
+ struct pidfs_file *pidfs_file = (struct pidfs_file *)file;
+
+ pidfd_free(&pidfs_file->data);
+}
+
+static bool pidfs_file_fill_column(struct proc *proc __attribute__((__unused__)),
+ struct file *file,
+ struct libscols_line *ln,
+ int column_id,
+ size_t column_index)
+{
+ struct pidfs_file *pidfs_file = (struct pidfs_file *)file;
+ char *buf = NULL;
+
+ switch(column_id) {
+ case COL_TYPE:
+ if (scols_line_set_data(ln, column_index, "pidfd"))
+ err(EXIT_FAILURE, _("failed to add output data"));
+ return true;
+ case COL_NAME:
+ buf = pidfd_get_name(&pidfs_file->data);
+ break;
+ default:
+ if (!pidfd_fill_column(&pidfs_file->data, column_id, &buf))
+ return false;
+ }
+
+ if (buf &&
+ scols_line_refer_data(ln, column_index, buf))
+ err(EXIT_FAILURE, _("failed to add output data"));
+
+ return true;
+}
+
+const struct file_class pidfs_file_class = {
+ .super = &file_class,
+ .size = sizeof(struct pidfs_file),
+ .initialize_content = init_pidfs_file_content,
+ .handle_fdinfo = pidfs_file_handle_fdinfo,
+ .fill_column = pidfs_file_fill_column,
+ .free_content = pidfs_file_free_content,
+};
+
+bool is_pidfs_dev(dev_t dev)
+{
+ const char *fs = get_nodev_filesystem(minor(dev));
+
+ if (fs && (strcmp (fs, "pidfs") == 0))
+ return true;
+
+ return false;
+}
diff --git a/misc-utils/lsfd.c b/misc-utils/lsfd.c
index 98820ee8..01e88d51 100644
--- a/misc-utils/lsfd.c
+++ b/misc-utils/lsfd.c
@@ -683,6 +683,9 @@ static const struct file_class *stat2class(struct stat *sb)
if (is_mqueue_dev(dev))
return &mqueue_file_class;
+ if (is_pidfs_dev(dev))
+ return &pidfs_file_class;
+
return &file_class;
default:
break;
diff --git a/misc-utils/lsfd.h b/misc-utils/lsfd.h
index e646758c..f0f17d5b 100644
--- a/misc-utils/lsfd.h
+++ b/misc-utils/lsfd.h
@@ -228,7 +228,7 @@ struct file_class {
};
extern const struct file_class file_class, cdev_class, bdev_class, sock_class, unkn_class, fifo_class,
- nsfs_file_class, mqueue_file_class;
+ nsfs_file_class, mqueue_file_class, pidfs_file_class;
/*
* IPC
@@ -307,4 +307,9 @@ bool is_mqueue_dev(dev_t dev);
*/
bool is_multiplexed_by_eventpoll(int fd, struct list_head *eventpolls);
+/*
+ * Pidfs
+ */
+bool is_pidfs_dev(dev_t dev);
+
#endif /* UTIL_LINUX_LSFD_H */
--
2.45.0

View File

@ -1,142 +0,0 @@
From: Xi Ruoyao <xry111@xry111.site>
Date: Thu, 28 Mar 2024 04:01:02 +0800
Subject: lsfd: test: Adapt test cases for pidfs
Git-repo: https://github.com/util-linux/util-linux.git
Git-commit: 04db2ba9008e9635286b1aafc8ecd9533a0a91bf
Patch-mainline: yes
References: kernel 6.9
On Linux >= 6.9, pidfds are from pidfs instead of anonymous inode.
Thus:
STTYPE is REG on Linux >= 6.9, UNKN on Linux < 6.9.
KNAME is pidfd:[inode number] on Linux >= 6.9, anon_inode:[pidfd] on
Linux < 6.9.
And ainode_class test cannot work on Linux >= 6.9, just skip this sub
test if STTYPE is REG.
Signed-off-by: Xi Ruoyao <xry111@xry111.site>
Signed-off-by: Jiri Slaby <jslaby@suse.cz>
---
tests/expected/lsfd/column-name-pidfd | 2 +-
tests/expected/lsfd/column-type-pidfd | 2 +-
tests/expected/lsfd/mkfds-pidfd | 2 +-
tests/ts/lsfd/column-ainodeclass | 8 ++++++++
tests/ts/lsfd/column-name | 7 +++++++
tests/ts/lsfd/column-type | 7 +++++++
tests/ts/lsfd/mkfds-pidfd | 4 ++++
7 files changed, 29 insertions(+), 3 deletions(-)
diff --git a/tests/expected/lsfd/column-name-pidfd b/tests/expected/lsfd/column-name-pidfd
index 10e3c5e7..68787d69 100644
--- a/tests/expected/lsfd/column-name-pidfd
+++ b/tests/expected/lsfd/column-name-pidfd
@@ -1,2 +1,2 @@
-3 anon_inode:[pidfd] pid=1 comm= nspid=1
+3 [KNAME] pid=1 comm= nspid=1
pidfd:ASSOC,KNAME,NAME: 0
diff --git a/tests/expected/lsfd/column-type-pidfd b/tests/expected/lsfd/column-type-pidfd
index 6c9a9632..a4379807 100644
--- a/tests/expected/lsfd/column-type-pidfd
+++ b/tests/expected/lsfd/column-type-pidfd
@@ -1,2 +1,2 @@
-3 UNKN pidfd
+3 [STTYPE] pidfd
pidfd:ASSOC,STTYPE,TYPE: 0
diff --git a/tests/expected/lsfd/mkfds-pidfd b/tests/expected/lsfd/mkfds-pidfd
index 94846992..bce4dd42 100644
--- a/tests/expected/lsfd/mkfds-pidfd
+++ b/tests/expected/lsfd/mkfds-pidfd
@@ -1,2 +1,2 @@
-3 UNKN anon_inodefs pid=1 comm=systemd nspid=1 systemd 1
+3 [STTYPE] [SOURCE] pid=1 comm=systemd nspid=1 systemd 1
ASSOC,STTYPE,SOURCE,NAME,PIDFD.COMM,PIDFD.PID: 0
diff --git a/tests/ts/lsfd/column-ainodeclass b/tests/ts/lsfd/column-ainodeclass
index 6829494f..ab2abebd 100755
--- a/tests/ts/lsfd/column-ainodeclass
+++ b/tests/ts/lsfd/column-ainodeclass
@@ -42,10 +42,18 @@ for C in pidfd inotify; do
fi
wait "${MKFDS_PID}"
} > "$TS_OUTPUT" 2>&1
+
if [ "$C-$?" == "pidfd-$TS_EXIT_NOTSUPP" ]; then
ts_skip_subtest "pidfd_open(2) is not available"
continue
fi
+
+ STTYPE="$(head -n1 "$TS_OUTPUT" | awk '{print $2}')"
+ if [ "$C-$STTYPE" == "pidfd-REG" ]; then
+ ts_skip_subtest "pidfd is from pidfs instead of anon inode"
+ continue
+ fi
+
ts_finalize_subtest
done
diff --git a/tests/ts/lsfd/column-name b/tests/ts/lsfd/column-name
index 8bf8f421..9c67de88 100755
--- a/tests/ts/lsfd/column-name
+++ b/tests/ts/lsfd/column-name
@@ -64,10 +64,17 @@ for C in ro-regular-file pidfd socketpair; do
fi
} > "$TS_OUTPUT" 2>&1
wait "${MKFDS_PID}"
+
if [ "$C-$?" == "pidfd-$TS_EXIT_NOTSUPP" ]; then
ts_skip_subtest "pidfd_open(2) is not available"
continue
fi
+
+ case $C in
+ pidfd)
+ sed -i -E 's/(pidfd|anon_inode):\[[a-zA-Z]+\]/[KNAME]/' "$TS_OUTPUT"
+ esac
+
ts_finalize_subtest
done
diff --git a/tests/ts/lsfd/column-type b/tests/ts/lsfd/column-type
index 77bc5c94..1b8aa8c6 100755
--- a/tests/ts/lsfd/column-type
+++ b/tests/ts/lsfd/column-type
@@ -50,10 +50,17 @@ for C in ro-regular-file pidfd inotify socketpair; do
fi
wait "${MKFDS_PID}"
} > "$TS_OUTPUT" 2>&1
+
if [ "$C-$?" == "pidfd-$TS_EXIT_NOTSUPP" ]; then
ts_skip_subtest "pidfd_open(2) is not available"
continue
fi
+
+ case $C in
+ pidfd)
+ sed -i -E 's/UNKN|REG/[STTYPE]/' "$TS_OUTPUT"
+ esac
+
ts_finalize_subtest
done
diff --git a/tests/ts/lsfd/mkfds-pidfd b/tests/ts/lsfd/mkfds-pidfd
index c0fae4f7..9b0ff33c 100755
--- a/tests/ts/lsfd/mkfds-pidfd
+++ b/tests/ts/lsfd/mkfds-pidfd
@@ -44,8 +44,12 @@ EXPR="(PID != ${TARGET}) and (FD == 3) and (PIDFD.PID == ${TARGET})"
fi
wait ${MKFDS_PID}
} > $TS_OUTPUT 2>&1
+
if [ "$?" == "$TS_EXIT_NOTSUPP" ]; then
ts_skip "pidfd_open(2) is not available"
fi
+sed -i -E -e 's/UNKN|REG/[STTYPE]/' -e 's/pidfs|anon_inodefs/[SOURCE]/' \
+ $TS_OUTPUT
+
ts_finalize
--
2.45.0

View File

@ -14,12 +14,11 @@ Signed-off-by: Martin Wilck <mwilck@suse.com>
libmount/src/context_mount.c | 41 ++++++++++++++++++++++++++++++++---- libmount/src/context_mount.c | 41 ++++++++++++++++++++++++++++++++----
1 file changed, 37 insertions(+), 4 deletions(-) 1 file changed, 37 insertions(+), 4 deletions(-)
diff --git a/libmount/src/context_mount.c b/libmount/src/context_mount.c diff -ur util-linux-2.41.orig/libmount/src/context_mount.c util-linux-2.41/libmount/src/context_mount.c
index f914c9b..a48483f 100644 --- util-linux-2.41.orig/libmount/src/context_mount.c 2025-03-04 19:14:02.587173600 +0100
--- a/libmount/src/context_mount.c +++ util-linux-2.41/libmount/src/context_mount.c 2025-04-08 14:03:59.173505340 +0200
+++ b/libmount/src/context_mount.c @@ -1469,6 +1469,32 @@
@@ -1423,6 +1423,32 @@ done: }
return rc;
} }
+/* +/*
@ -51,7 +50,7 @@ index f914c9b..a48483f 100644
int mnt_context_get_mount_excode( int mnt_context_get_mount_excode(
struct libmnt_context *cxt, struct libmnt_context *cxt,
int rc, int rc,
@@ -1670,10 +1696,17 @@ int mnt_context_get_mount_excode( @@ -1772,10 +1798,17 @@
case ENODEV: case ENODEV:
if (!buf) if (!buf)
break; break;
@ -73,6 +72,3 @@ index f914c9b..a48483f 100644
snprintf(buf, bufsz, _("unknown filesystem type")); snprintf(buf, bufsz, _("unknown filesystem type"));
break; break;
--
2.19.2

View File

@ -1,16 +0,0 @@
-----BEGIN PGP SIGNATURE-----
iQIzBAABCAAdFiEEsMZNFDAcxu+u32Dk5LcdXuw5woQFAmY4lxMACgkQ5LcdXuw5
woSckw//ZmoxCcjdDBv5LkAK0Yl5EMKZYzkvqswsp/Uwllgevb/FcCGwZ+F49RM3
H8F5Kj5CIJW9wh2UNWxaMm4MxcGd3eG2NEwgYh8RiXSS84zEL78yaIJLyFlPziMp
kZb0fpc2HpyCzDrvtlw6S5TGkUUx2uFqTQQG7GFd6TOlbPpGp4OpqY3adf85mwmr
NKy0XbYLo6sqGENz6Uklbf5Qhc19UEEc1jScOYNpkuCxhRQguxq3Jc6W8A8DQkjB
EWaw9Q1XYDV3Bnd40F0K+bo3CYB6z3pMM51NlsYxV0fKt/SoEvJw3S7u3VcbtJWn
S6xl6q/sMINDrMIpSL5PAAg5yoBNIIoWW7OxSh0nv6ctp9dmln0sKBtXNr09zTWT
q9mLUt7LwXB6LT3XI64262vF21bKq/hQO8IObsx8vfPSlp1SyGq7VqGh6QVbkjx6
2vA7ueV5jfIKiAlZAcXz6NHjwxcBqYq7wASeUEmYPgh5lb4HBOuOgatYBNAmQoxp
2t5AXPPhI/u95GRa4WntpgqlQm/1CKA9kHiezvO4P0lnpUluT24DXclMTcq4xaiN
ci+dzVF2EPRoPJgYy9crKNsr7dftVtvAVXIRk3UaTwDe1o7OK4vSykDc0PSNxsHQ
mMabBuFt17oweonotSOZ8z7blHnCVnzZWVxyIxC3Pw/0ChHFAkw=
=68JD
-----END PGP SIGNATURE-----

BIN
util-linux-2.40.1.tar.xz (Stored with Git LFS)

Binary file not shown.

View File

@ -0,0 +1,16 @@
-----BEGIN PGP SIGNATURE-----
iQIzBAABCAAdFiEEsMZNFDAcxu+u32Dk5LcdXuw5woQFAmhaXXIACgkQ5LcdXuw5
woTvGg/8DVhCA5WWXbRh+fxsTwb2vIWPgBpjV+wUqxiNeijPXDK7tDcNF9bHvXy7
X7ajs4y+ULzw2hBpBmI/k/Oi/enDYNo+Q76du6POjJkasgO0bY9kGVVFhd61BFfk
86yY0uOud3n/F/ht1rR3TdFaatA2QtK7AqGmh3xpQh7ELJ8v7uNT/uyU7ZtKJXT3
uEa217G1OYxxJlmLmob0jWYYuyjtg0nB/Xw4MiXrTqQbD4K0304eDsYu10DaRPW6
ZNEjnCYEaPPkZ1xH3L29ZZlrwZ47ApN52dsTRzoymQGhak5UsKvcL7pWAa3gIlk9
m3cL6TnuFXemBF6FqdAu2+xs1gX6zzPW8+2iff+9PrvODXSZPNBamwsVY6Ae39g9
8lRQH1RpyXdIB+wg3ItgaGxTYz6aEJU9nCsE2uHQF/IRSdEHsqG5rc00ax0h4Ihk
M+3z94Wuo+8NceY7kIM/lkH5sCnVV4WcpGImA3kvaVDkjYhb8XK8Yb3KFR8RE/rH
LOCRavkKXaKT4CaS+SLvOZoFTTLciw7oNqecopSsREPk0y4HKbPdfRrfcS38m4ex
HXp9yI2Rl7vThtDuNi0Bcp6GmLo4cgWgHBYSNZcnGH88LJk2Ya7Yamg+tUeynGCI
6RvQxxfDT8mMf5deEiiLgG9RxjSVlA53dIZf1tB1RUjjh61aLdQ=
=mm3H
-----END PGP SIGNATURE-----

BIN
util-linux-2.41.1.tar.xz (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -0,0 +1,623 @@
From 1ddc84875c150ca7c142adba9bfcd4bf4323a3c4 Mon Sep 17 00:00:00 2001
From: Stanislav Brabec <sbrabec@suse.cz>
Date: Wed, 9 Jul 2025 14:35:28 +0200
Subject: [PATCH 2/2] agetty: Implement netlink based IP processing
References: https://github.com/util-linux/util-linux/pull/3649
The current \4 and \6 issue file escapes implementation is inferior. It
uses get getifaddrs() to get a list of IP addresses. This function does not
provide enough information to discriminate between stable IP addresses and
ephemeral addresses. As a result, especially \6 often gives unreliable
results.
The code is actually unable to get list of all interfaces, so a proper out
of the box IP address reporting depends on external tools that generate
issue file with the interfaces list.
The netlink messages are already used, but only as a change notifier. The
contents is not used, even if it contains exact information about the
change. As a result, change processing is triggered even for unrelated
network changes like IPv6 router advertisement.
The new implementation uses the new netaddrq library. It reports more
reliable results especially for IPv6.
Additionally, two new escapes are implemented:
\a Report all interfaces and assigned addresses that are considered as
reliable.
\A Report all interfaces and all assigned addresses.
TODO:
To prevent overflooding of the console, the list is currently limited to 12
interfaces. It would be nice to make it configurable.
Two pass processing of issue files. First pass just collects IP protocols
and list of interfaces (in future interface patterns). Now it always
processes both IPv4 and IPv6 on all interfaces. Not so bad, as \a is smart
enough to display just the useful part.
Maybe implement more options and formatting support for \a and \A.
Maybe implement interface filter globs or regexps for \a and \A. Still not
so bad, as \a automatically skips interfaces without reliable addresses
(e. g. lo or TUN).
Signed-off-by: Stanislav Brabec <sbrabec@suse.cz>
---
term-utils/agetty.8.adoc | 6 +
term-utils/agetty.c | 414 ++++++++++++++++++++++-----------------
2 files changed, 244 insertions(+), 176 deletions(-)
diff --git a/term-utils/agetty.8.adoc b/term-utils/agetty.8.adoc
index a33f12a3f..6670498f5 100644
--- a/term-utils/agetty.8.adoc
+++ b/term-utils/agetty.8.adoc
@@ -253,6 +253,12 @@ Insert the IPv4 address of the specified network interface (for example: \4\{eth
6 or 6{_interface_}::
The same as \4 but for IPv6.
+a::
+Insert list of "good" IP addresses for all interfaces. It prints best candidates for remote login IP addresses: global and site addresses; if not available, temporary address with the longest lifetime, if not available, link address. Note that link addresses are printed with local interface name, but they has to be done with the interface name on the machine where they will be used.
+
+A::
+Insert list of all IP addresses for all interfaces.
+
b::
Insert the baudrate of the current line.
diff --git a/term-utils/agetty.c b/term-utils/agetty.c
index f65e511ca..1f5d937e4 100644
--- a/term-utils/agetty.c
+++ b/term-utils/agetty.c
@@ -32,10 +32,7 @@
#include <langinfo.h>
#include <grp.h>
#include <pwd.h>
-#include <arpa/inet.h>
#include <netdb.h>
-#include <ifaddrs.h>
-#include <net/if.h>
#include <sys/utsname.h>
#include "strutils.h"
@@ -50,6 +47,9 @@
#include "env.h"
#include "path.h"
#include "fileutils.h"
+#ifdef AGETTY_RELOAD
+#include "netaddrq.h"
+#endif
#include "logindefs.h"
@@ -144,7 +144,6 @@
# define AGETTY_RELOAD_FILENAME "/run/agetty.reload" /* trigger file */
# define AGETTY_RELOAD_FDNONE -2 /* uninitialized fd */
static int inotify_fd = AGETTY_RELOAD_FDNONE;
-static int netlink_fd = AGETTY_RELOAD_FDNONE;
static uint32_t netlink_groups;
#endif
@@ -154,6 +153,7 @@ struct issue {
size_t mem_sz;
#ifdef AGETTY_RELOAD
+ struct ul_nl_data nl;
char *mem_old;
#endif
unsigned int do_tcsetattr : 1,
@@ -1603,81 +1603,7 @@ done:
}
#ifdef AGETTY_RELOAD
-static void open_netlink(void)
-{
- struct sockaddr_nl addr = { 0, };
- int sock;
-
- if (netlink_fd != AGETTY_RELOAD_FDNONE)
- return;
-
- sock = socket(AF_NETLINK, SOCK_RAW, NETLINK_ROUTE);
- if (sock >= 0) {
- addr.nl_family = AF_NETLINK;
- addr.nl_pid = getpid();
- addr.nl_groups = netlink_groups;
- if (bind(sock, (struct sockaddr *)&addr, sizeof(addr)) < 0)
- close(sock);
- else
- netlink_fd = sock;
- }
-}
-
-static int process_netlink_msg(int *triggered)
-{
- char buf[4096];
- struct sockaddr_nl snl;
- struct nlmsghdr *h;
- int rc;
-
- struct iovec iov = {
- .iov_base = buf,
- .iov_len = sizeof(buf)
- };
- struct msghdr msg = {
- .msg_name = &snl,
- .msg_namelen = sizeof(snl),
- .msg_iov = &iov,
- .msg_iovlen = 1,
- .msg_control = NULL,
- .msg_controllen = 0,
- .msg_flags = 0
- };
-
- rc = recvmsg(netlink_fd, &msg, MSG_DONTWAIT);
- if (rc < 0) {
- if (errno == EWOULDBLOCK || errno == EAGAIN)
- return 0;
-
- /* Failure, just stop listening for changes */
- close(netlink_fd);
- netlink_fd = AGETTY_RELOAD_FDNONE;
- return 0;
- }
-
- for (h = (struct nlmsghdr *)buf; NLMSG_OK(h, (unsigned int)rc); h = NLMSG_NEXT(h, rc)) {
- if (h->nlmsg_type == NLMSG_DONE ||
- h->nlmsg_type == NLMSG_ERROR) {
- close(netlink_fd);
- netlink_fd = AGETTY_RELOAD_FDNONE;
- return 0;
- }
-
- *triggered = 1;
- break;
- }
-
- return 1;
-}
-
-static int process_netlink(void)
-{
- int triggered = 0;
- while (process_netlink_msg(&triggered));
- return triggered;
-}
-
-static int wait_for_term_input(int fd)
+static int wait_for_term_input(struct issue *ie, int fd)
{
char buffer[sizeof(struct inotify_event) + NAME_MAX + 1];
fd_set rfds;
@@ -1711,9 +1637,9 @@ static int wait_for_term_input(int fd)
FD_SET(inotify_fd, &rfds);
nfds = max(nfds, inotify_fd);
}
- if (netlink_fd >= 0) {
- FD_SET(netlink_fd, &rfds);
- nfds = max(nfds, netlink_fd);
+ if (ie->nl.fd >= 0) {
+ FD_SET(ie->nl.fd, &rfds);
+ nfds = max(nfds, ie->nl.fd);
}
/* If waiting fails, just fall through, presumably reading input will fail */
@@ -1725,9 +1651,10 @@ static int wait_for_term_input(int fd)
}
- if (netlink_fd >= 0 && FD_ISSET(netlink_fd, &rfds)) {
- if (!process_netlink())
- continue;
+ if (ie->nl.fd >= 0 && FD_ISSET(ie->nl.fd, &rfds)) {
+ /* We are ignoring errors here to prevent unability of
+ * further processing. */
+ ul_nl_process(&(ie->nl), UL_NL_ASYNC, UL_NL_ONESHOT);
/* Just drain the inotify buffer */
} else if (inotify_fd >= 0 && FD_ISSET(inotify_fd, &rfds)) {
@@ -1937,11 +1864,44 @@ static void eval_issue_file(struct issue *ie,
struct options *op,
struct termios *tp)
{
-#ifdef AGETTY_RELOAD
- netlink_groups = 0;
-#endif
if (!(op->flags & F_ISSUE))
goto done;
+
+#ifdef AGETTY_RELOAD
+/* TODO:
+ * Two pass processing for eval_issue_file()
+ * Implement pass 1: Just evaluate list of netlink_groups (IP protocols) and
+ * intefaces to monitor.
+ * That is why again label is here: netlink_groups will be re-evaluated and
+ * dump will be performed again.
+ */
+ /* netlink_groups = 0; */
+ netlink_groups = RTMGRP_IPV4_IFADDR | RTMGRP_IPV6_IFADDR;
+
+ /* Already initialized? */
+ if (ie->nl.fd)
+ goto skip;
+ /* Prepare netlink. */
+ ul_nl_init(&(ie->nl));
+ if ((ul_netaddrq_init(&(ie->nl), NULL, NULL, (void *)ie)))
+ goto skip;
+
+ /* Open netlink and create address list. */
+ if (ul_nl_open(&(ie->nl),
+ RTMGRP_LINK | netlink_groups))
+ goto skip;
+ if (ul_nl_request_dump(&(ie->nl), RTM_GETADDR))
+ goto error;
+ if (ul_nl_process(&(ie->nl), UL_NL_SYNC, UL_NL_LOOP) != UL_NL_DONE)
+ goto error;
+ goto skip;
+error:
+ /* In case of any error, the addrq list is just empty, and we can use
+ * the code without any error checking. */
+ ul_nl_close(&(ie->nl));
+ ie->nl.fd = 0;
+skip:
+#endif
/*
* The custom issue file or directory list specified by:
* agetty --issue-file <path[:path]...>
@@ -1986,11 +1946,6 @@ static void eval_issue_file(struct issue *ie,
issuedir_read(ie, _PATH_SYSCONFSTATICDIR "/" _PATH_ISSUE_DIRNAME, op, tp);
done:
-
-#ifdef AGETTY_RELOAD
- if (netlink_groups != 0)
- open_netlink();
-#endif
if (ie->output) {
fclose(ie->output);
ie->output = NULL;
@@ -2032,13 +1987,19 @@ again:
puts(_("[press ENTER to login]"));
#ifdef AGETTY_RELOAD
/* reload issue */
- if (!wait_for_term_input(STDIN_FILENO)) {
+ if (!wait_for_term_input(ie, STDIN_FILENO)) {
eval_issue_file(ie, op, tp);
if (issue_is_changed(ie)) {
if ((op->flags & F_VCONSOLE)
&& (op->flags & F_NOCLEAR) == 0)
termio_clear(STDOUT_FILENO);
- goto again;
+ {
+ /* TODO: Close to set netlink_groups again using pass 1 */
+ /* if (ie->nl.fd) ul_nl_close(&(ie->nl));
+ * ie->nl.fd = NULL; */
+
+ goto again;
+ }
}
}
#endif
@@ -2168,7 +2129,7 @@ static char *get_logname(struct issue *ie, struct options *op, struct termios *t
no_reload:
#ifdef AGETTY_RELOAD
- if (!wait_for_term_input(STDIN_FILENO)) {
+ if (!wait_for_term_input(ie, STDIN_FILENO)) {
/* refresh prompt -- discard input data, clear terminal
* and call do_prompt() again
*/
@@ -2177,6 +2138,8 @@ static char *get_logname(struct issue *ie, struct options *op, struct termios *t
eval_issue_file(ie, op, tp);
if (!issue_is_changed(ie))
goto no_reload;
+ /* if (ie->nl.fd) ul_nl_close(&(ie->nl));
+ * ie->nl.fd = NULL; */
tcflush(STDIN_FILENO, TCIFLUSH);
if ((op->flags & F_VCONSOLE)
&& (op->flags & F_NOCLEAR) == 0)
@@ -2576,92 +2539,170 @@ static void log_warn(const char *fmt, ...)
va_end(ap);
}
-static void print_addr(struct issue *ie, sa_family_t family, void *addr)
+static void print_iface_best(struct issue *ie,
+ const char *ifname,
+ uint8_t ifa_family)
{
- char buff[INET6_ADDRSTRLEN + 1];
+ struct ul_netaddrq_ip *best[__ULNETLINK_RATING_MAX];
+ struct ul_netaddrq_iface *ifaceq;
+ struct list_head *l;
+ enum ul_netaddrq_ip_rating threshold;
- inet_ntop(family, addr, buff, sizeof(buff));
- fprintf(ie->output, "%s", buff);
-}
+ if (!ie->nl.data_addr)
+ return; /* error: init failed */
-/*
- * Prints IP for the specified interface (@iface), if the interface is not
- * specified then prints the "best" one (UP, RUNNING, non-LOOPBACK). If not
- * found the "best" interface then prints at least host IP.
- */
-static void output_iface_ip(struct issue *ie,
- struct ifaddrs *addrs,
- const char *iface,
- sa_family_t family)
-{
- struct ifaddrs *p;
- struct addrinfo hints, *info = NULL;
- char *host = NULL;
- void *addr = NULL;
+ if ((ifaceq = ul_netaddrq_iface_by_name(&(ie->nl), ifname)))
+ {
+ memset(best, 0, sizeof(best));
+ if (ifa_family == AF_INET)
+ l = &(ifaceq->ip_quality_list_4);
+ else
+ /* if (ifa_family == AF_INET6) */
+ l = &(ifaceq->ip_quality_list_6);
- if (!addrs)
- return;
+ threshold =
+ ul_netaddrq_iface_bestaddr(l, &best);
+ if (best[threshold])
+ fputs(ul_nl_addr_ntop_address(best[threshold]->addr),
+ ie->output);
+ }
+}
- for (p = addrs; p; p = p->ifa_next) {
+static void print_addrq_bestofall(struct issue *ie,
+ uint8_t ifa_family)
+{
+ struct ul_netaddrq_iface *best_ifaceq;
+ enum ul_netaddrq_ip_rating threshold;
+ const char *best_ipp;
- if (!p->ifa_name ||
- !p->ifa_addr ||
- p->ifa_addr->sa_family != family)
- continue;
+ if (!ie->nl.data_addr)
+ return; /* error: init failed */
- if (iface) {
- /* Filter out by interface name */
- if (strcmp(p->ifa_name, iface) != 0)
- continue;
- } else {
- /* Select the "best" interface */
- if ((p->ifa_flags & IFF_LOOPBACK) ||
- !(p->ifa_flags & IFF_UP) ||
- !(p->ifa_flags & IFF_RUNNING))
- continue;
- }
+ best_ipp = ul_netaddrq_get_best_ipp(&(ie->nl), ifa_family,
+ &threshold, &best_ifaceq);
+ if (best_ipp)
+ fputs(best_ipp, ie->output);
+}
- addr = NULL;
- switch (p->ifa_addr->sa_family) {
- case AF_INET:
- addr = &((struct sockaddr_in *) p->ifa_addr)->sin_addr;
- break;
- case AF_INET6:
- addr = &((struct sockaddr_in6 *) p->ifa_addr)->sin6_addr;
- break;
+static void dump_iface_good(struct issue *ie,
+ struct ul_netaddrq_iface *ifaceq)
+{
+ struct ul_netaddrq_ip *best4[__ULNETLINK_RATING_MAX];
+ struct ul_netaddrq_ip *best6[__ULNETLINK_RATING_MAX];
+ struct list_head *li;
+ enum ul_netaddrq_ip_rating threshold = __ULNETLINK_RATING_MAX - 1;
+ enum ul_netaddrq_ip_rating fthreshold; /* per family threshold */
+ bool first = true;
+
+ memset(best4, 0, sizeof(best4));
+ threshold = ul_netaddrq_iface_bestaddr(&(ifaceq->ip_quality_list_4),
+ &best4);
+ memset(best6, 0, sizeof(best6));
+ fthreshold = ul_netaddrq_iface_bestaddr(&(ifaceq->ip_quality_list_6),
+ &best6);
+ if (fthreshold < threshold)
+ threshold = fthreshold;
+
+ list_for_each(li, &(ifaceq->ip_quality_list_4))
+ {
+ struct ul_netaddrq_ip *ipq;
+
+ ipq = list_entry(li, struct ul_netaddrq_ip, entry);
+ if (threshold <= ULNETLINK_RATING_SCOPE_LINK &&
+ ( ipq->quality <= threshold ||
+ /* Consider site addresses equally good as global */
+ ipq->quality == ULNETLINK_RATING_SCOPE_SITE) &&
+ best4[threshold])
+ {
+ if (first)
+ {
+ fprintf(ie->output, "%s: ", ifaceq->ifname);
+ first = false;
+ }
+ else
+ fprintf(ie->output, " ");
+ /* Write only the longest living temporary address */
+ if (threshold == ULNETLINK_RATING_F_TEMPORARY)
+ {
+ fputs(ul_nl_addr_ntop_address(best4[ULNETLINK_RATING_F_TEMPORARY]->addr),
+ ie->output);
+ goto temp_cont4;
+ }
+ else
+ fputs(ul_nl_addr_ntop_address(ipq->addr),
+ ie->output);
}
+ temp_cont4:;
+ }
- if (addr) {
- print_addr(ie, family, addr);
- return;
+ list_for_each(li, &(ifaceq->ip_quality_list_6))
+ {
+ struct ul_netaddrq_ip *ipq;
+
+ ipq = list_entry(li, struct ul_netaddrq_ip, entry);
+ if (threshold <= ULNETLINK_RATING_SCOPE_LINK &&
+ ( ipq->quality <= threshold ||
+ /* Consider site addresses equally good as global */
+ ipq->quality == ULNETLINK_RATING_SCOPE_SITE) &&
+ best6[threshold])
+ {
+ if (first)
+ {
+ fprintf(ie->output, "%s: ", ifaceq->ifname);
+ first = false;
+ }
+ else
+ fprintf(ie->output, " ");
+ /* Write only the longest living temporary address */
+ if (threshold == ULNETLINK_RATING_F_TEMPORARY)
+ {
+ fputs(ul_nl_addr_ntop_address(best6[ULNETLINK_RATING_F_TEMPORARY]->addr),
+ ie->output);
+ goto temp_cont6;
+ }
+ else
+ fputs(ul_nl_addr_ntop_address(ipq->addr),
+ ie->output);
}
+ temp_cont6:;
}
+ if (!first)
+ fputs("\n", ie->output);
+}
- if (iface)
- return;
+static void dump_iface_all(struct issue *ie,
+ struct ul_netaddrq_iface *ifaceq)
+{
+ struct list_head *li;
+ struct ul_netaddrq_ip *ipq;
+ bool first = true;
- /* Hmm.. not found the best interface, print host IP at least */
- memset(&hints, 0, sizeof(hints));
- hints.ai_family = family;
- if (family == AF_INET6)
- hints.ai_flags = AI_V4MAPPED;
-
- host = xgethostname();
- if (host && getaddrinfo(host, NULL, &hints, &info) == 0 && info) {
- switch (info->ai_family) {
- case AF_INET:
- addr = &((struct sockaddr_in *) info->ai_addr)->sin_addr;
- break;
- case AF_INET6:
- addr = &((struct sockaddr_in6 *) info->ai_addr)->sin6_addr;
- break;
+ list_for_each(li, &(ifaceq->ip_quality_list_4))
+ {
+ ipq = list_entry(li, struct ul_netaddrq_ip, entry);
+ if (first)
+ {
+ fprintf(ie->output, "%s: ", ifaceq->ifname);
+ first = false;
}
- if (addr)
- print_addr(ie, family, addr);
-
- freeaddrinfo(info);
+ else
+ fprintf(ie->output, " ");
+ fputs(ul_nl_addr_ntop_address(ipq->addr), ie->output);
+ }
+ list_for_each(li, &(ifaceq->ip_quality_list_6))
+ {
+ ipq = list_entry(li, struct ul_netaddrq_ip, entry);
+ if (first)
+ {
+ fprintf(ie->output, "%s: ", ifaceq->ifname);
+ first = false;
+ }
+ else
+ fprintf(ie->output, " ");
+ fputs(ul_nl_addr_ntop_address(ipq->addr), ie->output);
}
- free(host);
+ if (!first)
+ fputs("\n", ie->output);
}
/*
@@ -2860,26 +2901,47 @@ static void output_special_char(struct issue *ie,
case '4':
case '6':
{
- sa_family_t family = c == '4' ? AF_INET : AF_INET6;
- struct ifaddrs *addrs = NULL;
- char iface[128];
-
- if (getifaddrs(&addrs))
- break;
+ char iface[IF_NAMESIZE];
+ uint8_t ifa_family = c == '4' ? AF_INET : AF_INET6;
if (get_escape_argument(fp, iface, sizeof(iface)))
- output_iface_ip(ie, addrs, iface, family);
+ print_iface_best(ie, iface, ifa_family);
else
- output_iface_ip(ie, addrs, NULL, family);
-
- freeifaddrs(addrs);
+ print_addrq_bestofall(ie, ifa_family);
+ /* TODO: Move to pass 1 */
if (c == '4')
netlink_groups |= RTMGRP_IPV4_IFADDR;
else
netlink_groups |= RTMGRP_IPV6_IFADDR;
break;
}
+ case 'a':
+ {
+ struct list_head *li;
+ struct ul_netaddrq_iface *ifaceq;
+
+ list_for_each_netaddrq_iface(li, &(ie->nl))
+ {
+ ifaceq = list_entry(li, struct ul_netaddrq_iface, entry);
+
+ dump_iface_good(ie, ifaceq);
+ }
+ }
+ break;
+ case 'A':
+ {
+ struct list_head *li;
+ struct ul_netaddrq_iface *ifaceq;
+
+ list_for_each_netaddrq_iface(li, &(ie->nl))
+ {
+ ifaceq = list_entry(li, struct ul_netaddrq_iface, entry);
+
+ dump_iface_all(ie, ifaceq);
+ }
+ }
+ break;
#endif
default:
putc(c, ie->output);
--
2.48.1

1615
util-linux-lib-netlink.patch Normal file

File diff suppressed because it is too large Load Diff

View File

@ -15,7 +15,7 @@ echo -n "Checking login.defs variables in util-linux... " >&2
sed -n 's/^.*logindefs_setenv*("[A-Z0-9_]*", "\([A-Z0-9_]*\)".*$/\1/p' sed -n 's/^.*logindefs_setenv*("[A-Z0-9_]*", "\([A-Z0-9_]*\)".*$/\1/p'
) | LC_ALL=C sort -u >util-linux-login_defs-vars.lst ) | LC_ALL=C sort -u >util-linux-login_defs-vars.lst
if test $(sha1sum util-linux-login_defs-vars.lst | sed 's/ .*$//') != 8516ca34e059b2dee1d4421a3ab07e88331b1674 ; then if test $(sha1sum util-linux-login_defs-vars.lst | sed 's/ .*$//') != 713b442bf6d16353b7f74538ece165b424f90932 ; then
echo "does not match!" >&2 echo "does not match!" >&2
echo "Checksum is: $(sha1sum util-linux-login_defs-vars.lst | sed 's/ .*$//')" >&2 echo "Checksum is: $(sha1sum util-linux-login_defs-vars.lst | sed 's/ .*$//')" >&2
@ -32,10 +32,13 @@ If it is false positive:
- The same fix is needed in shadow package in shadow-login_defs-check.sh. - The same fix is needed in shadow package in shadow-login_defs-check.sh.
If it is true positive: If it is true positive:
- Check-out shadow package and call shadow-login_defs-check.sh.
- Compare its output shadow-login_defs-check-util-linux.lst with - Check-out shadow package and call shadow-login_defs-check.sh. If it
util-linux-login_defs-vars.lst in the util-linux build directory. fails, check the output.
- Update shadow shadow-login_defs-util-linux.patch, if needed. - Update shadow shadow-login_defs-util-linux.patch, if needed.
- Verify that the new variable is included in FOREIGNDEFS in lib/getdef.c.
If not, add it to shadow-login_defs-util-linux.patch and send the chunk
to the upstream.
- If shadow-login_defs-util-linux.patch was updated, update - If shadow-login_defs-util-linux.patch was updated, update
login_defs-support-for-util-linux symbol version in both shadow and login_defs-support-for-util-linux symbol version in both shadow and
util-linux spec files accordingly. util-linux spec files accordingly.

View File

@ -1,7 +0,0 @@
# False positives. Libraries outside LD_LIBRARY_PATH use RPATH to find libraries, not ldconfig.
addFilter("library-without-ldconfig-postin /usr/libexec/build/staging/.*")
addFilter("library-without-ldconfig-postun /usr/libexec/build/staging/.*")
# Not applicable for multi flavor build.
addFilter("invalid-spec-name")
# Not important, and it simplifies packaging.
addFilter("non-etc-or-var-file-marked-as-conffile /usr/libexec/build/staging/.*")

View File

@ -1,3 +1,287 @@
-------------------------------------------------------------------
Thu Jul 10 02:39:17 UTC 2025 - Stanislav Brabec <sbrabec@suse.com>
- agetty: Implement netlink based IP address detection and issue
reload. It makes possible to identify IP addresses usability and
prefer stable global addresses over ephemeral or link-local
addresses. New issue keywords \a and \A were added. (boo#1139983,
jsc#PED-8734, util-linux-lib-netlink.patch,
util-linux-agetty-netlink.patch)
-------------------------------------------------------------------
Tue Jun 24 22:41:18 UTC 2025 - Stanislav Brabec <sbrabec@suse.com>
- Update to version 2.41.1:
* cfdisk: fix memory leak and possible NULL dereference
* fdisk: fix possible memory leak
* findmnt: fix -k option parsing regression (boo#1242705,
drop util-linux-libblkid-econf-parse.patch)
* hardlink: fix performance regression
* include/cctype: fix string comparison
* libblkid:
* Fix crash while parsing config with libeconf
* befs fix underflow
* avoid strcasecmp() for ASCII-only strings
* libblkid/src/topology/dm: fix fscanf return value check to
match expected number of parsed items
* libmount:
* (subdir) restrict for real mounts only
* (subdir) remove unused code
* avoid calling memset() unnecessarily
* fix --no-canonicalize regression (boo#1244251,
drop libmount-fix-no-canonicalize-regression.patch)
* lsblk:
* use ID_PART_ENTRY_SCHEME as fallback for PTTYPE
* avoid strcasecmp() for ASCII-only strings
* lscpu:
* fix possible buffer overflow in cpuinfo parser
* Fix loongarch op-mode output with recent kernel
* lsfd:
* scan the protocol field of /proc/net/packet as a hex number
* fix the description for PACKET.PROTOCOL column
* lsns:
* enhance compilation without USE_NS_GET_API
* fix undefined reference to add_namespace_for_nsfd #3483
* more:
* fix broken ':!command' command key
* fix implicit previous shell_line execution #3508
* tests: (test_mkfds::mapped-packet-socket) add a new parameter,
protocol
* treewide:
* add ul_ to parse_timestamp() function name
(drop util-linux-rename-common-symbols-4.patch)
* add ul_ to parse_switch() function name
(drop util-linux-rename-common-symbols-3.patch)
* add ul_ to parse_size() function name
(drop util-linux-rename-common-symbols-2.patch)
* add ul_ to parse_range() function name
(drop util-linux-rename-common-symbols-1.patch)
* fix optional arguments usage
* avoid strcasecmp() for ASCII-only strings
* Wipefs: improve --all descriptions for whole-disks
* Misc: Do not call exit() on code ending in shared libraries
* Other fixes. For complete list see
https://kernel.org/pub/linux/utils/util-linux/v2.41/v2.41.1-ReleaseNotes
- Fix problem with uname26 listed twice.
-------------------------------------------------------------------
Tue Jun 10 11:16:10 UTC 2025 - Nicolas Belouin <nicolas@belouin.fr>
- Fix libmount --no-canonicalize regression (boo#1244251,
gh#util-linux/util-linux#3479,
libmount-fix-no-canonicalize-regression.patch).
-------------------------------------------------------------------
Thu May 29 15:21:59 UTC 2025 - Stanislav Brabec <sbrabec@suse.com>
- Add ul_ prefix to functions with common names. Fixes btrfsprogs
build failure (gh#util-linux/util-linux#3603,
util-linux-rename-common-symbols-1.patch,
util-linux-rename-common-symbols-2.patch,
util-linux-rename-common-symbols-3.patch,
util-linux-rename-common-symbols-4.patch).
-------------------------------------------------------------------
Tue May 20 14:27:14 UTC 2025 - Stanislav Brabec <sbrabec@suse.com>
- Fix segfault of findmnt (boo#1242705,
gh#util-linux/util-linux#3574,
util-linux-libblkid-econf-parse.patch).
-------------------------------------------------------------------
Thu Apr 17 18:33:03 UTC 2025 - Stanislav Brabec <sbrabec@suse.com>
- Enable mountfd support again (jsc#PED-9752).
BREAKING CHANGE
Mountfd is nearly completely compatible with the old mount. There
is a special case that cannot be handled by mountfd, and it needs
to be handled by applications:
Mountfd discriminates between physical mount layer and virtual
mount layer. Once the physical mount layer is read-only,
read-write mount on the virtual layer is not possible.
If the first mount is read only, then the physical filesystem is
mounted read-only, and later mount of the same file system as
read-write is not possible. To solve this problem, the first
mount needs to be read-only only on the virtual layer, keeping
the physical layer read-write.
The user space fix is simple:
Instead of
mount -oro
use
mount -oro=vfs
This will keep the physical layer read-write, but the virtual
file system layer (and the user space access) will be read-only.
-------------------------------------------------------------------
Mon Apr 7 21:00:58 UTC 2025 - Stanislav Brabec <sbrabec@suse.com>
- Update to version 2.41:
* agetty: Fixed an issue where issue files were not being printed
from additional locations, such as /run or /usr/lib. This
change now allows for the use of local information from /etc,
in addition to generated files from /run and
distribution-specific files from /usr/lib.
* cfdisk and sfdisk: Added support for the --sector-size command
line option.
* sfdisk: Added a new option, --discard-free.
* fdisk: Added a new command, 'T', to discard sectors.
* chrt: The --sched-runtime now supports SCHED_{OTHER,BATCH}
policies.
* column: Can now handle ANSI SGR colors inside OSC 8 hyperlink
escape codes and sequences.
* enosys: Can now dump defined filters.
* libmount:
* Added experimental support for statmount() and listmount()
syscalls.
* This new functionality can be accessed using "findmnt
--kernel=listmount".
* Added a new mount option,
X-mount.nocanonicalize[=source|target].
* Added new mount extensions to the "ro" flag (ro[=vfs,fs]).
* Added a new option, X-mount.noloop, to disable automatic loop
device creation.
* Now supports bind symlinks over symlinks.
* Reads all kernel info/warning/error messages from new API
syscalls (and mount(8) prints them).
* libuuid: Now supports RFC9562 UUIDs.
* findmnt, lsblk, and lsfd: Added a new --hyperlink command line
option to print paths as terminal hyperlinks.
* findmnt: Can now address filesystems using --id and --uniq-id
(requires listmount() kernel support).
* flock: Added support for the --fcntl command line option.
* hardlink: Can now prioritize specified trees on the command
line using --prioritize-trees.
* Can exclude sub-trees using --exclude-subtree or keep them in
the current mount using --mount.
* Duplicates can now be printed using --list-duplicates.
* hwclock: Added a new --param-index option to address position
for RTC_PARAM_{GET,SET} ioctls.
* kill: Can now decode signal masks (e.g. as used in /proc) to
signal names.
* libblkid: Made many changes to improve detection, including
exfat, GPT, LUKS2, bitlocker, etc.
* login: Added support for LOGIN_ENV_SAFELIST in /etc/login.def.
* lsfd: Now supports pidfs and AF_VSOCK sockets.
* lsipc, ipcmk, ipcrm: Now supports POSIX ipc.
* lslogins: Now supports lastlog2.
* lsns: Added support for the --filter option.
* build by meson: Now supports translated man pages and has fixed
many bugs.
* mkswap: The option --file should now be usable on btrfs.
* nsenter: Improved support for pidfd and can now join target
process's socket net namespace.
* scriptlive: Added a new option, --echo <never|always|auto>.
* zramctl: Now supports COMP-RATIO and --algorithm-params.
* Many other new features and fixes. For complete list see
https://kernel.org/pub/linux/utils/util-linux/v2.41/v2.41-ReleaseNotes
- Update util-linux-login_defs-check.sh:
* Make instructions up to date.
* Update checksum reflecting the shadow update.
- Refresh libmount-print-a-blacklist-hint-for-unknown-filesyst.patch.
-------------------------------------------------------------------
Mon Feb 24 17:16:49 UTC 2025 - Jan Engelhardt <jengelh@inai.de>
- Delete /usr/sbin/rc* symlinks
- Drop bashisms from build recipe
-------------------------------------------------------------------
Tue Jan 28 23:05:38 UTC 2025 - Stanislav Brabec <sbrabec@suse.com>
- Create and own directories /etc/blkid.conf.d and
/usr/etc/blkid.conf.d (boo#1235887#c3).
- Add missingok for /etc/blkid.conf.
-------------------------------------------------------------------
Mon Jan 20 18:12:46 UTC 2025 - Stanislav Brabec <sbrabec@suse.com>
- Move blkid.conf to /usr/etc (boo#1235887).
-------------------------------------------------------------------
Tue Jan 14 22:29:47 UTC 2025 - Stanislav Brabec <sbrabec@suse.com>
- Update to version 2.40.4:
* agetty: Prevent cursor escape (bsc#1194818, drop
util-linux-agetty-prevent-cursor-escape.patch)
add "systemd" to --version output\
* chcpu(8): Document CPU deconfiguring behavior
* fdisk: SGI fixes
* hardlink: fix memory corruption
* hardlink.1 directory|file is mandatory
* lib/env: fix env_list_setenv() for strings without '='
* libblkid:
(exfat) validate fields used by prober
(gpt) use blkid_probe_verify_csum() for partition array
checksum
add FSLASTBLOCK for swaparea
bitlocker fix version on big-endian systems
* libfdisk: make sure libblkid uses the same sector size
* libmount:
extract common error handling function
propagate first error of multiple filesystem types
* logger: correctly format tv_usec
* lscpu: Skip aarch64 decode path for rest of the architectures
(bsc#1229476, drop util-linux-lscpu-skip-aarch64-decode.patch)
* lsns: ignore ESRCH errors reported when accessing files under
/proc
* mkswap: set selinux label also when creating file
* more: make sure we have data on stderr
* nsenter: support empty environ
* umount, losetup: Document loop destroy behavior
(bsc#1159034, drop
util-linux-umount-losetup-lazy-destruction.patch,
util-linux-umount-losetup-lazy-destruction-generated.patch).
* uuidd: fix /var/lib/libuuid mode uuidd-tmpfiles.conf
fix /var/lib/libuuid mode uuidd-tmpfiles.conf
* Many other fixes, improvements and code cleanup. For the
complete list see
https://mirrors.edge.kernel.org/pub/linux/utils/util-linux/v2.40/v2.40.3-ReleaseNotes
https://mirrors.edge.kernel.org/pub/linux/utils/util-linux/v2.40/v2.40.4-ReleaseNotes
- Refresh util-linux.keyring. Key validity was extended.
-------------------------------------------------------------------
Sun Nov 17 21:06:01 UTC 2024 - Stanislav Brabec <sbrabec@suse.com>
- Skip aarch64 decode path for rest of the architectures
(bsc#1229476, util-linux-lscpu-skip-aarch64-decode.patch).
- agetty: Prevent login cursor escape (bsc#1194818,
util-linux-agetty-prevent-cursor-escape.patch).
- Document unexpected side effects of lazy destruction
(bsc#1159034, util-linux-umount-losetup-lazy-destruction.patch,
util-linux-umount-losetup-lazy-destruction-generated.patch).
-------------------------------------------------------------------
Mon Oct 21 23:25:19 UTC 2024 - Stanislav Brabec <sbrabec@suse.com>
- Disable mountfd API again.
(https://github.com/util-linux/util-linux/issues/3158)
-------------------------------------------------------------------
Mon Aug 5 22:14:13 UTC 2024 - Stanislav Brabec <sbrabec@suse.com>
- Update to version 2.40.2:
* cfdisk: fix possible integer overflow
* libmount: improving robustness in reading kernel messages,
add pidfs to pseudo fs list
* lscpu: New Arm Cortex part numbers
fix hang of lscpu -e (bsc#1225598)
* lsfd: Refactor the pidfd logic, support pidfs
(obsoletes
0001-include-Include-unistd.h-in-pidfd-utils.h-for-syscal.patch,
0002-lsfd-Refactor-the-pidfd-logic-into-lsfd-pidfd.c.patch,
0003-lsfd-Support-pidfs.patch,
0004-lsfd-test-Adapt-test-cases-for-pidfs.patch)
* mkswap.8.adoc: update note regarding swapfile creation
* setpgid: make -f work
* Many other fixes, improvements and code cleanup. For the
complete list see
https://mirrors.edge.kernel.org/pub/linux/utils/util-linux/v2.40/v2.40.2-ReleaseNotes
- Enable kernel mountfd API, as it should be already stable
(PED-9752).
- Move autoreconf back to %build.
- Add devel dependencies.
- Remove util-linux-rpmlintrc. It is no more needed with multibuild.
------------------------------------------------------------------- -------------------------------------------------------------------
Tue Jul 16 13:25:03 UTC 2024 - Valentin Lefebvre <valentin.lefebvre@suse.com> Tue Jul 16 13:25:03 UTC 2024 - Valentin Lefebvre <valentin.lefebvre@suse.com>
@ -80,7 +364,7 @@ Thu Apr 4 12:27:18 UTC 2024 - Thorsten Kukuk <kukuk@suse.com>
* blockdev: add support for BLKGETZONESZ * blockdev: add support for BLKGETZONESZ
* cfdisk: ask y/n before wipe * cfdisk: ask y/n before wipe
* cfdisk: properly handle out-of-order partitions during resize * cfdisk: properly handle out-of-order partitions during resize
* chcpu: document limitations of -g * chcpu: document limitations of -g (bsc#1218609)
* chsh: use libeconf to read /etc/shells * chsh: use libeconf to read /etc/shells
* column: fix -l * column: fix -l
* column: fix memory leak * column: fix memory leak
@ -103,10 +387,12 @@ Thu Apr 4 12:27:18 UTC 2024 - Thorsten Kukuk <kukuk@suse.com>
* lsblk: add --highlight * lsblk: add --highlight
* lsblk: add --list-columns * lsblk: add --list-columns
* lsclocks: new command to show clocks * lsclocks: new command to show clocks
* lscpu: even more Arm part numbers * lscpu: even more Arm part numbers (bsc#1223605)
* mkfs.minix: handle 64bit time on 32bit system * mkfs.minix: handle 64bit time on 32bit system
* mkswap: implement --file * mkswap: implement --file
* mkswap: implement --offset * mkswap: implement --offset
* more: clean processes not cleaned up after failed SSH session
using up 100% CPU (bsc#1220117)
* mount: add --map-users and --map-groups convenience options * mount: add --map-users and --map-groups convenience options
* nsenter: add option `-c` to join the cgroup of target process * nsenter: add option `-c` to join the cgroup of target process
* setarch: add riscv64/riscv32 support * setarch: add riscv64/riscv32 support
@ -114,6 +400,8 @@ Thu Apr 4 12:27:18 UTC 2024 - Thorsten Kukuk <kukuk@suse.com>
* uuidd: add cont_clock persistence * uuidd: add cont_clock persistence
* uuidgen: add option --count * uuidgen: add option --count
* wall: query logind for list of users with tty (#2088) * wall: query logind for list of users with tty (#2088)
properly neutralize escape sequences (bsc#1221831,
CVE-2024-28085)
* write: query logind for list of users with tty (#2088) * write: query logind for list of users with tty (#2088)
* libuuid: improved support for 64-bit time * libuuid: improved support for 64-bit time
- skip-lsfd-tests-PR2888.patch: skip some lsfd tests which OBS does - skip-lsfd-tests-PR2888.patch: skip some lsfd tests which OBS does
@ -233,6 +521,7 @@ Fri Jul 28 14:47:15 UTC 2023 - Goldwyn Rodrigues <rgoldwyn@suse.com>
- Re-add 0001-Revert-libblkid-try-LUKS2-first-when-probing.patch - Re-add 0001-Revert-libblkid-try-LUKS2-first-when-probing.patch
because the patch is not in 2.39.1 because the patch is not in 2.39.1
(bsc#1224393, boo#1213227, boo#1213361)
------------------------------------------------------------------- -------------------------------------------------------------------
Wed Jul 26 01:22:20 UTC 2023 - Neil Brown <nfbrown@suse.com> Wed Jul 26 01:22:20 UTC 2023 - Neil Brown <nfbrown@suse.com>

View File

@ -1,9 +1,10 @@
pub 4096R/EC39C284 2011-10-10 [expires: 2016-10-08] pub rsa4096 2011-10-10 [SC] [expires: 2033-05-14]
uid Karel Zak <kzak@redhat.com> B0C64D14301CC6EFAEDF60E4E4B71D5EEC39C284
sub 4096R/7BA16CAC 2011-10-10 [expires: 2016-10-08] uid [ unknown] Karel Zak <kzak@redhat.com>
sub rsa4096 2011-10-10 [E] [expires: 2033-05-14]
FC0214B4E2D01655F5898228ED846C667BA16CAC
-----BEGIN PGP PUBLIC KEY BLOCK----- -----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v2.0.20 (GNU/Linux)
mQINBE6StA4BEACp9++Y+DgbBloJEuVhsDjDIvAR1n/aHPDyPQQzg/DkKtR3BXHn mQINBE6StA4BEACp9++Y+DgbBloJEuVhsDjDIvAR1n/aHPDyPQQzg/DkKtR3BXHn
dGfTL9/DR8y9YzLNwUf2lWsEAvwHZ2XfUTp5S5nVbgpAB0/Q2ebP0TnkNYaRkxq7 dGfTL9/DR8y9YzLNwUf2lWsEAvwHZ2XfUTp5S5nVbgpAB0/Q2ebP0TnkNYaRkxq7
@ -16,41 +17,42 @@ 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
VeljfCzq NdEeAGQJbiXWb1z9vHHQpDPKMXhK18D5PBnLDIl8iFnpDE+M088Xnavf9eYapj2k
=8wc5 Zh9rvA==
=cevX
-----END PGP PUBLIC KEY BLOCK----- -----END PGP PUBLIC KEY BLOCK-----

View File

@ -1,7 +1,7 @@
# #
# spec file for package util-linux # spec file for package util-linux
# #
# Copyright (c) 2024 SUSE LLC # Copyright (c) 2025 SUSE LLC
# #
# All modifications and additions to the file contributed by third parties # All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed # remain the property of their copyright owners, unless otherwise agreed
@ -85,19 +85,18 @@ Group: Development/Languages/Python
%endif %endif
# ulbuild == python # ulbuild == python
Version: 2.40.1 Version: 2.41.1
Release: 0 Release: 0
License: GPL-2.0-or-later License: GPL-2.0-or-later
URL: https://www.kernel.org/pub/linux/utils/util-linux/ URL: https://www.kernel.org/pub/linux/utils/util-linux/
Source: https://www.kernel.org/pub/linux/utils/util-linux/v2.40/util-linux-%{version}.tar.xz Source: https://www.kernel.org/pub/linux/utils/util-linux/v2.41/util-linux-%{version}.tar.xz
Source2: util-linux-login_defs-check.sh Source2: util-linux-login_defs-check.sh
Source3: util-linux-rpmlintrc
Source7: baselibs.conf Source7: baselibs.conf
Source8: login.pamd Source8: login.pamd
Source9: remote.pamd Source9: remote.pamd
Source10: su.pamd Source10: su.pamd
Source11: su.default Source11: su.default
Source12: https://www.kernel.org/pub/linux/utils/util-linux/v2.39/util-linux-%{version}.tar.sign Source12: https://www.kernel.org/pub/linux/utils/util-linux/v2.41/util-linux-%{version}.tar.sign
Source13: %{_name}.keyring Source13: %{_name}.keyring
Source14: runuser.pamd Source14: runuser.pamd
Source15: runuser-l.pamd Source15: runuser-l.pamd
@ -111,10 +110,10 @@ Patch2: Add-documentation-on-blacklisted-modules-to-mount-8-.patch
# PATCH-FIX-SUSE util-linux-bash-completion-su-chsh-l.patch bsc1172427 -- Fix "su -s" bash completion. # PATCH-FIX-SUSE util-linux-bash-completion-su-chsh-l.patch bsc1172427 -- Fix "su -s" bash completion.
Patch3: util-linux-bash-completion-su-chsh-l.patch Patch3: util-linux-bash-completion-su-chsh-l.patch
Patch5: static_lib.patch Patch5: static_lib.patch
Patch6: 0001-include-Include-unistd.h-in-pidfd-utils.h-for-syscal.patch # PATCH-FEATURE-UPSTREAM util-linux-lib-netlink.patch boo1139983 jsc#PED-8734 sbrabec@suse.com -- Implement netlink based IP address detection and issue reload.
Patch7: 0002-lsfd-Refactor-the-pidfd-logic-into-lsfd-pidfd.c.patch Patch6: util-linux-lib-netlink.patch
Patch8: 0003-lsfd-Support-pidfs.patch # PATCH-FEATURE-UPSTREAM util-linux-agetty-netlink.patch boo1139983 jsc#PED-8734 sbrabec@suse.com -- Implement netlink based IP address detection and issue reload.
Patch9: 0004-lsfd-test-Adapt-test-cases-for-pidfs.patch Patch7: util-linux-agetty-netlink.patch
BuildRequires: audit-devel BuildRequires: audit-devel
BuildRequires: bc BuildRequires: bc
BuildRequires: binutils-devel BuildRequires: binutils-devel
@ -190,7 +189,8 @@ Supplements: filesystem(minix)
# All login.defs variables require support from shadow side. # All login.defs variables require support from shadow side.
# Upgrade this symbol version only if new variables appear! # Upgrade this symbol version only if new variables appear!
# Verify by shadow-login_defs-check.sh from shadow source package. # Verify by shadow-login_defs-check.sh from shadow source package.
Recommends: login_defs-support-for-util-linux >= 2.37 # Use downstream version. Upstream may accept the patch later.
Recommends: login_defs-support-for-util-linux >= 4.17.4
%endif %endif
# ulsubset == core # ulsubset == core
@ -280,7 +280,10 @@ Library for filesystem detection.
Summary: Development files for the filesystem detection library Summary: Development files for the filesystem detection library
License: LGPL-2.1-or-later License: LGPL-2.1-or-later
Group: Development/Libraries/C and C++ Group: Development/Libraries/C and C++
Requires: glibc-devel
Requires: libblkid-devel
Requires: libfdisk1 = %{version} Requires: libfdisk1 = %{version}
Requires: libuuid-devel
%description -n libfdisk-devel %description -n libfdisk-devel
Files needed to develop applications using the library for filesystem Files needed to develop applications using the library for filesystem
@ -290,7 +293,10 @@ detection.
Summary: Development files for the filesystem detection library Summary: Development files for the filesystem detection library
License: LGPL-2.1-or-later License: LGPL-2.1-or-later
Group: Development/Libraries/C and C++ Group: Development/Libraries/C and C++
Requires: libblkid-devel-static
Requires: libeconf-devel
Requires: libfdisk-devel = %{version} Requires: libfdisk-devel = %{version}
Requires: libuuid-devel-static
%description -n libfdisk-devel-static %description -n libfdisk-devel-static
Files needed to develop applications using the library for filesystem Files needed to develop applications using the library for filesystem
@ -309,7 +315,10 @@ mount(8) and /usr/sbin/mount.<type> helpers.
Summary: Development files for libmount Summary: Development files for libmount
License: LGPL-2.1-or-later License: LGPL-2.1-or-later
Group: Development/Libraries/C and C++ Group: Development/Libraries/C and C++
Requires: libblkid-devel
Requires: libeconf-devel
Requires: libmount1 = %{version} Requires: libmount1 = %{version}
Requires: libselinux-devel
%description -n libmount-devel %description -n libmount-devel
Files to develop applications using the libmount library. Files to develop applications using the libmount library.
@ -318,6 +327,7 @@ Files to develop applications using the libmount library.
Summary: Development files for libmount Summary: Development files for libmount
License: LGPL-2.1-or-later License: LGPL-2.1-or-later
Group: Development/Libraries/C and C++ Group: Development/Libraries/C and C++
Requires: libblkid-devel-static
Requires: libmount-devel = %{version} Requires: libmount-devel = %{version}
%description -n libmount-devel-static %description -n libmount-devel-static
@ -364,6 +374,7 @@ A library to generate universally unique IDs (UUIDs).
Summary: Development files for libuuid Summary: Development files for libuuid
License: BSD-3-Clause License: BSD-3-Clause
Group: Development/Libraries/C and C++ Group: Development/Libraries/C and C++
Requires: glibc-devel
Requires: libuuid1 = %{version} Requires: libuuid1 = %{version}
%description -n libuuid-devel %description -n libuuid-devel
@ -467,9 +478,9 @@ cp -a %{S:2} .
%autopatch -p1 %autopatch -p1
# This test randomly fails or keeps hanging task inside build chroot (tested on 2.38). # This test randomly fails or keeps hanging task inside build chroot (tested on 2.38).
rm tests/ts/lsns/ioctl_ns rm tests/ts/lsns/ioctl_ns
AUTOPOINT=true GTKDOCIZE=true autoreconf -vfi
%build %build
AUTOPOINT=true GTKDOCIZE=true autoreconf -vfi
%global _lto_cflags %{_lto_cflags} -ffat-lto-objects %global _lto_cflags %{_lto_cflags} -ffat-lto-objects
export SUID_CFLAGS="-fpie" export SUID_CFLAGS="-fpie"
export SUID_LDFLAGS="-pie" export SUID_LDFLAGS="-pie"
@ -479,38 +490,38 @@ export CXXFLAGS="%{optflags} -D_GNU_SOURCE"
# Here we define a build function. For the base build, we use it as it # Here we define a build function. For the base build, we use it as it
# is. For python build, we use it repeatedly for all flavors. # is. For python build, we use it repeatedly for all flavors.
function configure_and_build() { configure_and_build() {
# configure options depending on ulbuild and ulsubset values # configure options depending on ulbuild and ulsubset values
configure_options="" configure_options=""
# libmagic is only used for determining in more(1) whether or not a file # libmagic is only used for determining in more(1) whether or not a file
# is binary. but it has builtin code that is doing the same with a simpler # is binary. but it has builtin code that is doing the same with a simpler
# check and the libmagic database dependency is rather large (9MB+) # check and the libmagic database dependency is rather large (9MB+)
configure_options+="--without-libmagic " configure_options="$configure_options --without-libmagic "
%if "%ulbuild" == "python" %if "%ulbuild" == "python"
%define _configure ../configure %define _configure ../configure
configure_options+="--disable-all-programs " configure_options="$configure_options --disable-all-programs "
configure_options+="--with-python " configure_options="$configure_options --with-python "
configure_options+="--enable-pylibmount " configure_options="$configure_options --enable-pylibmount "
configure_options+="--enable-libmount " configure_options="$configure_options --enable-libmount "
configure_options+="--enable-libblkid " configure_options="$configure_options --enable-libblkid "
%endif %endif
# ulbuild == python # ulbuild == python
%if "%ulbuild" == "base" %if "%ulbuild" == "base"
configure_options+="--enable-all-programs " configure_options="$configure_options --enable-all-programs "
configure_options+="--without-python " configure_options="$configure_options --without-python "
%endif %endif
# ulbuild == base # ulbuild == base
%if "%ulsubset" == "core" %if "%ulsubset" == "core"
configure_options+="--without-systemd --disable-liblastlog2" configure_options="$configure_options --without-systemd --disable-liblastlog2"
%endif %endif
# ulsubset == core # ulsubset == core
%if "%ulsubset" == "systemd" %if "%ulsubset" == "systemd"
configure_options+="--with-systemd " configure_options="$configure_options --with-systemd "
%endif %endif
# ulsubset == systemd # ulsubset == systemd
@ -553,10 +564,9 @@ configure_options+="--with-systemd "
--disable-pg\ --disable-pg\
--enable-fs-paths-default="/sbin:/usr/sbin"\ --enable-fs-paths-default="/sbin:/usr/sbin"\
--enable-static\ --enable-static\
--with-vendordir=%{_distconfdir} \ --with-vendordir=%{_distconfdir}\
--disable-libmount-mountfd-support \
$configure_options $configure_options
make %{?_smp_mflags} %make_build
} }
################ ################
@ -607,8 +617,10 @@ fi
################ ################
%if "%ulbuild" == "base" %if "%ulbuild" == "base"
%make_install %make_install
mkdir -p %{buildroot}{%{_distconfdir}/default,%{_pam_vendordir},%{_sysconfdir}/issue.d} mkdir -p "%{buildroot}/%{_distconfdir}/default" "%{buildroot}/%{_pam_vendordir}" "%{buildroot}/%{_sysconfdir}/issue.d"
install -m 644 %{SOURCE51} %{buildroot}%{_sysconfdir}/blkid.conf install -m 644 %{SOURCE51} %{buildroot}%{_distconfdir}/blkid.conf
touch %{buildroot}%{_sysconfdir}/blkid.conf
mkdir %{buildroot}%{_sysconfdir}/blkid.conf.d %{buildroot}%{_distconfdir}/blkid.conf.d
install -m 644 %{SOURCE8} %{buildroot}%{_pam_vendordir}/login install -m 644 %{SOURCE8} %{buildroot}%{_pam_vendordir}/login
install -m 644 %{SOURCE9} %{buildroot}%{_pam_vendordir}/remote install -m 644 %{SOURCE9} %{buildroot}%{_pam_vendordir}/remote
%if 0%{?suse_version} <= 1500 %if 0%{?suse_version} <= 1500
@ -662,10 +674,10 @@ rm -f %{buildroot}%{_mandir}/man8/fdisk.8*
# create list of setarch(8) symlinks # create list of setarch(8) symlinks
find %{buildroot}%{_mandir}/man8 -regextype posix-egrep \ find %{buildroot}%{_mandir}/man8 -regextype posix-egrep \
-regex ".*(linux32|linux64|s390|s390x|i386|ppc|ppc64|ppc32|sparc|sparc64|sparc32|sparc32bash|mips|mips64|mips32|ia64|x86_64|parisc|parisc32|parisc64|uname26)\.8.*" \ -regex ".*(linux32|linux64|s390|s390x|i386|ppc|ppc64|ppc32|sparc|sparc64|sparc32|sparc32bash|mips|mips64|mips32|ia64|x86_64|parisc|parisc32|parisc64)\.8.*" \
-printf "%{_mandir}/man8/%f*\n" >> %{name}.files -printf "%{_mandir}/man8/%f*\n" >> %{name}.files
find %{buildroot}%{_bindir}/ -regextype posix-egrep -type l \ find %{buildroot}%{_bindir}/ -regextype posix-egrep -type l \
-regex ".*(linux32|linux64|s390|s390x|i386|ppc|ppc64|ppc32|sparc|sparc64|sparc32|sparc32bash|mips|mips64|mips32|ia64|x86_64|parisc|parisc32|parisc64|uname26)$" \ -regex ".*(linux32|linux64|s390|s390x|i386|ppc|ppc64|ppc32|sparc|sparc64|sparc32|sparc32bash|mips|mips64|mips32|ia64|x86_64|parisc|parisc32|parisc64)$" \
-printf "%{_bindir}/%f\n" >> %{name}.files -printf "%{_bindir}/%f\n" >> %{name}.files
mkdir -p %{buildroot}/run/uuidd mkdir -p %{buildroot}/run/uuidd
@ -706,8 +718,6 @@ mv %{buildroot}%{_bindir}/login %{buildroot}/bin/
%else %else
# ulsubset != core, ulbuild == base # ulsubset != core, ulbuild == base
echo -n "" >%{name}.lang echo -n "" >%{name}.lang
ln -sf /sbin/service %{buildroot}%{_sbindir}/rcuuidd
ln -sf /sbin/service %{buildroot}%{_sbindir}/rcfstrim
%endif %endif
# ulsubset == core, ulbuild == base # ulsubset == core, ulbuild == base
@ -971,7 +981,6 @@ rmdir --ignore-fail-on-non-empty /run/run >/dev/null 2>&1 || :
# defined no_config # defined no_config
%config %dir %{_sysconfdir}/issue.d %config %dir %{_sysconfdir}/issue.d
%if %{ul_extra_bin_sbin} %if %{ul_extra_bin_sbin}
%core /bin/kill %core /bin/kill
%core %verify(not mode) %attr(%ul_suid,root,root) /bin/su %core %verify(not mode) %attr(%ul_suid,root,root) /bin/su
@ -1015,7 +1024,9 @@ rmdir --ignore-fail-on-non-empty /run/run >/dev/null 2>&1 || :
%core %{_bindir}/kill %core %{_bindir}/kill
%core %verify(not mode) %attr(%ul_suid,root,root) %{_bindir}/su %core %verify(not mode) %attr(%ul_suid,root,root) %{_bindir}/su
%core %{_bindir}/eject %core %{_bindir}/eject
%core %{_bindir}/bits
%core %{_bindir}/cal %core %{_bindir}/cal
%core %{_bindir}/coresched
%core %{_bindir}/chmem %core %{_bindir}/chmem
%core %{_bindir}/choom %core %{_bindir}/choom
%core %{_bindir}/chrt %core %{_bindir}/chrt
@ -1227,6 +1238,7 @@ rmdir --ignore-fail-on-non-empty /run/run >/dev/null 2>&1 || :
%core %{_mandir}/man1/kill.1.gz %core %{_mandir}/man1/kill.1.gz
%core %{_mandir}/man1/su.1.gz %core %{_mandir}/man1/su.1.gz
%core %{_mandir}/man1/bits.1.gz
%core %{_mandir}/man1/cal.1.gz %core %{_mandir}/man1/cal.1.gz
%core %{_mandir}/man1/choom.1.gz %core %{_mandir}/man1/choom.1.gz
%core %{_mandir}/man1/chrt.1.gz %core %{_mandir}/man1/chrt.1.gz
@ -1234,6 +1246,7 @@ rmdir --ignore-fail-on-non-empty /run/run >/dev/null 2>&1 || :
%core %{_mandir}/man1/colcrt.1.gz %core %{_mandir}/man1/colcrt.1.gz
%core %{_mandir}/man1/colrm.1.gz %core %{_mandir}/man1/colrm.1.gz
%core %{_mandir}/man1/column.1.gz %core %{_mandir}/man1/column.1.gz
%core %{_mandir}/man1/coresched.1.gz
%core %{_mandir}/man1/dmesg.1.gz %core %{_mandir}/man1/dmesg.1.gz
%core %{_mandir}/man1/enosys.1.gz %core %{_mandir}/man1/enosys.1.gz
%core %{_mandir}/man1/eject.1.gz %core %{_mandir}/man1/eject.1.gz
@ -1360,8 +1373,10 @@ rmdir --ignore-fail-on-non-empty /run/run >/dev/null 2>&1 || :
%license README.licensing %license README.licensing
%license COPYING %license COPYING
%license Documentation/licenses/* %license Documentation/licenses/*
%config(noreplace) %{_sysconfdir}/blkid.conf %ghost %config(missingok) %{_sysconfdir}/blkid.conf
%config %dir %{_sysconfdir}/blkid.conf.d
%{_distconfdir}/blkid.conf
%dir %{_distconfdir}/blkid.conf.d
%{_datadir}/bash-completion/completions/* %{_datadir}/bash-completion/completions/*
%exclude %{_datadir}/bash-completion/completions/findmnt %exclude %{_datadir}/bash-completion/completions/findmnt
%exclude %{_datadir}/bash-completion/completions/logger %exclude %{_datadir}/bash-completion/completions/logger
@ -1386,10 +1401,11 @@ rmdir --ignore-fail-on-non-empty /run/run >/dev/null 2>&1 || :
# Systemd files # # Systemd files #
################# #################
%if "%ulsubset" == "systemd" %if "%ulsubset" == "systemd"
%exclude %config(noreplace) %{_sysconfdir}/blkid.conf %exclude %{_distconfdir}/blkid.conf
%exclude %dir %{_distconfdir}/blkid.conf.d
%exclude %config(missingok) %{_sysconfdir}/blkid.conf
%exclude %config %{_sysconfdir}/blkid.conf.d
%exclude %config %dir %{_sysconfdir}/issue.d %exclude %config %dir %{_sysconfdir}/issue.d
%if %{ul_extra_bin_sbin} %if %{ul_extra_bin_sbin}
/bin/findmnt /bin/findmnt
/bin/logger /bin/logger
@ -1577,7 +1593,6 @@ rmdir --ignore-fail-on-non-empty /run/run >/dev/null 2>&1 || :
%exclude %{_mandir}/man8/parisc64.8.gz %exclude %{_mandir}/man8/parisc64.8.gz
%exclude %{_mandir}/man8/uname26.8.gz %exclude %{_mandir}/man8/uname26.8.gz
%{_sbindir}/rcfstrim
%{_unitdir}/fstrim.service %{_unitdir}/fstrim.service
%{_unitdir}/fstrim.timer %{_unitdir}/fstrim.timer
%endif %endif
@ -1724,7 +1739,6 @@ rmdir --ignore-fail-on-non-empty /run/run >/dev/null 2>&1 || :
%attr(-,uuidd,uuidd) %ghost %dir /run/uuidd %attr(-,uuidd,uuidd) %ghost %dir /run/uuidd
%{_datadir}/bash-completion/completions/uuidd %{_datadir}/bash-completion/completions/uuidd
%{_mandir}/man8/uuidd.8.gz %{_mandir}/man8/uuidd.8.gz
%{_sbindir}/rcuuidd
%{_unitdir}/uuidd.service %{_unitdir}/uuidd.service
%{_unitdir}/uuidd.socket %{_unitdir}/uuidd.socket