A2osX/SBIN/LOGIN.S.txt

342 lines
6.2 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
.LIST OFF
.OP 65C02
.OR $2000
.TF SBIN/LOGIN
*--------------------------------------
.INB INC/MACROS.I
.INB INC/A2OSX.I
.INB INC/KERNEL.I
.INB INC/LIBCRYPT.I
*--------------------------------------
.DUMMY
.OR ZPBIN
ZS.START
ZPUsrID .BS 1
ZPUsrPtr .BS 2
ZPSessionPtr .BS 2
ZPShellPtr .BS 2
ZPRetryCnt .BS 1
ZPbValidUser .BS 1
ZPhGetLine .BS 1
ZPGetLinePtr .BS 2
ZPbGetLineSecret .BS 1
ZPGetLineLen .BS 1
ZPGetLineMax .BS 1
ZS.END
.ED
*--------------------------------------
INPUT.BUF.SIZE .EQ 16
*--------------------------------------
* File Header (16 Bytes)
*--------------------------------------
CS.START cld
jmp (.1,x)
.DA #$61 6502,Level 1 (65c02)
.DA #1 BIN Layout Version 1
.DA #S.PS.F.EVENT S.PS.F
.DA #0
.DA CS.END-CS.START Code Size (without Constants)
.DA DS.END-DS.START Data SegmentSize
.DA #64 Stack Size
.DA #ZS.END-ZS.START Zero Page Size
.DA 0
*--------------------------------------
* Relocation Table
*--------------------------------------
.1 .DA CS.INIT
.DA CS.RUN
.DA CS.DOEVENT
.DA CS.QUIT
L.MSG.NOAUTH .DA MSG.NOAUTH
L.LIBCRYPT .DA LIBCRYPT
L.MSG.LOGIN .DA MSG.LOGIN
L.MSG.PASSWORD .DA MSG.PASSWORD
L.MSG.BAD .DA MSG.BAD
L.MSG.CRLF .DA MSG.CRLF
L.MSG.BS .DA MSG.BS
L.USR.ROOT .DA USR.ROOT
.DA 0
*--------------------------------------
CS.INIT clc
rts
*--------------------------------------
CS.RUN >PUSHW pData PW
lda #0
>SYSCALL GetPWUID
bcc CS.RUN.AUTH
jmp CS.RUN.NOAUTH
CS.RUN.9 rts
*--------------------------------------
CS.RUN.AUTH >LDYA L.LIBCRYPT
>SYSCALL LoadLib
bcs CS.RUN.9
sta hLIBCRYPT
>LDYAI 256
>SYSCALL getmem
bcs CS.RUN.9
>STYA ZPGetLinePtr
stx ZPhGetLine
lda #3
sta ZPRetryCnt
.1 >PUSHBI 0
>LDYA L.MSG.LOGIN
>SYSCALL printf
bcs .9
lda #16
clc
jsr CS.RUN.GetLine
bcs .9
>PUSHW pData
>LDYA ZPGetLinePtr
>SYSCALL GetPWName
ror ZPbValidUser
>PUSHBI 0
>LDYA L.MSG.PASSWORD
>SYSCALL printf
bcs .9
lda #128
sec
jsr CS.RUN.GetLine
bcs .9
>PUSHBI 0
>LDYA L.MSG.CRLF
>SYSCALL printf
bcs .9
jsr CS.RUN.CHECK
bcc CS.RUN.LOGIN
>PUSHBI 0
>LDYA L.MSG.BAD
>SYSCALL printf
bcs .9
dec ZPRetryCnt
bne .1
lda #E.IUSR
* sec
.9 rts
*--------------------------------------
CS.RUN.CHECK rol ZPbValidUser
bcs CS.RUN.CHECK.9
>PUSHW ZPGetlinePtr
>PUSHW ZPGetlinePtr
>LIBCALL hLIBCRYPT,LIBCRYPT.MD5
>PUSHEA.G PW+S.PW.PASSWD
>LDYA ZPGetlinePtr
>SYSCALL strcmp
CS.RUN.CHECK.9 rts
*--------------------------------------
CS.RUN.NOAUTH >PUSHBI 0
>LDYA L.MSG.NOAUTH
>SYSCALL printf
bcs CS.RUN.CHECK.9
>LDYA L.USR.ROOT
CS.RUN.LOGIN jsr CS.RUN.SETUSER
bcs .9
>PUSHBI S.PS.F.HOLD
lda ZPUsrPtr
clc
adc #S.USR.NAME
sta ZPUsrPtr
lda ZPUsrPtr+1
adc /S.USR.NAME
sta ZPUsrPtr+1
ldx #3 Skip NAME,GECOS,DIR
.1 ldy #$ff
.2 iny
lda (ZPUsrPtr),y
bne .2
tya
sec
adc ZPUsrPtr
sta ZPUsrPtr
bcc .3
inc ZPUsrPtr+1
.3 dex
bne .1
>LDYA ZPUsrPtr
>SYSCALL ExecL
bcs .9
ldx ZPUsrID
lda S.Table.hPW-1,x
stz S.Table.hPW-1,x
stz S.Table.hFILE-1,x
>SYSCALL freemem
.9 rts
*--------------------------------------
CS.RUN.SETUSER >STYA ZPUsrPtr
ldx #1
.1 lda S.Table.hPW-1,x
bne .7
stx ZPUsrID
txa
ldy #S.PS.hSID
sta (pPS),y
>LDYAI USR.ROOT.Size
>SYSCALL getmem
bcs .9
>STYA ZPSessionPtr
txa
ldx ZPUsrID
sta S.Table.hPW-1,x
ldy #S.PS.hStdIn
lda (pPS),y
sta S.Table.hFILE-1,x
ldy #USR.ROOT.Size-1
.2 lda (ZPUsrPtr),y
sta (ZPSessionPtr),y
dey
bpl .2
clc
rts
.7 inx
cpx #K.USR.MAX+1
bne .1
* sec
.9 rts
*--------------------------------------
CS.DOEVENT
sec
rts
*--------------------------------------
CS.QUIT lda ZPhGetLine
beq .1
>SYSCALL freemem
.1 lda hLIBCRYPT
beq .8
>SYSCALL UnloadLib
.8 clc
rts
*--------------------------------------
CS.RUN.GetLine sta ZPGetLineMax
ror ZPbGetLineSecret
stz ZPGetLineLen
.1 >SYSCALL getchar
bcs .9
cmp #C.SPACE
bcc .2
ldy ZPGetLineLen
cpy ZPGetLineMax
beq .1
sta (ZPGetLinePtr),y
iny
sty ZPGetLineLen
bit ZPbGetLineSecret
bmi .1
>SYSCALL putchar
bra .1
.2 cmp #3 Ctrl-C
beq .9
cmp #C.CR
beq .8
cmp #C.BS
bne .1
ldy ZPGetLineLen
beq .1
dec ZPGetLineLen
bit ZPbGetLineSecret
bmi .1
>PUSHBI 0
>LDYA L.MSG.BS
>SYSCALL printf
bra .1
.8 ldy ZPGetLineLen
lda #0
sta (ZPGetLinePtr),y
clc
.9 rts
*--------------------------------------
CS.END
*--------------------------------------
LIBCRYPT .AZ "libcrypt"
hLIBCRYPT .BS 1
MSG.NOAUTH .AS "\r\n\r\nA2osX-Login:No ETC/PASSWD file present, Logged as ROOT.\r\n"
.AS "Consider adding ROOT password with USERADD command.\r\n"
MSG.CRLF .AZ "\r\n"
MSG.LOGIN .AZ "\r\nlogin:"
MSG.PASSWORD .AZ "\r\npassword:"
MSG.BAD .AZ "Bad user or password\r\n"
MSG.BS .DA #C.BS,#C.SPACE,#C.BS,#0
.HS 00
*--------------------------------------
USR.ROOT .DA #P.SYSADMIN
.DA #0 UID
.DA #0 GID
.BS 17 PASSWD
.AZ "ROOT" NAME
.AZ "Root User" GECOS
.AZ "${ROOT}ROOT/" DIR
.AZ "${ROOT}BIN/SH" SHELL
USR.ROOT.Size .EQ *-USR.ROOT
*--------------------------------------
.DUMMY
.OR 0
DS.START
PW .BS S.PW
DS.END
.ED
*--------------------------------------
MAN
SAVE USR/SRC/SBIN/LOGIN.S
ASM