|
|
1.1 ! root 1: #include <stdio.h> ! 2: ! 3: /* ! 4: * fget -- spooler to get file from GCOS ! 5: */ ! 6: ! 7: ! 8: #define DPR 0 ! 9: #define FGET 1 ! 10: #define FSEND 0 ! 11: #define GCAT 0 ! 12: #define LPR 0 ! 13: ! 14: #define NAME "fget" ! 15: #define MAXCOPY 204800L ! 16: #define FIRSTCHAR 't'-1 ! 17: #define CARDSIZE 130 ! 18: ! 19: char cfname[] = "/usr/spool/dpd/cfsXXXXX"; ! 20: char dfname[] = "/usr/spool/dpd/dfsXXXXX"; ! 21: char lfname[] = "/usr/spool/dpd/lfsXXXXX"; ! 22: char tfname[] = "/usr/spool/dpd/tfsXXXXX"; ! 23: char zfname[] = "/usr/spool/dpd/zfsXXXXX"; ! 24: ! 25: char *fzf; ! 26: FILE *pfdes; ! 27: char wdir[BUFSIZ]; ! 28: FILE *uff; ! 29: char fname[CARDSIZE] /* unix file name */; ! 30: char *fmode; ! 31: ! 32: #include "spool.c" ! 33: #include "gcos.c" ! 34: ! 35: main(agc, agv) ! 36: int agc; ! 37: char *agv[]; ! 38: { ! 39: extern FILE *popen(); ! 40: int fi, i, j, nslash, c; ! 41: int time; ! 42: int poff, foff; ! 43: ! 44: argc = agc; ! 45: argv = agv; ! 46: pidfn(); ! 47: remotsw = TOSS; /*default is toss online output*/ ! 48: wantmail = 1; /*default is send mail.*/ ! 49: grade = '1'; ! 50: fmode = "a"; ! 51: fi = 0; ! 52: foff = 0; ! 53: poff = 0; ! 54: ! 55: while (argc>1 && (arg = argv[1])[0]=='-') { ! 56: if(!comopt(arg[1])) ! 57: switch (arg[1]) { ! 58: ! 59: case 'a': ! 60: fmode = "a"; ! 61: break; ! 62: ! 63: case 'b': ! 64: fmode = "b"; ! 65: break; ! 66: ! 67: case 'd': ! 68: arg = getarg('d'); ! 69: while((fname[fi] = arg[fi])) ++fi; ! 70: fname[fi++] = '/'; ! 71: break; ! 72: ! 73: case 'u': ! 74: arg = getarg('u'); ! 75: i = 0; ! 76: while((gcosid[i] = arg[i])) ! 77: if(++i > 12) { ! 78: gcosid[i] = '\0'; ! 79: break; ! 80: } ! 81: uidf = 1; ! 82: break; ! 83: ! 84: default: ! 85: fprintf(stderr, "%s: Unrecognized option: %s\n", NAME, arg); ! 86: break; ! 87: } ! 88: argc--; ! 89: argv++; ! 90: } ! 91: ! 92: spool1(); /*setup initial GCOS cards.*/ ! 93: card('L',"$ select cc/unixsupport/access"); ! 94: if(gcdebug) ! 95: card('L',"$ select cc/test/fget"); ! 96: else ! 97: card('L',"$ select cc/unixsupport/fget"); ! 98: card('L',fget_id); ! 99: while(--argc) { ! 100: arg = *++argv; ! 101: if(mailfile == 0) ! 102: mailfile = arg; ! 103: /* extract a unix file name */ ! 104: ! 105: i = 0; ! 106: foff = fi; ! 107: nslash = 0; ! 108: while((c = argv[0][i++]) != '\0') { ! 109: if(c == '/') { ! 110: nslash++; ! 111: foff = fi; ! 112: continue; ! 113: } ! 114: fname[foff++] = c; ! 115: } ! 116: fname[foff++] = '\0'; ! 117: fname[fi+12] = '\0'; ! 118: ! 119: /* create the ultimate output file */ ! 120: ! 121: if(debug == 0){ ! 122: if((uff = fopen(fname, "w")) == NULL) { ! 123: fprintf(stderr, "%s: Cannot create %s\n", NAME,fname); ! 124: continue; ! 125: } ! 126: chmod(fname,0666); /*insure file writeable by daemon. MRW*/ ! 127: } ! 128: ! 129: /* now make a link for the dpd */ ! 130: ! 131: if(zfname[INCHAR] < 'z') /*don't create file names past 'z'. MRW*/ ! 132: zfname[INCHAR]++; ! 133: fzf = zfname; ! 134: if(link(fname, fzf) != 0){ ! 135: if( fi > 0 ) { ! 136: fzf = fname; ! 137: } ! 138: ! 139: else{ ! 140: if(poff == 0){ ! 141: if((pfdes = popen("pwd", "r")) != NULL){ ! 142: int c; ! 143: while ((c = getc(pfdes)) != EOF) ! 144: wdir[poff++] = c; ! 145: pclose(pfdes); ! 146: wdir[poff-1] = '/'; ! 147: } ! 148: } ! 149: if(wdir[0] != '/') { ! 150: fprintf(stderr, "%s: Cannot find directory pathname\n", NAME); ! 151: goto cleanup; ! 152: } ! 153: i = poff; ! 154: j = 0; ! 155: while ( wdir[i++] = fname[j++]); ! 156: if(link(wdir, fzf) != 0) fzf = wdir; ! 157: } ! 158: } ! 159: ! 160: card('L', sprintf(buf, "%s %s%s%s %s", ! 161: fmode, ! 162: (nslash == 0 || *arg == '/') ? gcosid : "", ! 163: (nslash == 0) ? "/" : "", ! 164: arg, ! 165: fzf ) ); ! 166: ! 167: if(debug == 0){ ! 168: i = 2; ! 169: while((putc(buf[i++], uff)) != '\0') ; ! 170: c = putc( '\n', uff ); ! 171: if(c == EOF){ ! 172: fprintf(stderr, "%s: Error writing %s\n", NAME, fname); ! 173: break; ! 174: } ! 175: fclose(uff); ! 176: } ! 177: nact++; ! 178: ! 179: } ! 180: if(fork() != 0){ ! 181: spool2(); /*put out final cards, and spool job.*/ ! 182: out(); ! 183: } ! 184: ! 185: signal(SIGHUP, SIG_IGN); ! 186: signal(SIGINT, SIG_IGN); ! 187: signal(SIGQUIT, SIG_IGN); ! 188: dfname[INCHAR]++; ! 189: for( time = 4 ; time < 200 ; time += time ) { ! 190: sleep(time); ! 191: if(access(dfname, 0) != 0) break; ! 192: } ! 193: ! 194: execl("/usr/lib/fget.demon", "fget.demon", 0); ! 195: execl("/etc/fget.demon", "fget.demon", 0); ! 196: fprintf(stderr, "%s: Execl of fget.demon failed.\n", NAME); ! 197: exit(1); ! 198: ! 199: cleanup: ! 200: out(); ! 201: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.