ldconfig(8): check for no-args command line after options are parsed

Default action for ldconfig is specified as -R AKA 'append', and for
no-args (without options changing default actions), ldconfig should
append empty list of directories to current list.  But because the check
was done before options were parsed out, presence of any option turned
off default rescan.

As result, innocently-looked commands like `ldconfig -v' were interpreted
as setting directory hints list to one specified on the command line,
i.e. empty.

Reported by:	https://github.com/mesonbuild/meson/issues/9592
Reviewed by:	emaste
Tested by:	jbeich
Sponsored by:	The FreeBSD Foundation
MFC after:	1 week
Differential revision:	https://reviews.freebsd.org/D33058
This commit is contained in:
Konstantin Belousov 2021-11-19 06:07:58 +02:00
parent af91158706
commit 3ede04c78c

View File

@ -90,9 +90,7 @@ main(int argc, char **argv)
hints_file = _PATH_ELF32_HINTS;
else
hints_file = _PATH_ELF_HINTS;
if (argc == 1)
rescan = true;
else while((c = getopt(argc, argv, "Rf:imrsv")) != -1) {
while((c = getopt(argc, argv, "Rf:imrsv")) != -1) {
switch (c) {
case 'R':
rescan = true;
@ -121,11 +119,14 @@ main(int argc, char **argv)
}
}
if (justread)
if (justread) {
list_elf_hints(hints_file);
else
} else {
if (argc == optind)
rescan = true;
update_elf_hints(hints_file, argc - optind,
argv + optind, merge || rescan);
}
exit(0);
}