Karel Zak [Fri, 14 Jul 2017 08:51:14 +0000 (10:51 +0200)]
libfdisk: use BLKPG ioctls to inform kernel about changes
This patch introduces fdisk_reread_changes(). The function is
less invasive alternative to fdisk_reread_partition_table().
The new function uses BLKPG ioctls for modified partitions. The
another partitions are not affected. This solution allows to
successfully use fdisks on disk where some partitions are still use
(mounted). For example if you want to resize the last partition on the
device.
Karel Zak [Wed, 12 Jul 2017 12:35:53 +0000 (14:35 +0200)]
libblkid: don't use CDROM_GET_CAPABILITY ioctl for DM devices
For some reason kernel commit e980f62353c697cbf0c4325e43df6e44399aeb64
add extra warning when the ioctl is used for DM devices. It seems we
can avoid this ioctl when the device has dm/uuid.
Addresses: https://bugzilla.redhat.com/show_bug.cgi?id=1469532 Signed-off-by: Karel Zak <kzak@redhat.com>
Make whatisdb/manpage and usage() one-line descriptions match.
Also update the description; hwclock has evolved into much more
than reading and setting the Hardware Clock. It also sets the
System Clock, warps the System Clock, sets the kernel time
configurations, and more.
Signed-off-by: J William Piggott <elseifthen@gmx.com>
Karel Zak [Mon, 10 Jul 2017 10:51:53 +0000 (12:51 +0200)]
mount: remove extN from mount.8 man page
The e2fsprogs package contains ext4(5) man page with all necessary
information. We do not have to duplicate effort and maintain copy of
the extN mount options in our mount.8.
Karel Zak [Mon, 10 Jul 2017 08:42:49 +0000 (10:42 +0200)]
agetty: print /etc/issue on --skip-login
The current --skip-login implementation disables also issue file
printing. This is unexpected behavior as /etc/issue may contains
important information and we have --noissue for admins who don't want
it.
This patch forces /etc/issue printing if --noissue no specified.
Addresses: https://github.com/karelzak/util-linux/issues/480 Signed-off-by: Karel Zak <kzak@redhat.com>
Karel Zak [Mon, 10 Jul 2017 08:15:22 +0000 (10:15 +0200)]
Merge branch 'help' of https://github.com/rudimeier/util-linux
* 'help' of https://github.com/rudimeier/util-linux:
setpriv: silence compiler warning
misc: consolidate macro style USAGE_HELP_OPTIONS
blockdev: correct man page name in --help
coastal-hiker [Mon, 26 Jun 2017 16:40:28 +0000 (18:40 +0200)]
last: don't show negative time
Under strange circumstances, the output of command 'last reboot'
showed the last time as a negative time, with both the hours and the
mins value having a minus sign. Example, taken from my workstation:
$last reboot
[...]
reboot system boot 4.4.0-79-generic Wed Jun 14 09:20 - 07:33 (-1:-47)
[...]
I am aware this should happen only infrequently. Nevertheless, I
propose a more robust behaviour: show a minus sign only for the most
significant value (days or hours) and show the rest always as
positive. In the special case of ((secs < 0) && (secs >= -59)), print
mins as "-00".
Karel Zak [Tue, 4 Jul 2017 10:50:39 +0000 (12:50 +0200)]
login: use IPv4 on IPv4-mapping-to-IPv6
It seems that on some systems (e.g. RHEL7) the libc function
getaddrinfo() is not able to translate ::ffff: address to IPv4. The
result is 0.0.0.0 host address in the last(1) and utmpdump(1) output.
Not sure if this is about order of the getaddrinfo() results, system
configuration or libc version. It's irrelevant for login(1). We have
to be robust enough to write usable address to log files everywhere.
The solution is to detect IPv4-mapping-to-IPv6 and use IPv4 for utmp.
Addresses: https://bugzilla.redhat.com/show_bug.cgi?id=1296233 Signed-off-by: Karel Zak <kzak@redhat.com>
sys-utils/setpriv.c:182:32: warning: implicit conversion from enumeration type
'enum cap_type' to different enumeration type 'capng_type_t'
[-Wenum-conversion]
return capng_have_capability(which, i);
~~~~~~~~~~~~~~~~~~~~~ ^~~~~
Ruediger Meier [Wed, 28 Jun 2017 16:37:44 +0000 (18:37 +0200)]
hwclock: don't ifdef printf arguments
This may fails if printf() is macro, introduced in cc7cb070.
clang compiler warnings:
CC sys-utils/hwclock.o
../sys-utils/hwclock.c:1228:2: warning: embedding a directive within macro arguments has undefined behavior [-Wembedded-directive]
#ifdef __linux__
^
../sys-utils/hwclock.c:1230:2: warning: embedding a directive within macro arguments has undefined behavior [-Wembedded-directive]
#endif
^
2 warnings generated.
CC: J William Piggott <elseifthen@gmx.com> Signed-off-by: Ruediger Meier <ruediger.meier@ga-group.nl>
Ruediger Meier [Sat, 17 Jun 2017 20:40:41 +0000 (22:40 +0200)]
misc: avoid some dead initialization warnings
Clang analyzer warnings:
Dead store, Dead initialization:
lib/mbsedit.c:154:8: warning: Value stored to 'in' during its initialization is never read
char *in = (char *) &c;
^~ ~~~~~~~~~~~
misc-utils/findmnt-verify.c:129:14: warning: Value stored to 'cn' during its initialization is never read
const char *cn = tgt;
^~ ~~~
Dead store, Dead increment:
sys-utils/hwclock.c:1461:2: warning: Value stored to 'argv' is never read
argv += optind;
^ ~~~~~~
Ruediger Meier [Tue, 27 Jun 2017 18:33:28 +0000 (20:33 +0200)]
lscpu: make clang analyzer happy
Let read_nodes() work on uninitialized structs to silence these two
warnings:
CC sys-utils/lscpu-lscpu.o
warning: Path diagnostic report is not generated. Current output format does not support diagnostics that cross file boundaries. Refer to --analyzer-output for valid output formats
In file included from sys-utils/lscpu.c:63:
./include/xalloc.h:32:21: warning: Call to 'malloc' has an allocation size of 0 bytes
void *ret = malloc(size);
^~~~~~~~~~~~
sys-utils/lscpu.c:1468:23: warning: Function call argument is an uninitialized value
desc->nodemaps[i] = path_read_cpuset(maxcpus,
^~~~~~~~~~~~~~~~~~~~~~~~~
2 warnings generated.
Memory Error, Use-after-free
sys-utils/lsmem.c:259:3: warning: Use of memory after it is freed
err(EXIT_FAILURE, _("Failed to open %s"), path);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Carlos Santos [Thu, 29 Jun 2017 10:55:42 +0000 (07:55 -0300)]
column: fix compilation when libc lacks wide-character support
Commit 4762ae9d removed mtsafe_strtok() but left behind calls to wcstok
and wcspbrk. This leads to build failures when libc does not have the
wide-character functions, like some uClibc builds.
Solve the problem by using strtok_r and strpbrk when HAVE_WIDECHAR is
not defined.
Karel Zak [Thu, 29 Jun 2017 09:57:22 +0000 (11:57 +0200)]
wipefs: use libsmartcols
The old output is horrible and useless when more devices specified.
The old format is also too tricky if more signatures detected. The new
output uses one line for each signature, prefixed by device name.
Karel Zak [Wed, 28 Jun 2017 10:08:25 +0000 (12:08 +0200)]
wipefs: try another magic strings on -o and -t
The commit 92296e9ba2bf95259520fa7537ff8edc2aa9edbc introduces "try
all permutations for the same superblock". This feature has to be also
available if -o and -t is specified.
Karel Zak [Fri, 26 May 2017 11:11:37 +0000 (13:11 +0200)]
wipefs: print all signature permutations
The same FS/RAID/PT signature may be detected by more ways and on more
places on the device. The libblkid returns only the first detected
signature by default. This patch use blkid_probe_hide_range() to
re-scan device for all possible permutations of the same signature.
For example the default wipefs(8) output as well as --no-act output will
contains primary as well as backup GPT signature now.
Reported-by: Ruediger Meier <sweet_f_a@gmx.de> Signed-off-by: Karel Zak <kzak@redhat.com>
Karel Zak [Fri, 26 May 2017 10:58:09 +0000 (12:58 +0200)]
libblkid: allow to hide already detected signatures
The libblkid probing functions returns the first successful result of
the filesystem/RAID/PT. Unfortunately, some signatures is possible to
detect by more ways or device may contains more copies (e.g. GPT).
This is no problem when we wipe signatures from the device. In this
case we zeroize on-device signature and re-scan for the signature (by
blkid_probe_step_back()).
The problem is if we want to read all permutations without the device
modification (for example wipefs(8) dry run).
This patch add blkid_probe_hide_range(). The function remove (zeroize)
specified signature from in-memory cached buffers. If the buffer is
later re-used by probing functions then the signature is invisible and
we can try detect another variant of the magic string.
setpriv: support modifying the set of ambient capabilities
Right now, we do not support modifying the set of ambient capabilities,
which has been introduced quite recently with Linux 4.3. As libcap-ng
does not yet provide any ability to modify this set, we do have to roll
our own support via `prctl`, which is now easy to do due to the
indirections introduced in the preceding commits. We add a new command
line argument "--ambient-caps", which uses the same syntax as both
"--inh-caps" and "--bounding-set" to specify either adding or dropping
capabilities.
This commit also adjusts documentation to mention the newly introduced
ability to modify the ambient capability set.
Based on a patch by Andy Lutomirski.
Reviewed-by: Andy Lutomirski <luto@kernel.org> Signed-off-by: Patrick Steinhardt <ps@pks.im>
Our code dumping owned capabilities does not yet handle ambient
capabilities, which were only recently introduced with Linux 4.3. This
commit implements printing ambient capabilities if they're supported by
the system.
Based on a patch by Andy Lutomirski.
Reviewed-by: Andy Lutomirski <luto@kernel.org> Signed-off-by: Patrick Steinhardt <ps@pks.im>
libcap-ng provides a function to update capabilities with
`capng_update`. As libcap-ng has not yet been updated to enable
modification of ambient capabilities, we cannot use it to update this
set, though. In order to allow easily extending the logic to also handle
ambient capability sets, we create a new function `cap_update`. Right
now, it simply calls out to `capng_update` for all supported capability
types.
Reviewed-by: Andy Lutomirski <luto@kernel.org> Signed-off-by: Patrick Steinhardt <ps@pks.im>
setpriv: proxy function checking whether a capability is set
The loop in `print_caps` iterates over every capability, checks whether
it is set and, if so, prints out its name. Currently, the checking and
printing is rather intertwined, making it harder to extend the check
whether we own a capability.
Prepare code for the introduction of ambient capabilities by
disentangling the code checking for a capability and printing code. A
new function `has_cap` is introduced and `print_caps` will now simply
call out to it and only handle printing itself. This easily allows to
extend the capability check based on which capability set is queried.
Reviewed-by: Andy Lutomirski <luto@kernel.org> Signed-off-by: Patrick Steinhardt <ps@pks.im>
setpriv: introduce indirection for `capng_type` enum
The capng_type is used to distinguish the different types of capability
sets, that is the effective, inheratibale, permitted capabilities as
well as the capability bounding set. In Linux 4.3, a new set of
capabilities was introduced with ambient capabilities. Unfortunately,
libcap-ng does not provide any support for these kind of capabilities
and as such, we will have to roll our own support.
As a first step, we introduce an indirection for the `capng_type` enum,
allowing us to add the ambient capability type later on. Right now, no
functional change is expected from this change and in fact, each of the
newly introduce enums should have the same value as respective enum of
libcap-ng.
Reviewed-by: Andy Lutomirski <luto@kernel.org> Signed-off-by: Patrick Steinhardt <ps@pks.im>
Karel Zak [Tue, 27 Jun 2017 12:14:14 +0000 (14:14 +0200)]
Merge branch 'help-description' of https://github.com/rudimeier/util-linux
* 'help-description' of https://github.com/rudimeier/util-linux:
misc: update --help content again
login: add --help text
blockdev: improve --help and man page
misc: consolidate all --help option descriptions
misc: introduce print_usage_help_options()
misc: revert to the old USAGE_HELP strings
Ruediger Meier [Sun, 25 Jun 2017 20:01:12 +0000 (22:01 +0200)]
misc: update --help content again
We change
-h, --help display this help and exit
-V, --version output version information and exit
to
-h, --help display this help
-V, --version print version
Some thoughts about this:
* use "display" for --help because it matches better if we
would add pager support (like git --help)
* "print" for --version to be different
* "this" for --help is important to make clear that running
--help would not give you any better information than the
one you see already
* remove "information and exit" because it's bloat for the
short-help, everybody knows what it does if it exists
In the manpages we should use the old, longer but more correct
descriptions, inclusive a reminder if --help/--version are only
working when used as the only option. Note the term "version
information" indicates that we don't only print a single version
number.
CC: J William Piggott <elseifthen@gmx.com> Signed-off-by: Ruediger Meier <ruediger.meier@ga-group.nl>
Ruediger Meier [Sun, 25 Jun 2017 12:49:47 +0000 (14:49 +0200)]
misc: consolidate all --help option descriptions
Now we are always using the same text also for commands
which had still hardcoded descriptions or where we can't
use the standard print_usage_help_options macro.
Ruediger Meier [Sat, 24 Jun 2017 22:19:50 +0000 (00:19 +0200)]
misc: introduce print_usage_help_options()
Consolidate --help and --version descriptions. We are
now able to align them to the other options.
We changed include/c.h. The rest of this patch was
generated by sed, plus manually setting the right
alignment numbers. We do not change anything but
white spaces in the --help output.
Ruediger Meier [Tue, 27 Jun 2017 06:25:22 +0000 (08:25 +0200)]
tools: checkusage can dump all command output
use
$ make CU_DUMP=1 checkusage
for easily reviewing and comparing all output in
/tmp/checkusage--help
/tmp/checkusage--version
/tmp/checkusage--unknownopt
This was a big help when doing all my last usage cleanup.
Actually I used it to dump the original output, edited it
how I would like it, and then changed our programs to match
the wanted output.
Karel Zak [Mon, 26 Jun 2017 13:58:37 +0000 (15:58 +0200)]
Merge branch 'usage-part2' of https://github.com/rudimeier/util-linux
* 'usage-part2' of https://github.com/rudimeier/util-linux:
misc: cosmetics, remove argument from usage(FILE*)
misc: cosmetics, remove argument from usage(int)
misc: never use usage(stderr)
misc: never use usage(ERROR)
misc: cleanup and fix --unknownopt issues
flock, getopt: write --help to stdout and return 0
tools: add checkusage.sh
Sami Kerola [Sun, 18 Jun 2017 17:16:35 +0000 (17:16 +0000)]
uuidparse: add new command
This command will analyze and print information about UUID's. The command
is based on libuuid/src/uuid_time.c but modified to use libsmartcol.
[kzak@redhat.com: - minor coding style changes]
Reference: http://marc.info/?l=util-linux-ng&m=149735980715600&w=2 Signed-off-by: Sami Kerola <kerolasa@iki.fi> Signed-off-by: Karel Zak <kzak@redhat.com>
Ruediger Meier [Tue, 20 Jun 2017 18:20:29 +0000 (20:20 +0200)]
misc: cosmetics, remove argument from usage(FILE*)
This patch is trivial and changes nothing, because
we were always using usage(stdout)
Now all our usage() functions look very similar. If wanted we
could auto-generate another big cosmetical patch to remove all
the useless "FILE *out" constants and use printf and puts
rather than their f* friends. Such patch could be automatically
synchronized with the translation project (newlines!) to not
make the translators sick.
Ruediger Meier [Sun, 18 Jun 2017 22:02:44 +0000 (00:02 +0200)]
flock, getopt: write --help to stdout and return 0
... and use errtryhelp() instead of usage().
Note in past "getopt --help" returned 2. But it is otherwise
documented and was just a mistake IMO. See the unreachable exit(0)
which was removed here: d1d03b54
Ruediger Meier [Sun, 18 Jun 2017 13:19:39 +0000 (15:19 +0200)]
tools: add checkusage.sh
Just some simple generic tests for our UL commands, regarding
options --help, --version and --unknownopt.
The script looks still a bit weired but could be polished to
be used in tests/. It would be the first time testing at least
"something" for *all* built binaries (currently 109! commands).
For the record here are the current candidates with possible
problems:
$ make checkusage
agetty: --unknownopt, stderr too long: 45
blockdev: --unknownopt, stderr too long: 28
flock: --help, no stdout
flock: --help, non-empty stderr
getopt: --help, returns error
kill: --unknownopt, stderr too short: 1
lsipc: --unknownopt, stderr too long: 77
pg: --unknownopt, stderr too long: 23
renice: --unknownopt, stderr too long: 18
rtcwake: --unknownopt, non-empty stdout
rtcwake: --unknownopt, stderr too long: 21
sulogin: --unknownopt, stderr too long: 17
write: --unknownopt, stderr too long: 12
Karel Zak [Mon, 26 Jun 2017 11:56:45 +0000 (13:56 +0200)]
Merge branch '170622' of github.com:jwpi/util-linux
* '170622' of github.com:jwpi/util-linux:
Docs: move option naming to howto-contribute.txt
Docs: update howto-usage-function.txt
Docs: add a comment for constants to boilerplate.c
include/c.h: add USAGE_COMMANDS and USAGE_COLUMNS