A2osX/SYS/KERNEL.S.PWDX.txt
2019-06-06 17:45:40 +02:00

573 lines
8.5 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

NEW
AUTO 3,1
*--------------------------------------
X.PWD jmp (.1-SYS.GetPWUID,x)
.1 .DA PWD.GetPWUID
.DA PWD.GetPWName
.DA PWD.PutPW
*--------------------------------------
* ZPPtr1 : UID / pName (Input)
* ZPPtr2 : pPW (Output)
* ZPPtr3 : pDB
* USERNAME:PASSWORD:UID:GID:GECOS:HOME:SHELL\CR
* ....\CR
* \0
*--------------------------------------
PWD.GetPWUID lda PWD.hDB
beq PWD.GetPW.9
jsr K.GetmemPtr
>STYA ZPPtr3
.1 lda (ZPPtr3)
beq PWD.GetPW.99 EOF
ldy #0
jsr PWD.NextString skip USERNAME
jsr PWD.NextString skip PASSWORD
jsr PWD.GetByte get UID
cmp ZPPtr1+1
beq PWD.GetPW.8
jsr PWD.NextLine
bra .1
PWD.GetPW.8 ldx ZPPtr2+1
beq .8 Dry run, no output
jmp PWD.Record2PW
.8 clc a = UID
rts
PWD.GetPW.9 lda #E.IPWDDB
sec
rts
PWD.GetPW.99 lda #E.IUSR
sec
PWD.GetPW.RTS rts
*--------------------------------------
PWD.GetPWName lda PWD.hDB
beq PWD.GetPW.9
jsr K.GetmemPtr
>STYA ZPPtr3
>LDYA ZPPtr1
>STYA TXTPTR
ldy #0
jsr MEM.TXTPTR.GetY
beq PWD.GetPW.99
.1 lda (ZPPtr3)
beq PWD.GetPW.99
ldy #$ff
.2 iny
jsr MEM.TXTPTR.GetY
beq .4
cmp (ZPPtr3),y
beq .2
.3 jsr PWD.NextLine
bra .1
.4 lda (ZPPtr3),y
cmp #':'
bne .3
ldx ZPPtr2+1
beq .8
jmp PWD.Record2PW
.8 iny
jsr PWD.NextString skip PASSWORD
iny
jmp PWD.GetByte get UID
*--------------------------------------
* ZPPtr2 : pPW (Input)
* ZPPtr3 : pDB
*--------------------------------------
PWD.PutPW >LDYA ZPPtr2
>STYA TXTPTR
lda PWD.hDB
bne .1
ldy #S.PW.UID
jsr MEM.TXTPTR.GetY
bne PWD.GetPW.RTS Must be ROOT user
jsr PWD.GetRecordLen
tay
lda #0
>STYA PWD.DBSize
jsr K.getmem
bcs PWD.GetPW.RTS
>STYA ZPPtr3
>STYA PWD.DBPtr
stx PWD.hDB
jmp .8
.1 jsr K.GetmemPtr
>STYA PWD.DBPtr
ldy #S.PW.PASSWD
jsr MEM.TXTPTR.GetY
bne .12
jsr PWD.DeleteRecord
bcc .80
rts
.12 jsr PWD.DeleteRecord
bcc .11 user exits..
jsr PWD.GetUID new user, get UID
bcs .99
ldy #S.PW.UID
sta CLRWRITEAUX
sta (TXTPTR),y
sta SETWRITEAUX
.11 jsr PWD.GetRecordLen
clc
adc PWD.DBSize
sta PWD.DBSize
bcc .2
inc PWD.DBSize+1
.2 >LDYA PWD.DBPtr
>STYA ZPPtr4
>LDYA PWD.DBSize
jsr K.Getmem
bcs .99
>STYA ZPPtr3
>STYA PWD.DBPtr
ldy #0
.3 lda (ZPPtr4),y
sta (ZPPtr3),y
beq .4
iny
bne .3
inc ZPPtr4
inc ZPPtr3
bra .3
.4 tya
clc
adc ZPPtr3
sta ZPPtr3
bcc .5
inc ZPPtr3+1
.5 lda PWD.hDB
stx PWD.hDB
jsr K.Freemem
.8 jsr PWD.StoreRecord
.80 inc PWD.bDirty
clc
.99 rts
.9 lda #E.IPWDDB
sec
rts
*--------------------------------------
* ZPPtr2 = pPW
*--------------------------------------
PWD.GetUID >LDYA PWD.DBPtr
>STYA ZPPtr3
stz .8+1
.1 lda (ZPPtr3)
beq .8 End of DB
ldy #0
jsr PWD.NextString skip name
jsr PWD.NextString skip password
jsr PWD.GetByte
cmp .8+1
bcc .4
sta .8+1
.4 jsr PWD.NextLine
bra .1
.8 lda #$ff SELF MODIFIED
inc
beq .9
clc
rts
.9 lda #E.IUSR
sec
rts
*--------------------------------------
PWD.DeleteRecord
jsr PWD.FindRecord
bcs .9
.1 iny
lda (ZPPtr3),y
cmp #C.CR
bne .1
sty .3+1
tya
sec
adc ZPPtr3
sta ZPPtr4
lda ZPPtr3+1
adc #0
sta ZPPtr4+1
ldy #$ff
.2 iny
lda (ZPPtr4),y
sta (ZPPtr3),y
bne .2
lda PWD.DBSize
sec
.3 sbc #$ff SELF MODIFIED
sta PWD.DBSize
bcs .8
dec PWD.DBSize+1
.8 clc
.9 rts
*--------------------------------------
PWD.FindRecord >LDYA PWD.DBPtr
>STYA ZPPtr3
>LDYA ZPPtr2
>STYA TXTPTR
.2 lda (ZPPtr3)
beq .9 End of DB
ldy #$ff
.3 iny
jsr MEM.TXTPTR.GetY
beq .4
cmp (ZPPtr3),y
beq .3
.5 jsr PWD.NextLine
bra .2
.4 lda (ZPPtr3),y
cmp #':'
bne .5
clc
rts
.9 lda #E.IUSR
sec
rts
*--------------------------------------
PWD.NextString lda (ZPPtr3),y
iny
cmp #':'
bne PWD.NextString
rts
*--------------------------------------
PWD.NextLine iny
lda (ZPPtr3),y
cmp #C.CR
bne PWD.NextLine
tya
sec
adc ZPPtr3
sta ZPPtr3
bcc .8
inc ZPPtr3+1
.8 rts
*--------------------------------------
PWD.Record2PW sta CLRWRITEAUX
ldy #0
ldx #0 NAME
.1 lda (ZPPtr3),y
iny
cmp #':'
beq .2
jsr MEM.PutCharPtr2
inx
bra .1
.2 lda #0
jsr MEM.PutCharPtr2
inx
cpx #S.PW.PASSWD
bne .2
.3 lda (ZPPtr3),y
iny
cmp #':'
beq .4
jsr MEM.PutCharPtr2
inx
bra .3
.4 lda #0
jsr MEM.PutCharPtr2
inx
cpx #S.PW.UID
bne .4
jsr PWD.GetByte UID
jsr MEM.PutCharPtr2
jsr PWD.GetByte GID
jsr MEM.PutCharPtr2
ldx #S.PW.GECOS
.5 lda (ZPPtr3),y
iny
cmp #':'
beq .6
jsr MEM.PutCharPtr2
inx
bra .5
.6 lda #0
jsr MEM.PutCharPtr2
inx
cpx #S.PW.DIR
bne .6
.7 lda (ZPPtr3),y
iny
cmp #':'
beq .8
jsr MEM.PutCharPtr2
inx
bra .7
.8 lda #0
jsr MEM.PutCharPtr2
inx
cpx #S.PW.SHELL
bne .8
.9 lda (ZPPtr3),y
iny
cmp #C.CR
beq .10
jsr MEM.PutCharPtr2
inx
bra .9
.10 lda #0
jsr MEM.PutCharPtr2
sta SETWRITEAUX
clc
rts
*--------------------------------------
PWD.GetByte stz ZPPtr4
.1 lda (ZPPtr3),y
iny
cmp #':'
beq .8
and #$f
pha
lda ZPPtr4
asl
asl
clc
adc ZPPtr4
asl
sta ZPPtr4
pla
clc
adc ZPPtr4
sta ZPPtr4
bra .1
.8 lda ZPPtr4
* clc
rts
*--------------------------------------
PWD.StoreRecord sec
.HS 90 BCC
*--------------------------------------
PWD.GetRecordLen
clc
ldx #0
ldy #S.PW.NAME-1
jsr PWD.StoreString
lda #':'
jsr PWD.StoreChar
ldy #S.PW.PASSWD-1
jsr PWD.StoreString
lda #':'
jsr PWD.StoreChar
ldy #S.PW.UID
jsr MEM.TXTPTR.GetY
jsr PWD.StoreByte
lda #':'
jsr PWD.StoreChar
iny S.PW.UID
jsr MEM.TXTPTR.GetY
jsr PWD.StoreByte
lda #':'
jsr PWD.StoreChar
* iny S.PW.GECOS
jsr PWD.StoreString
lda #':'
jsr PWD.StoreChar
ldy #S.PW.DIR-1
jsr PWD.StoreString
lda #':'
jsr PWD.StoreChar
ldy #S.PW.SHELL-1
jsr PWD.StoreString
lda #C.CR
jsr PWD.StoreChar
txa
rts
*--------------------------------------
PWD.StoreString iny
jsr MEM.TXTPTR.GetY
beq .8
jsr PWD.StoreChar
bra PWD.StoreString
.8 rts
*--------------------------------------
PWD.StoreByte php
phx
stz .2+1
stz .3+1
ldx #8
sed
.1 asl
pha
.2 lda #$ff Self Modified
adc .2+1
sta .2+1
.3 lda #$ff Self Modified
adc .3+1
sta .3+1
pla
dex
bne .1
cld
plx
plp
lda .3+1
beq .4
jsr PWD.StoreChar30
.4 lda .2+1
beq PWD.StoreChar30
php
lsr
lsr
lsr
lsr
plp
and #$0f plp corrupt Z
beq .5
jsr PWD.StoreChar30
.5 lda .2+1
and #$0f
*--------------------------------------
PWD.StoreChar30 ora #$30
PWD.StoreChar inx
bcc .9 Dry run, no store
sta (ZPPtr3)
inc ZPPtr3
bne .9
inc ZPPtr3+1
.9 rts
*--------------------------------------
MAN
SAVE USR/SRC/SYS/KERNEL.S.PWDX
LOAD USR/SRC/SYS/KERNEL.S
ASM