|
|
1.1 ! root 1: #ifndef lint ! 2: static char sccsid[] = "@(#)implogd.c 4.8 (Berkeley) 7/1/83"; ! 3: #endif ! 4: ! 5: #include <sgtty.h> ! 6: ! 7: #include <sys/time.h> ! 8: #include <sys/param.h> ! 9: #include <sys/socket.h> ! 10: #include <sys/file.h> ! 11: ! 12: #include <netinet/in.h> ! 13: #include <netimp/if_imp.h> ! 14: ! 15: #define LOGFILE "/usr/adm/implog" ! 16: ! 17: u_char request[1024]; ! 18: int marktime(); ! 19: int options; ! 20: extern int errno; ! 21: int log; ! 22: ! 23: /* ! 24: * Socket address, internet style, with ! 25: * unused space taken by timestamp and packet ! 26: * size. ! 27: */ ! 28: struct sockstamp { ! 29: short sin_family; ! 30: u_short sin_port; ! 31: struct in_addr sin_addr; ! 32: time_t sin_time; ! 33: int sin_len; ! 34: }; ! 35: ! 36: main(argc, argv) ! 37: char *argv[]; ! 38: { ! 39: int s; ! 40: time_t t; ! 41: struct sockstamp from; ! 42: ! 43: argc--, argv++; ! 44: if (argc > 0 && !strcmp(argv[0], "-d")) ! 45: options |= SO_DEBUG; ! 46: #ifndef DEBUG ! 47: if (fork()) ! 48: exit(0); ! 49: for (s = 0; s < 10; s++) ! 50: (void) close(t); ! 51: (void) open("/", 0); ! 52: (void) dup2(0, 1); ! 53: (void) dup2(0, 2); ! 54: { int tt = open("/dev/tty", 2); ! 55: if (tt > 0) { ! 56: ioctl(tt, TIOCNOTTY, 0); ! 57: close(tt); ! 58: } ! 59: } ! 60: #endif ! 61: log = open(LOGFILE, O_CREAT|O_WRONLY|O_APPEND, 0644); ! 62: if (log < 0) { ! 63: perror("implogd: open"); ! 64: exit(1); ! 65: } ! 66: from.sin_time = time(0); ! 67: from.sin_len = sizeof (time_t); ! 68: write(log, (char *)&from, sizeof (from)); ! 69: while ((s = socket(AF_IMPLINK, SOCK_RAW, 0, 0)) < 0) { ! 70: perror("implogd: socket"); ! 71: sleep(5); ! 72: } ! 73: for (;;) { ! 74: int fromlen = sizeof (from), len; ! 75: ! 76: len = recvfrom(s, request, sizeof (request), 0, ! 77: &from, &fromlen); ! 78: if (len < 0) { ! 79: perror("implogd: recvfrom"); ! 80: continue; ! 81: } ! 82: if (len == 0 || len > IMPMTU) /* sanity */ ! 83: continue; ! 84: from.sin_len = len; ! 85: from.sin_time = time(0); ! 86: write(log, (char *)&from, sizeof (from)); ! 87: write(log, request, len); ! 88: } ! 89: /*NOTREACHED*/ ! 90: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.