1: /*
   2:  * Copyright (c) 1983 Regents of the University of California.
   3:  * All rights reserved.  The Berkeley software License Agreement
   4:  * specifies the terms and conditions for redistribution.
   5:  */
   6: 
   7: #ifndef lint
   8: char copyright[] =
   9: "@(#) Copyright (c) 1983 Regents of the University of California.\n\
  10:  All rights reserved.\n";
  11: #endif not lint
  12: 
  13: #ifndef lint
  14: static char sccsid[] = "@(#)logger.c	6.2 (Berkeley) 9/19/85";
  15: #endif not lint
  16: 
  17: #include <stdio.h>
  18: #include <syslog.h>
  19: #include <ctype.h>
  20: 
  21: /*
  22: **  LOGGER -- read and log utility
  23: **
  24: **	This routine reads from an input and arranges to write the
  25: **	result on the system log, along with a useful tag.
  26: */
  27: 
  28: main(argc, argv)
  29:     int argc;
  30:     char **argv;
  31: {
  32:     char buf[200];
  33:     char *tag;
  34:     register char *p;
  35:     int pri = LOG_NOTICE;
  36:     int logflags = 0;
  37:     extern char *getlogin();
  38: 
  39:     /* initialize */
  40:     tag = getlogin();
  41: 
  42:     /* crack arguments */
  43:     while (--argc > 0)
  44:     {
  45:         p = *++argv;
  46:         if (*p != '-')
  47:             break;
  48: 
  49:         switch (*++p)
  50:         {
  51:           case '\0':        /* dummy */
  52:             /* this can be used to give null parameters */
  53:             break;
  54: 
  55:           case 't':     /* tag */
  56:             if (argc > 1 && argv[1][0] != '-')
  57:             {
  58:                 argc--;
  59:                 tag = *++argv;
  60:             }
  61:             else
  62:                 tag = NULL;
  63:             break;
  64: 
  65:           case 'p':     /* priority */
  66:             if (argc > 1 && argv[1][0] != '-')
  67:             {
  68:                 argc--;
  69:                 pri = pencode(*++argv);
  70:             }
  71:             break;
  72: 
  73:           case 'i':     /* log process id also */
  74:             logflags |= LOG_PID;
  75:             break;
  76: 
  77:           case 'f':     /* file to log */
  78:             if (argc > 1 && argv[1][0] != '-')
  79:             {
  80:                 argc--;
  81:                 if (freopen(*++argv, "r", stdin) == NULL)
  82:                 {
  83:                     fprintf("logger: ");
  84:                     perror(*argv);
  85:                     exit(1);
  86:                 }
  87:             }
  88:             break;
  89: 
  90:           default:
  91:             fprintf(stderr, "logger: unknown flag -%s\n", p);
  92:             break;
  93:         }
  94:     }
  95: 
  96:     /* setup for logging */
  97:     openlog(tag, logflags, 0);
  98:     (void) fclose(stdout);
  99: 
 100:     /* log input line if appropriate */
 101:     if (argc > 0)
 102:     {
 103:         char buf[120];
 104: 
 105:         buf[0] = '\0';
 106:         while (argc-- > 0)
 107:         {
 108:             strcat(buf, " ");
 109:             strcat(buf, *argv++);
 110:         }
 111:         syslog(pri, buf + 1);
 112:         exit(0);
 113:     }
 114: 
 115:     /* main loop */
 116:     while (fgets(buf, sizeof buf, stdin) != NULL)
 117:         syslog(pri, buf);
 118: 
 119:     exit(0);
 120: }
 121: 
 122: 
 123: struct code {
 124:     char    *c_name;
 125:     int c_val;
 126: };
 127: 
 128: struct code PriNames[] = {
 129:     "panic",    LOG_EMERG,
 130:     "emerg",    LOG_EMERG,
 131:     "alert",    LOG_ALERT,
 132:     "crit",     LOG_CRIT,
 133:     "err",      LOG_ERR,
 134:     "error",    LOG_ERR,
 135:     "warn",     LOG_WARNING,
 136:     "warning",  LOG_WARNING,
 137:     "notice",   LOG_NOTICE,
 138:     "info",     LOG_INFO,
 139:     "debug",    LOG_DEBUG,
 140:     NULL,       -1
 141: };
 142: 
 143: struct code FacNames[] = {
 144:     "kern",     LOG_KERN,
 145:     "user",     LOG_USER,
 146:     "mail",     LOG_MAIL,
 147:     "daemon",   LOG_DAEMON,
 148:     "auth",     LOG_AUTH,
 149:     "security", LOG_AUTH,
 150:     "local0",   LOG_LOCAL0,
 151:     "local1",   LOG_LOCAL1,
 152:     "local2",   LOG_LOCAL2,
 153:     "local3",   LOG_LOCAL3,
 154:     "local4",   LOG_LOCAL4,
 155:     "local5",   LOG_LOCAL5,
 156:     "local6",   LOG_LOCAL6,
 157:     "local7",   LOG_LOCAL7,
 158:     NULL,       -1
 159: };
 160: 
 161: 
 162: /*
 163:  *  Decode a symbolic name to a numeric value
 164:  */
 165: 
 166: pencode(s)
 167:     register char *s;
 168: {
 169:     register char *p;
 170:     int lev;
 171:     int fac;
 172:     char buf[100];
 173: 
 174:     for (p = buf; *s && *s != '.'; )
 175:         *p++ = *s++;
 176:     *p = '\0';
 177:     if (*s++) {
 178:         fac = decode(buf, FacNames);
 179:         if (fac < 0)
 180:             bailout("unknown facility name: ", buf);
 181:         for (p = buf; *p++ = *s++; )
 182:             continue;
 183:     } else
 184:         fac = 0;
 185:     lev = decode(buf, PriNames);
 186:     if (lev < 0)
 187:         bailout("unknown priority name: ", buf);
 188: 
 189:     return ((lev & LOG_PRIMASK) | (fac & LOG_FACMASK));
 190: }
 191: 
 192: 
 193: decode(name, codetab)
 194:     char *name;
 195:     struct code *codetab;
 196: {
 197:     register struct code *c;
 198:     register char *p;
 199:     char buf[40];
 200: 
 201:     if (isdigit(*name))
 202:         return (atoi(name));
 203: 
 204:     (void) strcpy(buf, name);
 205:     for (p = buf; *p; p++)
 206:         if (isupper(*p))
 207:             *p = tolower(*p);
 208:     for (c = codetab; c->c_name; c++)
 209:         if (!strcmp(buf, c->c_name))
 210:             return (c->c_val);
 211: 
 212:     return (-1);
 213: }
 214: 
 215: bailout(a, b)
 216:     char *a, *b;
 217: {
 218:     fprintf(stderr, "logger: %s%s\n", a, b);
 219:     exit(1);
 220: }

Defined functions

bailout defined in line 215; used 2 times
decode defined in line 193; used 2 times
main defined in line 28; never used
pencode defined in line 166; used 1 times
  • in line 69

Defined variables

FacNames defined in line 143; used 1 times
PriNames defined in line 128; used 1 times
copyright defined in line 8; never used
sccsid defined in line 14; never used

Defined struct's

code defined in line 123; used 8 times
Last modified: 1985-09-19
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 815
Valid CSS Valid XHTML 1.0 Strict