This Secure FTP on MPE/iX refers to a command file SFTPPUT.
http://www.docs.hp.com/en/14248/Securing-FTP-Whitepaper.pdf
I have attached a copy of this file, it's the same file which was on Jazz.
Best Regards
Cathlene McRae
* To join/leave the list, search archives, change list settings, *
* etc., please visit http://raven.utc.edu/archives/hp3000-l.html *
PARM localfiles=? remotesystem=? remoteuser=? remotedir=* encrypt=true &
remoteSysT="MPE/iX" remSysHasCrypt="y" entry=main
#
# This script transfers, via FTP/iX, "localfiles" from the host MPE system to
# the "remotesystem". Depending on the "encrypt" parameter and the type of
# file (needs to be ASCII) the file(s) may be encrypted, via the POSIX crypt
# utility, before it is transferred. If the remote system is an MPE system a
# job will be streamed, via the 'site stream' FTP command, which automatically
# decrypts the file. If the remote system is not an MPE system then the key,
# assuming the file is encrypted, is displayed to $stdlist for use to manually
# decrypt the file via POSIX crypt. To force this script to evaluate the
# remote system type enter "*" as the value of 'remoteSysT'.
#
# FTP PASSIVE mode is used to increase the chances of being able to connect
# through client firewalls.
#
# Parameters are defined in the HELP section at the end of this script.
# An important note on crypt and IO redirection via the C library is at the end
# of the script.
#
if '!entry' = 'main' then
# main entry point: validate parms, prompt for remote user password if,
# needed, etc.
echo
setvar _ftp_me basename(hpfile)
echo --- !_ftp_me --- version X.08
echo
# Help/usage needed?
if pos('?','!localfiles!remotesystem!remoteuser') > 0 then
xeq !hpfile !localfiles, !remotesystem, "!remoteuser" ;entry=help
escape
endif
# validate "encrypt" parm
if typeof(!encrypt) <> 3 then
echo *** Error: expected a TRUE or FALSE for the "encrypt" parm.
echo This parameter controls whether or not to encrypt the file prior
echo to FTP'ing it to the remote system.
escape
endif
# some MPE machines don't have the crypt utility installed.
if !encrypt and not finfo('crypt.hpbin.sys','exists') then
echo *** Error: encryption file: CRYPT.HPBIN.SYS missing.
echo Please download this file from http://jazz.external.hp.com/src
escape
endif
# validate "remoteSysT" parm
setvar _ftp_remSysT ups("!remoteSysT")
if lft(_ftp_remSysT,3) = "MPE" then
# any variation of MPE is acceptable
setvar _ftp_remSysT "MPE/IX"
elseif not(_ftp_remSysT="*" or _ftp_remSysT="UNIX" or &
_ftp_remSysT="WINDOWS") then
echo *** Error: expected values for "remoteSysT" (remote system type) &
parm are:
echo "MPE/iX" or "Unix" or "Windows" or "*" (meaning unknown).
echo Specifying this parameter as non-* improves performance since the
echo system type for the remote system does not need to be detected.
escape
endif
# validate "remSysHasCrypt" parm
setvar _ftp_remCrypt dwns(lft("!remSysHasCrypt",1))
if not (_ftp_remCrypt = "y" or _ftp_remCrypt = "n") then
echo *** Error: expected values for "remSysHasCrypt" parameter are "Y" &
or "N".
echo This parameter indicates if the remote MPE system has the crypt &
utility.
escape
endif
setvar _ftp_remCrypt (_ftp_remCrypt = "y")
# Handle embedded remote system's user's password(s).
# Syntaxes supported are: username[:[pass]] or, for non-MPE users,
# username[/[pass]]. MPE username is "user.acct". MPE embedded passwords
# can be specified as: "user/upass.acct/apass" or "user.acct:upass,apass",
# but NOT "user.acct/upass,apass".
setvar _ftp_user "!remoteuser"
setvar _ftp_pass "*"
if pos(".",_ftp_user) > 0 then
# we better have an MPE user.acct
# capture and remove embedded passwords, if any
setvar _ftp_u_pwd ""
setvar _ftp_a_pwd ""
setvar _ftp_u word(_ftp_user,".")
setvar _ftp_a word(_ftp_user,".",-1)
if pos("/",_ftp_u) > 0 or pos("/",_ftp_a) > 0 then
# format is: user[/upass].acct[/apass]
if pos("/",_ftp_u) > 0 then
setvar _ftp_u_pwd word(_ftp_u,"/",-1)
setvar _ftp_u word(_ftp_u,"/")
endif
if pos("/",_ftp_a) > 0 then
setvar _ftp_a_pwd word(_ftp_a,"/",-1)
setvar _ftp_a word(_ftp_a,"/")
endif
setvar _ftp_user _ftp_u+"."+_ftp_a
setvar _ftp_pass _ftp_u_pwd+","+_ftp_a_pwd
elseif pos(":",_ftp_user) > 0 then
# format is: user.acct[:[[upass][,apass]]]
# note: _ftp_a (acct name) already contains ':[password(s)]'
setvar _ftp_a word(_ftp_a,":")
setvar _ftp_pass word(_ftp_user,":",-1)
setvar _ftp_user word(_ftp_user,":")
# break apart MPE passwords for possible stream job
if pos(",",_ftp_pass) > 0 then
setvar _ftp_u_pwd word(_ftp_pass,",")
setvar _ftp_a_pwd word(_ftp_pass,",",-1)
else
setvar _ftp_u_pwd _ftp_pass
endif
#else, no embedded MPE password(s)
endif
else
# non-MPE user name. Format is: user[:pass] or user[/pass]
if delimpos(_ftp_user,":/") > 0 then
setvar _ftp_pass word(_ftp_user,":/",-1)
setvar _ftp_user word(_ftp_user,":/")
endif
endif
# password(s) provided? If not, prompt.
# Note: a null, '', password is allowed in the remoteuser parm and will not
# trigger a prompt. Null passwords are specified as: "username:" or
# "username/".
if _ftp_pass = "*" and hpinteractive then
set echo=off
if pos(".",_ftp_user) > 0 then
# assume MPE user.acct
echo Password for !_ftp_user on !remotesystem?
setvar _ftp_pass &
repl(input(" (MPE password syntax is 'user,acct') ")," ","")
# remove quote marks from in case user enters literally "upass,apass"
setvar _ftp_pass repl(repl(_ftp_pass,'"',''),"'","")
if setvar(_ftp_u_pwd,word(_ftp_pass,",")) <> _ftp_pass then
# extract acct password
setvar _ftp_a_pwd word(_ftp_pass,",",-1)
endif
else
setvar _ftp_pass &
repl(input("Password for !_ftp_user on !remotesystem ")," ","")
endif
set echo=on
echo
endif
# convert "remotedir" to POSIX syntax, if needed
setvar _ftp_logonGrp ""
if setvar(_ftp_remDir,ltrim(rtrim("!remotedir"))) <> "*" and &
alpha(lft(_ftp_remDir,1)) then
# convert assumed MPE group[.acct] name to POSIX syntax
if pos(".",setvar(_ftp_remDir,ups(_ftp_remDir))) = 0 then
# qualify MPE group name
setvar _ftp_remDir _ftp_remDir+"."+hpaccount
endif
setvar _ftp_remDir "/"+word(_ftp_remDir,".",-1)+"/"+word(_ftp_remDir,".")
setvar _ftp_logonGrp "," + word(_ftp_remDir,"/",-1)
endif
errclear
continue
listfile !localfiles,6;seleq=[object=file] >flist
if hpcierr <> 0 then
echo *** Error: LISTFILE !localfiles
print flist
purge flist;temp
escape
endif
# FTP the files contained in flist.
continue
xeq !hpfile !localfiles, !remotesystem, "!_ftp_user", !remotedir, !encrypt &
!remoteSysT, entry=put <flist
# clean up
purge flist;temp
# ###deletevar _ftp_@
return
elseif '!entry' = 'put' then
# The 'put' entry point reads the output of the listfile,6, optionally
# encrypts each file, and FTP's it to the remotesystem. If the remote
# system is MPE then we decrypt the transferred file by creating a stream
# job, sending it across, and executing it via "site stream". There are also
# some considerations regarding crypt mentioned in the intro comments.
# Note: only ASCII files with an eof > 0 are encrypted.
#
setvar _ftp_total setvar(_ftp_cnt,finfo(hpstdin,'eof'))
setvar _ftp_xfer setvar(_ftp_cryptCnt,0)
# see if we need to determine the remote system type.
if _ftp_remSysT = "*" then
# get remote sys type via FTP's syst command
echo > ftpin EXITONERROR
echo >>ftpin OPEN !remotesystem
echo >>ftpin USER !_ftp_user !_ftp_pass
echo >>ftpin PASSIVE
echo >>ftpin SYST
echo >>ftpin :setvar _ftp_remSysT FTPLASTREPLY
echo >>ftpin BYE
continue
xeq ftp.arpa.sys <ftpin >ftplist
if FTPLASTERR >= 0 then
setvar _ftp_remSysT ups(word(_ftp_remSysT,,2))
echo Remote system type is: !_ftp_remSysT
echo
elseif FTPLASTERR = -66 then
echo *** FTP error 66: cannot connect to "!remotesystem".
escape
elseif FTPLASTERR = -65 then
echo *** FTP error 65: invalid user ID or password.
escape
else
echo Warn: cannot determine remote system type. Default is "unkn".
echo *** FTP $stdlist follows:
echo
pause 2
print ftplist
setvar _ftp_remSysT "*"
endif
endif
# If the remote system is MPE/iX and the encrypt parm is true then we'll
# likely need to decrypt the file on the remote MPE machine.
# First we need to create a version of crypt without PH cap, see crypt note.
if (not _ftp_remCrypt) and _ftp_remSysT = "MPE/IX" and !encrypt then
# make local copy of crypt w/o PH cap
setvar _ftp_cryptF 'crypt.hpbin.sys'
setvar hpcierr 0
continue
copy crypt.hpbin.sys,crypt01;yes
if hpcierr = 0 then
setvar _ftp_cryptF 'crypt01'
setvar hpcierr 0
setjcw CJCW 0
continue
xeq linkedit.pub.sys "altprog crypt01;cap=ia,ba" >$null
if hpcierr <> 0 or CJCW <> 0 then
echo Warn: unable to remove PH cap from crypt. Decryption on remote
echo system may fail if remote group lacks PH.
endif
endif
endif
# *** main loop ***
# read filenames from $stdin input file, encrypt if necessary, and transfer
# file to remote system.
while setvar(_ftp_cnt,_ftp_cnt-1) >= 0 and &
setvar(_ftp_file,ltrim(rtrim(input()))) <> "" do
# convert MPE filenames to POSIX
if lft(_ftp_file,1) <> "/" then
setvar _ftp_file "/" + word(_ftp_file,".",-1) + "/" + &
word(_ftp_file,".",2) + "/" + word(_ftp_file,".")
endif
setvar _ftp_baseN basename(_ftp_file)
setvar _ftp_putAs ""
if _ftp_remDir <> '*' then
setvar _ftp_putAs _ftp_remDir+"/"
endif
# create FTP's $stdin temp file
echo >ftpin OPEN !remotesystem
echo >>ftpin USER !_ftp_user !_ftp_pass
echo >>ftpin PASSIVE
# encrypt file?
setvar _ftp_did_crypt false
if !encrypt and &
pos("ASCII",setvar(_ftp_fopts,finfo(_ftp_file,'fmtfopt'))) > 0 and &
finfo(_ftp_file,'eof') > 0 then
# add the suffix ".enc" and encrypt the file in the CWD. However,
# since some of the file xfers will be from/to MPE groups, limit the
# encrypted file's name to 16 characters (when remote sys is MPE).
if _ftp_remSysT = "MPE/iX" then
setvar _ftp_encF "./"+lft(_ftp_baseN,16-4)+".enc"
else
setvar _ftp_encF "./"+_ftp_baseN+".enc"
endif
# create key based on MPE file properties
setvar _ftp_key &
decimal(finfo(_ftp_file,'eof'))+ &
decimal(setvar(_ftp_rsize,finfo(_ftp_file,'recsize')))+ &
decimal(finfo(_ftp_file,'bytefilesize'))
echo ** encrypting file : !_ftp_file
# set up the file equations necessary to get crypt to work correctly -
# see IO redirection note near the end of this script.
file cryptin=!_ftp_file,old
file cryptout=!_ftp_encF;rec=-1,,b,ascii;disc=2147483647
setvar hpcierr 0
setjcw CJCW 0
continue
xeq crypt.hpbin.sys "!_ftp_key" <*cryptin >*cryptout
if not (setvar(_ftp_did_crypt,&
(CJCW=0 and HPCIERR=0 and finfo(_ftp_encF,'exists')))) then
echo *** Error: encryption of !_ftp_file failed...
escape
endif
setvar _ftp_cryptCnt _ftp_cryptCnt+1
echo >>ftpin PUT !_ftp_encF !_ftp_putAs!_ftp_encF
echo >>ftpin :setvar _ftp_lastreply FTPLASTREPLY
if _ftp_did_crypt and _ftp_remSysT = "MPE/IX" then
# special case where source and target systems are MPE.
# The goal is to be able to automatically decrypt, on the remote
# system, the file just FTP'd over. To do this we do the following:
# 1) xfer the crypt pgm in case not present on remote system (note
# if the remote sys has crypt this step is skipped),
# 2) create a jobstream (JCL) file which decrypts the file,
# 3) xfer this jobstream file,
# 4) execute this jobstream via FTP's 'site stream' command.
if not _ftp_remCrypt then
echo >>ftpin PUT !_ftp_cryptF !"_ftp_putAs"CRYPT01
endif
echo >>ftpin PUT strmin !"_ftp_putAs"JDECRYPT
echo >>ftpin SITE STREAM !"_ftp_putAs"JDECRYPT
# create stream job to be sent to the remote system and
# executed there via SITE STREAM.
xeq !hpfile !localfiles, !remotesystem, "!remoteuser" ;entry=job &
>strmin
else
# remote system is not MPE
echo KEY: !_ftp_key
endif
else
# no encryption done
echo >>ftpin PUT !_ftp_file !_ftp_putAs!_ftp_baseN
echo >>ftpin :setvar _ftp_lastreply FTPLASTREPLY
endif
# **** do the actual ftp file transfer ****
echo >>ftpin QUIT
echo ** transferring file: !_ftp_file
continue
xeq ftp.arpa.sys <ftpin >ftplist
if (FTPLASTERR = 0) and (FTPXFERFILES > 0) and &
(FTPREQFILES = FTPXFERFILES) then
# requested number of files were transferred.
setvar _ftp_xfer _ftp_xfer+1
else
# FTP connection or transfer error...
echo
echo *** Error transferring file: !_ftp_file
if _ftp_did_crypt then
echo (actual file for FTP 'put' is: !_ftp_encF)
endif
if FTPLASTERR = -66 then
echo *** FTP error 66: cannot connect to "!remotesystem".
escape
elseif FTPLASTERR = -65 then
echo *** FTP error 65: invalid user ID or password.
escape
elseif pos('pathname specified does not exist.',_ftp_lastreply)>0 then
# remote dir/group name is not valid, so all xfers will fail...
echo *** Remote directory !_ftp_PutAs is invalid.
escape
elseif pos('SITE STREAM',FTPLASTMSG) > 0 then
# assume site stream cmd failed. Could be remote system is not MPE
echo *** SITE Stream failed on remote system. Script expects &
"!remotesystem"
echo to be an MPE/iX system.
escape
else
# ok to continue with the script even with this xfer error
echo FTP $stdlist follows:
pause 2
echo ...
print ftplist;start=-10
echo
if _ftp_cnt > 0 then
echo continuing...
echo
endif
endif
endif
if _ftp_did_crypt then
# delete the local encrypted file
purge !_ftp_encF;temp
endif
endwhile
# report some stats
echo
echo =====================================================
if _ftp_xfer = 1 then
echo 1 file transferred successfully.
else
echo !_ftp_xfer files transferred successfully.
endif
if _ftp_xfer <> _ftp_total then
echo *** Error: ![_ftp_total-_ftp_xfer] out of !_ftp_total files not &
transferred.
endif
if _ftp_cryptCnt = 1 then
echo 1 file was encrypted.
else
echo !_ftp_cryptCnt files were encrypted.
endif
echo
# delete crypt01 file, if created.
purge crypt01 >$null
return
elseif '!entry' = 'job' then
# The 'job' entry point creates a job stream to be executed on the remote
# MPE system. This jobs main purpose is to automatically decrypt the
# encrypted file just FTP'd across. STDLIST has been redirected to the
# name of the job stream(JCL) file.
#
echo !!job FTPCRYPT,!_ftp_u/!_ftp_u_pwd.!_ftp_a/!_ftp_a_pwd!_ftp_logonGrp;&
outclass=,2
echo !# This job was created by !hpfile to decrypt file
echo !# !_ftp_file sent from !hpsysname at IP: !hplocipaddr.
echo !# Job create time: !hpdatef !hptimef
echo !# Job created by user: !hpuser.!hpaccount
echo !#
echo !!if not finfo("!_ftp_encF","exists") then
echo ! tell !_ftp_user; Encrypted file !_ftp_encF missing. Job stopped.
echo ! escape 1
echo !!endif
echo !!setvar _decryptf "./"+basename("!_ftp_encF",".enc")+".dec"
echo !!echo Decrypting !_ftp_encF as !!_decryptf
echo !!setvar _rootfile "./!_ftp_baseN"
echo !# remember FTP overwrites the target file, if it exists
echo !!purge !!_rootfile !>$null
echo !# decrypt the file based on the same key
echo !# local copy of crypt.hpbin.sys sent as "/CWD/CRYPT01"
echo !# but crypt01 can be purged by a copy of this job
echo !# running simultaneously. Try to handle this...
echo !!setvar _cryptF "CRYPT01"
echo !!if not finfo(_cryptF,"exists") then
echo ! setvar _cryptF "CRYPT.HPBIN.SYS"
echo ! if not finfo(_cryptF,"exists") then
echo ! tell !_ftp_user; Missing CRYPT program to decrypt file.
echo ! tell !_ftp_user; Can't find CRYPT01 or CRYPT.HPBIN.SYS.
echo ! tell !_ftp_user; !_ftp_encF needs to be decrypted. Job stopped.
echo ! escape 2
echo ! endif
echo !!endif
echo !# set up file equations for crypt
echo !!file jcryin=!_ftp_encF,old
echo !!file jcryout=!!_decryptf;rec=-1,,b,ascii;disc=2147483647
echo !!setjcw CJCW 0
echo !!setvar HPCIERR 0
echo !!continue
echo !!xeq !!_cryptF "!_ftp_key" !<*jcryin !>*jcryout
echo !!if not (CJCW=0 and HPCIERR=0 and &
finfo(_decryptf,'exists')) then
echo ! tell !_ftp_user; Decryption failed on !_ftp_encF. Job stopped.
echo ! escape 3
echo !!endif
echo !# save decrypted file for either FCOPY or the rename below
echo !!purge !!_decryptf !>$null
echo !!save !!_decryptf
echo !# don't fcopy the file if it was a bytestream file to begin with.
if pos('BYTESTREAM',_ftp_fopts) = 0 then
# original file was not a bytestream file so ok to convert back to it's
# original file properties.
echo !# convert decrypted file from bytestream to fixed/variable file
# fcopy FROM=file eq
echo !!file fcin=!!_decryptf,old
# fcopy TO=file eq, need to create rec= & disc= side of file eq
echo !!file fcout=!!_rootfile,new &
;rec=!_ftp_rsize,,![lft(word(_ftp_fopts,,2),1)],ascii &
;disc=![finfo(_ftp_file,'limit')] &
;code=![finfo(_ftp_file,'fcode')]
echo !# create a temp "YES" input file for fcopy
# note: don't need fcopy input "yes" file when run in batch for truncation
# prompt.
echo !!setvar HPCIERR 0
echo !!continue
echo !!fcopy from=*fcin;to=*fcout !>$null
echo !!if not (HPCIERR=0 and finfo(_rootfile,'exists')) then
echo ! tell !_ftp_user; FCOPY failed on !!_decryptf. HPCIERR=!!hpcierr. &
Job stopped.
echo ! escape 4
echo !!endif
echo !!purge !!_decryptf
else
# original file was BS, no fcopy but need the right final name.
echo !!rename !!_decryptf, !!_rootfile
echo !!echo rename !!_decryptf, !!_rootfile
endif
echo !# clean up
echo !!purge !_ftp_encF
echo !!purge jdecrypt !>$null
echo !!purge crypt01 !>$null
echo !!eoj
return
elseif '!entry' = 'help' then
# The 'help' entry point displays help/usage text.
#
echo !_ftp_me transfers one or more files, via FTP/iX, to the specified remote
echo system. Most commonly the file(s) will be encrypted prior to being
echo transferred using the POSIX 'crypt' utility.
echo
echo Usage:
echo !_ftp_me fileset, remoteSystem, remoteUser, remoteDir,
echo encrypt, remoteSysType, remSysHasCrypt
echo where:
echo 'fileset' (required) a single file or wildcarded fileset which can
echo supplied in MPE or POSIX syntax. Eg. F@, ./f#, /ACCT/dir/f2
echo
echo 'remotesystem' (required) the name or IP address of the system where the
echo file is being transferred. The remote system can be all flavors of
echo Unix, Windows or MPE, as long as the remote system can decrypt
echo encrypted files via the POSIX crypt utility. The decryption is done
echo automatically for MPE systems; whereas, non-MPE systems will need
echo to run the crypt utility using the key which is displayed to
echo $stdlist.
echo
echo 'remoteuser" - (required) the user name which FTP will use to connect to
echo the remote system. The syntax is: "username[:password]" or
echo "username[/password]". To suppress password prompting the username
echo should terminate with a ":" or "/", meaning a null password, eg.
echo 'foo:'. For MPE remote systems the username field consists of
echo "user.account". If passwords are embedded in MPE user names the
echo format is: "user/upass.acct/apass" or "user.acct:upass,apass". If all
echo passwords are omitted the user may be prompted for the passwords.
echo The expected user response for MPE passwords is: "userpass,acctpass".
echo NOTE: the comma form of an MPE password causes quotes to be required
echo for this parameter so that it is treated as a single token.
echo
echo 'remotedir' - (optional) the name of the directory (or group.account) on
echo the remote system where the file will be sent. Syntax: "/dir",
echo "./dir" "../dir", "~user", "group.acct", or "group". If omitted the
echo remote user's home directory is assumed.
echo
echo 'encrypt' - (optional) TRUE (default) means to encrypt text files. FALSE
echo means no encryption. However, even if 'encrypt' is TRUE, only non-
echo empty ASCII files will be encrypted.
echo
echo 'remoteSysT' - (optional) "MPE/iX", default, means the remote system is
echo known to be an MPE system. "Unix" means the remote system is known to
echo be a Unix system. '*' means the remote system type will be determined
echo by this script, which is extra overhead. If the file is encrypted and
echo the remote system is MPE system then a job will be streamed on the
echo remote system to decrypt the file and do some minor cleanup.
echo
echo 'remSysHasCrypt' - (optional) only applies when the remote system is MPE.
echo "Y" (default) indicates that the remote system already has the crypt
echo utility, and thus it does not need to be FTP'd across the wire. "N"
echo means the remote MPE system does not have Crypt, in which case, a
echo non-PH version is FTP'd to the remote system, executed, and then
echo removed. If the remote system is not MPE this parameter is ignored.
echo
return
else
# Invalid entry point -- assume extra parm error...
echo *** Error: extra parameter '!entry'.
echo Enter !_ftp_me with no parameters for help text.
echo
return
endif
################ Version History and Notes ####################
Notes on crypt: crypt requires PH capability to load thus the group and
account containing crypt must have PH -- it doesn't seem to matter if the
user has PH or not. However, crypt does not NEED PH in order to run
properly, it was just linked with PH to make life interesting... Thus, crypt
is copied locally, PH is removed, and this copy is sent to the remote
system.
Note on IO redirection: Crypt also as some strangeness around IO redirection.
It appears that a redirected filename cannot contain a leading "./" or "/"
when running crypt directly from the CI via an info= string. This may be an
artifact of the C library as other programs in hpbin.sys have similar
behavior. One solution is to run the shell with an input file which contains
the crypt command. In this case the filename can be absolute pathnames.
Another idea is to run the shell from the CI with a "-c crypt <name1 >name2"
but if "name1" or "name2" are absolute pathnames we get the same IO
redirection mentioned in the 1st sentence above. The solution chosen saves a
process create (the shell) and uses the CI's IO redirection via file
equations which create bytestream files and allow absolute pathnames. Be
CAREFUL if you change this part of the script!
X.00 - Initial version based on scripts written by Murali. (JV)
X.01 - uncommented the !EOJ line in the job and some minor cleanup. (JV)
X.02 - some minor bug fixes based on testing in a "clean" group, improved
summary reporting, strip quotes from prompted passwords, detect FTP
error -66 indicating can't connect remote system. (JV)
X.03 - fix test for crypt failing in temp job stream. Place ".enc" suffix file
in /tmp/_PIN-filename.enc to avoid problems with longer filenames under
an MPE group. (JV)
X.04 - using PASSIVE ftp now to increase chances of transfer working across
client firewalls, display script version ID, some ftp connection error
fixes, changed previous versions to "X" since script is not ready for
customers yet, redirect ftp stdlist to a TEMP file for better error
messaging, which means no longer using /tmp/_PIN..., detect ftp xfer
errors by comparing ftpxferfiles with ftpreqfiles variables due to ftp
bug where >16 char filenames appear to be xfer'd to an MPE group (can't
due to fname length) but they aren't -- no ftp error reported in vars or
$stdlist. (JV) Note: this is not an ftp bug. It turns out that, even if
you ftp CD to a different location, when you PUT an absolute pathname
with no second name on the PUT line, FTP places the file in the location
defined by the full pathname-- ignoring the CD. This is how ftp works on
HP-UX too.
X.05 - allow any string beginning with "mpe" to indicate the remote sys is MPE,
replace frombyte with FCOPY to preserve source file attributes, created
a 'job' entry to improve readability and increase performance. (JV)
X.06 - don't call finfo to get 'recsize' twice, display encryption key for non-
MPE remote systems, redirect fcopy output to $null to make spoolfiles
less cluttered, detect bad remote dir and stop transfers, detects site
stream error, no longer use EXITONERR (in order for these errors to be
detectable), don't truncate ".enc" name for non-MPE remote systems. (JV)
X.07 - minor spelling and help text fixes. (JV)
X.08 - remotesysT now defaults to "mpe/ix", added new parm to indicate that
crypt exists on remote system, per BT queen djg. (JV)
* To join/leave the list, search archives, change list settings, *
* etc., please visit http://raven.utc.edu/archives/hp3000-l.html *
|