Annotation of 43BSDTahoe/etc/implog/implogd.c, revision 1.1

1.1     ! root        1: /*
        !             2:  * Copyright (c) 1983, 1988 Regents of the University of California.
        !             3:  * All rights reserved.
        !             4:  *
        !             5:  * Redistribution and use in source and binary forms are permitted
        !             6:  * provided that the above copyright notice and this paragraph are
        !             7:  * duplicated in all such forms and that any documentation,
        !             8:  * advertising materials, and other materials related to such
        !             9:  * distribution and use acknowledge that the software was developed
        !            10:  * by the University of California, Berkeley.  The name of the
        !            11:  * University may not be used to endorse or promote products derived
        !            12:  * from this software without specific prior written permission.
        !            13:  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
        !            14:  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
        !            15:  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
        !            16:  */
        !            17: 
        !            18: #ifndef lint
        !            19: char copyright[] =
        !            20: "@(#) Copyright (c) 1983, 1988 Regents of the University of California.\n\
        !            21:  All rights reserved.\n";
        !            22: #endif /* not lint */
        !            23: 
        !            24: #ifndef lint
        !            25: static char sccsid[] = "@(#)implogd.c  5.6 (Berkeley) 6/18/88";
        !            26: #endif /* not lint */
        !            27: 
        !            28: #include <sgtty.h>
        !            29: 
        !            30: #include <sys/time.h>
        !            31: #include <sys/param.h>
        !            32: #include <sys/socket.h>
        !            33: #include <sys/syslog.h>
        !            34: #include <sys/file.h>
        !            35: 
        !            36: #include <net/if.h>
        !            37: 
        !            38: #include <netinet/in.h>
        !            39: #include <netimp/if_imp.h>
        !            40: 
        !            41: #define        LOGFILE "/usr/adm/implog"
        !            42: 
        !            43: u_char request[1024];
        !            44: int    marktime();
        !            45: int    options;
        !            46: extern int errno;
        !            47: int    log;
        !            48: 
        !            49: /*
        !            50:  * Socket address, internet style, with
        !            51:  * unused space taken by timestamp and packet
        !            52:  * size.
        !            53:  */
        !            54: struct sockstamp {
        !            55:        short   sin_family;
        !            56:        u_short sin_port;
        !            57:        struct  in_addr sin_addr;
        !            58:        time_t  sin_time;
        !            59:        int     sin_len;
        !            60: };
        !            61: 
        !            62: main(argc, argv)
        !            63:        char *argv[];
        !            64: {
        !            65:        int i, s;
        !            66:        time_t t;
        !            67:        struct sockstamp from;
        !            68: 
        !            69:        argc--, argv++;
        !            70:        openlog("implogd", LOG_PID | LOG_ODELAY, LOG_DAEMON);
        !            71:        if (argc > 0 && !strcmp(argv[0], "-d"))
        !            72:                options |= SO_DEBUG;
        !            73:        log = open(LOGFILE, O_CREAT|O_WRONLY|O_APPEND, 0644);
        !            74:        if (log < 0) {
        !            75:                syslog(LOG_ERR, "%s: %m\n", LOGFILE);
        !            76:                perror("implogd: open");
        !            77:                exit(1);
        !            78:        }
        !            79:        from.sin_time = time(0);
        !            80:        from.sin_len = sizeof (time_t);
        !            81:        write(log, (char *)&from, sizeof (from));
        !            82:        if ((s = socket(AF_IMPLINK, SOCK_RAW, 0)) < 0) {
        !            83:                syslog(LOG_ERR, "socket: %m\n");
        !            84:                perror("implogd: socket");
        !            85:                exit(5);
        !            86:        }
        !            87: #ifndef DEBUG
        !            88:        if (fork())
        !            89:                exit(0);
        !            90:        for (i = 0; i < 10; i++)
        !            91:                if (i != log && i != s)
        !            92:                        (void) close(i);
        !            93:        (void) open("/", 0);
        !            94:        (void) dup2(0, 1);
        !            95:        (void) dup2(0, 2);
        !            96:        { int tt = open("/dev/tty", 2);
        !            97:          if (tt > 0) {
        !            98:                ioctl(tt, TIOCNOTTY, 0);
        !            99:                close(tt);
        !           100:          }
        !           101:        }
        !           102: #endif
        !           103:        for (;;) {
        !           104:                int fromlen = sizeof (from), len;
        !           105: 
        !           106:                len = recvfrom(s, request, sizeof (request), 0,
        !           107:                        &from, &fromlen);
        !           108:                if (len < 0) {
        !           109:                        syslog(LOG_ERR, "recvfrom: %m\n");
        !           110:                        perror("implogd: recvfrom");
        !           111:                        continue;
        !           112:                }
        !           113:                if (len == 0 || len > IMPMTU)   /* sanity */
        !           114:                        continue;
        !           115:                from.sin_len = len;
        !           116:                from.sin_time = time(0);
        !           117:                write(log, (char *)&from, sizeof (from));
        !           118:                write(log, request, len);
        !           119:        }
        !           120:        /*NOTREACHED*/
        !           121: }

unix.superglobalmegacorp.com

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