-+-+-+-+-+-+-+-+ START OF PART 3 -+-+-+-+-+-+-+-+ X`09`20`20`20PRCNAM_SIZE`20=`2015%,`09`09`09`09`09`09`26 X`09`20`20`20TERMINAL_SIZE`20=`208%,`09`09`09`09`09`09`26 X`09`20`20`20TT_ACCPORNAM_SIZE`20=`2064%,`09`09`09`09`09`26 X`09`20`20`20TT_PHYDEVNAM_SIZE`20=`2016%,`09`09`09`09`09`26 X`09`20`20`20USERNAME_SIZE`20=`2012%,`09`09`09`09`09`09`26 X`09`20`20`20INDEX_KEY_SIZ`20=`2032%,`09`09`09`09`09`09`26 X`09`20`20`20KEY_PHRASE_SIZ`20=`2094%,`09`09`09`09`09`26 X`09`20`20`20KEY_PHRASE_REC_SIZ`20=`20128%,`09`09`09`09`09`26 X`09!+`20`26 X`09!`20Modify`20the`20remaining`20LONG`20constants`20to`20suit`20local`20needs V`20`26 X`09!-`20`26 X`09`20`20`20CHLNG_CHARS_MIN`20=`204%,`09`09!Min`20#`20chars`20to`20ask`20for V`09`26 X`09`20`20`20CHLNG_CHARS_MAX`20=`206%,`09`09!Max`20#`20chars`20to`20ask`20for V`09`26 X`09`20`20`20MAX_CHALLENGE_LINES`20=`203%,`09`09!#`20input`20lines`20on`20chall Venge`20`26 X`09`20`20`20MIN_KEY_PHRASE_LEN`20=`2020%`09`09!Shortest`20legal`20key`20phrase V X`09DECLARE`20STRING`20CONSTANT`09`09`09`09`09`09`26 X`09`20`20`20KEY_PHRASE_FILENAM`20=`20"SYS$SYSTEM:PBYDRIVER.DAT" X`09! X`09!`20DATATYPE`20SPECIFICATION: X`09! X`20`20`20%NOLIST X`20`20`20%IF`20%DECLARED(%BASIC$QUADWORD_DECLARED)`20=`200`20%THEN X`20`20`20`20`20`20%LIST X`09RECORD`20BASIC$QUADWORD X`09`20VARIANT X`09`20`20CASE X`09`20`20`20LONG`09`09FILL(2) X`09`20`20CASE X`09`20`20`20LONG`09`09QW_ELEM(1`20TO`202) X`09`20END`20VARIANT X`09END`20RECORD X`20`20`20`20`20`20%LET`20%BASIC$QUADWORD_DECLARED`20=`201 X`20`20`20%END`20%IF X`20`20`20%NOLIST X`20`20`20%IF`20%DECLARED(%BASIC$OCTAWORD_DECLARED)`20=`200 X`20`20`20%THEN X`20`20`20`20`20`20%LIST X`09RECORD`20BASIC$OCTAWORD X`09`20VARIANT X`09`20`20CASE X`09`20`20`20LONG`09`09FILL(4) X`09`20`20CASE X`09`20`20`20LONG`09`09QW_ELEM(1`20TO`204) X`09`20END`20VARIANT X`09END`20RECORD X`20`20`20`20`20`20%LET`20%BASIC$OCTAWORD_DECLARED`20=`201 X`20`20`20%END`20%IF X`20`20`20%LIST X`09RECORD`20ITEM_LIST_STRUCT X`09`20VARIANT X`09`20`20CASE X`09`20`20`20WORD`09`09`09`09`09`09`09`09`26 X`09`09BUF_LEN,`09`09`09`09!Buffer`20length`20`20`26 X`09`09ITEM_CODE`09`09`09`09!Data`20requested X`09`20`20`20LONG`09`09`09`09`09`09`09`09`26 X`09`09BUF_ADR,`09`09`09`09!Buffer`20address`20`26 X`09`09RET_ADR`09`09`09`09`09!Ret'n`20data`20len X`09`20`20CASE X`09`20`20`20LONG`09`09`09`09`09`09`09`09`26 X`09`09END_LIST`09`09`09`09!End`20of`20item`20list X`09`20END`20VARIANT X`09END`20RECORD`20ITEM_LIST_STRUCT X X`09RECORD`20GETJPI_BLOCK_STRUCT X`09`20`20`20STRING`09`09`09`09`09`09`09`26 X`09`09ACCOUNT`20=`20ACCOUNT_SIZE,`09`09`09`09`09`26 X`09`09CLINAME`20=`20CLINAME_SIZE,`09`09`09`09`09`26 X`09`09NODENAME`20=`20NODENAME_SIZE,`09`09`09`09`26 X`09`09NODE_VERSION`20=`20NODE_VERSION_SIZE,`09`09`09`26 X`09`09PRCNAM`20=`20PRCNAM_SIZE,`09`09`09`09`09`26 X`09`09JTERMINAL`20=`20TERMINAL_SIZE,`09`09`09`09`26 X`09`09TT_ACCPORNAM`20=`20TT_ACCPORNAM_SIZE,`09`09`09`26 X`09`09TT_PHYDEVNAM`20=`20TT_PHYDEVNAM_SIZE,`09`09`09`26 X`09`09USERNAME`20=`20USERNAME_SIZE X`09`20`20`20BASIC$QUADWORD`09`09`09`09`09`09`26 X`09`09LAST_LOGIN_I,`09`09`09`09`09`09`26 X`09`09LAST_LOGIN_N X`09`20`20`20LONG`09`09`09`09`09`09`09`09`26 X`09`09AUTHPRIV,`09`09`09`09`09`09`26 X`09`09GRP,`09`09`09`09`09`09`09`26 X`09`09JOBTYPE,`09`09`09`09`09`09`26 X`09`09LOGIN_FAILURES,`09`09`09`09`09`09`26 X`09`09LOGIN_FLAGS,`09`09`09`09`09`09`26 X`09`09JMODE,`09`09`09`09`09`09`09`26 X`09`09NODE_CSID,`09`09`09`09`09`09`26 X`09`09PID,`09`09`09`09`09`09`09`26 X`09`09SITESPEC,`09`09`09`09`09`09`26 X`09`09UAF_FLAGS,`09`09`09`09`09`09`26 X`09`09UIC X`09`20`20`20WORD`09`09`09`09`09`09`09`09`26 X`09`09ACCOUNT_LEN,`09`09`09`09`09`09`26 X`09`09CLINAME_LEN,`09`09`09`09`09`09`26 X`09`09NODENAME_LEN,`09`09`09`09`09`09`26 X`09`09NODE_VERSION_LEN,`09`09`09`09`09`26 X`09`09PRCNAM_LEN,`09`09`09`09`09`09`26 X`09`09TERMINAL_LEN,`09`09`09`09`09`09`26 X`09`09TT_ACCPORNAM_LEN,`09`09`09`09`09`26 X`09`09TT_PHYDEVNAM_LEN,`09`09`09`09`09`26 X`09`09USERNAME_LEN X`09END`20RECORD`20GETJPI_BLOCK_STRUCT X X`09RECORD`20KEY_PHRASE_REC_STRUCT X`09`20VARIANT X`09`20`20CASE X`09`20`20`20STRING`09`09`09`09`09`09`09`26 X`09`09INDEX_KEY`20=`20INDEX_KEY_SIZ,`09`09`09`09`26 X`09`09KEY_PHRASE`20=`20KEY_PHRASE_SIZ X`09`20`20`20WORD`09`09`09`09`09`09`09`09`26 X`09`09KEY_PHRASE_LEN X`09`20`20CASE X`09`20`20`20STRING`09`09`09`09`09`09`09`26 X`09`09WHOLE_REC`20=`20KEY_PHRASE_REC_SIZ X`09`20END`20VARIANT X`09END`20RECORD`20KEY_PHRASE_REC_STRUCT $ call unpack CR-INCLUDE.INC;1 1208632291 "" 8 7 12 $! $ create 'f' X`09%TITLE`20"Challenge_Response`20-`20Addition`20password`20mechanism" X`09%SBTTL`20"Overall`20description`20and`20modification`20history" X`09%IDENT`20"V00.90" X`09! X`09! X`09!`09Copyright`20(c)`201994,`20Peter`20A.`20Smode`20(Vancouver,`20BC) X`09! X`09!`09`09All`20Rights`20Reserved X`09! X`09!Permission`20`20is`20`20hereby`20`20granted`20`20`20to`20`20use,`20`20copy V,`20`20modify,`20`20and X`09!distribute`20`20this`20software`20`20provided`20`20that`20the`20`20above V`20`20copyright X`09!notice`20appears`20in`20`20all`20copies`20and`20that`20`20any`20distributi Von`20be`20for X`09!noncommercial`20purposes. X`20`20`20`20`20`20`20`20! X`09!Peter`20A.`20Smode`20disclaims`20all`20warranties`20with`20regard`20to`20t Vhis X`09!software.`20`20In`20no`20event`20shall`20Peter`20A.`20Smode`20be`20liable V`20for`20any`20 X`09!special,`20indirect,`20`20or`20consequential`20damages`20or`20any`20damage Vs`20 X`09!whatsoever`20`20resulting`20from`20loss`20of`20use,`20data,`20or`20profits V`20arising`20 X`09!out`20of`20or`20in`20connection`20with`20the`20use`20or`20performance`20of V`20this`20software. X`09! X`09!++ X`09%SBTTL`20"Declarations" X`09! X`09!`20ENVIRONMENT`20SPECIFICATION: X`09! X`09OPTION`09`09`09`09`09`09`09`09`26 X`09`09TYPE`20=`20EXPLICIT X`09! X`09!`20INCLUDE`20FILES: X`09! X`09%INCLUDE`20"CR-INCLUDE.INC" X`09! X`09!`20EQUATED`20SYMBOLS: X`09! X`09DECLARE`20LONG`20CONSTANT`09`09`09`09`09`09`26 X`09`20`20`20KPF_CHAN`20=`201%,`09`09`09`09`09`09`26 X`09`20`20`20ITEM_LIST_MAX`20=`203%,`09`09`09`09`09`09`26 X`09`20`20`20USR_RD_BUF_SZ`20=`20127%,`09`09!Width`20user`20input`20buffer`26 X`09`20`20`20ESC_OVR_BUF`20=`205%,`09`09`09!ESC`20overflow`20buffer`20size`26 X`09`20`20`20QIO_ITEM_LIST_SIZE`20=`204%`20*`2012%,`09!Bytes`20used`20in`20$QIO VW`20call`26 X`09`20`20`20RMS_WAIT`20=`2015%`09`09`09!Seconds`20to`20wait`20for`20RMS`20I/O V X`09DECLARE`20STRING`20CONSTANT`09`09`09`09`09`09`26 X`09`20`20`20USERNAME_PROMPT`20`20=`20"Username:`20",`09`09`09`09`26 X`09`20`20`20KEY_PHRASE_PROMPT`20=`20"Phrase:`20" X`09! X`09!`20DATATYPE`20SPECIFICATION: X`09! X`09RECORD`20IOSBLK X`09`20`20`20WORD`09`09`09`09`09`09`09`09`26 X`09`09IO_STAT,`09`09`09`09`09`09`26 X`09`09TERM_OFFSET,`09`09`09`09`09`09`26 X`09`20`20`20BYTE`09`09`09`09`09`09`09`09`26 X`09`09TERM_CHAR,`09`09`09`09`09`09`26 X`09`09RESERVED,`09`09`09`09`09`09`26 X`09`09TERM_LEN,`09`09`09`09`09`09`26 X`09`09POS_FROM_EOL X`09END`20RECORD`20IOSBLK X X`09RECORD`20STRING_127 X`09`20`20`20STRING`09ST127`20=`20127% X`09END`20RECORD`20STRING_127 X`09! X`09!`20LOCAL`20STORAGE: X`09! X`09DECLARE`09`09`09`09`09`09`09`09`26 X`09`20`20`20KEY_PHRASE_REC_STRUCT`09`09`09`09`09`26 X`09`09TRIAL_KEY,`09`09`09`09`09`09`26 X`09`20`20`20ITEM_LIST_STRUCT`09`09`09`09`09`09`26 X`09`09ITEM_LIST(ITEM_LIST_MAX),`09`09`09`09`26 X`09`20`20`20GETJPI_BLOCK_STRUCT`09`09`09`09`09`09`26 X`09`09GETJPI_BLOCK,`09`09`09`09`09`09`26 X`09`20`20`20STRING_127`09`09`09`09`09`09`09`26 X`09`09PROMPT_BUF,`09`09`09!Prompt`20buffer`20for`20$QIOW`26 X`09`09CURRENT_TXT,`09`09`09`09`09`09`26 X`09`20`20`20STRING`09`09`09`09`09`09`09`26 X`09`09QIO_TXT_RCVD,`09`09`09!Text`20returned`20by`20$QIOW`09`26 X`09`20`20`20IOSBLK`09`09`09`09`09`09`09`26 X`09`09IOSB,`09`09`09`09!$QIOW`20I/O`20status`20block`09`26 X`09`20`20`20LONG`09`09`09`09`09`09`09`09`26 X`09`09SYS_STATUS,`09`09!External`20function`20return`20status,`26 X`09`09QIO_FUNC,`09`09`09`09`09`09`26 X`09`09ITEM_LIST_SIZE,`09`09`09`09`09`09`26 X`09`09EXIT_USERNAME_LOOP,`09`09`09`09`09`26 X`09`09RECORD_ON_FILE,`09`09`09`09`09`09`26 X`09`20`20`20WORD`09`09`09`09`09`09`09`09`26 X`09`09QIO_CHAN X`09! X`09!`20GLOBAL`20STORAGE: X`09! X`09MAP`20(KPF_MAP)`09`09`09`09`09`09`09`26 X`09`20`20`20KEY_PHRASE_REC_STRUCT`09`09`09`09`09`26 X`09`09KEY_PHRASE_REC X`09! X`09!`20EXTERNAL`20REFERENCES: X`09! X`09EXTERNAL`20LONG`20CONSTANT`09`09`09`09`09`09`26 X`09`09SS$_NORMAL,`09`09`09`09`09`09`26 X`09`09SS$_ABORT,`09`09`09`09`09`09`26 X`09`09PRV$M_SYSPRV,`09`09`09`09`09`09`26 X`09`09IO$_READVBLK,`09`09`09`09`09`09`26 X`09`09IO$M_EXTEND,`09`09`09`09`09`09`26 X`09`09TRM$M_TM_ESCAPE,`09`09`09`09`09`26 X`09`09TRM$M_TM_NORECALL X`09EXTERNAL`20WORD`20CONSTANT`09`09`09`09`09`09`26 X`09`09TRM$_MODIFIERS,`09`09`09`09`09`09`26 X`09`09TRM$_ESCTRMOVR,`09`09`09`09`09`09`26 X`09`09TRM$_PROMPT,`09`09`09`09`09`09`26 X`09`09TRM$_INISTRNG X`09EXTERNAL`20LONG`20FUNCTION`09`09`09`09`09`09`26 X`09`09LIB$STOP,`09`09`09`09`09`09`26 X`09`09SYS$ASSIGN,`09`09`09`09`09`09`26 X`09`09SYS$QIOW X`09! X`09!`20INTERNAL`20REFERENCES: X`09! X X X`09%PAGE X`09%SBTTL`20"Environment`20initialization" X`09!+ X`09!`20Set`20up`20global`20error`20handler`20and`20initialize`20local`20variab Vles. X`09!- X`20`09ON`20ERROR`20GOTO`20GeneralError X`09PROMPT_BUF::ST127`20=`20SP X`09CURRENT_TXT::ST127`20=`20SP X`09SYS_STATUS`20=`20SYS$ASSIGN('SYS$COMMAND',`20QIO_CHAN,,,) X`09CALL`20LIB$STOP(SYS_STATUS`20BY`20VALUE)`20IF`20(SYS_STATUS`20<>`20SS$_NORM VAL) X X`09OPEN`20KEY_PHRASE_FILENAM`20FOR`20INPUT`20AS`20FILE`20#KPF_CHAN,`09`09`26 X`09`09ORGANIZATION`20INDEXED`20FIXED,`09`09`09`09`26 X`09`09ACCESS`20MODIFY,`09`09`09`09`09`09`26 X`09`09ALLOW`20MODIFY,`09`09`09`09`09`09`26 X`09`09MAP`20KPF_MAP,`09`09`09`09`09`09`26 X`09`09PRIMARY`20KEY`20KEY_PHRASE_REC::INDEX_KEY X`09!+ X`09!`20Later`20on,`20we`20can`20check`20here`20if`20a`20user`20with`20no`20pri Vv`20started X`09!`20this`20program.`20For`20regular`20users,`20we`20could`20let`20them`20us Ve`20this X`09!`20program`20to`20modify`20their`20own`20(and`20ownly`20their`20own)`20key V`20phrase. X`09!`20For`20now,`20this`20program`20will`20NOT`20be`20installed`20with`20SYSP VRV,`20and X`09!`20will`20default`20to`20the`20system`20manager`20mode`20that`20will`20all Vow`20modification X`09!`20of`20ANYBODY'S`20key`20phrase.`20Because`20of`20that,`20we`20will`20unc Vonditionally X`09!`20branch`20to`20the`20username`20loop`20section. X`09!- X`09GETJPI_BLOCK::AUTHPRIV`20=`20PRV$M_SYSPRV`09 X`09!++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ X`09!`09*****`20REPLACE`20ABOVE`20LINE`20WITH`20CALL`20TO`20$GETJPI`20***** X`09!++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ X X`09IF`20(GETJPI_BLOCK::AUTHPRIV`20AND`20PRV$M_SYSPRV) X`09THEN`09`09`09`09`09!System`20user X`09`20`20`20GOTO`20UsernameLoop`09`09`09`09!Prompt`20for`20username X`09ELSE`09`09`09`09`09!Non-prived`20user X`09`20`20`20TRIAL_KEY::INDEX_KEY`20=`20GETJPI_BLOCK::USERNAME`20!Assume`20self V X`09`20`20`20GOSUB`20PhraseMaint`09`09`09`09!Modify`20phrase X`09`20`20`20GOTO`20ExitProgram`09`09`09`09!Exit`20program X`09END`20IF X X X`09%SBTTL`20"UsernameLoop" X`20UsernameLoop: X`09!+ X`09!`20Main`20loop`20for`20maintenance`20program.`20Prompt`20for`20a`20usernam Ve`20and X`09!`20finish`20program`20if`20CTRL-Z`20entered.`20Otherwise,`20continue`20wit Vh X`09!`20key`20phrase`20maintenance`20by`20loading`20TRIAL_KEY::INDEX_KEY`20with V X`09!`20the`20username`20entered. X`09!- X`09QIO_TXT_RCVD`20=`20SPACE$(USR_RD_BUF_SZ`20+`20ESC_OVR_BUF) X`09ITEM_LIST_SIZE`20=`20QIO_ITEM_LIST_SIZE X`09QIO_FUNC`20=`20IO$_READVBLK`20OR`20IO$M_EXTEND X X`09ITEM_LIST(0%)::ITEM_CODE`20=`09TRM$_MODIFIERS X`09ITEM_LIST(0%)::BUF_LEN`20=`09NULL X`09ITEM_LIST(0%)::BUF_ADR`20=`09TRM$M_TM_ESCAPE X`09ITEM_LIST(0%)::RET_ADR`20=`09NULL X X`09ITEM_LIST(1%)::BUF_LEN`20=`09NULL X`09ITEM_LIST(1%)::ITEM_CODE`20=`09TRM$_ESCTRMOVR X`09ITEM_LIST(1%)::BUF_ADR`20=`09ESC_OVR_BUF X`09ITEM_LIST(1%)::RET_ADR`20=`09NULL X X`20`20`20`20`20`20`20`09ITEM_LIST(2%)::ITEM_CODE`20=`09TRM$_PROMPT X`09ITEM_LIST(2%)::BUF_ADR`20=`09LOC(PROMPT_BUF) X`09ITEM_LIST(2%)::RET_ADR`20=`09NULL X X`09ITEM_LIST(3%)::ITEM_CODE`20=`09TRM$_INISTRNG X`09ITEM_LIST(3%)::BUF_ADR`20=`09LOC(CURRENT_TXT) X`09ITEM_LIST(3%)::RET_ADR`20=`09NULL X X`09EXIT_USERNAME_LOOP`20=`20FALSE X`09UNTIL`20(EXIT_USERNAME_LOOP) X`09`20`20`20PROMPT_BUF::ST127`20=`20USERNAME_PROMPT X`09`20`20`20ITEM_LIST(2%)::BUF_LEN`20=`20LEN(USERNAME_PROMPT) X`09`20`20`20CURRENT_TXT::ST127`20=`20SP X`09`20`20`20ITEM_LIST(3%)::BUF_LEN`20=`20NULL X`09`20`20`20QIO_TXT_RCVD`20=`20SPACE$(USR_RD_BUF_SZ`20+`20ESC_OVR_BUF) X`09`20`20`20ITEM_LIST(0%)::BUF_ADR`20=`20TRM$M_TM_ESCAPE X`09`20`20`20SYS_STATUS`20=`20SYS$QIOW(,QIO_CHAN`20BY`20VALUE,`09`09`09`26 X`09`09`09`09QIO_FUNC`20BY`20VALUE,`09`09`09`26 X`09`09`09`09IOSB`20BY`20REF,,,`09`09`09`09`26 X`09`09`09`09QIO_TXT_RCVD`20BY`20REF,`09`09`09`26 X`09`09`09`09(USR_RD_BUF_SZ`20+`20ESC_OVR_BUF)`20BY`20VALUE,,,`20`26 X`09`09`09`09ITEM_LIST()`20BY`20REF,`09`09`09`26 X`09`09`09`09ITEM_LIST_SIZE`20BY`20VALUE) X`09`20`20`20IF`20(SYS_STATUS`20<>`20SS$_NORMAL) X`09`20`20`20THEN`09`09`09`09`09`09!Some`20error`20occured X`09`20`20`20`20`20`20CALL`20LIB$SIGNAL(SYS_STATUS`20BY`20VALUE) X`09`20`20`20`20`20`20CALL`20LIB$SIGNAL(IOSB::IO_STAT`20BY`20VALUE) X`09`20`20`20END`20IF X X`09`20`20`20IF`20MID$(QIO_TXT_RCVD,`20IOSB::TERM_OFFSET+1%,`20IOSB::TERM_LEN) V`20=`20'26'C X`09`20`20`20THEN`09`09`09`09`09!Input`20terminated`20with`20CTRL-Z X`09`20`20`20`20`20`20EXIT_USERNAME_LOOP`20=`20TRUE`09`09`09!Done`20with`20loop V X`09`20`20`20ELSE`09`09`09`09`09!Username`20entered X`09!+ X`09!`20User`20has`20entered`20a`20username.`20We`20should`20probably`20check V`20here`20if X`09!`20it`20exists`20with`20a`20call`20to`20$GETUAI,`20but`20that`20will`20com Ve`20later. X`09!- X`09`20`20`20`20`20`20TRIAL_KEY::INDEX_KEY`20=`20EDIT$(QIO_TXT_RCVD,`2036%) X`09`20`20`20`20`20`20GOSUB`20PhraseMaint X`09`20`20`20`20`20`20PRINT X`09`20`20`20END`20IF X`09NEXT X`09 X X`09%SBTTL`20"ExitProgram" X`20ExitProgram: X`09!+ X`09!`20We're`20all`20done`20now.`20Close`20off`20files`20and`20exit X`09!- X`09CLOSE`20#KPF_CHAN X`09EXIT`20PROGRAM`20SS$_NORMAL X X X X`09%PAGE X`09%SBTTL`20"SUBROUTINE`20-`20PhraseMaint" X`20PhraseMaint: X`09!+ X`09!`20Subroutine`20to`20perform`20actual`20maintenance`20of`20key`20phrase. V`20This`20routine X`09!`20uses`20TRIAL_KEY::INDEX_KEY`20as`20an`20implied`20input.`20Existing`20p Vhrase X`09!`20(if`20any)`20is`20retrieved`20from`20the`20file,`20and`20used`20as`20in Vitial`20text X`09!`20for`20a`20$QIOW`20terminal`20read.`20New`20key`20phrase`20is`20validate Vd`20and`20stored X`09!`20in`20file`20if`20appropriate. X`09!- X`09WHEN`20ERROR`20IN X`09`20`20`20GET`20#KPF_CHAN,`20KEY`20#0%`20EQ`20TRIAL_KEY::INDEX_KEY,`20WAIT V`20RMS_WAIT X`09`20`20`20RECORD_ON_FILE`20=`20TRUE`09`09`09!We`20found`20one X`09USE X`09`20`20`20SELECT`20ERR X`09`20`20`20CASE`20155%`09`09`09`09!Record`20not`20found X`09`20`20`20`20`20`20RECORD_ON_FILE`20=`20FALSE`09`09`09!Remember`20this`20hap Vpened X`09`20`20`20`20`20`20KEY_PHRASE_REC::INDEX_KEY`20=`20TRIAL_KEY::INDEX_KEY X`09`20`20`20`20`20`20KEY_PHRASE_REC::KEY_PHRASE_LEN`20=`20NULL`09!Pre-load`20w Vith`20nothing X`09`20`20`20CASE`2015%,`20193%`09`09`09!We're`20blocked`20by`20another`20lock V X`09`20`20`20`20`20`20PRINT`20BEL;`20"`20***`20`20RECORD`20LOCKED`20-`20TRY`20A VGAIN`20LATER`20`20***" X`09`20`20`20`20`20`20RETURN`09`09`09`09`09!Give`20up`20on`20this`20one X`09`20`20`20CASE`20ELSE`09`09`09`09!Unanticipated`20error X`09`20`20`20`20`20`20EXIT`20HANDLER`09`09`09`09!Let`20outer`20handler`20try X`09`20`20`20END`20SELECT X`09END`20WHEN X X`20ReadNewPhrase: X`09!+ X`09!`20We`20have`20the`20existing`20key`20phrase`20(if`20any).`20Now`20get`20t Vhe`20replacement X`09!- X`09PROMPT_BUF::ST127`20=`20KEY_PHRASE_PROMPT X`09ITEM_LIST(2%)::BUF_LEN`20=`20LEN(KEY_PHRASE_PROMPT) X`09CURRENT_TXT::ST127`20=`20KEY_PHRASE_REC::KEY_PHRASE X`09ITEM_LIST(3%)::BUF_LEN`20=`20KEY_PHRASE_REC::KEY_PHRASE_LEN X`09QIO_TXT_RCVD`20=`20SPACE$(USR_RD_BUF_SZ`20+`20ESC_OVR_BUF) X`09ITEM_LIST(0%)::BUF_ADR`20=`20(TRM$M_TM_ESCAPE`20OR`20TRM$M_TM_NORECALL) X`09SYS_STATUS`20=`20SYS$QIOW(,`09QIO_CHAN`20BY`20VALUE,`09`09`09`26 X`09`09`09`09QIO_FUNC`20BY`20VALUE,`09`09`09`26 X`09`09`09`09IOSB`20BY`20REF,,,`09`09`09`09`26 X`09`09`09`09QIO_TXT_RCVD`20BY`20REF,`09`09`09`26 X`09`09`09`09(USR_RD_BUF_SZ`20+`20ESC_OVR_BUF)`20BY`20VALUE,,,`20`26 X`09`09`09`09ITEM_LIST()`20BY`20REF,`09`09`09`26 X`09`09`09`09ITEM_LIST_SIZE`20BY`20VALUE) X`09IF`20(SYS_STATUS`20<>`20SS$_NORMAL) X`09THEN`09`09`09`09`09`09!Some`20error`20occured X`09`20`20`20CALL`20LIB$SIGNAL(SYS_STATUS`20BY`20VALUE) X`09`20`20`20CALL`20LIB$SIGNAL(IOSB::IO_STAT`20BY`20VALUE) X`09END`20IF X X`09IF`20MID$(QIO_TXT_RCVD,`20IOSB::TERM_OFFSET+1%,`20IOSB::TERM_LEN)`20=`20'26 V'C X`09THEN`09`09`09`09`09!Input`20terminated`20with`20CTRL-Z X`09`20`20`20FREE`20#KPF_CHAN`09`09`09`09!Unlock`20records X`09`20`20`20PRINT`20BEL;`20"`20***`20`20UPDATE`20ABORTED`20AT`20USER`20REQUEST V`20`20***`20" X`09`20`20`20RETURN`09`09`09`09`09!DON'T`20UPDATE X`09END`20IF X X`09!+ X`09!`20Validate/edit`20key`20phrase`20entered X`09!- X`09QIO_TXT_RCVD`20=`20EDIT$(QIO_TXT_RCVD,`20140%)`09!Trail,`20lead,`20special V X X`09!+ X`09!`20Decide`20what`20to`20do`20based`20on`20length`20of`20phrase`20remaining V X`09!- X`09SELECT`20LEN(QIO_TXT_RCVD) X`09CASE`20NULL`09`09`09`09!Key`20phrase`20erased X`09`20`20`20PRINT`20BEL;`20"`20***`20`20DELETING`20KEY`20PHRASE`20FOR`20USER V`20`20***`20" X`09`20`20`20DELETE`20#KPF_CHAN`20IF`20RECORD_ON_FILE`09`09!Remove`20from`20fil Ve X`09CASE`20<`20MIN_KEY_PHRASE_LEN`09`09!Phrase`20too`20short X`09`20`20`20PRINT`20BEL;`20"`20***`20`20KEY`20PHRASE`20MUST`20BE`20AT`20LEAST" V;`09`09`26 X`09`09MIN_KEY_PHRASE_LEN;`20"CHARACTERS`20LONG`20`20***" X`09`20`20`20GOTO`20ReadNewPhrase`09`09`09`09!Try`20again X`09CASE`20>`20KEY_PHRASE_SIZ`09`09`09!Phrase`20too`20long X`09`20`20`20PRINT`20BEL;`20"`20***`20`20KEY`20PHRASE`20MUST`20BE`20NO`20LONGER V`20THAN";`09`26 X`09`09MIN_KEY_PHRASE_LEN;`20"CHARACTERS`20`20***" X`09`20`20`20GOTO`20ReadNewPhrase`09`09`09`09!Try`20again X`09CASE`20ELSE`09`09`09`09!Phrase`20OK X`09`20`20`20KEY_PHRASE_REC::KEY_PHRASE`20=`20QIO_TXT_RCVD X`09`20`20`20KEY_PHRASE_REC::KEY_PHRASE_LEN`20=`20LEN(QIO_TXT_RCVD) X`09`20`20`20IF`20RECORD_ON_FILE X`09`20`20`20THEN`09`09`09`09`09!Record`20already`20existed X`09`20`20`20`20`20`20UPDATE`20#KPF_CHAN`09`09`09`09!Update`20existing X`09`20`20`20ELSE`09`09`09`09`09!This`20is`20a`20news`20record X`09`20`20`20`20`20`20PUT`20#KPF_CHAN`09`09`09`09!Put`20a`20new`20record X`09`20`20`20END`20IF X`09END`20SELECT X`09RETURN X X X X`09%SBTTL`20"General`20Error" X`20GeneralError: X`09!+ X`09!`20Process`20general`20errors`20here X`09!- X`09CALL`20LIB$SIGNAL(VMSSTATUS`20BY`20VALUE) X X`09END $ call unpack CR_MAINT.BAS;1 1316018418 "" 19 8 12 $! $ create 'f' X`09%TITLE`20"CR_Policy`20-`20Site`20specify`20C/R`20policy`20module" X`09%SBTTL`20"Overall`20description`20and`20modification`20history" X`09%IDENT`20"V00.90" X`09! X`09! X`09!`09Copyright`20(c)`201994,`20Peter`20A.`20Smode`20(Vancouver,`20BC) X`09! X`09!`09`09All`20Rights`20Reserved X`09! X`09!Permission`20`20is`20`20hereby`20`20granted`20`20`20to`20`20use,`20`20copy V,`20`20modify,`20`20and X`09!distribute`20`20this`20software`20`20provided`20`20that`20the`20`20above V`20`20copyright X`09!notice`20appears`20in`20`20all`20copies`20and`20that`20`20any`20distributi Von`20be`20for X`09!noncommercial`20purposes. X`20`20`20`20`20`20`20`20! X`09!Peter`20A.`20Smode`20disclaims`20all`20warranties`20with`20regard`20to`20t Vhis X`09!software.`20`20In`20no`20event`20shall`20Peter`20A.`20Smode`20be`20liable V`20for`20any`20 X`09!special,`20indirect,`20`20or`20consequential`20damages`20or`20any`20damage Vs`20 X`09!whatsoever`20`20resulting`20from`20loss`20of`20use,`20data,`20or`20profits V`20arising`20 X`09!out`20of`20or`20in`20connection`20with`20the`20use`20or`20performance`20of V`20this`20software. X`09! X`09!++ X`09FUNCTION`20LONG`20CR_Policy(`09`09`09`09`09`26 X`09`20`20`20GETJPI_BLOCK_STRUCT`09`09`09`09`09`09`26 X`09`09GETJPI_BLOCK,`09`09`09`09`09`09`26 X`09`20`20`20STRING`09`09`09`09`09`09`09`26 X`09`09INDEX_KEY) X X`09%SBTTL`20"Declarations" X`09! X`09!`20ENVIRONMENT`20SPECIFICATION: X`09! X`09OPTION`09`09`09`09`09`09`09`09`26 X`09`09TYPE`20=`20EXPLICIT X`09! X`09!`20INCLUDE`20FILES: X`09! X`09%INCLUDE`20"CR-INCLUDE.INC" X`09! X`09!`20EQUATED`20SYMBOLS: X`09! X`09DECLARE`20STRING`20CONSTANT`09`09`09`09`09`09`26 X`09`20`20`20UCX_TELNET`20=`20"TNA",`09!Telnet`20terminal`20device`20prefix`20f Vor`20UCX`09`26 X`09`20`20`20CMU_TELNET`20=`20"TZA"`09!Telnet`20terminal`20device`20prefix`20fo Vr`20CMU-Tek X`09DECLARE`20LONG`20CONSTANT`09`09`09`09`09`09`26 X`09`20`20`20MAX_SYSTEM_UIC_GRP`20=`2010% X`09! X`09!`20DATATYPE`20SPECIFICATION: X`09! X X`09! X`09!`20LOCAL`20STORAGE: X`09! X`09DECLARE`09`09`09`09`09`09`09`09`26 X`09`20`20`20LONG`09`09`09`09`09`09`09`09`26 X`09`09CR_REQUIRED,`09`09`09`09`09`09`26 X`09`09MAX_PRIV_MASK X`09! X`09!`20EXTERNAL`20REFERENCES: X`09! X`09EXTERNAL`20LONG`20CONSTANT`09`09`09`09`09`09`26 X`09`09SS$_NORMAL,`09`09`09`09`09`09`26 X`09`09SS$_ABORT,`09`09`09`09`09`09`26 X`09`09PRV$M_TMPMBX,`09`09`09`09`09`09`26 X`09`09PRV$M_NETMBX,`09`09`09`09`09`09`26 X`09`09PRV$M_EXQUOTA X`09! X`09!`20INTERNAL`20REFERENCES: X`09! X X X`09%PAGE X`09%SBTTL`20"Environment`20initialization" X`09!+ X`09!`20Set`20up`20global`20error`20handler`20and`20initialize`20local`20variab Vles. X`09!- X`20`09ON`20ERROR`20GOTO`20GeneralError X X X`09%SBTTL`20"CheckIfRequired" X`20CheckifRequired: X`09!+ X`09!`20Check`20the`20user`20process`20aghainst`20various`20selection`20criteri Va`20to`20 X`09!`20see`20if`20C/R`20is`20required`20at`20all.`20Return`20SS$_ABORT`20if`20 Vnot.`20Continue X`09!`20otherwise. X`09!- X`09!+ X`09!`20The`20policy`20defined`20here`20is`20for`20C/R`20to`20be`20required`20i Vf: X`09!`09-`20process`20is`20interactive`20on`20an`20Telnet`20terminal`20device X`09!`20`20AND X`09!`09-`20process`20is`20running`20under`20an`20account`20that`20has`20more V`20than X`09!`09TMPMBX,`20NETMBX,`20EXQUOTA`20privs`20as`20AUTHPRIVs`20in`20the`20UAF X`09!`20`20`20`20`20OR X`09!`09-`20process`20`20is`20running`20under`20an`20account`20with`20a`20syste Vm`20UIC X`09!- X`09IF`20(LEFT$(GETJPI_BLOCK::JTERMINAL,`203%)`20<>`20UCX_TELNET)`09`09`26 X`09AND`20(LEFT$(GETJPI_BLOCK::JTERMINAL,`203%)`20<>`20CMU_TELNET) X`09THEN`09`09`09`09`09!This`20is`20not`20a`20Telnet`20session X`09`20`20`20CR_REQUIRED`20=`20FALSE`09`09`09`09!No`20C/R X`09ELSE X`09`20`20`20MAX_PRIV_MASK`20=`20NOT(PRV$M_TMPMBX`20OR`20PRV$M_NETMBX`20OR`20PR VV$M_EXQUOTA) X`09`20`20`20IF`20(GETJPI_BLOCK::GRP`20<=`20MAX_SYSTEM_UIC_GRP)`09`09`09`26 X`09`20`20`20OR`20((GETJPI_BLOCK::AUTHPRIV`20AND`20MAX_PRIV_MASK)`20<>`20NULL) V X`09`20`20`20THEN`09`09`09`09`09!Process`20can`20get`20privs X`09`20`20`20`20`20`20CR_REQUIRED`20=`20TRUE`09`09`09!Must`20C/R X`09`20`20`20ELSE`09`09`09`09`09!No`20privs`20possible X`09`20`20`20`20`20`20CR_REQUIRED`20=`20FALSE`09`09`09!No`20C/R X`09`20`20`20END`20IF X`09END`20IF X X`09EXIT`20FUNCTION`20SS$_ABORT`20UNLESS`20CR_REQUIRED X X X`09%SBTTL`20"DetermineIndexKey" X`20DetermineIndexKey: X`09!+ X`09!`20If`20we're`20still`20here,`20figure`20out`20which`20phrase`20the`20user V`20should X`09!`20enter. X`09!- X`09!+ X`09!`20The`20policy`20implemented`20here`20will`20be`20one`20phrase`20per`20us Vername. X`09!`20Other`20possible`20policies`20could`20be`20one`20per`20UIC`20group`20or V`20one X`09!`20per`20system`20(yeach). X`09!- X`09INDEX_KEY`20=`20LEFT$(GETJPI_BLOCK::USERNAME,`20GETJPI_BLOCK::USERNAME_LEN) V X`09EXIT`20FUNCTION`20SS$_NORMAL X X X X`09%SBTTL`20"General`20Error" X`20GeneralError: X`09!+ X`09!`20Process`20general`20errors`20here X`09!- X`09CALL`20LIB$STOP(VMSSTATUS`20BY`20VALUE) X X`09END`20FUNCTION $ call unpack CR_POLICY.BAS;1 860557216 "" 7 9 12 $! $ create 'f' XIDENT`09"`207-FEB-1994`2015:04:07`09VAX/VMS`20ANALYZE/RMS_FILE`20Utility" X XSYSTEM X`09SOURCE`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20VAX/VMS X XFILE X`09ALLOCATION`20`20`20`20`20`20`20`20`20`20`20`20`20`209 X`09BEST_TRY_CONTIGUOUS`20`20`20`20`20no X`09BUCKET_SIZE`20`20`20`20`20`20`20`20`20`20`20`20`202 X`09CLUSTER_SIZE`20`20`20`20`20`20`20`20`20`20`20`203 X`09CONTIGUOUS`20`20`20`20`20`20`20`20`20`20`20`20`20`20no X`09EXTENSION`20`20`20`20`20`20`20`20`20`20`20`20`20`20`200 X`09FILE_MONITORING`20`20`20`20`20`20`20`20`20no X`09GLOBAL_BUFFER_COUNT`20`20`20`20`200 X`09NAME`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20"SYS$COMMON V:`5BSYSEXE`5DPBYDRIVER.DAT;1" X`09ORGANIZATION`20`20`20`20`20`20`20`20`20`20`20`20indexed X`09OWNER`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`5BSYSTEM`5D V X`09PROTECTION`20`20`20`20`20`20`20`20`20`20`20`20`20`20(system:RWE,`20owner:RW VE,`20group:RWE,`20world:) X XRECORD X`09BLOCK_SPAN`20`20`20`20`20`20`20`20`20`20`20`20`20`20yes X`09CARRIAGE_CONTROL`20`20`20`20`20`20`20`20carriage_return X`09FORMAT`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20fixed X`09SIZE`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20128 X XAREA`200 X`09ALLOCATION`20`20`20`20`20`20`20`20`20`20`20`20`20`209 X`09BUCKET_SIZE`20`20`20`20`20`20`20`20`20`20`20`20`202 X`09EXTENSION`20`20`20`20`20`20`20`20`20`20`20`20`20`20`200 X XKEY`200 X`09CHANGES`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20no X`09DATA_KEY_COMPRESSION`20`20`20`20yes X`09DATA_RECORD_COMPRESSION`20yes X`09DATA_AREA`20`20`20`20`20`20`20`20`20`20`20`20`20`20`200 X`09DATA_FILL`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20100 X`09DUPLICATES`20`20`20`20`20`20`20`20`20`20`20`20`20`20no X`09INDEX_AREA`20`20`20`20`20`20`20`20`20`20`20`20`20`200 X`09INDEX_COMPRESSION`20`20`20`20`20`20`20yes X`09INDEX_FILL`20`20`20`20`20`20`20`20`20`20`20`20`20`20100 X`09LEVEL1_INDEX_AREA`20`20`20`20`20`20`200 X`09NAME`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20"" X`09NULL_KEY`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20no X`09PROLOG`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`203 X`09SEG0_LENGTH`20`20`20`20`20`20`20`20`20`20`20`20`2032 X`09SEG0_POSITION`20`20`20`20`20`20`20`20`20`20`200 X`09TYPE`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20string X XANALYSIS_OF_AREA`200 X`09RECLAIMED_SPACE`20`20`20`20`20`20`20`20`200 X XANALYSIS_OF_KEY`200 X`09DATA_FILL`20`20`20`20`20`20`20`20`20`20`20`20`20`20`206 X`09DATA_KEY_COMPRESSION`20`20`20`20-6 X`09DATA_RECORD_COMPRESSION`2090 X`09DATA_RECORD_COUNT`20`20`20`20`20`20`201 X`09DATA_SPACE_OCCUPIED`20`20`20`20`202 X`09DEPTH`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`201 X`09INDEX_COMPRESSION`20`20`20`20`20`20`2085 X`09INDEX_FILL`20`20`20`20`20`20`20`20`20`20`20`20`20`202 X`09INDEX_SPACE_OCCUPIED`20`20`20`202 X`09LEVEL1_RECORD_COUNT`20`20`20`20`201 X`09MEAN_DATA_LENGTH`20`20`20`20`20`20`20`20128 X`09MEAN_INDEX_LENGTH`20`20`20`20`20`20`2034 $ call unpack PBYDRIVER.FDL;1 1546662665 "" 4 10 12 $! $ create 'f' X`09.TITLE`20PRVDEF X`09$PRVDEF`09GLOBAL X`09.END $ call unpack PRVDEF.MAR;1 945501912 "" 1 11 12 $! $ create 'f' X`09.TITLE`20TRMDEF X`09$TRMDEF`09GLOBAL X`09.END $ call unpack TRMDEF.MAR;1 943994597 "" 1 12 12 $ v=f$verify(v) $ exit