$! ------------------ CUT HERE ----------------------- $ v='f$verify(f$trnlnm("SHARE_UNPACK_VERIFY"))' $! $! This archive created by VMS_SHARE Version 8.3 $! On 12-APR-1993 08:17:01.07 By user GOATHUNTER (@WKUVX1.BITNET) $! $! The VMS_SHARE software that created this archive $! was written by Andy Harper, Kings College London UK $! -- December 1992 $! $! Credit is due to these people for their original ideas: $! James Gray, Michael Bednarek $! $! TO UNPACK THIS SHARE FILE, CONCATENATE ALL PARTS IN ORDER $! AND EXECUTE AS A COMMAND PROCEDURE ( @name ) $! $! THE FOLLOWING FILE(S) WILL BE CREATED AFTER UNPACKING: $! 1. GENERAL.FOR;1 $! 2. PASWRD.DESC;1 $! 3. RESTORE_PASSWORD.FOR;1 $! 4. SAVE_PASSWORD.FOR;1 $! 5. SET_NEW_PASSWORD.FOR;1 $! 6. SRP.COM;1 $! 7. SRP.FOR;1 $! 8. SRP_INCLUDE.INC;1 $! $set="set" $set symbol/scope=(nolocal,noglobal) $f=f$parse("SHARE_UNPACK_TEMP","SYS$SCRATCH:."+f$getjpi("","PID")) $e="write sys$error ""%UNPACK"", " $w="write sys$output ""%UNPACK"", " $ if .not. f$trnlnm("SHARE_UNPACK_LOG") then $ w = "!" $ if f$getsyi("CPU") .gt. 127 then $ goto start $ ve=f$getsyi("version") $ if ve-f$extract(0,1,ve) .ges. "4.4" then $ goto start $ e "-E-OLDVER, Must run at least VMS 4.4" $ v=f$verify(v) $ exit 44 $unpack: subroutine ! P1=filename, P2=checksum, P3=attributes $ if f$parse(P1) .nes. "" then $ goto dirok $ dn=f$parse(P1,,,"DIRECTORY") $ w "-I-CREDIR, Creating directory ''dn'" $ create/dir 'dn' $ if $status then $ goto dirok $ e "-E-CREDIRFAIL, Unable to create ''dn' File skipped" $ delete 'f'* $ exit $dirok: $ x=f$search(P1) $ if x .eqs. "" then $ goto file_absent $ e "-W-EXISTS, File ''P1' exists. Skipped" $ delete 'f'* $ exit $file_absent: $ w "-I-UNPACK, Unpacking file ", P1 $ n=P1 $ if P3 .nes. "" then $ n=f $ if .not. f$verify() then $ define/user sys$output nl: $ EDIT/TPU/NOSEC/NODIS/COM=SYS$INPUT 'f'/OUT='n' PROCEDURE GetHex(s,p)LOCAL x1,x2;x1:=INDEX(t,SUBSTR(s,p,1))-1;x2:=INDEX(t, SUBSTR(s,p+1,1))-1;RETURN 16*x1+x2;ENDPROCEDURE; PROCEDURE SkipPartsep LOOP EXITIF MARK(NONE)=END_OF(b);EXITIF INDEX(ERASE_LINE, "-+-+-+-+-+-+-+-+")=1;ENDLOOP;ENDPROCEDURE;PROCEDURE ProcessLine LOCAL c,s,l,b, n,p;c := ERASE_CHARACTER(1);s := ERASE_LINE;IF c = "X" THEN SPLIT_LINE; ENDIF; MOVE_HORIZONTAL(-1);l := LENGTH(s);p := 1;LOOP EXITIF p > l;c := SUBSTR(s,p,1); p := p+1;CASE c FROM ' ' TO '`' ['`']: COPY_TEXT(ASCII(GetHex(s,p))); p:=p+2;[ ' ']: p:=p+1;[INRANGE,OUTRANGE]: COPY_TEXT(c);ENDCASE;ENDLOOP;ENDPROCEDURE; PROCEDURE Decode POSITION(BEGINNING_OF(b));LOOP EXITIF MARK(NONE)=END_OF(b); IF INDEX(CURRENT_LINE,"+-+-+-+-+-+-+-+-")=1 THEN SkipPartSep;ELSE ProcessLine; MOVE_HORIZONTAL(1);ENDIF;ENDLOOP;ENDPROCEDURE;SET(FACILITY_NAME,"UNPACK");SET( SUCCESS,OFF);SET(INFORMATIONAL,OFF);t:="0123456789ABCDEF";f:=GET_INFO( COMMAND_LINE,"file_name");b:=CREATE_BUFFER(f,f);Decode;WRITE_FILE(b,GET_INFO( COMMAND_LINE,"output_file"));QUIT; $ if p3 .eqs. "" then $ goto dl $ open/write fdl &f $ write fdl "RECORD" $ write fdl P3 $ close fdl $ w "-I-CONVRFM, Converting record format to ", P3 $ convert/fdl=&f &f-1 &P1 $dl: delete 'f'* $ checksum 'P1' $ if checksum$checksum .nes. P2 then $ - e "-E-CHKSMFAIL, Checksum of ''P1' failed." $ exit $ endsubroutine $start: $! $ create 'f' Xc Xc`20Date`20Written:`203-Jul-91 Xc`20 Xc`20Figure`203`20-`20GENERAL.FOR Xc Xc`20Author:`20Sri`20Seshadri,`20DCSS,`20Sugarland,`20TX`2077478 Xc Xc`20Subroutines`20in`20this`20module: Xc Xc`20`20`20`20`20`20`20`5BSubroutine`5D`20Check_Decnet Xc`20`20`20`20`20`20`20`5BSubroutine`5D`20Get_Username`20(Username,`20Username_ VLength) Xc`20`09`5BFunction`5D`20Confirm_Owner`20(Username,`20Username_Length) Xc`09`5BSubroutine`5D`20Set_Host_Zero Xc`20`20`20`20`20`20`20`5BSubroutine`5D`20WriteLog`20(Line) Xc`20`20`20`20`20`20`20`5BFunction`5D`20Translate`20(Logname,`20LognameLength, V`20EquivName,`20EquivLength) Xc`20`20`20`20`20`20`20`5BSubroutine`5D`20Clear_Screen Xc`09`5BSubroutine`5D`20Print_Status`20(Status) Xc Xc`20************************************************************************* Xc Xc`20Modification`20History: Xc Xc`20Functional`20description:`20this`20subroutine`20returns`20if`20DECnet`20is V`20running`20 Xc`20`20`20and`20exits`20otherwise.`20You`20can`20tell`20if`20DECnet`20is`20run Vning`20if`20the`20device`20 Xc`20`20`20NET0`20is`20mounted,`20a`20mailbox,`20and`20networked`20from`20a`20c Vall`20to`20$getdvi(w) Xc Xc`20Calling`20format: Xc Xc`20`20`20`20CALL`20Check_Decnet Xc Xc`20Argument:`20None Xc X`09Subroutine`20Check_Decnet X`09Include`20'($dvidef)' X`09Include`20'($devdef)' X X`09Structure`20/Getdvi_Item/ X`09`20`20Union X`09`20`20`20`20Map X`09`09Integer`20*`202`20Buffer_Len,`20Item_Code X`09`09Integer`20*`204`20Buffer_Addr,`20Ret_Len_Addr X`09`20`20`20`20End`20Map X`09`20`20`20`20Map X`09`09Integer`20*`204`20End_List`20/0/ X`09`20`20`20`20End`20Map X`09`20`20End`20Union X`09End`20Structure X X`09Record`20/Getdvi_Item/`20Item_list`20(2) X`09Integer`20Bit_Vector`09`09`09!`20bit`20mask`20of`20NET0 X`09Integer`20Status,`20Lib$Stop,`20Sys$Getdviw X X`09integer`20*2`20iosb(4) X Xc`20set`20up`20the`20data`20structures`20to`20collect`20info`20on`20the`20DVI$ V_DEVCHAR X X`09Item_list(1).Item_Code`20=`20dvi$_devchar X`09Item_list(1).Buffer_Len`20=`204 X`09Item_list(1).Buffer_Addr`20=`20%loc(bit_vector) X`09Item_list(1).Ret_Len_Addr`20=`200 X X`09item_list(2).end_list`20=`200`09`09!`20end`20of`20the`20list X X`09status`20=`20sys$getdviw`20(,,'NET0:',`20item_list,`20iosb,,,) X Xc`20check`20the`20status X X`09if`20(.not.`20status)`20call`20lib$stop`20(`20%val`20(status)) X`09if`20(.not.`20iosb(1))`20call`20lib$stop`20(`20%val(iosb(1))) X Xc`09print`20*,`20bit_vector X X`09if`20((bjtest(bit_vector,`20dev$v_mnt))`20.and.`20 X`20`20`20`20`20/`20`20`20`20`20`20(bjtest(bit_vector,`20dev$v_mbx))`20.and. X`20`20`20`20`20/`20`20`20`20`20`20(bjtest(bit_vector,`20dev$v_net)))`20then X`09`20`20`20`20`20`20`20`20return X`09else X`09`09Print`20*,`20'DECnet`20is`20not`20running...' X`09`09call`20exit X`09endif X`09end Xc`20************************************************************************* Xc`20Modification`20History: Xc Xc`20Functional`20description:`20this`20subroutine`20returns`20the`20username V`20of`20the`20 Xc`20`20`20person`20whose`20account`20needs`20to`20be`20accessed. Xc Xc`20Calling`20format: Xc Xc`20`20`20`20CALL`20Get_Username`20(Username,`20Username_Length) Xc Xc`20Argument:`20Username`20-`20Character`20string`20(output) Xc`20`20`20`20`20`20`20`20`20`20`20Username_Lengfth`20-`20Integer`20(output) Xc Xc X`09SUBROUTINE`20Get_Username`20(Username,`20Username_Length) X`09Integer`20Username_Length,`20i X`09Character`20*`20(*)`20Username X X`09Print`2010 X10`09Format`20(1x,`20'Enter`20username:`20',`20$) X X`09Read`20(5,`2011,`20End=100,`20Err=100)`20Username_Length,`20Username X11`09Format`20(q,`20a) X Xc`20...`20capitalize`20username`20 X X`20`20`20`20`20`20`20`20Do`2050`20i`20=`201,`20username_Length X`09`20`20`20If`20((Username(i:i)`20.ge.`20'a')`20.and.`20(Username(i:i)`20.le. V`20'z'))`20Then X`09`09Username(i:i)`20=`20Char(Ichar(Username(i:i))-32) X`09`20`20`20Endif X50`20`20`20`20`20`20Continue X`09If`20(Username`20.EQ.`20'`20')`20Call`20Exit X`09Return X Xc`20...`20error`20path`20to`20exit`20from`20program X X100`09Call`20Exit X`09End Xc`20************************************************************************* Xc`20Modification`20History: Xc Xc`20Functional`20description:`20 Xc`20`20`20this`20function`20shows`20the`20owner`20and`20account`20fields`20wit Vhin`20the`20UAF`20record Xc`20`20`20for`20the`20username`20and`20asks`20if`20this`20is`20in`20fact`20the V`20person`20whose`20record`20is Xc`20`20`20to`20be`20changed. Xc Xc`20Calling`20format: Xc Xc`20`20`20`20variable`20=`20Confirm_Owner`20(Username,`20Username_Length) Xc Xc`20Argument:`20Username`20-`20Character`20string`20(input) Xc`20`20`20`20`20`20`20`20`20`20`20Username_Lengfth`20-`20Integer`20(input) Xc Xc`20Return`20value: Xc`20`09`09Change`20it`20`20`20`20=>`20`200 Xc`20`09`09Don't`20change`20=>`20`201 Xc X`20`20`20`20`20`20`20`20Integer`20Function`20Confirm_Owner`20(Username,`20User Vname_Length) X`20`20`20`20`20`20`20`20Implicit`20None X`20`20`20`20`20`20`20`20Include`20'($Uaidef)'`09`09`09!`20for`20symbolic`20con Vstants X`20`20`20`20`20`20`20`20Include`20'($Syssrvnam)' X`20`20`20`20`20`20`20`20Include`20'($Jpidef)' X`20`20`20`20`20`20`20`20Include`20'($Ssdef)' X`20`20`20`20`20`20`20`20Include`20'($Rmsdef)' X Xc`20getuai`20itemlist`20definition X X`20`20`20`20`20`20`20`20Structure`20/Uai_Itemlist/ X`20`20`20`20`20`20`20`20`20`20Union X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20Map X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20Integer*2`20Length,`20It Vem_Code X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20Integer*4`20Buffer_Addre Vss,`20Return_Length_Address X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20End`20Map X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20Map X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20Integer*4`20End_Of_List X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20End`20Map X`20`20`20`20`20`20`20`20`20`20End`20Union X`20`20`20`20`20`20`20`20End`20Structure X X`20`20`20`20`20`20`20`20Integer*4`20Account_Length,`20Owner_Length,`20Username V_Length,`20Status X X`20`20`20`20`20`20`20`20Character`20*`201`20Charac`09`09!`20temporary`20variab Vle X`20`20`20`20`20`20`20`20Character`20*`20(*)`20Username X`20`20`20`20`20`20`20`20Character`20Account`20*`2032,`20Owner`20*`2032 X X`20`20`20`20`20`20`20`20Record`20/Uai_Itemlist/`20Getuai_Itmlist(3)`20!`20for V`20account`20and`20owner X X X`20`20`20`20`20`20`20`20Confirm_Owner`20=`201`20`20`20`20`20`20`20`20`20`20 V`20`20`20`20`20!`20assume`20don't`20change X Xc`20...`20get`20them`20to`20confirm`20what`20they`20are`20doing`20... X X`20`20`20`20`20`20`20`20Getuai_itmlist(1).length`20=`2032 X`20`20`20`20`20`20`20`20Getuai_itmlist(1).item_code`20=`20uai$_account X`20`20`20`20`20`20`20`20Getuai_itmlist(1).buffer_address`20=`20%loc(account) X`20`20`20`20`20`20`20`20Getuai_itmlist(1).return_length_address`20=`20%loc(acc Vount_length) X X`20`20`20`20`20`20`20`20Getuai_itmlist(2).length`20=`2032 X`20`20`20`20`20`20`20`20Getuai_itmlist(2).item_code`20=`20uai$_owner X`20`20`20`20`20`20`20`20Getuai_itmlist(2).buffer_address`20=`20%loc(owner) X`20`20`20`20`20`20`20`20Getuai_itmlist(2).return_length_address`20=`20%loc(own Ver_length) X X`20`20`20`20`20`20`20`20Getuai_itmlist(3).end_of_list`20=`200 X X`20`20`20`20`20`20`20`20Status`20=`20sys$getuai(,,%descr(username(1:username_l Vength)), X`20`20`20`20`20/`20`20`20`20%ref(Getuai_itmlist),,,) X X`20`20`20`20`20`20`20`20If`20(.not.`20Status)`20Then X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20Call`20Print_Status`20(Status) V X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20Confirm_Owner`20=`201`20`20 V`20`20`20`20`20`20`20`20`20!`20assume`20don't`20change X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20Return X`20`20`20`20`20`20`20`20Endif X Xc`20all`20looks`20well`20so`20far X X`20`20`20`20`20`20`20`20Print`20* X`20`20`20`20`20`20`20`20Print`20*,`20'`20Owner`20field`20`20`20:`20',`20Owner V`20(2:Owner_Length) X`20`20`20`20`20`20`20`20Print`20*,`20'`20Account`20field`20:`20',`20Account V`20(1:Account_Length) X`20`20`20`20`20`20`20`20Print`20* X X`09Print`2011 X11`09Format`20(1x,`20'Modify`20this`20record`20(Y/N)`20`5BN`5D?`20',`20$) X`09Read`20(5,`2012,`20End=1000)`20`20Charac X12`09Format`20(A) X X`09If`20((Charac`20.eq.`20'Y')`20.or.`20(Charac`20.eq.`20'y'))`20Then X`09`09Confirm_Owner`20=`200 X`09`09Return X`09Endif`09`09 X X1000`20`20`20`20Confirm_Owner`20=`201 X`20`20`20`20`20`20`20`20Return X`20`20`20`20`20`20`20`20End X Xc`20****************************************************************** Xc`20Modification`20History: Xc Xc`20Functional`20description:`20 Xc`20`20`20this`20subroutine`20allows`20you`20to`20login`20as`20the`20new`20use Vr.`20`20You`20can`20add Xc`20`20`20the`20qualifier`20/LOG`20to`20the`20SET`20HOST`20command`20and`20MAI VL`20the`20log`20file. Xc Xc`20Calling`20format: Xc Xc`20`20`20`20Call`20Set_Host_Zero Xc Xc`20Argument:`20None Xc X`09SUBROUTINE`20Set_Host_Zero X`09Integer`20Lib$Spawn,`20Completion_stat`20/0/,`20 X`20`20`20`20`20/`20`20`20`20`20`20`20`20`20`20flag`20/14/`20`20`20`09`09!`20no Vcli,`20nolognam,`20nokeypad X Xc`09Print`20*,`20'Before`20spawning`20...' X X`09Call`20Lib$Spawn`20('SET`20HOST`200',,,flag,,,completion_stat`20) X`09Print`20* Xc`09Print`20*,`20'After`20spawning`20...',`20completion_stat X`09end X Xc`20************************************************************************** V** Xc`20Modification`20History: Xc Xc`20Functional`20description:`20 Xc`20`20`20`20This`20subroutine`20appends`20a`20timestamp`20to`20the`20log`20fi Vle`20called`20 Xc`20`20`20`20SRP$ROOT:SRP.LOG.`20`20System`20is`20the`20owner`20of`20this`20lo Vg`20file.`20`20The`20 Xc`20`20`20`20logical`20SRP$ROOT`20must`20be`20defined`20in`20LNM$SYSTEM`20in V`20EXEC`20mode. Xc Xc`20Calling`20format: Xc Xc`20`20`20`20Call`20Write_Log`20(Line) Xc Xc`20Argument:`20Line`20-`20Character`20String`20(input) Xc Xc X`20`20`20`20`20`20`20`20Subroutine`20WriteLog`20(Line) X`20`20`20`20`20`20`20`20Implicit`20None X`09Include`20'($JPIDEF)' X X`20`20`20`20`20`20`20`20Integer`20*`204`20Lib$Date_Time,`20Lib$Getjpi,`20Statu Vs,`20Namelen, X`20`20`20`20`20/`20`20`20`20FNum,`20RmsSts,`20Translate,`20EquivLength,`20Junk VLen X X`20`20`20`20`20`20`20`20Character`20*`20(*)`20Line`20`20`20`20`20`20`20`20`20 V`20`20`20`20`20`20`20`20`20`20`20!`20line`20to`20be`20written`20to`20file X`20`20`20`20`20`20`20`20Character`20*`2023`20Date_Time`20`20`20`20`20`20`20 V`20`20`20`20`20`20`20`20`20!`20current`20date X`20`20`20`20`20`20`20`20Character`20*`2080`20FileSpec,`20Junk,`20Name X`20`20`20`20`20`20`20`20Character`20*`20255`20EquivName X X`09Status`20=`20Lib$GetJpi`20(JPI$_Username,,,,`20Name,`20Namelen)`20`20!`20ge Vt`20username X Xc`20get`20the`20date`20and`20time X X`20`20`20`20`20`20`20`20Status`20=`20Lib$Date_Time`20(Date_Time) X Xc`20be`20careful`20how`20this`20is`20done.`20`20Translate`20SRP$ROOT`20in`20EX VEC`20mode. X X`20`20`20`20`20`20`20`20Status`20=`20Translate`20('SRP$ROOT',`208,`20EquivName V,`20EquivLength) X`20`20`20`20`20`20`20`20If`20(Status`20.eq.`20-1)`20Then X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20Print`20* X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20Print`20*,`20'no`20translation V`20for`20SRP$ROOT`20in`20LNM$SYSTEM' X`09`09Call`20Exit X`20`20`20`20`20`20`20`20Endif X X`20`20`20`20`20`20`20`20FileSpec`20=`20EquivName(1:EquivLength)`20//`20'SRP.LO VG' X Xc`20append`20to`20log`20file`20(if`20not`20there,`20it`20creates`20it) X X15`20`20`20`20`20`20Open`20(Unit`20=`207,`20Status`20=`20'Unknown',`20Iostat V`20=`20Status, X`20`20`20`20`20/`20`20File`20=`20Filespec,`20Access`20=`20'Append',`20Err`20= V`201000) X X`20`20`20`20`20`20`20`20Write`20(7,`2098)`20'Program`20accessed`20by:`20',`20N Vame`20(1:NameLen),`20'`20at`20', X`20`20`20`20`20/`20`20`20`20`20Date_time X98`09Format`20(1x,`204a) X X`20`20`20`20`20`20`20`20Write`20(7,`2099)`20Line X99`20`20`20`20`20`20Format`20(1x,`20a) X X`20`20`20`20`20`20`20`20Close`20(7) X`20`20`20`20`20`20`20`20Return X X1000`20`20`20`20Call`20Errsns`20(Fnum,`20RmsSts,`20,`20,) X`20`20`20`20`20`20`20`20If`20(RmsSts`20.ne.`200)`20Then X`20`20`20`20`20`20`20`20`20`20`20Print`20* X`20`20`20`20`20`20`20`20`20`20`20Print`20*,`20'Error`20creating`20logfile:`20' V,`20filespec X`20`20`20`20`20`20`20`20`20`20`20Call`20Print_Status`20(RmsSts) X`20`20`20`20`20`20`20`20`20`20`20Call`20Exit X`20`20`20`20`20`20`20`20Endif X`20`20`20`20`20`20`20`20End Xc`20************************************************************************** V Xc`20Modification`20History: Xc Xc`20Functional`20description:`20 Xc`20this`20function`20translates`20the`20logical`20name`20LogName`20to`20the V`20EquivName Xc`20in`20LNM$SYSTEM. Xc Xc`20Calling`20format: Xc Xc`20`20`20`20Call`20Translate`20(Logname,`20LognameLength,`20EquivName,`20Equi Vv_Length`20) Xc Xc`20Argument:`20 Xc Xc`20`20`20INPUT:`20`20LogName`20`20logical`20name`20to`20be`20translated Xc`20`20`20`20`20`20`20`20`20`20`20LognameLength`20`20`20Length`20of`20the`20lo Vgical`20name`20to`20be`20translated Xc Xc`20`20`20OUTPUT:`20`20Function`20=`200,`20`20if`20successful Xc`20`20`20`20`20`20`20`20`20`20`20`20Fucntion`20=`20-1,`20if`20not Xc Xc`20`20`20`20`20`20`20`20`20`20`20`20EquivName`20`20`20`20`20`20logical`20name V`20translatation`20(if`20it`20exists) Xc`20`20`20`20`20`20`20`20`20`20`20`20EquivLength`20`20`20`20Length`20of`20the V`20translated`20logical`20name`20("`20"`20") Xc X`20`20`20`20`20`20`20`20Integer`20Function`20Translate`20(Logname,`20LognameLe Vngth,`20EquivName, X`20`20`20`20`20/`20`20`20`20`20EquivLength) X`20`20`20`20`20`20`20`20Implicit`20none X`20`20`20`20`20`20`20`20Include`20'($lnmdef)'`09`09`09!`20logical`20name`20tab Vle`20const X`20`20`20`20`20`20`20`20Include`20'($psldef)'`09`09`09!`20exec`20mode`20defini Vtion X`20`20`20`20`20`20`20`20Include`20'($syssrvnam)'`09`09`09!`20system`20service V`20name X`20`20`20`20`20`20`20`20Integer`20Status,`20Temp,`20EquivLength,`20LognameLeng Vth,`20Attr X`20`20`20`20`20`20`20`20Character`20*`20(*)`20Logname X`20`20`20`20`20`20`20`20Character`20*`20(*)`20Equivname X X`20`20`20`20`20`20`20`20Structure`20/itmlist/ X`20`20`20`20`20`20`20`20`20`20`20Union X`20`20`20`20`20`20`20`20`20`20`20`20`20Map X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20Integer`20*`202`20Buflen,`20it Vmcod X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20Integer`20*`204`20Bufadr,`20Re Vtlen X`20`20`20`20`20`20`20`20`20`20`20`20`20End`20Map X`20`20`20`20`20`20`20`20`20`20`20`20`20Map X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20Integer`20*`204`20End_list X`20`20`20`20`20`20`20`20`20`20`20`20`20End`20Map X`20`20`20`20`20`20`20`20End`20Union X`20`20`20`20`20`20`20`20End`20Structure X X`20`20`20`20`20`20`20`20record`20/itmlist/`20trans_name(2) X X`20`20`20`20`20`20`20`20Translate`20=`200`20`20`20`20`20`20`20`20`20`20`20`20 V`20!`20assume`20success X X`20`20`20`20`20`20`20`20Trans_name`20(1).Buflen`20=`20255 X`20`20`20`20`20`20`20`20Trans_name`20(1).itmcod`20=`20lnm$_String X`20`20`20`20`20`20`20`20Trans_name`20(1).Bufadr`20=`20%loc(EquivName) X`20`20`20`20`20`20`20`20Trans_name`20(1).retlen`20=`20%loc(EquivLength) X X`20`20`20`20`20`20`20`20Trans_Name`20(2).End_List`20=`200 X X`20`20`20`20`20`20`20`20Attr`20=`20LNM$M_Case_Blind X X`20`20`20`20`20`20`20`20Status`20=`20Sys$Trnlnm`20(%ref(Attr),`20'LNM$SYSTEM', V X`20`20`20`20`20/`20`20`20`20`20%descr(LogName(1:LognameLength)),`20%ref(PSL$C_ VEXEC)`20,`20Trans_Name) X X`20`20`20`20`20`20`20`20If`20(.not.`20Status)`20Then X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20Translate`20=`20-1`20`20`20 V`20`20`20`20`20`20`20!`20unsuccessful X`20`20`20`20`20`20`20`20Endif X`20`20`20`20`20`20`20`20Return X`20`20`20`20`20`20`20`20End Xc`20************************************************************************ Xc`20clears`20the`20screen`20and`20home`20cursor X`20`20`20`20`20`20`20`20Subroutine`20Clear_Screen X`20`20`20`20`20`20`20`20Print`20*,`20char(27),`20'`5B1;1H' X`20`20`20`20`20`20`20`20Print`20*,`20Char(27),`20'`5B2J' X`20`20`20`20`20`20`20`20Return X`20`20`20`20`20`20`20`20End X Xc`20************************************************************************ Xc`20Modification`20History: Xc Xc`20Functional`20description:`20 Xc`20`20`20this`20subroutine`20calls`20sys$getmsg`20to`20print`20an`20error`20m Vessage`20based`20on`20the Xc`20`20`20Status`20value`20passed`20to`20it. Xc Xc`20Calling`20format: Xc Xc`20`20`20`20Call`20Print_Status`20(Status) Xc Xc`20Argument:`20Status`20-`20Integer`20(input) Xc Xc X`09Subroutine`20Print_Status`20(Status) X`09Integer`20Status,`20Mask`20/15/ X`09Character`20*`20132`20M_Text X`09Integer`20*`202`20M_Len X`09Byte`20`20Out_Array(4) X`20`20`20`20`20`20`20`20Call`20Sys$GetMsg`20(%Val(Status),`20M_Len,`20M_Text, V`20%Val(Mask), X`20`20`20`20`20/`20`20`20`20`20`20`20`20`20`20`20`20`20`20%Ref`20(Out_Array)) X`20`20`20`20`20`20`20`20Print`20*,`20M_Text`20(1:M_len) X`20`20`20`20`20`20`20`20Print`20* X`09Return X`09End $ call unpack GENERAL.FOR;1 1919456484 "" $! $ create 'f' XThis`20file`20contains`20code`20previously`20published`20in`20the`20March/Apri Vl`201993`20issue`20 Xof`20Digital`20Systems`20Journal.`20Originally`20run`20on`20page`2016,`20as V`20part`20of`20Sridhar`20 XSeshadri's`20article`20"A`20Utility`20to`20Save`20and`20Restore`20a`20User's V`20Passwords,"`20this`20 Xprivileged`20installed`20image`20provides`20the`20ability`20to`20save`20and V`20restore`20a`20 Xuser's`20password.`20Discussion`20focuses`20on`20OpenVMS`20password`20encrypti Von,`20 XUAF-related`20system`20services`20and`20security`20implications. $ call unpack PASWRD.DESC;1 1311131108 "" $! $ create 'f' Xc Xc`20Date`20Written:`203-Jul-91 Xc`20 Xc`20Figure`206`20-`20RESTORE_PASSWORD.FOR Xc Xc`20Author:`20Sri`20Seshadri,`20DCSS,`20Sugarland,`20TX`2077478 Xc Xc`20Subroutines`20in`20this`20module: Xc`09`5BSubroutine`5D`20Restore_Password`20(Username,`20Username_Length) Xc Xc`20************************************************************************* Xc Xc`20Modification`20History: Xc Xc`20Functional`20description:`20 Xc`20`20`20this`20SUBROUTINE`20restores`20the`20password`20stored`20in`20the V`20user`20data`20portion`20 Xc`20`20`20of`20the`20user`20record.`20`20It`20assumes`20the`20data`20is`20vali Vd.`20`20The`20only`20sanity`20 Xc`20`20`20check`20performed`20is`20that`20the`20first`20longword`20in`20the V`20record`20is`20SANITY. Xc Xc`20Calling`20format: Xc Xc`20`20`20`20CALL`20Restore_Password`20(Username,`20Username_Length) Xc Xc`20Argument:`20Username`20-`20Character`20String`20(input) Xc`20`20`20`20`20`20`20`20`20`20`20Username_Length`20-`20Integer`20(input) Xc Xc`20Include`20files:`20srp_include.inc`20`20`20for`20all`20data`20definitions Xc X`09Subroutine`20Restore_Password`20(Username,`20Username_Length) X`09include`20'srp_include.inc' X X`09If`20((Username`20.EQ.`20'`20')`20.OR.`20(Username_Length`20.EQ.`200))`20Re Vturn X X`09X`20=`201 X`09Uai_ItmList(X).Length`20=`20255`09`09!`20that's`20how`20long`20user`20data V`20is X`09Uai_ItmList(X).Item_Code`20=`20uai$_user_data X`09Uai_ItmList(X).Buffer_Address`20=`20%loc(user_data) X`09Uai_ItmList(X).Return_Length_Address`20=`200 X X`09x`20=`20x`20+`201 X`09Uai_ItmList(X).end_of_list`20=`200 X`09Status`20=`20sys$getuai`20(,,%descr(username(1:username_Length)), X`20`20`20`20`20/`20`20`20`20`09`09%ref(uai_itmlist),,,) X Xc`20check`20the`20status.`20`20if`20valid,`20pick`20out`20hash`20value,`20salt V,`20algorithm`20etc. X X`20`20`20`20`20`20`20`20If`20(.Not.`20Status)`20Then X`09`09Call`20Print_Status`20(Status) X`09`09Call`20Exit X`09Else X`09`20`20B.String`20=`20User_Data`09`09`20`20!`20get`20the`20string X Xc`20check`20if`20there`20is`20a`20match`20in`20the`20sanity`20field.`20`20if V`20not,`20it's`20"corrupt" X`09`20`20IF`20(B.Sanity`20.EQ.`20Sanity)`20THEN`20`20`20`20!`20valid X`09`09x`20=`201 X`09`20`20`20`20`20`20`20`20Uai_ItmList(X).Length`20=`208 X`09`20`20`20`20`20`20`20`20Uai_ItmList(X).Item_Code`20=`20uai$_pwd`20`20`20! V`20hashed`20value X`09`20`20`20`20`20`20`20`20Uai_ItmList(X).Buffer_Address`20=`20%loc(b.hash) X`09`20`20`20`20`20`20`20`20Uai_ItmList(X).Return_Length_Address`20=`200 X X`09`20`20`20`20`20`20`20`20x`20=`20x`20+`201 X`09`20`20`20`20`20`20`20`20Uai_ItmList(X).Length`20=`202 X`09`20`20`20`20`20`20`20`20Uai_ItmList(X).Item_Code`20=`20uai$_Salt`20`20!`202 V-byte`20salt X`09`20`20`20`20`20`20`20`20Uai_ItmList(X).Buffer_Address`20=`20%loc(b.Salt) X`09`20`20`20`20`20`20`20`20Uai_ItmList(X).Return_Length_Address`20=`200 X X`09`20`20`20`20`20`20`20`20x`20=`20x`20+`201 X`09`20`20`20`20`20`20`20`20Uai_ItmList(X).Length`20=`201 X`09`20`20`20`20`20`20`20`20Uai_ItmList(X).Item_Code`20=`20uai$_encrypt`20!`20e Vncryption`20alg X`09`20`20`20`20`20`20`20`20Uai_ItmList(X).Buffer_Address`20=`20%loc(b.Alg) X`09`20`20`20`20`20`20`20`20Uai_ItmList(X).Return_Length_Address`20=`200 X X`09`20`20`20`20`20`20`20`20x`20=`20x`20+`201 X`09`20`20`20`20`20`20`20`20Uai_ItmList(X).end_of_list`20=`200 X X`09`20`20`20`20`20`20`20`20Status`20=`20sys$setuai(,,%descr(username(1:usernam Ve_Length)), X`20`20`20`20`20/`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20`20%ref(uai_itmlist),,,) X`09`20`20`20`20`20`20`20`20If`20(.Not.`20Status)`20Then X`09`20`20`20`20`20`20`20`20`20`20`20`20`20`09Call`20Print_Status`20(Status) X`09`09`09Call`20Exit X`09`20`20`20`20`20`20`20`20Else Xc`09`09`09Print`20*,`20'Restored`20password`20for`20',`20Username X`09`09Endif X`09`20`20`20Else X`09`09Print`20*,`20'Sanity`20error:`20`20No`20saved`20password`20for`20',`20Us Vername X`09`09Call`20Exit X`09`20`20`20Endif X`09Endif X100`09Return X`09End $ call unpack RESTORE_PASSWORD.FOR;1 68687633 "" $! $ create 'f' Xc Xc`20Date`20Written:`203-Jul-91 Xc`20 Xc`20Figure`204`20-`20SAVE_PASSWORD.FOR Xc Xc`20Author:`20Sri`20Seshadri,`20DCSS,`20Sugarland,`20TX`2077478 Xc Xc`20Subroutines`20in`20this`20module: Xc`09`5BSubroutine`5D`20Save_Password`20(Username,`20Username_Length) Xc Xc`20************************************************************************* Xc Xc`20Modification`20History: Xc Xc`20Functional`20description:`20 Xc`20`20`20`20This`20subroutine`20saves`20the`20password`20of`20a`20user`20by V`20first`20extracting`20the`20 Xc`20`20`20`20hash`20value,`20Salt,`20and`20encryption`20Algorithm`20from`20the V`20UAF`20record.`20`20 Xc`20`20`20`20It`20then`20saves`20it`20in`20the`20User`20data`20portion`20along V`20with`20the`20sanity`20value. Xc Xc`20Calling`20format: Xc Xc`20`20`20`20CALL`20Save_Password`20(Username,`20Username_Length) Xc Xc`20Argument:`20Username`20-`20Character`20String`20(Input) Xc`20`20`20`20`20`20`20`20`20`20`20Username_Length`20-`20Integer`20(Input) Xc Xc`20Include`20files:`20`20srp_include.inc`20`20for`20data`20definitions Xc X`09Subroutine`20Save_Password`20(Username,`20Username_Length) X`09include`20'srp_include.inc' X X`09if`20((Username`20.EQ.`20'`20')`20.or.`20(Username_Length`20.EQ.`200))`20re Vturn X Xc`20....`20set`20up`20data`20structure`20for`20getting`20password,`20Salt,`20a Vnd`20Alg X X`09x`20=`201 X`09Uai_ItmList(X).Length`20=`208 X`09Uai_ItmList(X).Item_Code`20=`20Uai$_Pwd`09!`20hashed`20value X`09Uai_ItmList(X).Buffer_Address`20=`20%Loc(A.Hash) X`09Uai_ItmList(X).Return_Length_Address`20=`200 X X`09X`20=`20X`20+`201 X`09Uai_ItmList(X).Length`20=`202 X`09Uai_ItmList(X).Item_Code`20=`20Uai$_Salt`09!`202-byte`20salt X`09Uai_ItmList(X).Buffer_Address`20=`20%Loc(A.Salt) X`09Uai_ItmList(X).Return_Length_Address`20=`200 X X`09X`20=`20X`20+`201 X`09Uai_ItmList(X).Length`20=`201 X`09Uai_ItmList(X).Item_Code`20=`20Uai$_Encrypt`09`20`20`20!`20encryption`20alg V X`09Uai_ItmList(X).Buffer_Address`20=`20%Loc(A.Alg) X`09Uai_ItmList(X).Return_Length_Address`20=`200 X X`09X`20=`20X`20+`201 X`09Uai_ItmList(X).End_Of_List`20=`200 X X`09Status`20=`20Sys$Getuai`20(,,%Descr(Username(1:Username_Length)), X`20`20`20`20`20/`20`20`20`20%ref(Uai_Itmlist),,,) X`09If`20(.Not.`20Status)`20Then X`09`09Call`20Print_Status`20(Status) X`09`09Call`20Exit X`09Else Xc`20now`20save`20it`20in`20the`20user`20data`20portion`20for`20the`20specified V`20user X X`09`09A.Sanity`20=`20Sanity X`09`09User_Data`20=`20A.String X X`09`09X`20=`201 X`09`09Uai_ItmList(X).Length`20=`20255 X`09`09Uai_ItmList(X).Item_Code`20=`20Uai$_User_Data X`09`09Uai_ItmList(X).Buffer_Address`20=`20%Loc(User_Data) X`09`09Uai_ItmList(X).Return_Length_Address`20=`200 X X`09`09X`20=`20X`20+`201 X`09`09Uai_ItmList(X).End_of_list`20=`200 X X`09`09Status`20=`20Sys$Setuai(,,%Descr(Username(1:Username_Length)), X`20`20`20`20`20/`20`20`20`20`09`09%Ref(Uai_Itmlist),,,) X X`09`20`20`20`20`20`20`20`20If`20(.Not.`20Status)`20Then X`09`09`09Call`20Print_Status`20(Status) X`09`09`09Call`20Exit X`09`09Else Xc`09`09`09Print`20*,`20'Saved`20password`20for`20user`20',`20Username Xc`09`09`09Print`20* X`09`09Endif X`09Endif X100`09Return X`09End $ call unpack SAVE_PASSWORD.FOR;1 508839582 "" $! $ create 'f' Xc`20Date`20Written:`203-Jul-91 Xc`20 Xc`20Figure`205`20-`20Set_new_password.For Xc Xc`20Author:`20Sri`20Seshadri,`20DCSS,`20Sugarland,`20TX`2077478 Xc Xc`20Subroutines`20in`20this`20module: Xc`09`5BSUBROUTINE`5D`20Set_New_Password`20(Username,`20Username_Length,`20Ret_ Vval) Xc Xc`20******************************************************************* Xc Xc`20Modification`20History: Xc Xc`20Functional`20Description: Xc`20`20`20this`20subroutine`20calls`20the`20SYS$HASH_PASSWORD`20system`20servi Vce`20to`20find Xc`20`20`20the`20hash`20value`20of`20a`20password.`20`20You`20need`20to`20provi Vde`20it`20a`20Salt`20value Xc`20`20`20(a`20word),`20a`20username`20(character`20string),`20and`20a`20passw Vord`20to`20be`20hashed Xc`20`20`20(character`20string).`20`20It`20uses`20the`20current`20Algorithm`20f Vor`20the`20user`20(which Xc`20`20`20corressponds`20to`20UAI$C_PURDY_S)`20Algorithm.`20`20Other`20Algorit Vhms`20are`20 Xc`20`20`20UAI$C_PURDY_V,`20UAI$C_PURDY,`20UAI$C_AD_II`20or`20an`20Algorithm V`20of`20your`20choice.`20`20 Xc Xc`20Calling`20format: Xc`20`20`20`20CALL`20Set_New_Password`20(Username,`20Username_Length,`20Ret_val V) Xc Xc`20Argument:`20`20Username`20-`20Character`20String`20(Input) Xc`20`20`20`20`20`20`20`20`20`20`20`20Username_Length`20Integer`20(Input) Xc`20`20`20`20`20`20`20`20`20`20`20`20Ret_val`20-`20Integer`20(Output`20--`200 V`20=`20OK,`201`20=`20Error) Xc Xc`20Include`20files:`20SRP_INCLUDE.INC`20for`20data`20declarations Xc X`09SUBROUTINE`20Set_New_Password`20(Username,`20Username_Length,`20Ret_val) X`09Include`20'SRP_INCLUDE.INC' X`09Character`20*`2032`20Pwd`09`09!`20password`20to`20be`20hashed X`09Integer`20*`204`20Pwd_Len`20`09`09!`20Length`20of`20password X`09Integer`20*`202`20Salt`09`09!`20Salt`20to`20be`20used X`09Integer`20*`204`20Hash(2)`09`09!`20hashed`20value`20of`20password X`09Integer`20I,`20Ret_val X`09Byte`20Alg X X`09Ret_Val`20=`201`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20!`20assume`20error X Xc`20...`20get`20the`20Salt`20and`20encryption`20Alg... X`09x`20=`201 X`09Uai_ItmList(X).Length`20=`202 X`09Uai_ItmList(X).Item_Code`20=`20uai$_Salt X`09Uai_ItmList(X).Buffer_Address`20=`20%loc(Salt) X`09Uai_ItmList(X).Return_Length_Address`20=`200 X`09x`20=`20x`20+`201 X`09Uai_ItmList(X).Length`20=`201 X`09Uai_ItmList(X).Item_Code`20=`20uai$_encrypt X`09Uai_ItmList(X).Buffer_Address`20=`20%loc(Alg) X`09Uai_ItmList(X).Return_Length_Address`20=`200 X`09x`20=`20x`20+`201 X`09Uai_ItmList(X).end_of_list`20=`200 X X`09Status`20=`20Sys$Getuai(,,%descr(username(1:username_Length)), X`20`20`20`20`20/`20`20`20`20%ref(uai_itmlist),,,) X`09If`20(.Not.`20Status)`20Then X`09`09Call`20Print_Status`20(Status) X`09`09Call`20Exit X`09Endif X X`09Print`20* X`09Print`20*,`20'Enter`20new`20password`20for`20',`20username(1:username_Lengt Vh), X`20`20`20`20`20/`20`20`20'`20(in`20all`20caps)' X`09Read`20(5,`2010,`20end=100)`20Pwd_Len,`20Pwd X10`09Format`20(q,a) X X`09Print`20* X`09If`20(pwd`20.eq.`20'`20')`20Then X`09`09Pwd_Len`20=`20Username_Length X`09`09Pwd`20=`20Username X`09`09Print`20*,`20'Password`20same`20as`20username' X`09`09Print`20* X`09Endif X X`20`20`20`20`20`20`20`20DO`2050`20i`20=`201,`20Pwd_Len X`09`20`20`20If`20((Pwd(i:i)`20.GE.`20'a')`20.AND.`20(Pwd(i:i)`20.LE.`20'z')) V`20Then X`09`09Pwd(i:i)`20=`20Char(Ichar(Pwd(i:i))-32) X`09`20`20`20Endif X50`20`20`20`20`20`20Continue X X`09Status`20=`20Sys$Hash_Password`20(Pwd(1:Pwd_Len),`20%val(Alg),`20`20%val(Sa Vlt),`20 X`20`20`20`20`20/`20`20`20`20`20Username(1:Username_Length),`20%ref(Hash)) X X`09If`20(.Not.`20Status)`20Then X`09`09Call`20Print_Status`20(Status) X`09`09Call`20Exit X`09Endif X X`20`20`20`20`20`20`20`20x`20=`201 X`09Uai_ItmList(X).Length`20=`208 X`09Uai_ItmList(X).Item_Code`20=`20uai$_pwd X`09Uai_ItmList(X).Buffer_Address`20=`20%loc(hash) X`09Uai_ItmList(X).Return_Length_Address`20=`200 X X`09x`20=`20x`20+`201 X`09Uai_ItmList(X).end_of_list`20=`200 X X`09Status`20=`20Sys$Setuai(,,%descr(username(1:username_Length)), X`20`20`20`20`20/`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20`20%ref(uai_itmlist),,,) X X`09If`20(.Not.`20Status)`20Then X`09`20`20`20Call`20Print_Status`20(Status) X`09`20`20`20Call`20Exit X`20`20`20`20`20`20`20`20Else X`20`20`20`20`20`20`20`20`20`20`20Print`20*,`20'Password`20set`20for`20Username V`20',`20Username X`09`20`20`20Print`20* X`09`20`20`20Print`20* X`09Endif X X`09Ret_Val`20=`200`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20!`20we're`20OK V`20if`20we`20reach`20here... X`09Return X X100`09Print`20*,`20'Password`20change`20aborted...' X`09Call`20Exit X`09End $ call unpack SET_NEW_PASSWORD.FOR;1 1987009783 "" $! $ create 'f' X$!`20Figure`201.`20`20SRP.COM X$!`20Written`20by:`20Sridhar`20Seshadri,`20DCSS,`20Sugarland,`20TX`2077478 X$!`20Description:`20`20Command`20procedure`20to`20compile`20each`20of`20the V`20individual X$!`20`20`20source`20programs`20and`20link`20them`20together.`20`20Creates`20a V`20system`20logical`20 X$!`20`20`20called`20SRP$ROOT`20(input).`20`20Also,`20Installs`20the`20image X$! X$!`20Requirements:`20`20VMS`205.4`20and`20above,`20V5.3`20FORTRAN X$!`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`2012`20free`20global`20section Vs`20and`202`20free`20global`20pages X$! X$`20x`20=`20'f$verify`20(0)' X$`20say`20=`20"write`20sys$output" X$`20on`20warning`20then`20exit X$`20set`20proc/priv=(sysnam,sysprv,cmkrnl) X$`20type/page`20nl: X$! X$`20read`20sys$command`20what/End=exit_it`20- X`20/prompt="Device`20and`20directory`20for`20SRP$ROOT:`20(default`20SYS$SYSDEV VICE:`5BSRP`5D)`20" X$`20say`20"`20" X$`20if`20what`20.eqs.`20""`20then`20what`20=`20"sys$sysdevice:`5Bsrp`5D" X$`20create/dir/prot=(s:rwe,o:rwe,w:e,g)/own=system/log`20'what' X$`20Define/System/Exec`20SRP$Root`20'what' X$`20say`20"`20" X$`20say`20"Add`20the`20logical`20name`20definition`20to`20Sys$manager:Systartu Vp_V5.com" X$`20say`20"$`20Define/System/Exec`20SRP$Root`20''what'" X$`20say`20"`20" X$!`20 X$`20For`20=`20"Fortran/extend/warn=decl" X$`20say`20"`20" X$`20say`20"Compiling`20programs...`20(may`20take`20a`20few`20minutes)" X$`20for`20srp`09`09`09`09!`20Figure`202 X$`20for`20general`09`09`09`09!`20Figure`203 X$`20for`20save_password`09`09`09!`20Figure`204 X$`20for`20set_new_password`09`09`09!`20Figure`205 X$`20for`20restore_password`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20!`20Figure`206 X$`20link/notrace`20srp,general,save_password,set_new_password,restore_password V X$`20copy/log`20SRP.EXE`20SRP$Root:*.*/log/Prot=(g,w) X$! X$`20MCR`20Authorize XAdd/Id`20SRP_User XGrant/ID`20SRP_User`20SYSTEM`20`20`20`20`20`20!`20for`20example X$! X$`20Set`20file/Acl=(Id=SRP_User,Acc=Execute)`20SRP$ROOT:SRP.EXE X$!`20make`20sure`20there`20are`20enough`20global`20pages/global`20sections X$`20INSTALL XAdd/open/head/share/priv=(sysprv)`20SRP$Root:SRP X$`20say`20"`20" X$`20say`20"Add`20the`20lines`20to`20INSTALL`20the`20image`20to`20your`20SYSTAR VTUP_V5.COM" X$`20Say`20"$`20INSTALL"" X$`20say`20"Add/open/head/share/priv=(sysprv)`20SRP$Root:SRP" X$`20say`20"`20" X$`20say`20"To`20run`20SRP,`20type`20$`20RUN`20SRP$ROOT:SRP" X$`20say`20"`20" X$`20Exit_It: X$`20`20`20exit $ call unpack SRP.COM;1 474957975 "" $! $ create 'f' Xc`20`20Date`20written:`20`2003-Jun-1991 Xc Xc`20`20Figure`202`20-`20SRP.FOR`20(Main`20Program) Xc`20`20`20`20`20`20`20`20`20`20`20`20`20`20(includes`20SRP_INCLUDE.INC) Xc Xc`20Author:`20Sri`20Seshadri,`20DCSS,`20Sugarland,`20TX`2077478 Xc Xc`20Functional`20description: Xc Xc`09This`20program`20is`20used`20to`20save`20and`20restore`20the`20password V`20of`20a`20given Xc`09user.`20`20It`20assumes`20that`20the`20password`20is`20to`20be`20saved`20i Vn`20the`20user`20 Xc`20`20`20`20`20`20`20portion`20of`20the`20UAF`20record.`20`20It`20also`20assu Vmes`20the`20record`20is`20to`20be`20 Xc`20`20`20`20`20`20`20retrieved`20from`20the`20user`20portion`20of`20the`20UAF V`20record. Xc Xc`20Subroutines`20in`20this`20module: Xc`09None Xc Xc`20Data`20format`20in`20the`20user`20data`20portion`20of`20UAF`20record`20(15 V`20bytes): Xc Xc`09`20`20`20Sanity`20Check`20value`20(4`20bytes`20---`20value`20Sanity), Xc`20`20`20`20`20`20`20`20`20`20Hash`20value`20of`20primary`20password`20(8`20b Vytes),`20 Xc`20`20`20`20`20`20`20`20`20`20Seed`20(2`20bytes),`20 Xc`20`20`20`20`20`20`20`20`20`20Encryption`20Algorithm`20of`20primary`20passwor Vd`20(1`20byte) Xc Xc`09Privileges`20required: Xc`09`20`20`20SYSPRV`20or`20BYPASS`20to`20write`20a`20UAF`20record Xc X`09Program`20Save_Restore_Pwd X X`09Integer`20Choice,`20Ret_Val X`09Integer`20Username_Length`09`09`09!`20Length`20of`20specifed`20user X`09Integer`20Confirm_Owner`09`09`09!`20Function X`09Character`20*`2012`20Username X X`09Call`20Clear_Screen X X`09Call`20Check_Decnet X X`09Print`20*,`20'Warning!`20`20This`20program`20is`20used`20to`20save`20and V`20restore`20passwords' X`09Print`20*,`20'for`20a`20given`20user`20by`20using`20the`20user`20data`20por Vtion`20of`20the`20UAF.' X`09Print`20*,`20'Press`20Control-Z`20at`20this`20time`20to`20exit!' X`09Print`20* X X`09Call`20Get_Username`20(Username,`20Username_Length) X`09If`20(Confirm_Owner(Username,`20Username_Length)`20.ne.`200)`20Call`20Exit X X`09Call`20Save_Password`20(Username,`20Username_Length) X X`09Call`20WriteLog`20('Accessing`20UAF`20information`20for`20'`20//`20Username V) X X`09Call`20Set_New_Password`20(Username,`20Username_Length,`20Ret_Val) X X`09If`20(Ret_Val`20.EQ.`200)`20Then X`09`20`20`20Call`20Set_Host_Zero`09`09`09!`20login`20as`20new`20user X`09`20`20`20Call`20Restore_Password`20(Username,`20Username_Length) X`09Endif X`09End $ call unpack SRP.FOR;1 1783368515 "" $! $ create 'f' Xc Xc`20Date`20Written:`203-Jun-91 Xc`20 Xc`20Figure`207`20-`20SRP_INCLUDE.INC Xc Xc`20Author:`20Sri`20Seshadri,`20DCSS,`20Sugarland,`20TX`2077478 Xc Xc`20Subroutines`20in`20this`20module: Xc`09None Xc Xc`20This`20is`20the`20include`20file`20that`20contains`20the`20data`20structur Ves`20for`20a`20UAF`20record. Xc`20It`20is`20used`20to`20set/get`20hashed`20password,`20encrypt`20algorithm, V`20and`20salt.`20`20`20 Xc`20It`20is`20also`20used`20to`20get`20the`20user`20data`20portion`20of`20the V`20UAF. Xc Xc Xc`20Data`20format`20in`20the`20UAF`20record`20(15`20byte): Xc Xc`09Sanity`20Check`20value`20(4`20bytes`20---`20value`20Sanity),`20 Xc`09Hash`20value`20(8`20bytes),`20 Xc`20`20`20`20`20`20`20Seed`20(2`20bytes),`20 Xc`09Encryption`20Algorithm`20(1`20byte) Xc X`09implicit`20none X`09include`20'($rmsdef)' X`09include`20'($ssdef)' X`09include`20'($uaidef)' X`09include`20'($syssrvnam)' X`09character`20username*12,`20 X`20`20`20`20`20/`20`20`20`20`20`20`20`20`20`20`20`20user_data*255,`20user_data V_b*255`20`20`20!`20255-byte`20user`20data X`09structure`20/getuai_itemlist/`09`09`20`20`20!`20an`20UAF`20record X`09`20`20union X`09`09map X`09`09`20`20integer*2`20length,`20item_code X`09`09`20`20integer*4`20buffer_address,`20return_length_address X`09`09end`20map X`09`09map X`09`09`20`20integer*4`20end_of_list X`09`09end`20map X`09`20`20end`20union X`09end`20structure X`09Integer*4`20username_length,`20`09`09!`20actual`20username`20length X`20`20`20`20`20/`20`20`20`20`20`20`20`20`20`20`20`20status,`20X,`20`09 X`20`20`20`20`20/`20`20`20`20`20`20`20`20`20`20`20`20user_data_length, X`20`20`20`20`20/`20`20`20`20`20`20`20`20`20`20`20`20Sanity`09`09`09!`20safegua Vrd`20at`20retrieval X`09Parameter`20(Sanity=11090323)`09`09!`20some`20arbitrary`20number X`09structure`20/struct/`09`09`09!`2015-byte`20storage`20of`20user's X`09`20`20`20Union`09`09`09`09!`20password`20information X`09`09map X`09`09`09integer`20*`204`20sanity`09!`20safeguard X`09`09`09integer`20*`204`20hash(2)`09!`20encrytped`20password X`09`09`09integer`20*`202`20salt`09!`20random`20value`20used`20to`20encrypt X`09`09`09byte`20`20`20`20`20alg`09`09!`20algorithm`20used`20in`20encryption X`09`09end`20map X`09`09map X`09`09`09character`20*`2015`20string`20`20!`20size`20of`20the`20above`20struct V X`09`09end`20map X`09`20`20`20End`20Union X`09end`20structure X`09record`20/struct/`20a,`20b`09`09`09!`20to`20map`20the`20userdata X`09record`20/getuai_itemlist/`20uai_itmlist(4) $ call unpack SRP_INCLUDE.INC;1 1259602129 "" $ v=f$verify(v) $ exit