home *** CD-ROM | disk | FTP | other *** search
- #include <stdio.h>
- #include <errno.h>
- #include <pwd.h>
- #include <gnu/fileutil.h>
- #include "pwinf.h"
-
- static char *RCSid="$Header: getpwuid.c,v 1.3 92/02/25 14:00:10 dtb Exp $";
-
- int fpr_usage();
- int process_it();
-
- static int report_except = 0;
- static char all_found = 1;
- static char *trim_main_name;
-
- int main ( argc, argv, envp )
- int argc;
- char **argv;
- char **envp;
- {
- char *optstring = "acd:Ighnprsuv" ;
- int optchar;
- extern char *optarg;
- extern int optind;
- extern int opterr;
- struct pwinfrq *pwinf;
-
- trim_main_name = basename(*argv);
- if ((pwinf = pwinfrq_set_dflt (NULL)) == NULL)
- exit (ENOMEM);
- opterr = 0;
- while ((optchar = getopt(argc, argv, optstring)) != -1)
- switch (optchar) {
- case 'I':
- fprintf (stderr, "%s %s\n", __FILE__, RCSid);
- pwinf_info_fpr (stderr);
- break;
- case 'a':
- pwinf->epw = pwinf->nam = pwinf->uid = pwinf->gid
- = pwinf->age = pwinf->cmt = pwinf->dir
- = pwinf->shl = 1;
- break;
- case 'c':
- pwinf->cmt = 1;
- break;
- case 'd':
- pwinf->dlm = *optarg;
- break;
- case 'g':
- pwinf->gid = 1;
- break;
- case 'h':
- pwinf->dir = 1;
- break;
- case 'n':
- pwinf->nam = 1;
- break;
- case 'p':
- pwinf->epw = 1;
- break;
- case 'r':
- report_except = 1;
- break;
- case 's':
- pwinf->shl = 1;
- break;
- case 'u':
- pwinf->uid = 1;
- break;
- case 'v':
- pwinf->vbs = 1;
- break;
- case '?':
- fpr_usage (stderr);
- exit (EINVAL);
- }
- if (optind == argc)
- process_it (geteuid(), pwinf);
- while (optind < argc) {
- int uid;
- if (sscanf(*(argv+optind), "%d", &uid) != 1) {
- fprintf (stderr, "%s: %s not a valid integer\n",
- trim_main_name, *(argv+optind));
- exit (EINVAL);
- }
- process_it (uid, pwinf);
- optind++;
- }
- exit (all_found ? 0 : 1);
-
- }
-
-
- int process_it( uid, pwinf)
- int uid;
- struct pwinfrq *pwinf;
- {
- struct passwd *pwent;
- int nout = 0;
-
- pwent = (struct passwd *) getpwuid ( uid );
- if ( pwent == NULL) {
- all_found = 0;
- if (report_except) {
- fprintf (stderr, "%s: could not find user %d\n",
- trim_main_name, uid);
- }
- } else {
- nout = pwinf_fpr (stdout, pwent, pwinf);
- }
- return (nout);
- }
-
-
- int fpr_usage (fp)
- FILE *fp;
- {
- int nout = 0;
- nout += fprintf (stderr,
- "Usage: %s [-%s] [-%s] usrid [...]\n",
- trim_main_name,
- "Iacghnprsuv", "d char" );
- return (nout);
- }
-
-