NEW AUTO 3,1 *-------------------------------------- * ZPPtr1 : UID * TXTPTR : pName (Input) * FORPNT : pPW (Output) * ZPPtr3 : pDB * USERNAME:PASSWORD:UID:GID:GECOS:HOME:SHELL\CR * ....\CR * \0 *-------------------------------------- PWDX.GetPWUID sta ZPPtr1+1 lda PWD.hUsrDB beq PWDX.GetPW.9 jsr K.GetmemPtr >STYA ZPPtr3 .1 lda (ZPPtr3) beq PWDX.GetPW.99 EOF ldy #0 jsr PWDX.NextS skip USERNAME jsr PWDX.NextS skip PASSWORD jsr PWDX.GetByte get UID cmp ZPPtr1+1 beq PWDX.GetPW.8 jsr PWDX.NextL bra .1 PWDX.GetPW.8 ldx FORPNT+1 beq .8 Dry run, no output jmp PWDX.Rec2PW .8 clc a = UID rts PWDX.GetPW.9 lda #E.IPWDDB .HS 2C BIT ABS PWDX.GetPW.99 lda #E.IUSR sec rts *-------------------------------------- PWDX.GetPWName lda PWD.hUsrDB beq PWDX.GetPW.9 jsr K.GetmemPtr >STYA ZPPtr3 ldy #0 jsr SHARED.TXTPTRgY beq PWDX.GetPW.99 .1 lda (ZPPtr3) beq PWDX.GetPW.99 ldy #$ff .2 iny jsr SHARED.TXTPTRgY beq .4 cmp (ZPPtr3),y beq .2 .3 jsr PWDX.NextL bra .1 .4 lda (ZPPtr3),y cmp #':' bne .3 ldx FORPNT+1 beq .8 jmp PWDX.Rec2PW .8 iny jsr PWDX.NextS skip PASSWORD jmp PWDX.GetByte get UID *-------------------------------------- * TXTPTR : pPW (Input) * ZPPtr3 : pDB *-------------------------------------- PWDX.PutPW lda PWD.hUsrDB bne PWDX.PutPW.1 ldy #S.PW.UID jsr SHARED.TXTPTRgY bne PWDX.GetPW.99 Must be ROOT user jsr PWDX.GetRecLen tay lda #0 >STYA PWD.UsrDBSize iny bne .1 inc .1 jsr K.getmem bcs .9 >STYA ZPPtr3 stx PWD.hUsrDB lda #0 sta (ZPPtr3) jsr PWDX.AppRec lda PWD.hGrpDB beq .2 jsr K.freemem .2 >LDYAI PWDX.GROUP.Size+1 >STYA PWD.GrpDBSize jsr K.getmem bcs .9 >STYA ZPPtr3 stx PWD.hGrpDB ldy #PWDX.GROUP.Size-1 .3 lda PWDX.GROUP,y sta (ZPPtr3),y dey bpl .3 clc .9 rts *-------------------------------------- PWDX.PutPW.1 jsr K.GetmemPtr >STYA ZPPtr3 ldy #S.PW.PASSWD jsr SHARED.TXTPTRgY bne .12 jsr PWDX.FindRec bcs .99 jmp PWDX.DelRec *-------------------------------------- .12 jsr PWDX.FindRec bcs .11 jsr PWDX.DelRec bcs .99 bra .13 *-------------------------------------- .11 jsr PWDX.GetUID new user, get UID bcs .99 ldy #S.PW.UID sta IO.CLRWRITEAUX sta (TXTPTR),y sta IO.SETWRITEAUX .13 jsr PWDX.GetRecLen clc adc PWD.UsrDBSize sta PWD.UsrDBSize tay lda #0 adc PWD.UsrDBSize+1 sta PWD.UsrDBSize+1 iny bne .14 inc .14 jsr K.Getmem bcs .99 >STYA ZPPtr3 lda PWD.hUsrDB jsr K.GetMemPtr >STYA ZPPtr4 ldy #0 .3 lda (ZPPtr4),y sta (ZPPtr3),y beq .4 iny bne .3 inc ZPPtr4+1 inc ZPPtr3+1 bra .3 .4 lda PWD.hUsrDB stx PWD.hUsrDB jsr K.Freemem lda PWD.hUsrDB jsr K.GetMemPtr >STYA ZPPtr3 jsr PWDX.AppRec lda #0 jsr PWDX.StoreC clc rts .9 lda #E.IPWDDB sec .99 rts *-------------------------------------- PWDX.GetGRGID sta ZPPtr1+1 lda PWD.hGrpDB beq PWDX.GetGR.9 jsr K.GetmemPtr >STYA ZPPtr3 .1 lda (ZPPtr3) beq PWDX.GetGR.99 EOF ldy #0 jsr PWDX.NextS skip USERNAME jsr PWDX.GetByte get UID cmp ZPPtr1+1 beq PWDX.GetGR.8 jsr PWDX.NextL bra .1 PWDX.GetGR.8 ldx FORPNT+1 beq .8 Dry run, no output jmp PWDX.Rec2GR .8 clc a = UID rts PWDX.GetGR.9 lda #E.IPWDDB .HS 2C BIT ABS PWDX.GetGR.99 lda #E.IUSR sec rts *-------------------------------------- PWDX.GetGRName lda PWD.hGrpDB beq PWDX.GetGR.9 jsr K.GetmemPtr >STYA ZPPtr3 ldy #0 jsr SHARED.TXTPTRgY beq PWDX.GetGR.99 .1 lda (ZPPtr3) beq PWDX.GetGR.99 ldy #$ff .2 iny jsr SHARED.TXTPTRgY beq .4 cmp (ZPPtr3),y beq .2 .3 jsr PWDX.NextL bra .1 .4 lda (ZPPtr3),y cmp #':' bne .3 ldx FORPNT+1 beq .8 jmp PWDX.Rec2GR .8 iny jmp PWDX.GetByte get GID *-------------------------------------- PWDX.PutGR lda PWD.hGrpDB beq PWDX.GetGR.9 jsr K.GetmemPtr >STYA ZPPtr3 lda #E.IPWDDB sec rts *-------------------------------------- PWDX.OpenSession lda PWD.hUsrDB beq .1 lda TXTPTR+1 bne .3 .1 >LDYAI PWDX.ROOT.Size jsr K.GetMem bcs .9 >STYA ZPPtr1 ldy #PWDX.ROOT.Size-1 .2 lda PWDX.ROOT,y sta (ZPPtr1),y dey bpl .2 txa clc rts *-------------------------------------- .3 jsr PWDX.FindRec bcs .9 tya Y = Name length +1 * clc adc ZPPtr3 sta ZPPtr4 lda ZPPtr3+1 adc #0 sta ZPPtr4+1 ldy #31 sec .5 jsr SHARED.FORPNTgY eor (ZPPtr4),y Check MD5 bne .9 dey bpl .5 jsr PWDX.GetSessionLen jsr K.Getmem bcs .9 >STYA ZPPtr2 phx jsr PWDX.Record2Session pla clc .9 rts *-------------------------------------- PWDX.CloseSession jmp K.Freemem *-------------------------------------- * PRIVATE *-------------------------------------- PWDX.GetUID lda PWD.hUsrDB jsr K.GetmemPtr >STYA ZPPtr3 stz .8+1 .1 lda (ZPPtr3) beq .8 End of DB ldy #0 jsr PWDX.NextS skip name jsr PWDX.NextS skip password jsr PWDX.GetByte cmp .8+1 bcc .4 sta .8+1 .4 jsr PWDX.NextL bra .1 .8 lda #$ff SELF MODIFIED inc beq .9 clc rts .9 lda #E.IUSR sec rts *-------------------------------------- PWDX.DelRec .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.UsrDBSize sec .3 sbc #$ff SELF MODIFIED sta PWD.UsrDBSize bcs .8 dec PWD.UsrDBSize+1 .8 clc .9 rts *-------------------------------------- PWDX.FindRec lda PWD.hUsrDB jsr K.GetmemPtr >STYA ZPPtr3 .2 lda (ZPPtr3) beq .9 End of DB ldy #$ff .3 iny jsr SHARED.TXTPTRgY beq .4 cmp (ZPPtr3),y beq .3 .5 jsr PWDX.NextL bra .2 .4 lda (ZPPtr3),y cmp #':' bne .5 iny skip ":" clc rts .9 lda #E.IUSR sec rts *-------------------------------------- * Record : USERNAME:PASSWORD:UID:GID:GECOS:HOME:SHELL\CR *-------------------------------------- PWDX.Rec2PW ldy #0 ldx #0 NAME .1 lda (ZPPtr3),y iny cmp #':' beq .2 jsr SHARED.FORPNTpn inx bra .1 .2 lda #0 jsr SHARED.FORPNTpn inx cpx #S.PW.PASSWD bne .2 .3 lda (ZPPtr3),y iny cmp #':' beq .4 jsr SHARED.FORPNTpn inx bra .3 .4 lda #0 jsr SHARED.FORPNTpn inx cpx #S.PW.UID bne .4 jsr PWDX.GetByte UID jsr SHARED.FORPNTpn iny jsr PWDX.GetByte GID jsr SHARED.FORPNTpn iny ldx #S.PW.GECOS .5 lda (ZPPtr3),y iny cmp #':' beq .6 jsr SHARED.FORPNTpn inx bra .5 .6 lda #0 jsr SHARED.FORPNTpn inx cpx #S.PW.DIR bne .6 .7 lda (ZPPtr3),y iny cmp #':' beq .8 jsr SHARED.FORPNTpn inx bra .7 .8 lda #0 jsr SHARED.FORPNTpn inx cpx #S.PW.SHELL bne .8 .9 lda (ZPPtr3),y iny cmp #C.CR beq .10 jsr SHARED.FORPNTpn inx bra .9 .10 lda #0 jsr SHARED.FORPNTpn clc rts *-------------------------------------- PWDX.Rec2GR ldy #0 ldx #0 NAME .1 lda (ZPPtr3),y iny cmp #':' beq .2 jsr SHARED.FORPNTpn inx bra .1 .2 lda #0 jsr SHARED.FORPNTpn jsr PWDX.GetByte UID jsr SHARED.FORPNTpn clc rts *-------------------------------------- * Record : USERNAME:PASSWORD:UID:GID:GECOS:HOME:SHELL\CR *-------------------------------------- PWDX.GetSessionLen ldy #0 jsr PWDX.NextS USERNAME tya clc adc #S.SESSION.NAME tax jsr PWDX.NextS skip PASSWORD jsr PWDX.NextS skip UID jsr PWDX.NextS skip GID .1 inx iny lda (ZPPtr3),y beq .8 eor #C.CR bne .1 .8 phx A = 0 ply rts *-------------------------------------- PWDX.Record2Session ldy #0 jsr PWDX.NextS skip USERNAME jsr PWDX.NextS skip PASSWORD jsr PWDX.GetByte get UID sta ZPPtr1 iny jsr PWDX.GetByte get GID sta ZPPtr1+1 iny lda #0 ldx ZPPtr1 bne .1 ora #S.SESSION.P.ROOT .1 ldx ZPPtr1+1 bne .2 ora #S.SESSION.P.SYSADMIN .2 jsr SHARED.PutCP2 lda ZPPtr1 jsr SHARED.PutCP2 UID lda ZPPtr1+1 jsr SHARED.PutCP2 GID phy ldy #$ff .3 iny lda (ZPPtr3),y cmp #':' beq .4 jsr SHARED.PutCP2 bra .3 .4 lda #0 jsr SHARED.PutCP2 ply .5 lda (ZPPtr3),y cmp #C.CR beq .8 cmp #':' bne .6 lda #0 .6 jsr SHARED.PutCP2 iny bra .5 .8 lda #0 jmp SHARED.PutCP2 *-------------------------------------- PWDX.NextS lda (ZPPtr3),y beq .8 iny cmp #':' bne PWDX.NextS .8 rts *-------------------------------------- PWDX.NextL lda (ZPPtr3),y beq .8 iny cmp #C.CR bne PWDX.NextL tya clc adc ZPPtr3 sta ZPPtr3 bcc .8 inc ZPPtr3+1 .8 rts *-------------------------------------- PWDX.GetByte stz .8+1 .1 lda (ZPPtr3),y beq .8 cmp #C.CR beq .8 cmp #':' beq .8 and #$f pha lda .8+1 asl asl clc adc .8+1 asl sta .8+1 pla clc adc .8+1 sta .8+1 iny bra .1 .8 lda #$ff SELF MODIFIED clc rts *-------------------------------------- PWDX.AppRec .1 lda (ZPPtr3) beq .8 inc ZPPtr3 bne .1 inc ZPPtr3+1 bra .1 .8 sec .HS 90 BCC *-------------------------------------- PWDX.GetRecLen clc ldx #0 ldy #S.PW.NAME jsr PWDX.StoreS lda #':' jsr PWDX.StoreC ldy #S.PW.PASSWD jsr PWDX.StoreS lda #':' jsr PWDX.StoreC ldy #S.PW.UID jsr SHARED.TXTPTRgY jsr PWDX.StoreB lda #':' jsr PWDX.StoreC ldy #S.PW.GID jsr SHARED.TXTPTRgY jsr PWDX.StoreB lda #':' jsr PWDX.StoreC ldy #S.PW.GECOS jsr PWDX.StoreS lda #':' jsr PWDX.StoreC ldy #S.PW.DIR jsr PWDX.StoreS lda #':' jsr PWDX.StoreC ldy #S.PW.SHELL jsr PWDX.StoreS lda #C.CR jsr PWDX.StoreC txa PWDX.RTS rts *-------------------------------------- PWDX.StoreS jsr SHARED.TXTPTRgY beq PWDX.RTS jsr PWDX.StoreC iny bra PWDX.StoreS *-------------------------------------- PWDX.StoreB php phx jsr MATH.A2STR10NP plx plp ldy #0 .1 lda FOUTBuf,y beq PWDX.RTS iny jsr PWDX.StoreC bra .1 *-------------------------------------- PWDX.StoreC inx bcc .9 Dry run, no store sta (ZPPtr3) inc ZPPtr3 bne .9 inc ZPPtr3+1 .9 rts *-------------------------------------- PWDX.ROOT .DA #S.SESSION.P.ROOT .DA #0 UID .DA #0 GID .AZ "root" NAME .AZ "Root User" GECOS .AZ "${ROOT}root/" DIR .AZ "${ROOT}bin/sh" SHELL PWDX.ROOT.Size .EQ *-PWDX.ROOT *-------------------------------------- PWDX.GROUP .AS "root:0" .DA #C.CR .AS "users:1" .DA #C.CR PWDX.GROUP.Size .EQ *-PWDX.GROUP *-------------------------------------- MAN SAVE usr/src/sys/kernel.s.pwdx LOAD usr/src/sys/kernel.s ASM