From owner-freebsd-hackers Wed May 9 8:45:33 2001 Delivered-To: freebsd-hackers@freebsd.org Received: from rafiu.psi-domain.co.uk (rafiu.psi-domain.co.uk [212.87.84.199]) by hub.freebsd.org (Postfix) with ESMTP id 2969137B423 for ; Wed, 9 May 2001 08:45:22 -0700 (PDT) (envelope-from heckfordj@psi-domain.co.uk) Received: from smtp.psi-domain.co.uk (mail.trident-uk.co.uk [195.166.16.10]) by rafiu.psi-domain.co.uk (Postfix) with SMTP id CE814402EC6; Wed, 9 May 2001 16:17:37 +0100 (BST) Date: Wed, 9 May 2001 17:20:58 +0100 From: Jamie Heckford To: Peter Pentchev Cc: freebsd-hackers@freebsd.org Subject: Re: bin/27205: Listing all users in the passwd file Message-ID: <20010509172058.E5971@storm.psi-domain.co.uk> Reply-To: heckfordj@psi-domain.co.uk References: <20010508153202.9C4B5402EC6@rafiu.psi-domain.co.uk> <5.1.0.14.2.20010509171743.03e700c0@mail.gothic.net.au> <20010509105612.A4112@storm.psi-domain.co.uk> <20010509173744.F645@ringworld.oblivion.bg> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit In-Reply-To: <20010509173744.F645@ringworld.oblivion.bg>; from roam@orbitel.bg on Wed, May 09, 2001 at 15:37:44 +0100 X-Mailer: Balsa 1.1.1 Lines: 267 Sender: owner-freebsd-hackers@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG Yup, thats the sort of thing I meant. Worthy of a review by any of the commiters? I can remember a big thing going around about modifications to existing programs a couple of weeks ago, this was not intended to upset / annoy / start a flame war anyone! :) Jamie On 2001.05.09 15:37 Peter Pentchev wrote: > I'd think id(1) would be a more proper place, as it already knows how to > format various passwd(5) and group(5) information. > > How about the attached patch? (and I'm probably starting another of > those > bikesheds as to whether new options should be added to existing > utilities..) > > G'luck, > Peter > > -- > This sentence contains exactly threee erors. > > On Wed, May 09, 2001 at 10:56:12AM +0100, Jamie Heckford wrote: > > Good points, glad to see the usual FreeBSD approach of allowing > > only the best into the code ;) > > > > Some sort of wrapper makes perfect sense for the sendmail option - > > I did think of this, but your right, it is best to assume the > > "user-friendly" approach > > and not give users tweaking to do out of the box. > > > > Could be a possibilty of adding it as a switch / option to pw(8), with > > NIS capabilities? (Rewritten in C of course) Would this be deemed > useful > > and anyone happy to review a patch? > [snip] > > > > > > > >I discovered the following awk script that prints out all users on > the > > > system > > > >(from /etc/passwd). (Courtesy of sendmail.org) > > > > > > > >awk -F: '$3 > 100 { print $1 }' /etc/passwd > > > > > > > >Which will print out a list of all users in the passwd file wuth a > UID > > > greater > > > >than 100. > > > > > > > >Could this be turned into a command such as "userlist", and/or would > it > > > be > > > >deemed usefull? > > > > > > Not particularly, as it doesn't work with NIS, and won't work with > > > nsswitch.conf. > > > > > > A small perl script or C program using getpwent() in a loop is more > > > effective, as it takes into account both NIS and nsswitch.conf > > Index: src/usr.bin/id/id.1 > =================================================================== > RCS file: /home/ncvs/src/usr.bin/id/id.1,v > retrieving revision 1.9 > diff -u -r1.9 id.1 > --- src/usr.bin/id/id.1 2000/11/20 19:20:48 1.9 > +++ src/usr.bin/id/id.1 2001/05/09 14:33:53 > @@ -43,21 +43,28 @@ > .Nd return user identity > .Sh SYNOPSIS > .Nm > +.Op Fl a > .Op Ar user > .Nm > -.Fl G Op Fl n > +.Fl G Op Fl an > .Op Ar user > .Nm > .Fl P > +.Op Fl a > .Op Ar user > .Nm > -.Fl g Op Fl nr > +.Fl g > +.Op Fl a | Fl r > +.Op Fl n > .Op Ar user > .Nm > .Fl p > +.Op Fl a > .Op Ar user > .Nm > -.Fl u Op Fl nr > +.Fl u > +.Op Fl a | Fl r > +.Op Fl n > .Op Ar user > .Sh DESCRIPTION > The > @@ -80,6 +87,10 @@ > as white-space separated numbers, in no particular order. > .It Fl P > Display the id as a password file entry. > +.It Fl a > +Display information about all system users, not just about the calling > process. > +This flag cannot be used together with > +.Fl r . > .It Fl g > Display the effective group ID as a number. > .It Fl n > @@ -118,6 +129,8 @@ > and > .Fl u > options instead of the effective ID. > +This flag cannot be used together with > +.Fl a . > .It Fl u > Display the effective user ID as a number. > .El > Index: src/usr.bin/id/id.c > =================================================================== > RCS file: /home/ncvs/src/usr.bin/id/id.c,v > retrieving revision 1.12 > diff -u -r1.12 id.c > --- src/usr.bin/id/id.c 1999/09/06 20:07:12 1.12 > +++ src/usr.bin/id/id.c 2001/05/09 14:33:53 > @@ -55,6 +55,9 @@ > #include > #include > > +int Gflag, Pflag, aflag, gflag, id, nflag, pflag, rflag, uflag; > + > +int id_doit __P((struct passwd *)); > void current __P((void)); > void pline __P((struct passwd *)); > void pretty __P((struct passwd *)); > @@ -69,12 +72,10 @@ > int argc; > char *argv[]; > { > - struct group *gr; > struct passwd *pw; > - int Gflag, Pflag, ch, gflag, id, nflag, pflag, rflag, uflag; > + int ch; > > - Gflag = Pflag = gflag = nflag = pflag = rflag = uflag = 0; > - while ((ch = getopt(argc, argv, "PGgnpru")) != -1) > + while ((ch = getopt(argc, argv, "PGagnpru")) != -1) > switch(ch) { > case 'G': > Gflag = 1; > @@ -82,6 +83,9 @@ > case 'P': > Pflag = 1; > break; > + case 'a': > + aflag = 1; > + break; > case 'g': > gflag = 1; > break; > @@ -104,6 +108,9 @@ > argc -= optind; > argv += optind; > > + if (aflag && (rflag || (argc != 0))) > + usage(); > + > switch(Gflag + Pflag + gflag + pflag + uflag) { > case 1: > break; > @@ -115,7 +122,20 @@ > usage(); > } > > - pw = *argv ? who(*argv) : NULL; > + if (!aflag) { > + pw = *argv ? who(*argv) : NULL; > + id_doit(pw); > + } else { > + while ((pw = getpwent()) != NULL) > + id_doit(pw); > + } > +} > + > +int > +id_doit(pw) > + struct passwd *pw; > +{ > + struct group *gr; > > if (gflag) { > id = pw ? pw->pw_gid : rflag ? getgid() : getegid(); > @@ -123,7 +143,7 @@ > (void)printf("%s\n", gr->gr_name); > else > (void)printf("%u\n", id); > - exit(0); > + return (0); > } > > if (uflag) { > @@ -132,29 +152,29 @@ > (void)printf("%s\n", pw->pw_name); > else > (void)printf("%u\n", id); > - exit(0); > + return (0); > } > > if (Gflag) { > group(pw, nflag); > - exit(0); > + return (0); > } > > if (Pflag) { > pline(pw); > - exit(0); > + return (0); > } > > if (pflag) { > pretty(pw); > - exit(0); > + return (0); > } > > if (pw) > user(pw); > - else > + else if (!aflag) > current(); > - exit(0); > + return (0); > } > > void > > To Unsubscribe: send mail to majordomo@FreeBSD.org > with "unsubscribe freebsd-hackers" in the body of the message > > -- Jamie Heckford Network Operations Manager Psi-Domain - Innovative Linux Solutions. Ask Us How. FreeBSD - The power to serve Join our mailing list and stay informed by emailing majordomo@psi-domain.co.uk with the line: subscribe collective ===================================== email: heckfordj@psi-domain.co.uk web: http://www.psi-domain.co.uk/ tel: +44 (0)1737 789 246 fax: +44 (0)1737 789 245 mobile: +44 (0)7866 724 224 ===================================== To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-hackers" in the body of the message