10 FUNCTION LONG CHKRGHTS (LONG P_PID, LONG P_RIGHTS_ID) %TITLE "Check users rights Identifiers" %IDENT "CHKRGHTS 91.05.31" %SBTTL "DOCUMENTATION SECTION" !====================================================================== ! PROGRAM DESCRIPTION !====================================================================== !Checks rights identifiers of the user ! ! Parameters Passed: ! P_PID LONG BY VALUE The PID of the process ! whos rights are being ! checked ! ! P_RIGHTS_ID LONG BY VALUE The Rights identifier ! to check for in the ! process ! ! !====================================================================== ! MODIFICATION HISTORY !====================================================================== !VERSION--------AUTHOR------------------DATE------------APPROVAL------- ! 1 John Post 91.05.31 M102_0_121 ! !====================================================================== ! COMPILE/LINK INSTRUCTIONS !====================================================================== !$BASIC CHKRIGHTS !$LINK/NOTRACE CHKRIGHTS !====================================================================== %PAGE 200 %SBTTL "DECLARATION SECTION" !********************************************************************** ! DECLARATIONS FROM %INCLUDE FILES !********************************************************************** %INCLUDE "EXT_COMMON.BAS" !********************************************************************** ! CONSTANTS !********************************************************************** DECLARE WORD CONSTANT & TRUE = -1%, & FALSE = 0% !********************************************************************** ! RECORDS !********************************************************************** RECORD ITEM_LIST_REC !layout of item list... WORD BUF_LEN !length of item WORD ITEM_CODE !code of item to get LONG BUF_ADDR !address of buffer LONG RET_LEN !address of returned length END RECORD RECORD RIGHTS_LIST_REC !layout of rights list rec... LONG ID_VAL !The value of the rights identifier LONG ID_ATT !The attributes of the rights identifier END RECORD !********************************************************************** ! MAPS !********************************************************************** !********************************************************************** ! COMMONS !********************************************************************** !********************************************************************** ! VARIABLES !********************************************************************** DECLARE LONG & FUNC_STAT, !function status & RIGHTS_LIST_LEN, !total length of idenfiers list & I, !dumb count & NUMB_IDS, !number of identifiers in the list & PID, !Process ID & RIGHTS_ID !Rights ID !********************************************************************** ! ARRAYS !********************************************************************** DIMENSION ITEM_LIST_REC & JPI_LIST(50) DIMENSION RIGHTS_LIST_REC & RIGHTS_LIST(200) !********************************************************************** ! FUNCTIONS !********************************************************************** !********************************************************************** ! EXTERNAL CONSTANTS !********************************************************************** EXTERNAL LONG CONSTANT & SS$_NOPRIV, & SS$_NONEXPR, & JPI$_RIGHTSLIST, & SS$_WASSET, & SS$_WASCLR, & SS$_NORMAL !********************************************************************** ! EXTERNAL FUNCTIONS !********************************************************************** EXTERNAL LONG FUNCTION & SYS$GETJPIW !gets process info !********************************************************************** ! EXTERNAL SUBPROGRAMS !********************************************************************** %PAGE 300 %SBTTL "INITIALIZATION SECTION" !====================================================================== !NO EXECUTABLE STATEMENTS BEFORE THIS POINT !====================================================================== ON ERROR GOTO ERROR_HANDLING !********************************************************************** ! PRINT USING FORMATS !********************************************************************** !********************************************************************** ! VARIABLES !********************************************************************** INIT_LISTS: !initialize item lists... !THE RIGHTS LIST BUFFER (ALLOWABLE OF 200 RIGHTS IDENTIFIERS) JPI_LIST(0)::BUF_LEN=1608% JPI_LIST(0)::ITEM_CODE=JPI$_RIGHTSLIST JPI_LIST(0)::BUF_ADDR=LOC(RIGHTS_LIST(0)) JPI_LIST(0)::RET_LEN=LOC(RIGHTS_LIST_LEN) JPI_LIST(1)::BUF_LEN=0 JPI_LIST(1)::ITEM_CODE=0 JPI_LIST(1)::BUF_ADDR=0 JPI_LIST(1)::RET_LEN=0 %PAGE 1000 %SBTTL "MAIN LOGIC SECTION" !====================================================================== !MAIN LOGIC STARTS HERE !====================================================================== ! Convert the values passed to this function into the actual ! values they represent PID = LOC (P_PID) RIGHTS_ID = LOC (P_RIGHTS_ID) ! Check the Rights ID to check with the processes rights list. ! Both the process rights and system rights will be checked. FUNC_STAT = SYS$GETJPIW(,PID,,JPI_LIST(0),,,) ! Check to see if we had any problems. IF ((FUNC_STAT AND 1%) = 0%) THEN EXIT FUNCTION FUNC_STAT END IF NUMB_IDS = RIGHTS_LIST_LEN / 8 ! The actual number of identifiers ! in the list. NUMB_IDS = NUMB_IDS - 1 ! Subtract one from the list since ! The list starts at 0 and not 1. FOR I = 0 TO NUMB_IDS IF RIGHTS_LIST(I)::ID_VAL = RIGHTS_ID ! Does the rights ID match THEN FUNC_STAT = SS$_WASSET ! YES GOTO END_OF_PROGRAM END IF NEXT I FUNC_STAT = SS$_WASCLR ! NO %PAGE %SBTTL "SUBROUTINE DEFINITION SECTION" 15000 !====================================================================== ! SUBROUTINE DEFINITION SECTION !====================================================================== %PAGE %SBTTL "FUNCTION DEFINITION SECTION" 20000 !====================================================================== ! FUNCTION DEFINITION SECTION !====================================================================== %PAGE %SBTTL "ERROR HANDLING SECTION" 25000 !====================================================================== ! ERROR HANDLING SECTION !====================================================================== ERROR_HANDLING: ON ERROR GOTO 0 !====================================================================== ! END OF PROGRAM !====================================================================== END_OF_PROGRAM: EXIT FUNCTION FUNC_STAT %PAGE %SBTTL "EXTERNAL SUBROUTINE DEFINITION SECTION" 31000 !====================================================================== ! EXTERNAL SUBROUTINE DEFINITION SECTION !====================================================================== 32767 END FUNCTION