DECNET_COPY.BCKCDECNET_COPY.BCKRBACK *.* CMKRNL::[ANONYMOUS.SAVE_SETS]DECNET_COPY.BCK/NOCRC/GROUP:0/BLOCK=8192/SAV AWPSYS @\-@lV5.1 _VAXB::  V5.0 +*[DCOLIB.TSLIB_PROGS.NETCOPY]AAAREADME.1ST;2+,''./ 4I-#%0123KPWO56`Fď7l*189f1G HJNETCOPY supplied files. NETCOPY.FOR fortran source" NETMESS.MSG error message source.# NETCOPY.CLD DCL command definition= INSNET.COM Command procedure to install NETCOPY in sys$sytem! NETCOPY.HLP HELP definition file NETCOPY.ABS Abstract NETCOPY.RNO User guide6 BUILD.COM Procedure to compile and link NETCOPYIIf you want to install NETCOPY system wide then run the command procedureINSNET.COM 8 NOTE: this installation procedure assumes that you havethe fortran compiler.'*[DCOLIB.TSLIB_PROGS.NETCOPY]BUILD.COM;3+,,4./ 4)-#%0123KPWO56`Hď7*189f1G HJ($ set prot=(s:rwed,o:rwed,g:re,w:re)/def$ type sys$input NETCOPY BUILD PROCEDURE) Compiling Source and message definitions $ fortran/extend/nodebug netcopy$ message netmess$ type sys$input  linking&$ link/notrace/nodebug netcopy,netmess+*[DCOLIB.TSLIB_PROGS.NETCOPY]COPYRIGHT.TXT;1+,-"./ 4N-#%0123KPWO56`_3S7`*189f1G HJ Date: 19 April 1985 Author: Andrew W. Potter% Rochester Institute of Technology One Lomb Memorial Drive Rochester, New York 146325 Copyright 1987 by Rochester Institute of Technology8 Permission is granted to freely modify and distribute C (but NOT SELL) this software provided this copyright> notice is included in all versions distributed.N * (*[DCOLIB.TSLIB_PROGS.NETCOPY]INSNET.COM;3+,./ 4D-#%0123KPWO56ݮx@72ɾ*189f1G HJ$ set proc/priv=(sysprv,cmkrnl)($ set prot=(s:rwed,o:rwed,g:re,w:RE)/def$ type sys$input& NETCOPY INSTALLATION PROCEDURE% Installing NETCOPY.EXE in SYS$SYSTEM*$ copy netcopy.exe SYS$SYSTEM:netcopy.exe-$ /prot=(s:werd,o:werd,g:re,w:re)/log,$ set file/own=parent SYS$SYSTEM:netcopy.exe$ type sys$inputD Installing command definition in sys$common:[syslib]dcltables.exe.6$ set command/output=sys$common:[syslib]dcltables.exe-A /tables=sys$common:[syslib]dcltables.exe netcopy.cld5$ set file/own=[1,4] sys$common:[syslib]dcltables.exe $ mcr install(sys$common:[syslib]dcltables.exe/replace$ type sys$input, Inserting help file in sys$help:helplib.hlb+$ lib/help sys$help:helplib.hlb netcopy.hlp$ type sys$input? Installation complete...if you anticipate heavy use of NETCOPY@ then INSTALL it /SHARED /OPEN in your sys$manager:systartup.com$!)*[DCOLIB.TSLIB_PROGS.NETCOPY]NETCOPY.ABS;3+,./ 4KF-#%0123KPWO56!jS7r*189f1G HJ6 NETCOPY: A secure method of moving files over DECnet Date: 19 April 1985 Author: Andrew W. Potter% Rochester Institute of Technology One Lomb Memorial Drive Rochester, New York 146325 Copyright 1987 by Rochester Institute of Technology8 Permission is granted to freely modify and distribute C (but NOT SELL) this software provided this copyright> notice is included in all versions distributed. INETCOPY is a network copy utility that allows users to perform DEC-Enet file access without having to include the password in the networkEaccess string. NETCOPY is designed to use a syntax similar to COPY.9DECnet nodes are specified by one of the following forms:9 NODE:: { access string is built from the local }3 { (current) username and prompted password. }= NODE"username":: { Access string is built from supplied }K { username and prompted password. }F NETCOPY will prompt for the required passwords in the format shown below: NODE:: Password: = Where NODE:: will be the nodename of the system that you are attempting to copy to.@ A Recent modification to netcopy forces downcasing the username= when defaulted from sys$getjpi so that NETCOPY will properly! function with ULTRIX-32 systems.F The password will not be shown on the screen to ensure account security. (NOECHO input mode) Example:3 $ NETCOPY VAXB"abc1234"::filename filename9 VAXB:: Password: { user enters password for account }+ { abc1234 on node VAXB:: }# $ NETCOPY VAXB::filename filename VAXB:: Password: < (In this case the username on node VAXBwill be the same as9 the user on the local system (translated to lowercase)))*[DCOLIB.TSLIB_PROGS.NETCOPY]NETCOPY.CLD;4+,./ 4G-#%0123KPWO56@aa7@*189f1G HJ'define type NETCOPY_PROTECTION_KEYWORDS keyword SYSTEM,value keyword GROUP,value keyword OWNER,value keyword WORLD,valuedefine verb netcopy: image netcopy ! CHANGE THIS IF NOT IN SYS$SYSTEM parameter P1 prompt="From ": value (required,list,impcat,type=$INFILE) parameter P2 prompt="To "/ value (required,type=$OUTFILE) qualifier SUBPROCESS qualifier CONTIGUOUS P DECNET_COPY.BCK#%)[DCOLIB.TSLIB_PROGS.NETCOPY]NETCOPY.CLD;4Gn  qualifier OVERLAY qualifier PROTECTIONG value (required,list,type=NETCOPY_PROTECTION_KEYWORDS) qualifier REPLACE qualifier LOG qualifier VOLUME value (required) qualifier TRUNCATE**[DCOLIB.TSLIB_PROGS.NETCOPY]NETCOPY.FOR;10+, .!/ 4P!!X-#%0123KPWO"569w7;*189f1G HJ Program netcopy*** Date: 19 April 1985* Author: Andrew W. Potter&* Rochester Institute of Technology* One Lomb Memorial Drive* Rochester, New York 14632*6* Copyright 1987 by Rochester Institute of Technology9* Permission is granted to freely modify and distribute D* (but NOT SELL) this software provided this copyright?* notice is included in all versions distributed.***:* Intent: to allow the user to copy files over the network8* while maintaining password security. the syntax given7* it the same as that for COPY but the password is not;* entered in the access string. Passwords are prompted for* separately. (noecho)** Modified: 15 April 1986)* Downcase Username returned by Getjpi+* So it will work against Ultrix systems*-* 19-April 1987G* Fixed CLD to allow values on protection** qualifier. (It broke in v4 and no one(* noticed)**9* syntax: a) NETCOPY [/SUB] NODE::FILESPEC NODE::FILESPEC-* b) NETCOPY [/SUB] FILESPEC NODE1::FILESPEC,* c) NETCOPY [/SUB] NODE::FILESPEC FILESPEC*4* if syntax (a) above is used then 2 passwords will@* be prompted for (hitting return for the second password promt-* will cause the first password to be used.)*)* NODE:: can be of the following syntax:*/* NODE:: ==> Netcopy will insert the users.* local username, prompted password.*9* NODE"username":: ==> Netcopy will use supplied user-'* name and prompted password.*B* if the qualifier "/SUBPROCESS" appears in the command line then>* netcopy will spawn the copy operation into the?* background. (useful if you have a large file to copy and you4* wish to do other work while the copy takes place)>* netcopy will return the process id of the process created.9* Legal qualifiers of the COPY command can be applied to* a NETCOPY filespec.* implicit integer (a-z)8 external msg_badprot,msg_usecopy,msg_nonum,msg_nospawn,D > msg_nochan,msg_syndest,msg_synsource,Msg_badfillst, > msg_onenode< character*132 line,wrkline,node1*40,node2*40,addn_file*150! character*30 password1,password2$ character*75 arg1,arg2,copy_qual*80- character*12 username,sys1*9,sys2*9,afile*60- character*75 filespec1,filespec2,command*200 character*2 term/'TT:'/ logical spawnit,addfil integer*2 chan*7 stat = sys$assign(term,chan,,) ! get i/o chan for if (.not. stat) then call lib$signal(msg_nochan) 7 call lib$stop(%val(stat)) ! no echo password endif*0 call cli$get_value('P1',arg1) ! retrieve CLI0 call str$trim(arg1,arg1,l_arg1) ! parameters* l_addn_file = 2 afile = ' ' addn_file = ', ' addfil = .false.< do while (cli$get_value('P1',afile)) ! keep trying addfil = .true.E call str$trim(afile,afile,l_afile) ! to get additinalN addn_file(l_addn_file:l_addn_file+l_afile+1) = ! input file specsN > afile(1:l_afile)//',' ! and build a listF l_addn_file = l_addn_file+l_afile+1 ! of them. afile = ' ' end do if (.not.addfil) thenO addn_file = ' ' ! if none nix firstE l_addn_file = 1 ! else L ! nix last comma9 call str$trim(addn_file,addn_file,l_addn_file)3 addn_file(l_addn_file:l_addn_file) = ' 'O* ! no node specs? if (index(addn_file(1:l_addn_file),'::') .ne.0) thenL call lib$signal(msg_badfillst) ! file specs( call lib$stop(msg_onenode) endif> if (index(addn_file(1:l_addn_file),'"') .ne.0) thenL call lib$signal(msg_badfillst) ! file specs( call lib$stop(msg_onenode) endif endif*% call cli$get_value('P2',arg2)' call str$trim(arg2,arg2,l_arg2)*J* see if there are any errors...(user put in password wrong)*3 if (index(arg1(1:l_arg1),' ') .ne.0) then) call lib$stop(msg_synsource) endif3 if (index(arg2(1:l_arg2),' ') .ne.0) then' call lib$stop(msg_syndest) endifM l_line = l_arg1+l_arg2+1 ! make a lineK line(1:l_line) = arg1(1:l_arg1)//' '//arg2(1:l_arg2) ! from them**4* Put together copy qualifiers) call build_qual(copy_qual,l_qual)*N spawnit = .false. ! do we want to spawn?1 if (cli$present('SUBPROCESS').AND.1) thenF spawnit = .true. ! and remember endif**N call jpi(username,l_username) ! get my own username.P call str$trim(username,username,l_username) ! remove trailing blanks*,* figure the number of nodes specified* numnode=0M wrkline(1:l_line)= line(1:l_line) ! set up our scratch lineF locnode1 = index (wrkline(1:l_line),'::') ! node names here?L if (locnode1.gt.1) numnode = numnode+1 ! one decnet node so farN wrkline(locnode1:locnode1+1) = ' ' ! nix this one so we mightG locnode2 = index(wrkline(1:l_line),'::') ! find another.P if (locnode2.ge.1) numnode=numnode+1 ! we did, two nodes now.N begnode2 = index (line(1:l_line),' ') ! find break between files* startnode = 1M if (numnode.ne.0) then ! get first password.: if (begnode2.lt.locnode1) startnode = begnode2+1**H sys1 = ' ' ! build passwordG sys1 = wrkline(startnode:locnode1-1) ! prompt string* call str$trim (sys1,sys1,l_sys1)I if (index(sys1(1:l_sys1),'"') .ne. 0 ) ! remove explicitK > l_sys1= index(sys1(1:l_sys1),'"')-1 ! username if thereJ call getpass(password1,sys1(1:l_sys1)// ! get the password5 > ':: password :',l_pass1,chan)L* ! username supplied?A if (index(wrkl DECNET_COPY.BCK #%*[DCOLIB.TSLIB_PROGS.NETCOPY]NETCOPY.FOR;10P!ine(startnode:locnode1-1),'"').ne.0) then8 node1=wrkline(startnode:locnode1-2)//' '//P > password1(1:l_pass1)//'"::' ! yes: parse in password elseN node1 = wrkline(startnode:locnode1-1) ! no: insert JPI usernameG > //'"'//username(1:l_username)// ! plus password2 > ' '//password1(1:l_pass1)//'"::' endif*H call str$trim(node1,node1,l_node1) ! cleanup up blanks*F if (numnode .gt.1) then ! too many spaces.$ if (begnode2.lt.3) then) call lib$stop(msg_syntax) endif**M sys2 = ' ' ! read comments for sys1P sys2 = wrkline(begnode2+1:locnode2-1) ! above.. they are the same@ call str$trim(sys2,sys2,l_sys2) ! for here.3 if (index(sys2(1:l_sys2),'"') .ne. 0 )5 > l_sys2 = index(sys2(1:l_sys2),'"')-14 call getpass(password2,sys2(1:l_sys2)//8 > ':: password :',l_pass2,chan)*P if (l_pass2.le.0) then ! no password here?L password2(1:l_pass1) = password1(1:l_pass1) ! use password1! l_pass2 = l_pass1 endif*E if (index(wrkline(begnode2+1:locnode2-1),'"').ne.0) then= node2 = wrkline(begnode2+1:locnode2-2)//' '//+ > password2(1:l_pass2)//'"::' else; node2 = wrkline(begnode2:locnode2-1)//'"'//0 > username(1:l_username)//8 > ' '//password2(1:l_pass2)//'"::' endif/ call str$trim(node2,node2,l_node2) endif else' call lib$signal(msg_usecopy) call exit endif*K* figure out what are our non node portion of the4* file specifications are.*L call lib$put_output(' ') ! force a cr after passwdB filespec1 = ' ' ! null them out filespec2 = ' '*F* create full file specifications...add in additional file specs*F if (numnode.gt.1) then ! node to node4 filespec1 = line(locnode1+2:begnode2-1)/// > addn_file(1:l_addn_file). filespec2 = line(locnode2+2:l_line)9 call str$trim(filespec1,filespec1,l_filespec1)9 call str$trim(filespec2,filespec2,l_filespec2)J command = 'Copy '//node1(1:l_node1)//filespec1(1:l_filespec1)//D > ' '//node2(1:l_node2)//filespec2(1:l_filespec2) elseF if (begnode2.gt.locnode1) then ! node to here9 filespec1 = line(locnode1+2:begnode2-1)/// > addn_file(1:l_addn_file)3 filespec2 = line(begnode2+1:l_line)> call str$trim(filespec1,filespec1,l_filespec1)> call str$trim(filespec2,filespec2,l_filespec2)K command='Copy '//node1(1:l_node1)//filespec1(1:l_filespec1)9 > //' '//filespec2(1:l_filespec2)F else ! here to node0 filespec1 = line(1:begnode2-1)/// > addn_file(1:l_addn_file)3 filespec2 = line(locnode1+2:l_line)> call str$trim(filespec1,filespec1,l_filespec1)> call str$trim(filespec2,filespec2,l_filespec2); command = 'Copy '//filespec1(1:l_filespec1)H > //' '//node1(1:l_node1)//filespec2(1:l_filespec2) endif endif0 call str$trim(command,command,l_command)*"* add in the copy qualifiers*< command(1:l_command+l_qual) = command(1:l_command)//; > copy_qual(1:l_qual-1)0 call str$trim(command,command,l_command)*+* Now copy the files.** if (spawnit) thenL flag = '00000007'x ! dont copy symbols, logs and nowaitA stat = lib$spawn(command(1:l_command),,,flag,,pid,,,,) if (.not.stat) then, call lib$signal(msg_nospawn)) call lib$stop(%val(stat)) endif write (*,1000) pid 1000 format(' [',z8.8,']') else4 call lib$do_command(command(1:l_command)) endif* call exit* end*7 subroutine getpass(password,prompt,l_pass,chan)* implicit integer*4(a-z) integer*2 chanE external io$_readprompt,io$m_noecho,io$m_trmnoecho,msg_nopass*' character*30 password,lpassword. character*(*) prompt,lprompt*50,crlf*2! crlf = char(13)//char(10) password(1:30) = ' '*. call str$trim(lprompt,prompt,l_prompt)+ lprompt = crlf//lprompt(1:l_prompt) l_prompt = l_prompt+2*? func_code = %loc(io$_readprompt) .or. %loc(io$m_noecho))* > .or. %loc(io$m_trmnoecho)*F stat =sys$qiow(,%val(chan),%val(func_code),,,,%ref(lpassword),C > %val(30),,,%ref(lprompt),%val(l_prompt)) if (.not. stat) then% call lib$signal(msg_nopass)# call lib$stop(%val(stat)) endif* locterm = 0+ locterm = index(lpassword,char(10)) if (locterm.gt.0) then, lpassword(locterm:locterm) = ' '' lpassword(locterm:30) = ' ' endif*+ locterm = index(lpassword,char(13)) if (locterm.gt.0)then, lpassword(locterm:locterm) = ' '' lpassword(locterm:30) = ' ' endif*0 call str$trim(password,lpassword,l_pass)* return* end*/* routine to read username via sys$getjpi* * Andrew W. Potter* 20 March 1983*+ subroutine jpi(username,l_username)** parameters*>* username CHARACTER*12 the users account name>* l_username INTEGER The length of username* implicit integer (a-z)** integer itmlst(10) character username*12 include '($jpidef)'* character*26 uchar,lchar8 parameter (uchar = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')8 parameter (lchar = 'abcdefghijklmnopqrstuvwxyz')* pid = 0,* Set up item list for $GETJPI*' itmlst(1) = jpi$_grp *2**16 + 4 itmlst(2) = %loc(grp) itmlst(3) = 0' itmlst(4) = jpi$_mem *2**16 + 4 itmlst(5) = %loc(mem) itmlst(6) = 08 itmlst(7) = jpi$_username *2**16 + len(username)" itmlst(8) = %loc(username)$ itmlst(9) = %loc(l_username) itmlst(10) = 0****+ stat = sys$getjpiw(,pid,,itmlst,,,)*0 if (.not.stat) call lib$stop(%val(stat))**9 call str$translate(username,username,lchar,uchar)* return end**/ subroutine build_qual(copy_qual,l_qual)*5* builds a list of allowable qualifiers to COPY* implicit integer(a-z)2 external msg_badprot,msg_usecopy,msg_nonum7 character*80 copy_qual,value_arg*40,list_arg*20* copy_qual = ' ' l_qual=1*3 if (cli$present('CONTIGUOUS') .and. 1) the DECNET_COPY.BCK #%*[DCOLIB.TSLIB_PROGS.NETCOPY]NETCOPY.FOR;10P!׊ n/ copy_qual(l_qual:l_qual+5) = '/CONT' l_qual = l_qual+5 endif*/ if (cli$present('VOLUME') .and. 1) then value_arg = ' '1 call cli$get_value('VOLUME',value_arg)3 call str$trim(value_arg,value_arg,l_val): read (value_arg(1:l_val),'(i2)',err=105) numvalJ copy_qual(l_qual:l_qual+6+l_val) = '/VOLU='//value_arg(1:l_val)" l_qual = l_qual+6+l_val endif goto 200"105 call lib$signal(msg_nonum) call exit*200 continue, if (cli$present('LOG') .and. 1) then. copy_qual(l_qual:l_qual+4) = '/LOG' l_qual = l_qual+4 endif*C* Read in protection fields and rebuild them for COPY*M if (cli$present('PROTECTION') .and. 1) then ! /PROT specified? value_arg = '(' l_val=1 num_list = 0N do while (cli$get_value('PROTECTION',list_arg)) ! read and buildO num_list = num_list+1 ! arguments untilK call str$trim(list_arg,list_arg,l_list) ! end of list+ value_arg(1:l_val+l_list+1) =K > value_arg(1:l_val)//list_arg(1:l_list)//',' ! elementsO l_val=l_val+l_list+1 ! with a comma. end doK value_arg(l_val:l_val)=')' ! last ","L ! with a ")"L if (num_list.lt.1.or.num_list.gt.4) then ! correct #?* call lib$signal(msg_badprot) call exit endifJ copy_qual(l_qual:l_qual+6+l_val) = '/PROT='//value_arg(1:l_val)" l_qual = l_qual+6+l_val endif*1 if (cli$present('TRUNCATE') .and. 1) then/ copy_qual(l_qual:l_qual+5) = '/TRUN' l_qual = l_qual+5 endif*0 if (cli$present('REPLACE') .and. 1) then/ copy_qual(l_qual:l_qual+5) = '/REPL'r l_qual = l_qual+5 endifh*o0 if (cli$present('OVERLAY') .and. 1) then/ copy_qual(l_qual:l_qual+5) = '/OVER'r l_qual = l_qual+5 endifa*d(D PRINT *,COPY_QUAL(1:L_QUAL) !*** return endo)*[DCOLIB.TSLIB_PROGS.NETCOPY]NETCOPY.HLP;1+,. / 4I -#%0123KPWO56E/7X*189f1G HJ 1 NETCOPYI NETCOPY is a utility that allows users to copy files over the network toI or from a remote system without the risk of compromising the account password. I NETCOPY commands take one of the following forms: Brackets "[]" indicate optional fields. = $ NETCOPY [/SUB] NODE["username"]::FILE[,FILE...] LOCALFILE8 $ NETCOPY [/SUB] FILE[,FILE...] NODE["username"]::FILED $ NETCOPY [/SUB] NODE1["username"]::FILE1 NODE2["username"]::FILE2I NETCOPY will prompt for the required passwords. To maintain passwordI security the passwords will not print (echo) on the terminal as the user enters them.I The quoted username is optional. If omitted, NETCOPY will insert theI username of the users account on the local system. A list of filenamesI may be specified for the input file spec, however only the first file0 specification may contain a node specification. 2 ExamplesI The examples below demonstrate a user running NETCOPY from an account2 with a username of ABC1234 on DECnet node VAXA::.' $ NETCOPY LOGIN.COM VAXC::LOGIN.COM9 Password : {password entered for the VAXC:: ABC1234]% The command above is the same as:4 $ COPY LOGIN.COM VAXC"ABC1234 secret"::LOGIN.COM F $ NETCOPY/SUB VAXB"CDE5679"::HISFILE.DAT VAXC::[.SUBDIR]MYFILE.DATD VAXB:: password : {user enters the password for VAXB:: CDE5678}D VAXC:: password : {user enters the password for VAXC:: ABC1234}? [0041003B] {NETCOPY returns process identification. I The qualifier "/SUB" directs NETCOPY to spawn the copy operation into the background. / $ NETCOPY VAXC::*.* */LOG/PROTECTION=(W:RE)@ VAXC:: Password : {user enters password for VAXC:: ABC1234}F %COPY-S-COPIED, _VAXC"ABC1234 password"::USER:[ABC1234]LOGIN.COM;24 copied to USER:[ABC1234]LOGIN.COM;1 (45 records)E %COPY-S-COPIED, _VAXC"ABC1234 password"::USER:[ABC1234]LAB1.FOR;14 copied to USER:[ABC1234]LAB1.FOR;1 (105 records)G This example copies all the files in VAXC::[ABC1234] to [ABC1234] F on the current system logging each file as it is copied and giving= them a protection allowing WORLD read and execute access.2 Copy qualifiersI NETCOPY allows file wildcarding as well as the following COPYI qualifiers: /VOLUME, /CONTIGUOUS, /REPLACE, /PROTECTION, /LOG,I /TRUNCATE, and /OVERLAY. These qualifiers will be applied to the outputI file specification regardless of where they appear in the NETCOPYI command line. See HELP COPY or the Digital Command Language Users' Guide for further information on COPY. 2 /SUBPROCESSI This qualifier will cause the network copy operation to be performed asI a spawned (background) process. This is useful for lengthy copyI operations. NETCOPY will return the process identification number of0 the spawned process and return the user to DCL. ' NOTEI The user should be aware that the copy operation will be happeningI concurrently with the command session and that logging off before theI network copy is complete will abort the subprocess. (The DCL commandG SHOW PROCESS/SUB will show if the copying subprocess is still active.) : EX. $ NETCOPY/SUBPROCESS VAXA"username"::*.* [ABC1234]*H VAXA:: Password : {User enters password for DECnet node VAXA::}E [0034004C] {NETCOPY returns process id of subprocess})*[DCOLIB.TSLIB_PROGS.NETCOPY]NETCOPY.RNO;1+, . / 4N P-#%0123KPWO 567`u*189f1G HJ4.c;################ROCHESTER INSTITUTE OF TECHNOLOGY4.C;################INFORMATION SYSTEMS AND COMPUTING$.C;################TECHNICAL SUPPORT.B.B.flags Hyphenate .tab stops 36.lm 36.rm 72.i -36;Descriptive Title:* A Secure method to copy files over DECnet.b.i -36;Usage Restrictions: None..b.i -36;Calling Name: NETCOPY.b.i-36;Project Number:.b.i -36;Author and Affiliation: Andrew W. Potter.br!Rochester Institute of Technology.b.i -36;Installed at RIT by: Andrew W. Potter.i-36;Language: VAX/VMS Extended FORTRAN-77.b.i -36;Computer: Digital VAX/VMS.b.i -36;Program Availability:? This Utility is available on VAXA, VAXB, VAXC, VAXD, and VAXV..b.i -36;Contact:C Internal: User Computing Center, Rochester Institute of Technology.b@External: Academic Computing Infor=mation Systems and Computing,NRochester Institute of Tech=nology. One Lomb Memorial Drive Rochester NY 14623.b .i -36;Date 15 December, 1983.page.b".tab st DECNET_COPY.BCK #%)[DCOLIB.TSLIB_PROGS.NETCOPY]NETCOPY.RNO;1N sops 8,16,24,32,40,48,56,64.left margin 0.b.c;#########FUNCTIONAL ABSTRACT.b.literal6 NETCOPY: A secure method of moving files over DECnetF NETCOPY is a new copy utility that allows users to perform DEC-F net file access without having to include the password in the networkF access string. NETCOPY is designed to use a syntax similar to COPY.: DECnet nodes are specified by one of the following forms:9 NODE:: { access string is built from the local }3 { (current) username and prompted password. }= NODE"username":: { Access string is built from supplied }K { username and prompted password. }F NETCOPY will prompt for the required passwords in the format shown below: NODE:: Password: ? At RIT, "NODE" can be one of: VAXA, VAXB, VAXC, VAXD, or VAXV.F The password will not be shown on the screen to ensure account security. (NOECHO input mode) Example: .end literal .flags bold6 $#^*NETCOPY VAXB"abc1234"::ABOUT.RIT LOCALFILE.RIT\*.b.literal9 VAXB:: Password: { user enters password for account }+ { abc1234 on node VAXB:: }B For more information on NETCOPY type HELP NETCOPY. COPY is fully7 explained in the Digital Command Language Users Guide. .end literal.page.c;######USER INSTRUCTIONS.b.b.literalI NETCOPY commands take one of the following forms: Brackets "[]" indicate optional fields. = $ NETCOPY [/SUB] NODE["username"]::FILE[,FILE...] LOCALFILE8 $ NETCOPY [/SUB] FILE[,FILE...] NODE["username"]::FILED $ NETCOPY [/SUB] NODE1["username"]::FILE1 NODE2["username"]::FILE2I NETCOPY will prompt for the required passwords. To maintain passwordI security the passwords will not print (echo) on the terminal as the user enters them.I The quoted username is optional. If omitted, NETCOPY will insert theI username of the users account on the local system. A list of filenamesI may be specified for the input file spec, however only the first file0 specification may contain a node specification.. OPTIONAL QUALIFIERS: Copy qualifiers:I NETCOPY allows file wildcarding as well as the following COPYI qualifiers: /VOLUME, /CONTIGUOUS, /REPLACE, /PROTECTION, /LOG,I /TRUNCATE, and /OVERLAY. These qualifiers will be applied to the outputI file specification regardless of where they appear in the NETCOPYI command line. See HELP COPY or the Digital Command Language Users' Guide for further information on COPY. The "/SUBPROCESS" qualifier:I This qualifier will cause the network copy operation to be performed asI a spawned (background) process. This is useful for lengthy copyI operations. NETCOPY will return the process identification number of0 the spawned process and return the user to DCL. ' NOTEI The user should be aware that the copy operation will be happeningI concurrently with the command session and that logging off before theI network copy is complete will abort the subprocess. (The DCL commandG SHOW PROCESS/SUB will show if the copying subprocess is still active.) .end literal.page.literal1 EXAMPLES OF NETCOPY USEI The examples below demonstrate a user running NETCOPY from an account2 with a username of ABC1234 on DECnet node VAXA::. .end literal.nf/####$#^*NETCOPY/SUB#VAXB::FILE.DAT#MYFILE.DAT\*.f.literal9 Password : {password entered for the VAXB:: ABC1234]% The command above is the same as:4 $ COPY VAXB"ABC1234 secret"::FILE.DAT MYFILE.DAT .end literal.nfJ####$#^*NETCOPY/SUB#VAXB"CDE5679"::HISFILE.DAT#VAXC::[.SUBDIR]MYFILE.DAT\*.f.literalD VAXB:: password : {user enters the password for VAXB:: CDE5678}D VAXC:: password : {user enters the password for VAXC:: ABC1234}? [0041003B] {NETCOPY returns process identification. I The qualifier "/SUB" directs NETCOPY to spawn the copy operation into the background. .end literal7####$#^*NETCOPY VAXC::_*._* _*/LOG/PROTECTION_=(W:RE)\*.literal@ VAXC:: Password : {user enters password for VAXC:: ABC1234}F %COPY-S-COPIED, _VAXC"ABC1234 password"::USER:[ABC1234]LOGIN.COM;24 copied to USER:[ABC1234]LOGIN.COM;1 (45 records)E %COPY-S-COPIED, _VAXC"ABC1234 password"::USER:[ABC1234]LAB1.FOR;14 copied to USER:[ABC1234]LAB1.FOR;1 (105 records)E %COPY-S-COPIED, _VAXC"ABC1234 password"::USER:[ABC1234]LAB1.DAT;13 copied to USER:[ABC1234]LAB1.DAT;1 (14 records)G This example copies all the files in VAXC::[ABC1234] to [ABC1234] F on the current system logging each file as it is copied and giving= them a protection allowing WORLD read and execute access. .end literal)*[DCOLIB.TSLIB_PROGS.NETCOPY]NETMESS.MSG;1+,./ 4G-#%0123KPWO56CA7`>*189f1G HJ".title error messages for NETCOPY .facility NETCOPY,1 /prefix=MSG_.severity ERROR;BADPROT /USECOPY 5NONUM (NOSPAWN 3NOCHAN (NOPASS >SYNSOURCE BSYNDEST GONENODE ,BADFILLST .end