|
|
1.1 ! root 1: #include <stdio.h> ! 2: #include <string.h> ! 3: #include <signal.h> ! 4: #if research ! 5: #include <ipc.h> ! 6: #include <sys/ttyio.h> ! 7: #endif ! 8: ! 9: int ppid; ! 10: void abortpass(); ! 11: char * ipcpath(); ! 12: ! 13: /* ! 14: * Connect to given datakit port ! 15: */ ! 16: main(argc, argv) ! 17: char *argv[]; ! 18: { ! 19: int gatefd; ! 20: int ppid, cpid; ! 21: char *cp; ! 22: ! 23: if (argc != 4) { ! 24: fprintf(stderr, "usage: %s destination network service\n", argv[0]); ! 25: exit(1); ! 26: } ! 27: if ((gatefd = ipcopen((cp = ipcpath(argv[1], argv[2], argv[3])), "heavy tcphup hup")) < 0){ ! 28: #if research ! 29: fprintf(stderr, "ipcopen(%s):%s\n", cp, errstr); ! 30: #endif ! 31: exit(2); ! 32: } ! 33: ! 34: /* ! 35: * Initialize the input fd, and copy bytes. ! 36: */ ! 37: ! 38: ppid = getpid(); ! 39: switch(cpid = fork()){ ! 40: case -1: ! 41: perror("fork error"); ! 42: exit(10); ! 43: case 0: ! 44: close(0); ! 45: pass(gatefd, 1); /* child - from remote */ ! 46: close(1); ! 47: #if !research ! 48: shutdown(gatefd, 0); ! 49: #endif ! 50: close(gatefd); ! 51: /* fprintf(stderr, "from remote - exiting\n"); */ ! 52: exit(0); ! 53: default: ! 54: close(1); ! 55: pass(0, gatefd); /* parent - to remote */ ! 56: close(0); ! 57: #if !research ! 58: shutdown(gatefd, 1); ! 59: #endif ! 60: close(gatefd); ! 61: /* fprintf(stderr, "to remote - exiting\n"); */ ! 62: while(wait(0) != cpid); ! 63: exit(0); ! 64: } ! 65: } ! 66: ! 67: void ! 68: rdtimout() ! 69: { ! 70: /* fprintf(stderr, "read timeout\n"); */ ! 71: exit(0); ! 72: } ! 73: ! 74: #define RDTIMOUT 10 ! 75: #define SIGALRM 14 ! 76: ! 77: pass(from, to) ! 78: int from, to; ! 79: { ! 80: char buf[1024]; ! 81: int n; ! 82: ! 83: signal(SIGALRM, rdtimout); ! 84: while (alarm(RDTIMOUT),((n=read(from, buf, sizeof(buf))) > 0)) { ! 85: if (write(to, buf, n)!=n) { ! 86: perror("pass write error"); ! 87: exit(6); ! 88: } ! 89: } ! 90: alarm(0); ! 91: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.