perm filename ACCCHK.FAI[S,NET]1 blob
sn#561810 filedate 1983-05-30 generic text, type T, neo UTF8
;I was asked to take this code from ARPANet FTP server rather than writing
;my own. If you think this is bad, look at what i didn't take. If it does
;not work, don't complain to me. I'm not sure even who to complain to.
; --- TVR/14-Jan-81
;------------------------------------------------------------------------------
DEFINE ACCIMP <
;Following are used by ACCCHK and GRPCHK. They are NOT reentrant!
OWNER: BLOCK 1 ;User has owner access to the file.
UPPN: BLOCK 1 ;User's PPN
PASSOK: BLOCK 1 ;Password was accepted.
PRIVS: 0 ;SAVE USER'S PRIVILEGES HERE
PRVMTA: SIXBIT /GODMOD/
14
IOWD 17,PRVBUF
PRVBUF: BLOCK 13
PASWD: 0 ;PASSWORD RETURNED HERE IF INF
PRIVWD: 0 ;PRIVILEGES RETURNED HERE
0 ;LAST LOGIN TIME RETURNED HERE
GRPWD: 0 ;GROUP ACCESS BITS RETURNED HERE
>;DEFINE ACCIMP
BEGIN ACCROCK
;This makes the things work with ETHFTP
T←RET
D←RET2
B←TAC
A←TAC2
UFDC←PROCHN
;------------------------------------------------------------------------------
; ACCCHK
;
;Call with protection from LOOKUP in RET, PPN of file on RET2, and access in TAC.
;Skips if it is accessible.
;------------------------------------------------------------------------------
; GRPCHK
;
;Call with PPN of file in RET2. Sets OWNER if user has owner access to that file.
;
;------------------------------------------------------------------------------
;------------------------------------------------------------------------------
;
; Access code to files.
;
; (These are magic numbers which came from FTPSER)
;
;; MOVEI TAC,1 (FOR DATA OUT TO IMP, LOCAL LOOKUP)
;; ,5 (FOR STAT, LOCAL LOOKUP, NO DATA TRANSFER)
;; ,2∨6 (FOR DATA IN FROM IMP, LOCAL ENTER)
;; (6 FOR MAIL OR MLFL, COPIES OLD FILE LATER)
;; ,3 (FOR DATA IN FROM IMP, LOCAL UPDATE)
;; ,10 (FOR RNTO OR DELE)
;; ,21 (FOR RNFR, DOES LOOKUP BUT CHECKS WRITE ACCESS)
;------------------------------------------------------------------------------
↑A.READ←←1 ;For reading file
↑A.WRITE←←2 ;For writing file
↑A.RMW←←3 ;For updating or appending
↑A.STAT←←5 ;For printing information in a UFD
↑A.DELET←←10 ;For deleting a file
;==============================================================================
;GROUP ACCESS/PRIVILEGE BITS
;None of these symbols are actually used in the code except GROUPS and MASPRV.
;GROUPS is a fullword value but MASPRV must be right half.
REAPRV←←40000
WRTPRV←←20000
MASPRV←←1
SYSPRV←←2
SCYPRV←←4
DECPRV←←10
ACTPRV←←20
CSPPRV←←40
GROUPS←←47 ;ALL OF THE ABOVE.
;ACCCHK OWNACC GRPCHK
↑ACCCHK:
;;; MOVE T,ILDD+2 ;GET PROTECTION
TLZ T,600000 ;FLUSH THESE LOSING BITS
SKIPN OWNER ;IF USER HAS GROUP ACCESS PRIVS TO THIS UFD,
CAMN D,UPPN ; OR IF FILE PPN IS USER'S PPN,
JRST OWNACC ; USE OWNER ACCESS
LSH T,3 ;ELSE EITHER LOCAL OR GUEST ACCESS
;;; TLNN FLG,(PASSBT) ; DEPENDING
skipn passok ;Skip if password was given successfully
LSH T,3
OWNACC: TRNE B,36 ;IF ANYTHING OTHER THAN STRAIGHT READ,
LSH T,1 ; CHECK WRITE ACCESS
TLNN T,200000 ;THE MAGIC BIT SHOULD ALWAYS BE HERE NOW
AOS (P) ;ACCESS OK
POPJ P,
↑GRPCHK:
SETZM OWNER ;THIS WILL FLAG OWNER ACCESS
;;; AOS ERRTYP ;WE'VE FOUND THE UFD
MTAPE UFDC,PRVMTA ;READ RETRIEVAL
POPJ P, ;CAN'T, NO GROUP ACCESS
SETZM PASWD ;JUST IN CASE WE HAVE INF
MOVE T,GRPWD ;GET FILE ACCESS GROUPS FOR THIS UFD
AND T,[GROUPS] ;JUST THE RIGHT BITS PLEASE
;;; HRRZ A,ILDD ;PRG OF TARGET UFD
;;; CAME A,UPRG ;PRG OF OUR USER
hrrz a,uppn ;Get programmer part of our user
caie a,(d) ;Is it the same as the file (s)he asks for?
TRZ T,MASPRV ;NOT THE SAME, NO MAS ACCESS
TLO T,REAPRV!WRTPRV ;ALSO ALLOW REA AND WRT ACCESS
TDNE T,PRIVS ;DOES USER HAVE ANY CORRESPONDING PRIVS?
SETOM OWNER ;YES! ALLOW OWNER ACCESS
POPJ P,
BEND ACCROCK