1: #include "uucp.h"
   2: #include "uucpdefs.h"
   3: 
   4: #define NOSYSPART 0
   5: #define HASSYSPART 1
   6: 
   7: #define APPCMD(d) {\
   8: char *p;\
   9: for (p = d; *p != '\0';) *cmdp++ = *p++;\
  10: *cmdp++ = ' ';\
  11: *cmdp = '\0';}
  12: 
  13: #define GENSEND(f, a, b, c, d) {\
  14: fprintf(f, "S %s %s %s - %s 0666\n", a, b, c, d);\
  15: }
  16: #define GENRCV(f, a, b, c) {\
  17: fprintf(f, "R %s %s %s - \n", a, b, c);\
  18: }
  19: /*
  20:  *
  21:  */
  22: 
  23: main(argc, argv)
  24: char *argv[];
  25: {
  26:     char cfile[NAMESIZE];   /* send commands for files from here */
  27:     char dfile[NAMESIZE];   /* used for all data files from here */
  28:     char rxfile[NAMESIZE];  /* to be sent to xqt file (X. ...) */
  29:     char tfile[NAMESIZE];   /* temporary file name */
  30:     char tcfile[NAMESIZE];  /* temporary file name */
  31:     char t2file[NAMESIZE];  /* temporary file name */
  32:     int cflag = 0;      /*  commands in C. file flag  */
  33:     int rflag = 0;      /*  C. files for receiving flag  */
  34:     char buf[BUFSIZ];
  35:     char inargs[BUFSIZ];
  36:     int pipein = 0;
  37:     int startjob = 1;
  38:     char path[MAXFULLNAME];
  39:     char cmd[BUFSIZ];
  40:     char *ap, *cmdp;
  41:     char prm[BUFSIZ];
  42:     char syspart[8], rest[MAXFULLNAME];
  43:     char xsys[8], local[8];
  44:     FILE *fprx, *fpc, *fpd, *fp;
  45:     FILE *xqtstr();
  46:     extern char *getprm(), *index(), *lastpart();
  47:     int uid, ret;
  48:     char redir = '\0';
  49: 
  50:     Debug = 0;
  51:     Ofn = 1;
  52:     Ifn = 0;
  53:     while (argc>1 && argv[1][0] == '-') {
  54:         switch(argv[1][1]){
  55:         case 'p':
  56:         case '\0':
  57:             pipein = 1;
  58:             break;
  59:         case 'r':
  60:             startjob = 0;
  61:             break;
  62:         case 'x':
  63:             Debug = atoi(&argv[1][2]);
  64:             if (Debug <= 0)
  65:                 Debug = 1;
  66:             break;
  67:         default:
  68:             sprintf(stderr, "unknown flag %s\n", argv[1]);
  69:                 break;
  70:         }
  71:         --argc;  argv++;
  72:     }
  73: 
  74:     DEBUG(4, "\n\n** %s **\n", "START");
  75: 
  76:     inargs[0] = '\0';
  77:     for (argv++; argc > 1; argc--) {
  78:         DEBUG(4, "arg - %s:", *argv);
  79:         strcat(inargs, " ");
  80:         strcat(inargs, *argv++);
  81:     }
  82:     DEBUG(4, "arg - %s\n", inargs);
  83:     ret = gwd(Wrkdir);
  84:     ASSERT(ret == 0, "GWD FAILED %d", ret);
  85:     chdir(Spool);
  86:     uid = getuid();
  87:     guinfo(uid, User, path);
  88: 
  89:     sprintf(local, "%.7s", Myname);
  90:     cmdp = cmd;
  91:     *cmdp = '\0';
  92:     gename(DATAPRE, local, 'X', rxfile);
  93:     fprx = fopen(rxfile, "w");
  94:     ASSERT(fprx != NULL, "CAN'T OPEN %s", rxfile);
  95:     chmod(rxfile, 0666);
  96:     gename(DATAPRE, local, 'T', tcfile);
  97:     fpc = fopen(tcfile, "w");
  98:     ASSERT(fpc != NULL, "CAN'T OPEN %s", tcfile);
  99:     chmod(tcfile, 0666);
 100:     fprintf(fprx, "%c %s %s\n", X_USER, User, local);
 101: 
 102:     /* find remote system name */
 103:     ap = inargs;
 104:     while ((ap = getprm(ap, prm)) != NULL) {
 105:         if (prm[0] == '>' || prm[0] == '<') {
 106:             ap = getprm(ap, prm);
 107:             continue;
 108:         }
 109: 
 110:         if (prm[0] == ';') {
 111:             APPCMD(prm);
 112:             continue;
 113:         }
 114: 
 115:         split(prm, xsys, rest);
 116:         if (xsys[0] == '\0')
 117:             strcpy(xsys, local);
 118:         break;
 119:     }
 120:     DEBUG(4, "xsys %s\n", xsys);
 121:     if (versys(xsys) != 0) {
 122:         /*  bad system name  */
 123:         fprintf(stderr, "bad system name: %s\n", xsys);
 124:         fclose(fprx);
 125:         fclose(fpc);
 126:         unlink(rxfile);
 127:         unlink(tcfile);
 128:         cleanup(101);
 129:     }
 130: 
 131:     if (pipein) {
 132:         gename(DATAPRE, xsys, 'B', dfile);
 133:         fpd = fopen(dfile, "w");
 134:         ASSERT(fpd != NULL, "CAN'T OPEN %s", dfile);
 135:         chmod(dfile, 0666);
 136:         while (fgets(buf, BUFSIZ, stdin) != NULL)
 137:             fputs(buf, fpd);
 138:         fclose(fpd);
 139:         if (strcmp(local, xsys) != SAME) {
 140:             GENSEND(fpc, dfile, dfile, User, dfile);
 141:             cflag++;
 142:         }
 143:         fprintf(fprx, "%c %s\n", X_RQDFILE, dfile);
 144:         fprintf(fprx, "%c %s\n", X_STDIN, dfile);
 145:     }
 146:     /* parse command */
 147:     ap = inargs;
 148:     while ((ap = getprm(ap, prm)) != NULL) {
 149:         DEBUG(4, "prm - %s\n", prm);
 150:         if (prm[0] == '>' || prm[0] == '<') {
 151:             redir = prm[0];
 152:             continue;
 153:         }
 154: 
 155:         if (prm[0] == '|' || prm[0] == '^') {
 156:             if (cmdp != cmd)
 157:                 APPCMD(prm);
 158:             continue;
 159:         }
 160: 
 161:         /* process command or file or option */
 162:         ret = split(prm, syspart, rest);
 163:         DEBUG(4, "s - %s, ", syspart);
 164:         DEBUG(4, "r - %s, ", rest);
 165:         DEBUG(4, "ret - %d\n", ret);
 166:         if (syspart[0] == '\0')
 167:             strcpy(syspart, local);
 168: 
 169:         if (cmdp == cmd && redir == '\0') {
 170:             /* command */
 171:             APPCMD(rest);
 172:             continue;
 173:         }
 174: 
 175:         /* process file or option */
 176:         DEBUG(4, "file s- %s, ", syspart);
 177:         DEBUG(4, "local - %s\n", local);
 178:         /* process file */
 179:         if (redir == '>') {
 180:             if (rest[0] != '~')
 181:                 expfile(rest);
 182:             fprintf(fprx, "%c %s %s\n", X_STDOUT, rest,
 183:              syspart);
 184:             redir = '\0';
 185:             continue;
 186:         }
 187: 
 188:         if (ret == NOSYSPART) {
 189:             /* option */
 190:             APPCMD(rest);
 191:             continue;
 192:         }
 193: 
 194:         if (strcmp(xsys, local) == SAME
 195:          && strcmp(xsys, syspart) == SAME) {
 196:             expfile(rest);
 197:             if (redir == '<')
 198:                 fprintf(fprx, "%c %s\n", X_STDIN, rest);
 199:             else
 200:                 APPCMD(rest);
 201:             redir = '\0';
 202:             continue;
 203:         }
 204: 
 205:         if (strcmp(syspart, local) == SAME) {
 206:             /*  generate send file */
 207:             expfile(rest);
 208:             gename(DATAPRE, xsys, 'A', dfile);
 209:             if (redir == '<') {
 210:                 fprintf(fprx, "%c %s\n", X_STDIN, dfile);
 211:             }
 212:             DEBUG(4, "rest %s\n", rest);
 213:             if (chkpth(User, "", rest) != 0) {
 214:                 fprintf(stderr, "permission denied %s\n", rest);
 215:                 cleanup(1);
 216:             }
 217:             if (xcp(rest, dfile) != 0)
 218:                 cleanup(1);
 219:             GENSEND(fpc, rest, dfile, User, dfile);
 220:             cflag++;
 221:             fprintf(fprx, "%c %s %s\n", X_RQDFILE,
 222:              dfile, lastpart(rest));
 223:             if (redir != '<')
 224:                 APPCMD(lastpart(rest));
 225:             redir = '\0';
 226:             continue;
 227:         }
 228: 
 229:         if (strcmp(local, xsys) == SAME) {
 230:             /*  generate local receive  */
 231:             gename(CMDPRE, syspart, 'R', tfile);
 232:             strcpy(dfile, tfile);
 233:             dfile[0] = DATAPRE;
 234:             fp = fopen(tfile, "w");
 235:             ASSERT(fp != NULL, "CAN'T OPEN %s", tfile);
 236:             chmod(tfile, 0666);
 237:             expfile(rest);
 238:             GENRCV(fp, rest, dfile, User);
 239:             fclose(fp);
 240:             rflag++;
 241:             fprintf(fprx, "%c %s %s\n", X_RQDFILE, dfile,
 242:               lastpart(rest));
 243:             if (rest[0] != '~')
 244:                 expfile(rest);
 245:             if (redir == '<')
 246:                 fprintf(fprx, "%c %s\n", X_STDIN, dfile);
 247:             else
 248:                 APPCMD(lastpart(rest));
 249:             redir = '\0';
 250:             continue;
 251:         }
 252: 
 253:         if (strcmp(syspart, xsys) != SAME) {
 254:             /* generate remote receives */
 255:             gename(DATAPRE, syspart, 'R', dfile);
 256:             strcpy(tfile, dfile);
 257:             tfile[0] = CMDPRE;
 258:             fpd = fopen(dfile, "w");
 259:             ASSERT(fpd != NULL, "CAN'T OPEN %s", dfile);
 260:             chmod(dfile, 0666);
 261:             gename(DATAPRE, xsys, 'T', t2file);
 262:             GENRCV(fpd, rest, t2file, User);
 263:             fclose(fpd);
 264:             GENSEND(fpc, dfile, tfile, User, dfile);
 265:             cflag++;
 266:             fprintf(fprx, "%c %s %s\n", X_RQDFILE, t2file,
 267:               lastpart(rest));
 268:             if (redir == '<')
 269:                 fprintf(fprx, "%c %s\n", X_STDIN, t2file);
 270:             else
 271:                 APPCMD(lastpart(rest));
 272:             redir = '\0';
 273:             continue;
 274:         }
 275: 
 276:         /* file on remote system */
 277:         if (rest[0] != '~')
 278:             expfile(rest);
 279:         if (redir == '<')
 280:             fprintf(fprx, "%c %s\n", X_STDIN, rest);
 281:         else
 282:             APPCMD(rest);
 283:         redir = '\0';
 284:         continue;
 285: 
 286:     }
 287: 
 288:     fprintf(fprx, "%c %s\n", X_CMD, cmd);
 289:     fclose(fprx);
 290: 
 291:     strcpy(tfile, rxfile);
 292:     tfile[0] = XQTPRE;
 293:     if (strcmp(xsys, local) == SAME) {
 294:         link(rxfile, tfile);
 295:         unlink(rxfile);
 296:         if (startjob)
 297:             if (rflag)
 298:                 xuucico("");
 299:             else
 300:                 xuuxqt();
 301:     }
 302:     else {
 303:         GENSEND(fpc, rxfile, tfile, User, rxfile);
 304:         cflag++;
 305:     }
 306: 
 307:     fclose(fpc);
 308:     if (cflag) {
 309:         gename(CMDPRE, xsys, 'A', cfile);
 310:         link(tcfile, cfile);
 311:         unlink(tcfile);
 312:         if (startjob)
 313:             xuucico(xsys);
 314:         cleanup(0);
 315:     }
 316:     else
 317:         unlink(tcfile);
 318: }
 319: 
 320: 
 321: cleanup(code)
 322: int code;
 323: {
 324:     rmlock(NULL);
 325:     DEBUG(1, "exit code %d\n", code);
 326:     exit(code);
 327: }

Defined functions

cleanup defined in line 321; used 4 times
main defined in line 23; never used

Defined macros

APPCMD defined in line 7; used 9 times
GENRCV defined in line 16; used 2 times
GENSEND defined in line 13; used 4 times
HASSYSPART defined in line 5; never used
NOSYSPART defined in line 4; used 1 times
Last modified: 1979-01-11
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 966
Valid CSS Valid XHTML 1.0 Strict