Date: Thu, 30 Oct 2025 10:38:01 GMT From: Dag-Erling =?utf-8?Q?Sm=C3=B8rgrav?= <des@FreeBSD.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org Subject: git: eff786f23611 - stable/15 - id: Add -d and -s options Message-ID: <202510301038.59UAc1Ui082123@gitrepo.freebsd.org>
index | next in thread | raw e-mail
The branch stable/15 has been updated by des: URL: https://cgit.FreeBSD.org/src/commit/?id=eff786f23611582e518f038e4086a1306c019d23 commit eff786f23611582e518f038e4086a1306c019d23 Author: Dag-Erling Smørgrav <des@FreeBSD.org> AuthorDate: 2025-10-28 16:51:56 +0000 Commit: Dag-Erling Smørgrav <des@FreeBSD.org> CommitDate: 2025-10-30 10:37:36 +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 b8dafb6650b0..62c941f84798 100644 --- a/usr.bin/id/id.1 +++ b/usr.bin/id/id.1 @@ -28,7 +28,7 @@ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.Dd March 5, 2011 +.Dd October 23, 2025 .Dt ID 1 .Os .Sh NAME @@ -50,12 +50,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 @@ -90,6 +96,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 @@ -128,6 +136,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 @@ -174,8 +184,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 a326aa14c7c7..5f9d2670caa3 100644 --- a/usr.bin/id/id.c +++ b/usr.bin/id/id.c @@ -55,6 +55,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 *); @@ -69,7 +71,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]; @@ -78,10 +80,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 = ""; @@ -114,6 +116,9 @@ main(int argc, char *argv[]) case 'c': cflag = true; break; + case 'd': + dflag = true; + break; case 'g': gflag = true; break; @@ -126,6 +131,9 @@ main(int argc, char *argv[]) case 'r': rflag = true; break; + case 's': + sflag = true; + break; case 'u': uflag = true; break; @@ -142,6 +150,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)) @@ -185,6 +195,11 @@ main(int argc, char *argv[]) exit(0); } + if (dflag) { + dir(pw); + exit(0); + } + if (Gflag) { group(pw, nflag); exit(0); @@ -205,6 +220,11 @@ main(int argc, char *argv[]) exit(0); } + if (sflag) { + shell(pw); + exit(0); + } + id_print(pw); exit(0); } @@ -464,6 +484,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) { @@ -481,8 +521,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); }home | help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202510301038.59UAc1Ui082123>
