OpenVMS Source-Code Demos

LOGIN.COM

$	set noon				! no stopping for errors
$	set nover				!
$!===========================================================================
$! title  : login.com (for account: ict_ftp)
$! author : Neil Rieck
$! created: 2008.06.18
$! notes  :
$! 1. we are trying to emulate an XCOM session (run a job on logout)
$! 2. the initial connection event executes "login.com" which submits
$!    "login_helper.com"
$! 3. files FTP'd here will end up in folder [.data]
$! 4. "login_helper.com" waits for the starting process to log off then
$!    processes the received file(s)
$! 5. the account for "ict_ftp" must be defined in SYSUAF like so:
$!	device  = csmis_ict_ftp_root:
$!	direct  = [000000]
$!	default = csmis_ict_ftp_root:[000000]
$!	lgicmd  = csmis_ict_ftp:login.com
$! 6. logical csmis_ict_ftp_root is defined as:
$!	disk$user4:[csmis.csmis_ict_ftp.data.]
$! 7. this file has been modified to also work with SFTP under TCPware (note:
$!    you will need to manually create folders [.ssh] and [.ssh2] under
$!    folder [.data]
$!===========================================================================
$	set ver					! verbose
$	my_debug = 1				! enable logging of login.com
$	desired_user = "ICT_FTP"		! target user name (used below)
$!==============================================
$	bel[0,8]=7				! bel
$	dq[0,8]=34				! double quote
$	say :== write sys$output		!
$	ask :== inquire/nopunct			!
$	logflag = 0				! init logflag flag
$	netflag = 0				! init net flag
$ if (my_debug .eq. 1)				!
$ then						!
$	say "-i-diverting output to a log file"	!
$	define sys$output login.log		!
$	logflag = 1				!
$	say "-i-scrp: ", f$environment("PROCEDURE")
$ endif						!
$!------------------------------------------------------------
$! Change the way our FTP server software operates
$!------------------------------------------------------------
$	DEFINE TCPWARE_FTP_UNIX_STYLE_BY_DEFAULT        TRUE
$!~~	DEFINE TCPWARE_FTP_DISALLOW_UNIX_STYLE          FALSE
$	DEFINE TCPWARE_FTP_UNIX_STYLE_CASE_INSENSITIVE  TRUE
$	DEFINE TCPWARE_FTP_UNIX_YEAR_OLD_FILES          TRUE
$	DEFINE TCPWARE_FTP_STRIP_VERSION                TRUE
$!------------------------------------------------------------
$	my_mode = f$mode()			! INTERACTIVE/BATCH/NETWORK/OTHER
$	my_name = f$getjpi("","PRCNAM")		! get my current process name
$	my_user = f$getjpi("","USERNAME")	!
$	my_user = f$edit(my_user,"COLLAPSE")	! get my user name
$	my_pid  = f$getjpi("","PID")		!
$	say "-i-mode: ", my_mode		!
$	say "-i-name: ", my_name		!
$	say "-i-user: ", my_user		!
$	say "-i-pid : ", my_pid			!
$	wait 0:0:01				! avoid fast looping
$!-----------------------------------------------------------------
$! Some TCPware processes set MODE=OTHER rather than MODE=NETWORK so it is
$! better to jump out for BATCH and INTERACTIVE then just default the rest
$!-----------------------------------------------------------------
$	if (my_mode .eqs. "BATCH")		then goto batch_mode
$	if (my_mode .eqs. "INTERACTIVE")	then goto interactive_mode
$!-----------------------------------------------------------------
$! Note: we'll pass the ProcessName to the first job but it will only start
$! to execute when ProcessName is off the system (we can't process FTP'd files
$! until the FTP process releases them)
$!-----------------------------------------------------------------
$ netflag = 1					! NETWORK or OTHER
$ say "-i- starting Helper Task"		!
$!
$!	need to quote my_name due to spaces in SFTP name
$!	ftp example: "<FTP_ICT_FTP>"
$!	sftp example: "SSHD 0040A SFTP"
$!
$ my_name = dq + my_name + dq			! need to quote this due to spaces
$ if (my_user .eqs. desired_user)		! default path
$ then						!
$	submit	/log				-
		/noprint			-
		/queue=UNIVERSAL_CRE$BATCH	-
		/param=('my_name','my_pid')	-
		Csmis_Ict_Ftp:login_helper.com
$ else						! only used during testing
$!
$!	will need priv=CMKRNL to do this
$!
$	submit	/log				-
		/noprint			-
		/queue=UNIVERSAL_CRE$BATCH	-
		/user='desired_user'		-
		/param=('my_name','my_pid')	-
		Csmis_Ict_Ftp:login_helper.com
$ endif						!
$ wait 0:0:01					! wait 1 second
$ say "-i- your files won't be processed until you disconnect"
$ goto common_exit				!
$!=============================================================
$!	interactive mode is usually disabled.
$!		We need this for initial testing
$!		We need this for generating keys with SSHKEYGEN
$!=============================================================
$interactive_mode:
$	if (logflag .eq. 1)			!
$	then					!
$		deas sys$output			!
$		logflag=0			!
$	endif					!
$	set nover				!
$	set nocontrol=(y)			! disable control-y
$	say "========================================"
$	say bel,"interactive logins are not allowed on this account"
$	ask choice "developer password? "	!
$	if choice .eqs. "concealled"		!
$	then					!
$		set control			!
$		exit				!
$	else					!
$		say "Adios..."			!
$		logoutnow			!
$	endif					!
$batch_mode:					!
$common_exit:					!
$	set noon				!
$	if (logflag .eq. 1)			! if logging
$	then					!
$	    deas sys$output			! close
$	    logflag = 0				!
$	    if (netflag .eq. 1)			! if network
$	    then				!
$		mail /subj="ict-ftp-login-dot-log" login.log neil
$	    endif				!
$	endif					!
$	exit					!