home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / unix / volume26 / idutil / getgrgid.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-06-12  |  2.1 KB  |  116 lines

  1. #include <stdio.h>
  2. #include <errno.h>
  3. #include <grp.h>
  4. #include "grinf.h"
  5. #include <gnu/fileutil.h>
  6.  
  7. static char *RCSid="$Header: getgrgid.c,v 1.6 92/02/25 13:59:51 dtb Exp $";
  8.  
  9. int     fpr_usage();
  10. int    process_it();
  11. static char     *trim_main_name;
  12.  
  13. static int     report_except = 0;
  14. static char     all_found     = 1;
  15.  
  16. int    main ( argc, argv, envp )
  17. int    argc;
  18. char    **argv;
  19. char    **envp;
  20. {
  21.     char        *optstring = "ad:e:Igmnprv" ;
  22.     int        optchar;
  23.     extern char    *optarg;
  24.     extern int    optind;
  25.     extern int     opterr;
  26.     struct grinfrq     *grinf;
  27.  
  28.     trim_main_name = basename(*argv);
  29.     if ((grinf = grinfrq_set_dflt (NULL)) == NULL)
  30.         exit (ENOMEM);
  31.     opterr = 0;
  32.     while ((optchar = getopt(argc, argv, optstring)) != -1)
  33.         switch (optchar) {
  34.         case 'I':
  35.             fprintf (stderr, "%s %s\n", __FILE__, RCSid);
  36.             grinf_info_fpr (stderr);
  37.             break;
  38.         case 'a':
  39.             grinf->epw = grinf->nam = grinf->mem = grinf->gid = 1;
  40.             break;
  41.         case 'd':
  42.             grinf->dlm = *optarg;
  43.             break;
  44.         case 'e' :
  45.             grinf->mdl = *optarg;
  46.             break;
  47.         case 'g':
  48.             grinf->gid = 1;
  49.             break;
  50.         case 'm':
  51.             grinf->mem = 1;
  52.             break;
  53.         case 'n':
  54.             grinf->nam = 1;
  55.             break;
  56.         case 'p':
  57.             grinf->epw = 1;
  58.             break;
  59.         case 'r':
  60.             report_except = 1;
  61.             break;
  62.         case 'v':
  63.             grinf->vbs = 1;
  64.             break;
  65.         case '?':
  66.             fpr_usage (stderr);
  67.             exit (EINVAL);
  68.         }
  69.     if (optind == argc)
  70.         process_it (getegid(), grinf);
  71.     while (optind < argc) {
  72.         int     gid;
  73.         if (sscanf(*(argv+optind), "%d", &gid) != 1) {
  74.             fprintf (stderr, "%s: %s not a valid integer\n",
  75.                 trim_main_name, *(argv+optind));
  76.             exit (EINVAL);
  77.         }
  78.         process_it (gid, grinf);
  79.         optind++;
  80.     }
  81.     exit (all_found ? 0 : 1);
  82. }
  83.  
  84.  
  85. int    process_it( grpgid, grinf)
  86. int    grpgid;
  87. struct     grinfrq     *grinf;
  88. {
  89.     struct     group *gp;
  90.     int     nout = 0;
  91.  
  92.     if (( gp = (struct group *) getgrgid (grpgid) ) == NULL) {
  93.         all_found = 0;
  94.         if (report_except) {
  95.             fprintf (stderr, "%s: could not find group %d\n",
  96.             trim_main_name, grpgid);
  97.         }
  98.     } else {
  99.         nout = grinf_fpr (stdout, gp, grinf);
  100.     }
  101.     return (nout);
  102. }
  103.  
  104.  
  105. int     fpr_usage (fp)
  106. FILE     *fp;
  107. {
  108.     int     nout = 0;
  109.     nout += fprintf (stderr, 
  110.         "Usage: %s [-%s] [-%s] [-%s] grpname [...]\n",
  111.         trim_main_name,
  112.         "Iagmnprv", "d char", "e char" );
  113.     return (nout);
  114. }
  115.  
  116.