From d93db0b7ce3fea9c09f92acdc7c363b78c088787 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Mon, 15 Apr 2019 16:29:07 +0100 Subject: [PATCH] Kernel 0.93 --- BIN/PS.S.txt | 2 +- BIN/SU.S.txt | 0 BIN/SUDO.S.txt | 0 BIN/USERMOD.S.txt | 0 BIN/WHO.S.txt | 38 +++++++++--- INC/A2osX.I.txt | 16 ++++- INC/KERNEL.I.txt | 4 +- SBIN/LOGIN.S.txt | 139 +++++++++++++++++++++++++++++++----------- SYS/KERNEL.S.CORE.txt | 12 ++-- SYS/KERNEL.S.ENV.txt | 51 ++++++++++++++-- SYS/KERNEL.S.INIT.txt | 13 ++-- SYS/KERNEL.S.PS.txt | 4 ++ SYS/KERNEL.S.txt | 2 +- 13 files changed, 218 insertions(+), 63 deletions(-) create mode 100644 BIN/SU.S.txt create mode 100644 BIN/SUDO.S.txt create mode 100644 BIN/USERMOD.S.txt diff --git a/BIN/PS.S.txt b/BIN/PS.S.txt index e7d23509..345394e2 100644 --- a/BIN/PS.S.txt +++ b/BIN/PS.S.txt @@ -113,7 +113,7 @@ CS.RUN.DUMP phx lda (ZPPSPtr),y >PUSHA Parent PID - ldy #S.PS.hUsr + ldy #S.PS.hSID lda (ZPPSPtr),y >PUSHA diff --git a/BIN/SU.S.txt b/BIN/SU.S.txt new file mode 100644 index 00000000..e69de29b diff --git a/BIN/SUDO.S.txt b/BIN/SUDO.S.txt new file mode 100644 index 00000000..e69de29b diff --git a/BIN/USERMOD.S.txt b/BIN/USERMOD.S.txt new file mode 100644 index 00000000..e69de29b diff --git a/BIN/WHO.S.txt b/BIN/WHO.S.txt index f0bbdee1..7e839ca0 100644 --- a/BIN/WHO.S.txt +++ b/BIN/WHO.S.txt @@ -57,9 +57,9 @@ CS.RUN >LDYA L.MSG0 lda USR.Table.hFile-1,x tax - lda OF.Table.hPath-1,x - >SYSCALL GetMemPtr + jsr CS.RUN.GETIO + >PUSHYA ldx USRID @@ -69,16 +69,20 @@ CS.RUN >LDYA L.MSG0 lda ZPPWPtr clc - adc #19 + adc #S.USR.NAME tay lda ZPPWPtr+1 - adc #0 + adc /S.USR.NAME >PUSHYA + >PUSHB (ZPPWPtr) + + ldy #S.USR.UID + >PUSHB (ZPPWPtr),y >PUSHB USRID - >PUSHBI 5 + >PUSHBI 7 >LDYA L.MSG1 >SYSCALL printf @@ -91,6 +95,26 @@ CS.RUN >LDYA L.MSG0 sec we do not want to stay in memory .9 rts *-------------------------------------- +CS.RUN.GETIO lda OF.Table.hPath-1,x + bne .1 + + lda OF.Table.hFD-1,x + tax + + lda Dev.Table-1,x + + clc + adc #S.FD.DEV + tay + lda Dev.Table,x + + adc /S.FD.DEV + + rts + +.1 >SYSCALL GetMemPtr + rts +*-------------------------------------- CS.EVENT sec rts *-------------------------------------- @@ -98,8 +122,8 @@ CS.QUIT clc rts *-------------------------------------- CS.END -MSG0 .AZ "Usr Name Dev" -MSG1 .AZ "%3d %16s %16s\r\n" +MSG0 .AZ "Usr UID Privileges Name Dev" +MSG1 .AZ "%3d %3d %b %16s %16s\r\n" *-------------------------------------- .DUMMY .OR 0 diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index 235fdc7d..99802f6f 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -29,7 +29,7 @@ ZPLIB .EQ $40 32 bytes CORE.PSIndex .EQ $D0 CORE.PSCount .EQ $D1 -pUser .EQ $D2 +pSession .EQ $D2 pEvent .EQ $D4 pPs .EQ $D6 *-------------------------------------- @@ -147,6 +147,8 @@ SEEK.SET .EQ $00 SEEK.CUR .EQ $02 SEEK.END .EQ $04 *-------------------------------------- +P.SYSADMIN .EQ %10000000 +*-------------------------------------- * A2osX.SYSCALL Functions Indexes *-------------------------------------- SYS.GetMemStat .EQ $00 @@ -514,7 +516,7 @@ S.PS.RC .EQ 13 S.PS.ARGC .EQ 14 S.PS.hARGV .EQ 15 -S.PS.hUsr .EQ 16 +S.PS.hSID .EQ 16 S.PS.A .EQ 17 S.PS.X .EQ 18 @@ -633,5 +635,15 @@ S.PW.SHELL .EQ 182 64+1 * S.PW .EQ 247 *-------------------------------------- +S.USR.PRIV .EQ 0 +S.USR.UID .EQ 1 +S.USR.GID .EQ 2 +S.USR.PASSWD .EQ 3 +S.USR.NAME .EQ 20 +*S.USR.GECOS .EQ 0 +*S.USR.DIR .EQ 0 +*S.USR.SHELL .EQ 0 +* +*-------------------------------------- MAN SAVE INC/A2OSX.I diff --git a/INC/KERNEL.I.txt b/INC/KERNEL.I.txt index 812f8e04..235dccae 100644 --- a/INC/KERNEL.I.txt +++ b/INC/KERNEL.I.txt @@ -21,8 +21,8 @@ PS.Table.Stats .EQ $13E0 K.PS.MAX OF.Table.hPath .EQ $1400 K.OF.MAX OF.Table.hFD .EQ $1420 K.OF.MAX *-------------------------------------- -USR.Table.hPW .EQ $1440 K.USR.MAX -USR.Table.hFile .EQ $1450 K.USR.MAX +S.Table.hPW .EQ $1440 K.USR.MAX +S.Table.hFile .EQ $1450 K.USR.MAX *-------------------------------------- A2osX.EndTables .EQ $1460 *-------------------------------------- diff --git a/SBIN/LOGIN.S.txt b/SBIN/LOGIN.S.txt index 568bc14c..fb66fe99 100644 --- a/SBIN/LOGIN.S.txt +++ b/SBIN/LOGIN.S.txt @@ -7,11 +7,16 @@ NEW *-------------------------------------- .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 @@ -45,17 +50,14 @@ CS.START cld .DA CS.RUN .DA CS.DOEVENT .DA CS.QUIT -L.MSG.NOPASSWD .DA MSG.NOPASSWD +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.ENV.SHELL .DA ENV.SHELL -L.SHELL .DA SHELL -L.ENV.HOME .DA ENV.HOME -L.HOME .DA HOME +L.USR.ROOT .DA USR.ROOT .DA 0 *-------------------------------------- CS.INIT clc @@ -66,17 +68,8 @@ CS.RUN >PUSHW pData PW >SYSCALL GetPWUID bcc CS.RUN.AUTH - >PUSHBI 0 - >LDYA L.MSG.NOPASSWD - >SYSCALL printf - bcs CS.RUN.9 + jmp CS.RUN.NOAUTH - jsr CS.RUN.SETENV - bcs CS.RUN.9 - - >PUSHBI S.PS.F.HOLD - >LDYA L.SHELL - >SYSCALL ExecL CS.RUN.9 rts *-------------------------------------- CS.RUN.AUTH >LDYA L.LIBCRYPT @@ -140,16 +133,8 @@ CS.RUN.AUTH >LDYA L.LIBCRYPT * sec .9 rts *-------------------------------------- -CS.RUN.LOGIN jsr CS.RUN.SETENV - bcs .9 - - >PUSHBI S.PS.F.HOLD - >LDYA L.SHELL - >SYSCALL ExecL -.9 rts -*-------------------------------------- CS.RUN.CHECK rol ZPbValidUser - bcs .9 + bcs CS.RUN.CHECK.9 >PUSHW ZPGetlinePtr >PUSHW ZPGetlinePtr @@ -159,20 +144,96 @@ CS.RUN.CHECK rol ZPbValidUser >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.SETENV >PUSHW L.HOME - >LDYA L.ENV.HOME - >SYSCALL setenv +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 - >PUSHW L.SHELL - >LDYA L.ENV.SHELL - >SYSCALL setenv - bcs .9 + 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 @@ -249,18 +310,24 @@ CS.END *-------------------------------------- LIBCRYPT .AZ "libcrypt" hLIBCRYPT .BS 1 -MSG.NOPASSWD .AS "\r\n\r\nA2osX-Login:No ETC/PASSWD file present, Logged as ROOT.\r\n" +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 -ENV.SHELL .AZ "SHELL" -ENV.HOME .AZ "HOME" -SHELL .AZ "${ROOT}BIN/SH" -HOME .AZ "${ROOT}ROOT/" .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 diff --git a/SYS/KERNEL.S.CORE.txt b/SYS/KERNEL.S.CORE.txt index 5621dc75..6f1b9596 100644 --- a/SYS/KERNEL.S.CORE.txt +++ b/SYS/KERNEL.S.CORE.txt @@ -299,10 +299,7 @@ CORE.Dispatch stz CORE.PSIndex cpx CORE.PSCount bne .1 -.9 sec - rts - -.8 clc +* sec rts *-------------------------------------- * X unmodified @@ -395,6 +392,13 @@ CORE.PSSelect ldy #S.PS.ZP+ZPBIN.SIZE-1 dex bpl .1 + ldy #S.PS.hSID + lda (pPs),y + tax + lda S.Table.hPW-1,x + jsr K.GetmemPtr + >STYA pSession + rts *-------------------------------------- CORE.PSLeave ldy #S.PS.ZP+ZPBIN.SIZE-1 diff --git a/SYS/KERNEL.S.ENV.txt b/SYS/KERNEL.S.ENV.txt index 62944093..86eee9af 100644 --- a/SYS/KERNEL.S.ENV.txt +++ b/SYS/KERNEL.S.ENV.txt @@ -532,20 +532,63 @@ ENV.SysVarsJmp .DA ENV.SysVarsArgs .DA ENV.SysVarsPID .DA ENV.SysVarsCPID *-------------------------------------- -ENV.StrVars >PSTR "PWD" +ENV.StrVars >PSTR "USERNAME" + >PSTR "GECOS" + >PSTR "HOME" + >PSTR "SHELL" + >PSTR "PWD" >PSTR "UID" + >PSTR "GID" .DA #0 *-------------------------------------- -ENV.StrVarsJmp .DA ENV.StrVarsPWD +ENV.StrVarsJmp .DA ENV.StrVarsSession + .DA ENV.StrVarsSession + .DA ENV.StrVarsSession + .DA ENV.StrVarsSession + .DA ENV.StrVarsPWD .DA ENV.StrVarsUID + .DA ENV.StrVarsGID *-------------------------------------- ENV.StrVarsPWD ldy #S.PS.hPREFIX lda (pPS),y jsr K.GetMemPtr jmp ENV.AddYAToBuf *-------------------------------------- -ENV.StrVarsUID ldy #S.PS.hUsr +ENV.StrVarsUID ldy #S.USR.UID .HS 2C +ENV.StrVarsGID ldy #S.USR.GID + lda (pSession),y + bra ENV.SysVarsNum +ENV.StrVarsSession + >DEBUG + + lda pSession + clc + adc #S.USR.NAME + sta ZPPtr3 + lda pSession+1 + adc /S.USR.NAME + sta ZPPtr3+1 + +.1 dex + dex + bmi .3 + + ldy #$ff + +.2 iny + lda (ZPPtr3),y + bne .2 + + tya + sec + adc ZPPtr3 + sta ZPPtr3 + bcc .1 + inc ZPPtr3+1 + bra .1 + +.3 jmp ENV.AddP3ToBuf *-------------------------------------- ENV.SysVarsArgC ldy #S.PS.ARGC .HS 2C @@ -558,7 +601,7 @@ ENV.SysVarsPID ldy #S.PS.PID ENV.SysVarsCPID ldy #S.PS.CPID lda (pPS),y - stz .2+1 +ENV.SysVarsNum stz .2+1 stz .3+1 ldx #8 diff --git a/SYS/KERNEL.S.INIT.txt b/SYS/KERNEL.S.INIT.txt index 58e9e4aa..94ee04b9 100644 --- a/SYS/KERNEL.S.INIT.txt +++ b/SYS/KERNEL.S.INIT.txt @@ -336,7 +336,7 @@ MemMgrInit >LDYAI Mem.MHiMem ldx #K.USR.MAX*2-1 -.6 stz USR.Table.hPW,x +.6 stz S.Table.hPW,x dex bpl .6 @@ -1088,23 +1088,24 @@ PwdMgrInit >LDYAI MSG.PWD *-------------------------------------- .1 >LDYAI PwdMgr.ROOT.Size jsr K.Getmem - >STYA pUser - stx USR.Table.hPW + >STYA pSession + stx S.Table.hPW ldy #PwdMgr.ROOT.Size-1 .2 lda PwdMgr.ROOT,y - sta (pUser),y + sta (pSession),y dey bpl .2 ldy #S.PS.hStdIn lda (pPS),y - sta USR.Table.hFile + sta S.Table.hFile rts *-------------------------------------- -PwdMgr.ROOT .DA #0 UID +PwdMgr.ROOT .DA #P.SYSADMIN + .DA #0 UID .DA #0 GID .BS 17 PASSWD .AZ "ROOT" NAME diff --git a/SYS/KERNEL.S.PS.txt b/SYS/KERNEL.S.PS.txt index 52bc9dd8..518d02c3 100644 --- a/SYS/KERNEL.S.PS.txt +++ b/SYS/KERNEL.S.PS.txt @@ -169,6 +169,10 @@ PS.CreateChild ldx #0 cpy #S.PS.hStdErr+1 bne .81 + ldy #S.PS.hSID + lda (pPs),y + sta (PS.NewPSPtr),y + lda #S.PS.F.NOHUP bit PS.Flags bne .5 diff --git a/SYS/KERNEL.S.txt b/SYS/KERNEL.S.txt index 722a1bf3..b3e122de 100644 --- a/SYS/KERNEL.S.txt +++ b/SYS/KERNEL.S.txt @@ -55,7 +55,6 @@ A2osX.D2 .PH $D000 .INB USR/SRC/SYS/KERNEL.S.TIME .INB USR/SRC/SYS/KERNEL.S.BIN .INB USR/SRC/SYS/KERNEL.S.PS - .INB USR/SRC/SYS/KERNEL.S.ARG .INB USR/SRC/SYS/KERNEL.S.ENV .INB USR/SRC/SYS/KERNEL.S.MATH .EP @@ -68,6 +67,7 @@ A2osX.E0 .PH $E000 .INB USR/SRC/SYS/KERNEL.S.PFT .INB USR/SRC/SYS/KERNEL.S.IO ********* TMP ***** go to A2osX.D2 + .INB USR/SRC/SYS/KERNEL.S.ARG .INB USR/SRC/SYS/KERNEL.S.PWD .LIST ON DevMgr.FreeMem .EQ *