Annotation of 43BSD/ucb/logger.c, revision 1.1

1.1     ! root        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: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.