Karel Zak [Tue, 12 Dec 2023 09:21:19 +0000 (10:21 +0100)]
Merge branch 'dmesg/tests' of https://github.com/t-8ch/util-linux
* 'dmesg/tests' of https://github.com/t-8ch/util-linux:
dmesg: use symbolic defines for second conversions
dmesg: add support for reserved and local facilities
dmesg: (tests) validate json output
dmesg: only write one message to json
jsonwrt: add ul_jsonwrt_value_s_sized
dmesg: open-code LOG_MAKEPRI
dmesg: correctly print all supported facility names
dmesg: error out instead of silently ignoring force_prefix
Karel Zak [Mon, 11 Dec 2023 09:52:11 +0000 (10:52 +0100)]
Merge branch 'fix-bash-completion-rules' of https://github.com/masatake/util-linux
* 'fix-bash-completion-rules' of https://github.com/masatake/util-linux:
bash-completion: (lslocks): add --bytes option to the rules
bash-completion: (fadvise): fix a typo
more: exit if POLLERR and POLLHUP on stdin is received
more command continues to run in case stdin have closed the file and it
takes 100% of CPU. This is because revents on stdin send
POLLIN | POLLHUP | POLLERR once stdin is closed. more receives it even
though it is not requested in events. This is common Linux behaviour to
never mask out POLLHUP or POLLERR. The loop in more_key_command() runs
infinitely because more_poll() returns 0 and read_command() reads 0
bytes.
Check for POLLERR and POLLHUP, and exit more in case of an error.
Steps to reproduce:
1. Setup /etc/systemd/logind.conf with KillUserProcesses=no
2. Add config "Defaults use_pty" in /etc/sudoers
3. Start an ssh session to the machine
4. # sudo su -
5. # more <big enough file>
6. kill the parent ssh process, say close the tab
At this time "more" runs with 100% CPU utilization.
Eli Schwartz [Thu, 7 Dec 2023 00:40:44 +0000 (19:40 -0500)]
bash-completion: make sure that "lastb" actually completes
Building util-linux logs a warning on Gentoo:
```
* Problems with installed bash completions were found:
*
* lastb: incorrect name, no completions for 'lastb' command defined.
*
* For more details on installing bash-completions, please see:
* https://wiki.gentoo.org/wiki/Bash/Installing_completion_files
```
A bash-completion file is usually composed of two parts:
- a function that knows how to produce completions
- a specification of which command should be completed
In cases where multiple commands have the same options, e.g. commands
that are symlinked to each other, it is common to symlink the completion
files as well. This shares the first part. But the second part cannot be
shared, it must be implemented twice by specifying two different
commands to be completed.
"lastb" had a symlinked completion, but when the completion system
processes /usr/share/bash-completion/completions/lastb, it would only
define a completion for "last".
Define both completions in one file, so that sourcing it works
regardless of command used.
more: exit if POLLHUP or POLLERR on stdin is received
more command continues to run in case stdin have closed the file and it
takes 100% of CPU. This is because revents on stdin send
POLLIN | POLLHUP | POLLERR once stdin is closed. more receives it even
though it is not requested in events. This is common Linux behaviour to
never mask out POLLHUP or POLLERR. The loop in more_key_command() runs
infinitely because more_poll() returns 0 and read_command() reads 0
bytes.
Steps to reproduce:
1. Setup /etc/systemd/logind.conf with KillUserProcesses=no
2. Add config "Defaults use_pty" in /etc/sudoers
3. Start an ssh session to the machine
4. # sudo su -
5. # more <big enough file>
6. kill the parent ssh process, say close the tab
At this time "more" runs with 100% CPU utilization.
Masatake YAMATO [Thu, 7 Dec 2023 19:35:29 +0000 (04:35 +0900)]
tests: (lslcoks) insert a sleep between taking a lock and running lslocks
Close #2624.
It appears that there is a time lag between locking and its visibility
in /proc/locks. See the unstbale results of errors I observed in
https://github.com/util-linux/util-linux/pull/2629.
Karel Zak [Thu, 7 Dec 2023 12:54:26 +0000 (13:54 +0100)]
unshare: make sure map_range.next is initialized [coverity scan]
* initialize during declaration (if possible), unspecified fields
defaults to zero in this case.
* fix coverity warnings:
CID 410290: Uninitialized variables (UNINIT)
Using uninitialized value "mid". Field "mid.next" is uninitialized when calling "insert_map_range".
CID 410289: Uninitialized variables (UNINIT)
Using uninitialized value "hi". Field "hi.next" is uninitialized when calling "insert_map_range".
CID 410288: Uninitialized variables (UNINIT)
Using uninitialized value "lo". Field "lo.next" is uninitialized when calling "insert_map_range".
Karel Zak [Thu, 7 Dec 2023 10:30:26 +0000 (11:30 +0100)]
Merge branch 'master' of https://github.com/mystuffs/util-linux
* 'master' of https://github.com/mystuffs/util-linux:
lscpu-cputype.c: assign value to multiple variables (ar->bit32 and ar->bit64) clang with -Wcomma will emit an warning of "misuse of comma operator". Since the value that will be assigned, is the same for both (bit32 and bit64), just assigning directly to both variables seems reasonable.
Karel Zak [Wed, 6 Dec 2023 11:26:39 +0000 (12:26 +0100)]
lslocks: cleanup --list-columns
* remove "Available columns" from --help
* remove dependence on command-line options order ("-H -J" vs. "-J -H")
* remove global variable shadowing for 'raw' and 'json'
* keep --list-columns in "help & version block" in usage() output
References: https://github.com/util-linux/util-linux/pull/2602 Signed-off-by: Karel Zak <kzak@redhat.com>
Karel Zak [Wed, 6 Dec 2023 10:59:37 +0000 (11:59 +0100)]
Merge branch 'list-columns-options' of https://github.com/masatake/util-linux
* 'list-columns-options' of https://github.com/masatake/util-linux:
lslocks: add -H option printing avaiable columns
lslocks: (refactor) add a helper function returning JSON type for a given column
lslocks: (fix) set JSON type for COL_SIZE even when --bytes is specified
lsfd: use helper functions in column-list-table.h
add helper functions for implementing -H/--list-columns option
rilysh [Wed, 6 Dec 2023 05:21:27 +0000 (00:21 -0500)]
lscpu-cputype.c: assign value to multiple variables (ar->bit32 and ar->bit64)
clang with -Wcomma will emit an warning of "misuse of comma operator".
Since the value that will be assigned, is the same for both (bit32 and bit64),
just assigning directly to both variables seems reasonable.
Karel Zak [Tue, 5 Dec 2023 12:52:03 +0000 (13:52 +0100)]
Merge branch 'fixes' of https://github.com/t-8ch/util-linux
* 'fixes' of https://github.com/t-8ch/util-linux:
build: use -std=c99 and -std=c++11 by default
coverage.h: mark _exit as noreturn
lsfd: switch to c99-conformant alignment specification
blkdev.h: avoid some unused argument warnings
m4: update pkg.m4
include/c.h: implement reallocarray
libblkid: avoid use of non-standard typeof()
meson: bump required version to 0.60.0
Karel Zak [Tue, 5 Dec 2023 10:09:38 +0000 (11:09 +0100)]
Merge branch 'PR/libmount-utab-external' of github.com:karelzak/util-linux-work
* 'PR/libmount-utab-external' of github.com:karelzak/util-linux-work:
tests: make mount/special more robust
tests: add missing file and improve options-missing test
libmount: test utab options after helper call
libmount: add missing utab options after helper call
libmount: add private mnt_optstr_get_missing()
Karel Zak [Tue, 5 Dec 2023 10:08:57 +0000 (11:08 +0100)]
Merge branch 'unshare-maps' of https://github.com/arachsys-prs/util-linux
* 'unshare-maps' of https://github.com/arachsys-prs/util-linux:
unshare: Add --map-users=all and --map-groups=all
unshare: Set uid and gid maps directly when run as root
unshare: Support multiple ID ranges for user and group maps
Chris Webb [Mon, 4 Dec 2023 18:15:14 +0000 (18:15 +0000)]
unshare: don't try to reset the disposition of SIGKILL
If the child process is killed with SIGKILL, don't attempt to reset the
disposition of SIGKILL (which can't be caught or ignored anyway) before
self-signalling. This caused a misleading 'sigprocmask unblock failed'
error instead of dying with the same SIGKILL status as the child.
Fixes: https://github.com/util-linux/util-linux/issues/2614 Signed-off-by: Chris Webb <chris@arachsys.com>
Khem Raj [Mon, 4 Dec 2023 03:59:46 +0000 (19:59 -0800)]
login-utils: include libgen.h for basename API
musl has removed the non-prototype declaration of basename from string.h [1] which now results in build errors with clang-17+ compiler
include libgen.h for using the posix declaration of the funciton.
Fixes
../util-linux-2.39.2/login-utils/su-common.c:847:20: error: call to undeclared function 'basename'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
847 | shell_basename = basename(shell);
| ^
Thomas Weißschuh [Thu, 30 Nov 2023 22:24:37 +0000 (23:24 +0100)]
build: use -std=c99 and -std=c++11 by default
Relying on the compiler default is problematic:
* New constructs may be introduced accidentally that break backwards
compatibility.
* Older compilers may default to a more restricted standard than the
codebase is actually developed with.
Explicitly select C99 (and C++11 for the fuzzing part).
Autotools does not want to default to C99, so set it explcitly during
CI.
Thomas Weißschuh [Thu, 30 Nov 2023 22:23:33 +0000 (23:23 +0100)]
meson: bump required version to 0.60.0
We already rely on 0.60.0 features:
libsmartcols/meson.build:44: WARNING: Project targets '>=0.57.0' but uses feature introduced in '0.60.0': list.<plus>. The right hand operand was not a list.
Karel Zak [Thu, 30 Nov 2023 09:25:45 +0000 (10:25 +0100)]
tests: add missing file and improve options-missing test
* remove optional ID= field (not on systems without statx())
* add missing tests/expected/mount/special-missing-options
* make sure utab is created
* use udevadm settle to wait for systemd
Chris Webb [Thu, 23 Nov 2023 14:06:02 +0000 (14:06 +0000)]
unshare: Add --map-users=all and --map-groups=all
Accept the special value 'all' for --map-users and --map-groups,
configuring a pass-through mapping of every user or group ID available
in the parent user namespace.
These are invaluable for scripting tests, for example when you want to
remap users leaving groups unchanged, remap groups leaving users unchanged,
or create a pass-through user namespace which maps the same users and
groups as its parent but has no capabilities in that parent namespace.
In the root user namespace, 'all' is equivalent to '0:0:4294967295', but
in child namespaces it may represent a fragmented mapping corresponding
to multiple --map-users or --map-groups options.
Chris Webb [Thu, 23 Nov 2023 13:14:58 +0000 (13:14 +0000)]
unshare: Set uid and gid maps directly when run as root
The newuidmap and newgidmap setuid helpers provided by shadow don't allow
root to set up arbitrary mappings without explicit wildcard configuration
in /etc/subuid and /etc/subgid, and are an unnecessary dependency when
unshare is run privileged.
ID-mapped mount already knows how to create uid/gid maps directly for new
user namespaces, so teach unshare to do the same thing when run as root.
Continue to use the setuid helpers when we are not sufficiently privileged
to do the job ourselves.
Chris Webb [Thu, 23 Nov 2023 12:24:58 +0000 (12:24 +0000)]
unshare: Support multiple ID ranges for user and group maps
Accept multiple --map-users and --map-groups options to specify disjoint ID
ranges to map inside a user namespace. This was already supported by mount
--map-groups and --map-users, but paradoxically not by unshare itself.
Factor out the hole-punching logic which removes single-ID mappings set
with --map-user and --map-group from range mappings set with --map-users
and --map-groups. add_single_map_range() now performs this fixup for
every given range before prepending the single-ID mapping.
Karel Zak [Wed, 29 Nov 2023 11:37:52 +0000 (12:37 +0100)]
libmount: add missing utab options after helper call
libmount is able to add missing entry to /run/mount/utab after
external /sbin/mouht.<type> helper execution. This is not enough, it's
possible that the helper write proper entry to the utab, but there is
missing some options expected by libmount (usually because the options
are irrelevant fro the helper.
Reproducer:
Create a stupid mount.foo which writes x-foo=123 to utab:
Karel Zak [Tue, 28 Nov 2023 13:40:48 +0000 (14:40 +0100)]
libmount: accept '\' as escape for options separator
The libmount library can accept any characters as an option value when
the value is quoted (e.g., foo="b,a,r"). However, overlayfs users have
been using '\' as an escape character (e.g., lowerdir=foo\,bar).
Although this escaping mechanism was never officially supported by
libmount/mount, it worked for the old mount(2) API because it kept the
options string unparsed for the mount(2) syscall.
The introduction of the new mount API, which utilizes fsconfig(2) per
option, has brought attention to this issue.
This patch addresses the problem by introducing official support for
'\' as an escape character for options separator.
Suggested-by: Miklos Szeredi <miklos@szeredi.hu>
References: https://lore.kernel.org/all/CAOQ4uxhgUSPkYAV8SJu-SFszkJcVO3-M4DXf46nJUtXODrPk2g@mail.gmail.com/T/#ma8e6cfc1ce7229abc089e03eed99b23b90d701e5 Signed-off-by: Karel Zak <kzak@redhat.com>
Junxiao Bi [Tue, 7 Nov 2023 18:48:06 +0000 (10:48 -0800)]
losetup: report lost loop devices for finding free loop
commit a6ca0456cc6d("loopdev: report lost loop devices") forgot to
report lost loop device for finding free loop case. With this path,
it will show the following if next free loop device is lost.
# ./losetup -f
/dev/loop1 (lost)
# ./losetup -f /tmp/test.img
lt-losetup: /tmp/test.img: failed to set up loop device: No such file or directory
lt-losetup: device node /dev/loop1 (7:1) is lost. You may use mknod(1) to recover it.
Karel Zak [Fri, 24 Nov 2023 09:21:58 +0000 (10:21 +0100)]
Merge branch 'minor-changes-about-new-filter' of https://github.com/masatake/util-linux
* 'minor-changes-about-new-filter' of https://github.com/masatake/util-linux:
lsfd: (man) document --list-columns as the way to list columns
lsfd: (man) refer to scols-filter(5)
libsmartcols: (man) fix typos
Karel Zak [Fri, 24 Nov 2023 09:21:36 +0000 (10:21 +0100)]
Merge branch 'lslocks--co-holders' of https://github.com/masatake/util-linux
* 'lslocks--co-holders' of https://github.com/masatake/util-linux:
tests: (lslocks) add cases testing HOLDERS column
tests: (cosmetic,lslocks) trim whitespaces at the end of line
tests: (test_mkfds::make-regular-file) add a new parameter, "dupfd"
lslocks: add HOLDERS column
lslocks: store list_add_tail when storing information extracted from /proc/$pid/fdinfo/$fd
tests: (test_mkfds) initialize a proper union member
xalloc.h: add new functions: xstrappend, xstrputc, xstrvfappend, and xstrfappend
lsfd: (refactor) make the code comparing struct lock objects reusable
lslocks: add a missing "break;" in a switch/case statement
lslocks: (preparation) add a fd number to the lock struct when loading lock info from /proc/$pid/fdinfo/$fd
lslocks: (refactor) use a tree for storing lock information extracted from /proc/$pid/fdinfo/$fd
lslocks: (refactor) make the data structure for storing lock information replacable