git: 3ede04c78c7c - main - ldconfig(8): check for no-args command line after options are parsed
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Wed, 24 Nov 2021 23:56:24 UTC
The branch main has been updated by kib:
URL: https://cgit.FreeBSD.org/src/commit/?id=3ede04c78c7c726ed79a39d22c65a58d0ecc5d00
commit 3ede04c78c7c726ed79a39d22c65a58d0ecc5d00
Author: Konstantin Belousov <kib@FreeBSD.org>
AuthorDate: 2021-11-19 04:07:58 +0000
Commit: Konstantin Belousov <kib@FreeBSD.org>
CommitDate: 2021-11-24 23:55:04 +0000
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
---
sbin/ldconfig/ldconfig.c | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/sbin/ldconfig/ldconfig.c b/sbin/ldconfig/ldconfig.c
index 288c22813121..b039412a648b 100644
--- a/sbin/ldconfig/ldconfig.c
+++ b/sbin/ldconfig/ldconfig.c
@@ -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);
}