git: 4b04f5d7e8a2 - main - install: Fix METALOG ouptut for numeric -o and -g args
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 21 Jan 2025 12:48:03 UTC
The branch main has been updated by emaste: URL: https://cgit.FreeBSD.org/src/commit/?id=4b04f5d7e8a2bb0488ad5804ecaf45cef5b1d46f commit 4b04f5d7e8a2bb0488ad5804ecaf45cef5b1d46f Author: Ed Maste <emaste@FreeBSD.org> AuthorDate: 2025-01-17 19:14:22 +0000 Commit: Ed Maste <emaste@FreeBSD.org> CommitDate: 2025-01-21 12:47:48 +0000 install: Fix METALOG ouptut for numeric -o and -g args install's -o and -g flags both accept a name or a numeric argument. In -U -M (non-root METALOG) mode it always emitted uname= and gname= in the METALOG, but these are not appropriate for numeric IDs. If the -o and/or -u arguments parse as an ID, emit uid= and/or gid= respectively. Note that if an argument is valid as both a name and numeric ID we will prefer the name in normal (non -U -M) mode and the ID in -U -M mode. We don't want to require a passwd db in non-root mode, and entirely-numeric user or group names are a terrible idea so just accept this discrepancy. PR: 284119 Reviewed by: jlduran Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D48504 --- usr.bin/xinstall/xinstall.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/usr.bin/xinstall/xinstall.c b/usr.bin/xinstall/xinstall.c index d0fcda340034..02b3eeccf8a7 100644 --- a/usr.bin/xinstall/xinstall.c +++ b/usr.bin/xinstall/xinstall.c @@ -1432,10 +1432,22 @@ metadata_log(const char *path, const char *type, struct timespec *ts, p = buf; /* Print details. */ fprintf(metafp, ".%s%s type=%s", *p ? "/" : "", p, type); - if (owner) - fprintf(metafp, " uname=%s", owner); - if (group) - fprintf(metafp, " gname=%s", group); + if (owner) { + id_t id; + + if (parseid(owner, &id)) + fprintf(metafp, " uid=%jd", (intmax_t)id); + else + fprintf(metafp, " uname=%s", owner); + } + if (group) { + id_t id; + + if (parseid(group, &id)) + fprintf(metafp, " gid=%jd", (intmax_t)id); + else + fprintf(metafp, " gname=%s", group); + } fprintf(metafp, " mode=%#o", mode); if (slink) { strsnvis(buf, buflen, slink, VIS_CSTYLE, extra);