home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Fresh Fish 8
/
FreshFishVol8-CD2.bin
/
bbs
/
dev
/
tbsource.lha
/
TBSource
/
Logger
/
PassWd.S
< prev
next >
Wrap
Text File
|
1993-12-21
|
22KB
|
1,245 lines
*************************************************
* *
* (C)opyright 1992-93 *
* *
* by Tomi Blinnikka *
* *
* Don´t try to understand the code *
* *
* Version 1.00 01/08/1992 *
* *
* BUGS: Didn't check for UNUSED *
* *
* Version 1.01 08/08/1992 *
* *
* Added -l option *
* *
* BUGS: RemUser jumped to AddUser_OUT *
* *
* Version 1.02 10/08/1992 *
* *
* Added -e option *
* *
* Version 1.03 14/08/1992 *
* *
* Added command to start *
* *
* Version 1.04 03/02/1993 *
* *
* Changed parser to CBM ReadArgs *
* *
*************************************************
INCLUDE "JMPLibs.i"
INCLUDE "exec/types.i"
INCLUDE "libraries/dos.i"
INCLUDE "XREF:2.0.xref"
INCLUDE "XREF:exec.xref"
INCLUDE "XREF:dos.xref"
XREF _LVOSetMode
BITDEF GV,LOCAL_ONLY,9
TRUE: EQU 1
FALSE: EQU 0
section PassWd,CODE
openlib Dos,NoDos
lib Dos,Input
move.l d0,_stdin
lea.l CLTemplate1,a0
move.l a0,d1
lea.l CLArray1,a0
move.l a0,d2
clr.l d3
lib Dos,ReadArgs
move.l d0,RDArgs1
beq NoRDArgs
move.l UserPointer,a4
tst.b (a4)
bne CopyLoop
lea.l UserVarText1,a0
move.l a0,d1
lea.l Buffer3,a0
move.l a0,d2
move.l #10,d3
clr.l d4 ;LV_VAR actually
or.l #GVF_LOCAL_ONLY,d4
lib Dos,GetVar
cmp.l #-1,d0
beq ArgMissing
bra CopyLoop_OUT
CopyLoop: lea.l Buffer3,a0
move.l a4,a5
add.l #10,a5
CopyLoop1: move.b (a4)+,(a0)+
tst.b (a4)
beq CopyLoop_OUT
cmp.l a4,a5
beq CopyLoop_OUT
cmp.b #' ',(a4)
bne CopyLoop1
CopyLoop_OUT:
lea.l PassWdFileN,a0
move.l a0,d1
move.l #MODE_OLDFILE,d2
lib Dos,Open
move.l d0,PassWdFile
bne DoCommands
lib Dos,IoErr
cmp.l #ERROR_OBJECT_NOT_FOUND,d0
beq CreatePWFile
bsr FileError1
bra ShutDown
CreatePWFile: lea.l CreatingText1,a0
bsr Printer
lea.l PassWdFileN,a0
move.l a0,d1
move.l #MODE_NEWFILE,d2
lib Dos,Open
move.l d0,PassWdFile
bne CreatePWFile2
bsr FileError4
bra ShutDown
CreatePWFile2: move.l #'root',Buffer1
lea.l Buffer1,a0
lea.l PassWord,a1
bsr Encrypt
bsr WriteUser
bsr SeekStart
DoCommands: tst.l OptionAdd
beq DoCommands1
bsr AddUser
DoCommands1: tst.l OptionRemove
beq DoCommands2
bsr RemUser
DoCommands2: tst.l OptionList
beq DoCommands3
bsr ListUsers
DoCommands3: tst.l OptionEdit
beq DoCommands4
bsr EditUser
DoCommands4: tst.w SomethingDone
bne DoCommands5
bsr ChangePW
DoCommands5: bra ShutDown
ChangePW: bsr FindUser
tst.l d0
bne ChangePW_OUT
lea.l UNUSEDText1,a0
lea.l UserName,a1
bsr CmpStrings
tst.l d0
beq ChangePW0.1
lea.l InvalidText1,a0
bsr Printer
bra ChangePW_OUT
ChangePW0.1: lea.l PasswordText3,a0
bsr Printer
lea.l Buffer1,a0
move.l #10,d0
bsr GetString2
cmp.l #-1,d0
bne ChangePW1
lea.l BreakText1,a0
bsr Printer
bra ChangePW_OUT
ChangePW1: lea.l PassWord,a0
lea.l Buffer2,a1
bsr Decrypt
lea.l Buffer1,a1
lea.l Buffer2,a0
bsr CmpStrings
tst.l d0
bne ChangePW2
lea.l MismatchText2,a0
bsr Printer
bra ChangePW_OUT
ChangePW2: lea.l CRLFText1,a0
bsr Printer
bsr GetPW
tst.l d0
bne ChangePW_OUT
ChangePW6: lea.l CRLFText1,a0
bsr Printer
lea.l Buffer1,a0
lea.l PassWord,a1
bsr Encrypt
bsr SeekBack
bsr WriteUser
ChangePW_OUT: rts
AddUser: move.w #1,SomethingDone
bsr CheckClone
tst.l d0
bne AddUser0.01
lea.l DoubleNameText1,a0
bsr Printer
bra AddUser_OUT
AddUser0.01: bsr CheckRoot
tst.l d0
bne AddUser_OUT
bsr FindFree
bsr ClearUser
bsr CopyUN1
AddUser0.1: bsr GetRealN
tst.l d0
bne AddUser_OUT
AddUser1.1: lea.l PasswordText1,a0
bsr Printer
lea.l Buffer1,a0
move.l #10,d0
bsr GetString2
cmp.l #-1,d0
bne AddUser2
lea.l BreakText1,a0
bsr Printer
bra AddUser_OUT
AddUser2: cmp.l #4,d0
bhi AddUser2.1
lea.l ShortText1,a0
bsr Printer
bra AddUser1.1
AddUser2.1: lea.l PasswordText2,a0
bsr Printer
lea.l Buffer2,a0
move.l #10,d0
bsr GetString2
cmp.l #-1,d0
bne AddUser3
lea.l BreakText1,a0
bsr Printer
bra AddUser_OUT
AddUser3: lea.l Buffer2,a0
lea.l Buffer1,a1
bsr CmpStrings
tst.l d0
bne AddUser4
lea.l MismatchText1,a0
bsr Printer
bra AddUser1.1
AddUser4: bsr GetHome
tst.l d0
bne AddUser_OUT
AddUser5: bsr GetOffice
tst.l d0
bne AddUser_OUT
AddUser6: bsr GetCommand
tst.l d0
bne AddUser_OUT
AddUser7: bsr GiveUserInfo
lea.l AddUserText1,a0
bsr Printer
bsr GetAnswer
tst.l d0
bne AddUser_OUT
lea.l Buffer1,a0
lea.l PassWord,a1
bsr Encrypt
bsr WriteUser
AddUser_OUT: rts
RemUser: move.w #1,SomethingDone
bsr CheckRoot
tst.l d0
bne RemUser_OUT
bsr FindUser
tst.l d0
bne RemUser_OUT
cmp.l #'root',UserName
bne RemUser1
lea.l RemUserText2,a0
bsr Printer
bra RemUser_OUT
RemUser1: bsr GiveUserInfo
lea.l RemUserText1,a0
bsr Printer
bsr GetAnswer
tst.l d0
bne RemUser_OUT
bsr SeekBack
bsr ClearUser
move.l #'UNUS',UserName
move.w #'ED',UserName+4
bsr WriteUser
RemUser_OUT: rts
ListUsers: move.w #1,SomethingDone
lea.l AllUsersText1,a0
bsr Printer
ListUsers1: clr.w Quiet
bsr ReadUser
tst.l d0
bne ListUsers_OUT
move.w #1,Quiet
lea.l UNUSEDText1,a0
lea.l UserName,a1
bsr CmpStrings
tst.l d0
bne ListUsers1
bsr GiveUserInfo
bsr CheckBreak
tst.l d0
beq ListUsers1
ListUsers_OUT: move.w #1,Quiet
rts
EditUser: move.w #1,SomethingDone
bsr CheckRoot
tst.l d0
bne EditUser_OUT
bsr FindUser
tst.l d0
bne EditUser_OUT
EditUser0.1: bsr GiveUserInfo
bsr GetOption
cmp.l #-1,d0
beq EditUser_OUT
tst.l d0
beq EditUser1
cmp.l #1,d0
beq EditUser2
cmp.l #2,d0
beq EditUser3
cmp.l #3,d0
beq EditUser4
cmp.l #4,d0
beq EditUser5
cmp.l #5,d0
beq EditUser6
cmp.l #6,d0
beq EditUser7
EditUser_OUT rts
EditUser1: bsr GetUserN
tst.l d0
bne EditUser_OUT
bra EditUser0.1
EditUser2: bsr GetPW
tst.l d0
bne EditUser_OUT
lea.l Buffer1,a0
lea.l PassWord,a1
bsr Encrypt
bra EditUser0.1
EditUser3: bsr GetRealN
tst.l d0
bne EditUser_OUT
bra EditUser0.1
EditUser4: bsr GetHome
tst.l d0
bne EditUser_OUT
bra EditUser0.1
EditUser5: bsr GetOffice
tst.l d0
bne EditUser_OUT
bra EditUser0.1
EditUser6: bsr SeekBack
bsr WriteUser
bra EditUser_OUT
EditUser7: bsr GetCommand
tst.l d0
bne EditUser_OUT
bra EditUser0.1
ShutDown: move.l PassWdFile,d1
beq ShutDown9000
lib Dos,Close
ShutDown9000: move.l RDArgs1,d1
beq ShutDown8000
lib Dos,FreeArgs
ShutDown8000:
ShutDown1000: closlib Dos
move.l #RETURN_OK,d0
rts
ArgMissing: move.l #ERROR_REQUIRED_ARG_MISSING,d1
lib Dos,SetIoErr
bra NoRDArgs
NoRDArgs: lib Dos,IoErr
move.l d0,d1
clr.l d2
lib Dos,PrintFault
bra ShutDown
NoDos: move.l #RETURN_FAIL,d0
rts
FileError1: lea.l FileErrorText1,a0
bsr Printer
rts
FileError2: lea.l FileErrorText2,a0
bsr Printer
rts
FileError3: lea.l FileErrorText3,a0
bsr Printer
bra ShutDown
FileError4: lea.l FileErrorText4,a0
bsr Printer
bra ShutDown
Printer: tst.w Quiet
beq Printer1
printa a0
Printer1: rts
CheckRoot: bsr SeekStart
bsr ReadUser
tst.l d0
bne CheckRoot_OUT
lea.l PasswordText1,a0
bsr Printer
lea.l Buffer1,a0
move.l #10,d0
bsr GetString2
cmp.l #-1,d0
bne CheckRoot1
lea.l BreakText1,a0
bsr Printer
bra CheckRoot_OUT
CheckRoot1: lea.l CRLFText1,a0
bsr Printer
lea.l PassWord,a0
lea.l Buffer2,a1
bsr Decrypt
bsr SeekStart
lea.l Buffer2,a0
lea.l Buffer1,a1
bsr CmpStrings
tst.l d0
bne CheckRoot2
lea.l MismatchText2,a0
bsr Printer
CheckRoot_OUT: move.l #-1,d0
rts
CheckRoot2: clr.l d0
rts
;Seek to end of PassWdFile
;
;Results d0 = length
;
SeekEnd: push d2-d3
move.l PassWdFile,d1
move.l d1,d6
move.l #00,d2
move.l #01,d3
lib Dos,Seek
move.l d6,d1
lib Dos,Seek
pull d2-d3
rts
SeekStart: push d2-d3
move.l PassWdFile,d1
move.l #0,d2
move.l #-1,d3
lib Dos,Seek
pull d2-d3
rts
SeekBack: push d2-d3
move.l PassWdFile,d1
move.l #-DataSize,d2
move.l #0,d3
lib Dos,Seek
pull d2-d3
rts
CopyUN1: move.l Buffer3,UserName
move.l Buffer3+4,UserName+4
move.l Buffer3+8,UserName+8
rts
ClearUser: clr.l UserN