1: static char sccsid[] = "@(#)netcp.c	4.1	(Berkeley)	9/12/82";
   2: 
   3: # include "defs.h"
   4: /* sccs id variable */
   5: static char *netcp_sid = "@(#)netcp.c	1.2";
   6: 
   7: 
   8: /* global variables */
   9: struct userinfo status;
  10: 
  11: /* netcp - copy with remote machines */
  12: main(argc,argv)
  13:   char **argv;
  14:     {
  15:     char rcmd[BUFSIZ], acmd[BUFSIZ], *sn;
  16:     char mchto, mchfrom, sfnto[FNS], sfnfrom[FNS];
  17: 
  18:     argv[argc] = 0;
  19:     debugflg = DBV;
  20:     if(argc < 3)goto usage;
  21:     argv++, argc--;
  22:     while(argv[0][0] == '-'){
  23:         switch(argv[0][1]){
  24:         case 'b':   status.nonotify++; break;
  25:         case 'f':   status.force++; break;
  26:         case 'l':   harg(status.login); break;
  27:         case 'n':   status.nowrite++; break;
  28:         case 'p':   harg(status.mpasswd); break;
  29:         case 'q':   status.quiet++; break;
  30:         default:    fprintf(stderr,"Unknown option %s\n",argv[0]);
  31:                 break;
  32:         }
  33:         argc--;argv++;
  34:         }
  35:     if(argc > 2)goto usage;
  36:     sprintf(rcmd,"netcp %s %s",argv[0],argv[1]);
  37:     mchfrom = analfile(sfnfrom,argv[0]);
  38:     mchto =   analfile(sfnto,argv[1]);
  39:     if(mchfrom  == 0 || mchto  == 0){
  40:         fprintf(stderr,"Unknown machine\n");
  41:         exit(EX_NOHOST);
  42:     }
  43:     if(sfnfrom[0] == 0 || sfnto[0] == 0){
  44:         fprintf(stderr,"Must specify both file names\n");
  45:         exit(EX_USAGE);
  46:     }
  47:     if(mchfrom == local && mchto == local){
  48:         fprintf(stderr,"Error: both files are on this machine\n");
  49:         exit(EX_USAGE);
  50:         }
  51:     else if(mchfrom == local)
  52:         kexecl(netcmd,"net","-m",longname(mchto), "-o",sfnto,"-s",sfnfrom,
  53:             "-c",rcmd,"cat",0);
  54:     else if(mchto == local){
  55:         kexecl(netcmd,"net","-m",longname(mchfrom), "-r",sfnto,"-i",sfnfrom,
  56:             "-c",rcmd,"cat",0);
  57:         }
  58:     /* remote for both */
  59:     else if(mchto == mchfrom)
  60:         kexecl(netcmd,"net","-m",longname(mchto),"-c",rcmd,"cp",sfnfrom,sfnto,0);
  61:     else {
  62:         /* experimental - still needs debugging */
  63:         fprintf(stderr,
  64:             "Experimental - Machines normally must be the same\n");
  65: 
  66:         /* collect info on the "To Machine" */
  67:         remote = mchto;
  68:         /* get status.login and passwd from .netrc if poss. */
  69:         commandfile();
  70:         if(status.login[0] == 0 || status.mpasswd[0] == 0){
  71:             sn = SnFromUid(getuid());
  72:             if(sn == NULL){
  73:                 fprintf(stderr,"Unknown user\n");
  74:                 exit(EX_OSFILE);
  75:             }
  76:             strcpy(status.localname,sn);
  77:             /* check environ */
  78:             envloginpasswd(remote,status.login,status.mpasswd);
  79:             /* prompt on terminal */
  80:             promptlogin(remote);
  81:         }
  82:         /* should use -q option */
  83:         sprintf(acmd,"%s -l %s -p %s %s %s",
  84:             NETCPCMD,status.login,status.mpasswd,argv[0],argv[1]);
  85: 
  86:         /* send the netcp command to the "From" machine */
  87:         remote = mchfrom;
  88:         status.login[0] = status.mpasswd[0] = 0;
  89:         mexecl(netcmd,"net","-m",longname(mchfrom),"-c",rcmd,acmd,0);
  90:         }
  91:     perror(netcmd);
  92:     fprintf(stderr,"Network is down\n");
  93:     exit(EX_UNAVAILABLE);
  94: usage:
  95:     printf("Usage: netcp [-l ...] [-p ...] [-f] [-n] fromfile tofile\n");
  96:     exit(EX_USAGE);
  97:     }
  98: 
  99: analfile(sfn,addr)
 100: char *sfn;
 101: char *addr;
 102: {
 103:     register char *file;
 104:     char work[FNS], *s, c0,c1,c2,c3,c,colon=0,mch;
 105:     mch = local;
 106:     strcpy(work,addr);
 107:     s = work;
 108:     file = s;
 109:     while(*s){
 110:         if(*s == '/')break;
 111:         if(*s == ':'){
 112:             colon = 1;
 113:             *s++ = 0;
 114:             break;
 115:         }
 116:         s++;
 117:     }
 118:     if(colon){ /* name specified */
 119:         mch = lookup(file);
 120:         if(mch == 0){
 121:             return(mch);
 122:             }
 123:         file = s;
 124:         }
 125:     else {
 126:         s  = file;
 127:         c0 = *s++;
 128:         c1 = *s++;
 129:         c2 = *s++;
 130:         c3 = *s++;
 131:         if(c0 == '/' && c1 != '/' && islower(c1))
 132:             if(c3 == '/')mch = c1;      /* CC name */
 133:     }
 134:     strcpy(sfn,file);
 135:     s = sfn;
 136:     /* check for bad chars in file name */
 137:     while(c = *s++)
 138:         if(c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == '\b')
 139:             err("Invalid character '%c'\n",c);
 140:     return(mch);
 141:     }

Defined functions

analfile defined in line 99; used 2 times
main defined in line 12; never used

Defined variables

netcp_sid defined in line 5; never used
sccsid defined in line 1; never used
status defined in line 9; used 15 times
Last modified: 1982-09-13
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 1169
Valid CSS Valid XHTML 1.0 Strict