From nobody Thu Oct 30 10:38:50 2025 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4cy0vv2yv1z6FSlr; Thu, 30 Oct 2025 10:38:51 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R12" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4cy0vt6tDnz41QL; Thu, 30 Oct 2025 10:38:50 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1761820731; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=Y5sMP+zZLQy6Pwxl57cuhBTc5lu/NxBUAdvp42jF2XQ=; b=hKz9XfrQgV9qhoNGNkFyeo/3kpdI1m3HoYR7TmuN0pRM3V8Mxsky+yBdc7rMNyOi+6OhML +PwYAhs8Y5KtX33mQrbPE3wvXeRT7m6RwIJbrUMIF9k1rnjR5YuBpWCh4TLGNwuGiJIAjx SUfgakvU6P0KbvSrJ7Q4jSEfv7lwnOpqw4IdeO2Cspb+lCWgUb7+FGM9CvXdd46GonBR98 DQOj2xDlzugSRozh5pHDB6nij+J+mzGTp35rcX1tsn9+T4U9cUb7elm/EsErJ7NkOutd/W o6djFIfmWlhjgKVoNBvKzmxxGlALTNe59xvGd0APaSy3TTJos9KtyDInJFPp7Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1761820731; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=Y5sMP+zZLQy6Pwxl57cuhBTc5lu/NxBUAdvp42jF2XQ=; b=ISl3HwYtuPuoq3hCGCChNeeCnuNHSgmVrT8njRmGdbZ6lyVAJrcHho8Qd2N+bgreny1aAM SbHPagOWLkuPNF3a383xXzcKVGYzzw5E/VRl/bL1hb34G+KyyoACSzLWvDH0ghZNr3z4CA 1EXmNOZruV6cR4Z8TqGipp1DJY/NRVxWoFAcbunTVgowSSMVCeFS4kYWJI30T4CxBxCko6 EwM1QxrlvE79XmZaBWbqCsNiIlwJgFq/M4dNPSUcGdqJ52mm8dx7ch/ZKEeAto+/NbGXfQ F5O50P5SzgH4DzS6prQ6fgDd0+JR+NQmxZAkpEe+isBHTGFKtaZKepxSxAD+Dw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1761820731; a=rsa-sha256; cv=none; b=k3wAjZHg8kdJZf4dcxWGQb/Cgmbq9Nddl0kjAZ+aNGHoFN7f/N11/1AapDKg5YcqNdEQoq EpghepBTWEGSSL4TteC2UKuwF7rLZyxTYVII+nFtdfwWCSmi7htM86jHbHju0AT9Sk9f8T pUFjBX6XRwl2/flivRSo3nSl7XUUFO4OsvP9WFjBFj0V+vyVTrL70NtSewCPEOFY7Pw50n YvNOg8ak89LWiMqNDH6OfZ2ABJIuM6fOpwkiZTDc5etulEtFvcsa3LWFHpyW5efGYsjLFU zMw8hhySNrH2o0PyolOXc5zmGkmhCIOjsCySYWKiptS8VHL1pTwnMYRs0vmh3w== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4cy0vt6Pm2z3wP; Thu, 30 Oct 2025 10:38:50 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 59UAcoDq082703; Thu, 30 Oct 2025 10:38:50 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 59UAcoFS082699; Thu, 30 Oct 2025 10:38:50 GMT (envelope-from git) Date: Thu, 30 Oct 2025 10:38:50 GMT Message-Id: <202510301038.59UAcoFS082699@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Dag-Erling =?utf-8?Q?Sm=C3=B8rgrav?= Subject: git: c071bcda44b7 - stable/14 - id: Add -d and -s options List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: des X-Git-Repository: src X-Git-Refname: refs/heads/stable/14 X-Git-Reftype: branch X-Git-Commit: c071bcda44b792d8abc36d1315a9b4152c5cbda2 Auto-Submitted: auto-generated The branch stable/14 has been updated by des: URL: https://cgit.FreeBSD.org/src/commit/?id=c071bcda44b792d8abc36d1315a9b4152c5cbda2 commit c071bcda44b792d8abc36d1315a9b4152c5cbda2 Author: Dag-Erling Smørgrav AuthorDate: 2025-10-28 16:51:56 +0000 Commit: Dag-Erling Smørgrav CommitDate: 2025-10-30 10:38:19 +0000 id: Add -d and -s options These options may not be combined with any other options and print the current or specified user's home directory and shell respectively. Reviewed by: imp, bcr Differential Revision: https://reviews.freebsd.org/D53301 (cherry picked from commit f41b1eb637f576634be0df9d657f46aa57afea59) --- usr.bin/id/id.1 | 28 +++++++++++++++++++++++++--- usr.bin/id/id.c | 48 +++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 70 insertions(+), 6 deletions(-) diff --git a/usr.bin/id/id.1 b/usr.bin/id/id.1 index eab875c635ef..a03926e702e4 100644 --- a/usr.bin/id/id.1 +++ b/usr.bin/id/id.1 @@ -30,7 +30,7 @@ .\" .\" @(#)id.1 8.1 (Berkeley) 6/6/93 .\" -.Dd March 5, 2011 +.Dd October 23, 2025 .Dt ID 1 .Os .Sh NAME @@ -52,12 +52,18 @@ .Nm .Fl c .Nm +.Fl d +.Op Ar user +.Nm .Fl g Op Fl nr .Op Ar user .Nm .Fl p .Op Ar user .Nm +.Fl s +.Op Ar user +.Nm .Fl u Op Fl nr .Op Ar user .Sh DESCRIPTION @@ -92,6 +98,8 @@ Ignored for compatibility with other implementations. .It Fl c Display current login class. +.It Fl d +Display the home directory of the current or specified user. .It Fl g Display the effective group ID as a number. .It Fl n @@ -130,6 +138,8 @@ Display the real ID for the and .Fl u options instead of the effective ID. +.It Fl s +Display the shell of the current or specified user. .It Fl u Display the effective user ID as a number. .El @@ -176,8 +186,20 @@ bob pts/5 Dec 4 19:51 .Sh STANDARDS The .Nm -function is expected to conform to -.St -p1003.2 . +utility is expected to conform to +.St -p1003.1-2024 . +The +.Fl A , +.Fl M , +.Fl P , +.Fl c , +.Fl d , +.Fl p , +and +.Fl s +options are +.Fx +extensions. .Sh HISTORY The historic diff --git a/usr.bin/id/id.c b/usr.bin/id/id.c index 818b53a04e2d..238c6f2bf709 100644 --- a/usr.bin/id/id.c +++ b/usr.bin/id/id.c @@ -67,6 +67,8 @@ static void auditid(void); #endif static void group(struct passwd *, bool); static void maclabel(void); +static void dir(struct passwd *); +static void shell(struct passwd *); static void usage(void); static struct passwd *who(char *); @@ -81,7 +83,7 @@ main(int argc, char *argv[]) bool Aflag; #endif bool Gflag, Mflag, Pflag; - bool cflag, gflag, nflag, pflag, rflag, uflag; + bool cflag, dflag, gflag, nflag, pflag, rflag, sflag, uflag; int ch, combo, error, id; const char *myname, *optstr; char loginclass[MAXLOGNAME]; @@ -90,10 +92,10 @@ main(int argc, char *argv[]) Aflag = false; #endif Gflag = Mflag = Pflag = false; - cflag = gflag = nflag = pflag = rflag = uflag = false; + cflag = dflag = gflag = nflag = pflag = rflag = sflag = uflag = false; myname = getprogname(); - optstr = "AGMPacgnpru"; + optstr = "AGMPacdgnprsu"; if (strcmp(myname, "groups") == 0) { isgroups = true; optstr = ""; @@ -126,6 +128,9 @@ main(int argc, char *argv[]) case 'c': cflag = true; break; + case 'd': + dflag = true; + break; case 'g': gflag = true; break; @@ -138,6 +143,9 @@ main(int argc, char *argv[]) case 'r': rflag = true; break; + case 's': + sflag = true; + break; case 'u': uflag = true; break; @@ -154,6 +162,8 @@ main(int argc, char *argv[]) usage(); combo = Aflag + Gflag + Mflag + Pflag + gflag + pflag + uflag; + if (combo + dflag + sflag > 1) + usage(); if (combo > 1) usage(); if (combo == 0 && (nflag || rflag)) @@ -197,6 +207,11 @@ main(int argc, char *argv[]) exit(0); } + if (dflag) { + dir(pw); + exit(0); + } + if (Gflag) { group(pw, nflag); exit(0); @@ -217,6 +232,11 @@ main(int argc, char *argv[]) exit(0); } + if (sflag) { + shell(pw); + exit(0); + } + id_print(pw); exit(0); } @@ -476,6 +496,26 @@ pline(struct passwd *pw) pw->pw_dir, pw->pw_shell); } +static void +dir(struct passwd *pw) +{ + if (pw == NULL) { + if ((pw = getpwuid(getuid())) == NULL) + err(1, "getpwuid"); + } + printf("%s\n", pw->pw_dir); +} + +static void +shell(struct passwd *pw) +{ + if (pw == NULL) { + if ((pw = getpwuid(getuid())) == NULL) + err(1, "getpwuid"); + } + printf("%s\n", pw->pw_shell); +} + static void usage(void) { @@ -493,8 +533,10 @@ usage(void) " id -M\n" " id -P [user]\n" " id -c\n" + " id -d [user]\n" " id -g [-nr] [user]\n" " id -p [user]\n" + " id -s [user]\n" " id -u [-nr] [user]\n"); exit(1); }