1 /*
   2  * CDDL HEADER START
   3  *
   4  * The contents of this file are subject to the terms of the
   5  * Common Development and Distribution License, Version 1.0 only
   6  * (the "License").  You may not use this file except in compliance
   7  * with the License.
   8  *
   9  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
  10  * or http://www.opensolaris.org/os/licensing.
  11  * See the License for the specific language governing permissions
  12  * and limitations under the License.
  13  *
  14  * When distributing Covered Code, include this CDDL HEADER in each
  15  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  16  * If applicable, add the following below this CDDL HEADER, with the
  17  * fields enclosed by brackets "[]" replaced with your own identifying
  18  * information: Portions Copyright [yyyy] [name of copyright owner]
  19  *
  20  * CDDL HEADER END
  21  */
  22 /*
  23  * Copyright 2017 Gary Mills
  24  * Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
  25  * Use is subject to license terms.
  26  */
  27 
  28 /*      Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T     */
  29 /*        All Rights Reserved   */
  30 
  31 
  32 #include        "uucp.h"
  33 
  34 #define MAXLENGTH 256
  35 #define C_MAX     512
  36 
  37 static void insert();
  38 void rproc(), uproc();
  39 
  40 static char  Nnament[MAXLENGTH][NAMESIZE];
  41 static char *Nptr[MAXLENGTH];
  42 static short Nnames = 0;
  43 
  44 int
  45 main(argc, argv)
  46 int argc;
  47 char **argv;
  48 {
  49         int c, i, uopt = 0;
  50         char prev[2 * NAMESIZE];
  51 
  52         if (eaccess(GRADES, 04) == -1) {
  53                 (void) fprintf(stderr, "No administrator defined service grades available on this machine, use single letter/number only\n");
  54                 exit(0);
  55         }
  56 
  57         while ((c = getopt(argc, argv, "x:u")) != EOF)
  58                 switch(c) {
  59                 case 'u':
  60                         uopt++;
  61                         break;
  62                 case 'x':
  63                         Debug = atoi(optarg);
  64                         if (Debug < 0)
  65                                 Debug = 1;
  66                         break;
  67                 default:
  68                         (void) fprintf(stderr, "usage: uuglist [-u] [-xLEVEL]\n");
  69                         exit(-1);
  70                 }
  71 
  72         if (uopt) {
  73                 Uid = getuid();
  74 
  75                 if (Uid == 0)
  76                         (void) setuid(UUCPUID);
  77 
  78                 (void) guinfo(Uid, User);
  79 
  80                 uproc();
  81         } else
  82                 rproc();
  83 
  84         for (i = 0; i < Nnames; i++) {
  85 
  86                 if (EQUALS(Nptr[i], prev))
  87                         continue;
  88 
  89                 puts(Nptr[i]);
  90                 (void) strcpy(prev, Nptr[i]);
  91         }
  92         return (0);
  93 }
  94 static void
  95 insert(name)
  96 char *name;
  97 {
  98         int i,j;
  99         char *p;
 100 
 101         DEBUG(7, "insert(%s) ", name);
 102 
 103         for (i = Nnames; i > 0; i--)
 104                 if (strcmp(name, Nptr[i-1]) > 0)
 105                         break;
 106 
 107         if (i == MAXLENGTH)
 108                 return;
 109 
 110         if (Nnames == MAXLENGTH)
 111                 p = strcpy(Nptr[--Nnames], name);
 112         else
 113                 p = strcpy(Nnament[Nnames], name);
 114 
 115         for (j = Nnames; j > i; j--)
 116                 Nptr[j] = Nptr[j-1];
 117 
 118         DEBUG(7, "insert %s ", p);
 119         DEBUG(7, "at %d\n", i);
 120         Nptr[i] = p;
 121         Nnames++;
 122         return;
 123 }
 124 
 125 void
 126 rproc()
 127 {
 128         FILE *cfd;
 129         char line[BUFSIZ];
 130         char *carray[C_MAX];
 131 
 132         cfd = fopen(GRADES, "r");
 133 
 134         while (rdfulline(cfd, line, BUFSIZ) != 0) {
 135 
 136                 (void) getargs(line, carray, C_MAX);
 137                 insert(carray[0]);
 138         }
 139 
 140         (void) fclose(cfd);
 141         return;
 142 }
 143 
 144 void
 145 uproc()
 146 {
 147         FILE *cfd;
 148         char line[BUFSIZ];
 149         char *carray[C_MAX];
 150         int na;
 151 
 152         cfd = fopen(GRADES, "r");
 153 
 154         while (rdfulline(cfd, line, BUFSIZ) != 0) {
 155 
 156                 na = getargs(line, carray, C_MAX);
 157                 
 158                 if (upermit(carray, na) != FAIL)
 159                         insert(carray[0]);
 160         }
 161 
 162         (void) fclose(cfd);
 163         return;
 164 }
 165 
 166 int Dfileused = FALSE;
 167 void wfcommit() {}
 168 void cleanup() {}
 169 int gnamef() { return (0); }
 170 int gdirf() { return (0); }
 171 int cklock() { return (0); }
 172 
 173 /*VARARGS*/
 174 /*ARGSUSED*/
 175 void
 176 assert (s1, s2, i1, s3, i2)
 177 char *s1, *s2, *s3;
 178 int i1, i2;
 179 { }             /* for ASSERT in gnamef.c */
 180 
 181 /*VARARGS*/
 182 /*ARGSUSED*/
 183 void
 184 errent(s1, s2, i1, file, line)
 185 char *s1, *s2, *file;
 186 { }