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