CIFS:First blood....

This commit is contained in:
Rémy GIBERT 2021-06-17 19:38:34 +02:00
parent 09dd4f076d
commit 97acd2e1ce
7 changed files with 283 additions and 122 deletions

Binary file not shown.

View File

@ -198,9 +198,11 @@ MSG1.D .AZ "Dynamic"
MSG.USAGE .AS "Usage : Add a static entry, DNSINFO <host> <IP>\r\n" MSG.USAGE .AS "Usage : Add a static entry, DNSINFO <host> <IP>\r\n"
.AZ " Dump DNS Cache, DNSINFO\r\n" .AZ " Dump DNS Cache, DNSINFO\r\n"
*-------------------------------------- *--------------------------------------
.DUMMY
.OR 0
DS.START DS.START
DST.IP .BS 4 DST.IP .BS 4
DS.END DS.END .ED
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE usr/src/bin/dnsinfo.s SAVE usr/src/bin/dnsinfo.s

View File

@ -11,6 +11,12 @@ S.NETBIOS .EQ 4
S.SMB.H.PROTO .EQ 0 \xFF 'SMB' S.SMB.H.PROTO .EQ 0 \xFF 'SMB'
S.SMB.H.CMD .EQ 4 S.SMB.H.CMD .EQ 4
S.SMB.H.CMD.CLOSE .EQ $04 S.SMB.H.CMD.CLOSE .EQ $04
S.SMB.H.CMD.FLUSH .EQ $05
S.SMB.H.CMD.DELETE .EQ $06
S.SMB.H.CMD.RENAME .EQ $07
S.SMB.H.CMD.SEEK .EQ $12
S.SMB.H.CMD.READ.ANDX .EQ $2E S.SMB.H.CMD.READ.ANDX .EQ $2E
S.SMB.H.CMD.WRITE.ANDX .EQ $2F S.SMB.H.CMD.WRITE.ANDX .EQ $2F
S.SMB.H.CMD.TRANS2 .EQ $32 S.SMB.H.CMD.TRANS2 .EQ $32

View File

@ -9,17 +9,17 @@ CIFS2.ChMod
*-------------------------------------- *--------------------------------------
CIFS.FStat CIFS.FStat
*-------------------------------------- *--------------------------------------
CIFS2.FStat CIFS2.FStat >DEBUG
txa lda #MLI.E.BADCALL
ora #$80
* lda #MLI.E.BADCALL
sec sec
rts rts
*-------------------------------------- *--------------------------------------
CIFS.Stat >STYA pPath resolved path CIFS.Stat >STYA pPath resolved path
jsr ClearSocket jsr ClearSocket
jsr GetGTX
jsr MakeTrans2Req jsr MakeTrans2Req
ldx #0 ldx #0
@ -31,14 +31,22 @@ CIFS.Stat >STYA pPath resolved path
cpx #SMB.QueryPathInfo.Len cpx #SMB.QueryPathInfo.Len
bne .1 bne .1
jsr AppendPath jsr ReqT2SetupPtr2
lda #0 jsr AppendPathPtr2
sta (ZPReqPtr),y
iny
jsr SetT2ReqLenYA tya
inc +1 for \0
clc
adc ZPReqLen
sta ZPReqLen
bcc .2
inc ZPReqLen+1
.2 jsr SetT2ReqLen
jsr WriteSocket jsr WriteSocket
bcs .9 bcs .9
@ -55,21 +63,25 @@ CIFS2.Stat jsr ReadSocket
lda (ZPRespPtr),y lda (ZPRespPtr),y
beq .1 beq .1
lda hResp
>SYSCALL2 FreeMem
lda #MLI.E.FNOTFND lda #MLI.E.FNOTFND
bra .99 bra .99
.1 >PULLW ZPPtr2 Stat Buffer .1 jsr GetRespDataOffset
jsr FileInfo2StatBuf
>PULLW ZPPtr2 Stat Buffer
inc pStack Skip Filename inc pStack Skip Filename
inc pStack inc pStack
jsr GetRespDataOffset
jsr FileInfo2StatBuf
jsr StatBuf2Ptr2 jsr StatBuf2Ptr2
lda hResp lda hResp
>SYSCALL2 FreeMem >SYSCALL2 FreeMem
stz CIFS.Status stz CIFS.Status
clc clc
rts rts
@ -92,6 +104,8 @@ CIFS2.Stat jsr ReadSocket
*-------------------------------------- *--------------------------------------
CIFS.MKDir >STYA pPath resolved path CIFS.MKDir >STYA pPath resolved path
jsr GetGTX
jsr MakeTrans2Req jsr MakeTrans2Req
ldx #0 ldx #0
@ -130,7 +144,7 @@ CIFS2.MKDir jsr ReadSocket
lda #MLI.E.DUPFILE lda #MLI.E.DUPFILE
sec sec
.8 jsr FreeRespData .8 jsr FreeRespData
stz CIFS.Status stz CIFS.Status
@ -191,6 +205,8 @@ CIFS.ReadDir jsr GetPFD
jsr ClearSocket jsr ClearSocket
jsr GetGTX
ldy #S.FD.DIR.EPB ldy #S.FD.DIR.EPB
lda (pFD),y lda (pFD),y
beq .1 beq .1
@ -238,7 +254,7 @@ CIFS.ReadDir.Next
dey dey
lda (pFD),y lda (pFD),y
ldy #S.NETBIOS+S.SMB.H+SMB.Trans2.H.Len+7 Search ID ldy #S.NETBIOS+S.SMB.H+SMB.Trans2.H.Len+7 Search ID
sta (ZPReqPtr),y sta (ZPReqPtr),y
txa txa
iny iny
@ -301,7 +317,7 @@ CIFS2.ReadDir jsr GetPFD
beq .91 beq .91
lda (ZPRespPtr),y lda (ZPRespPtr),y
ldy #S.FD.DIR.FC ldy #S.FD.DIR.FC
sta (pFD),y sta (pFD),y
iny iny
@ -320,13 +336,13 @@ CIFS2.ReadDir jsr GetPFD
>LDYA BufPtr >LDYA BufPtr
ldx hBuf ldx hBuf
stz CIFS.Status stz CIFS.Status
clc clc
rts rts
.9 stz CIFS.Status .9 stz CIFS.Status
jmp FreeRespData jmp FreeRespData
.90 cmp #E.NODATA .90 cmp #E.NODATA
@ -531,30 +547,51 @@ CIFS.FOpen >STYA pPath resolved path
cpx #SMB.ComCreate.H.Len cpx #SMB.ComCreate.H.Len
bne .1 bne .1
phy save Y = LEN jsr ReqSetupPtr2
jsr GetPathLen jsr AppendPathPtr2
ldy #S.NETBIOS+S.SMB.H+6 tya
ldy #S.NETBIOS+S.SMB.H+6 NameLength
sta (ZPReqPtr),y sta (ZPReqPtr),y
ply inc +1 for \0
phy
sta (ZPReqPtr),y
iny Skip ByteCount
iny
jsr AppendPath
lda #0 ldy ByteCountOfs
sta (ZPReqPtr),y sta (ZPReqPtr),y
iny
pla clc
adc ZPReqLen
sta ZPReqLen
bcc .2
inc ZPReqLen+1
jsr SetReqLenYAtA .2 lda #0
ror
iny ByteCountOfs+1
sta (ZPReqPtr),y
jsr SetReqLen
ldx #1 FILE_OPEN
ldy #3 fopen flags
lda (pStack),y
bpl .3 O.CREATE
ldx #3 FILE_OPEN_IF
.3 bit #O.APPEND
bmi .4
ldx #5 FILE_OVERWRITE_IF
.4 txa
ldy #S.NETBIOS+S.SMB.H+SMB.Trans2.H.Len+7 CreateDisposition
sta (ZPReqPtr),y
jsr WriteSocket jsr WriteSocket
bcs .9 bcs .9
@ -576,7 +613,7 @@ CIFS2.FOpen jsr ReadSocket
lda #MLI.E.DUPFILE lda #MLI.E.DUPFILE
sec sec
bra .80 bra .80
.8 >LDYAI S.FD.REG .8 >LDYAI S.FD.REG
>SYSCALL2 GetMem >SYSCALL2 GetMem
bcs .99 bcs .99
@ -595,7 +632,7 @@ CIFS2.FOpen jsr ReadSocket
pha pha
iny iny
lda (ZPRespPtr),y lda (ZPRespPtr),y
ldy #S.FD.REG.REF+1 ldy #S.FD.REG.REF+1
sta (pFD),y sta (pFD),y
dey dey
@ -608,7 +645,7 @@ CIFS2.FOpen jsr ReadSocket
>PUSHA >PUSHA
lda (pStack),y lda (pStack),y
>PUSHA >PUSHA
>PUSHWZ mod >PUSHWZ mod
txa hFD txa hFD
>PUSHA >PUSHA
@ -638,7 +675,7 @@ CIFS2.FOpen jsr ReadSocket
CIFS.FClose jsr GetPFD CIFS.FClose jsr GetPFD
jsr GetGtx jsr GetGtx
ldx #S.SMB.H.CMD.CLOSE ldx #S.SMB.H.CMD.CLOSE
jsr RequestSetupX jsr RequestSetupX
@ -651,28 +688,22 @@ CIFS.FClose jsr GetPFD
cpx #SMB.ComClose.H.Len cpx #SMB.ComClose.H.Len
bne .1 bne .1
phy save Y = LEN sty ZPReqLen
stz ZPReqLen+1
ldy #S.FD.REG.REF ldy #S.FD.REG.REF
lda (pFD),y lda (pFD),y
pha pha
iny iny
lda (pFD),y lda (pFD),y
ldy #S.NETBIOS+S.SMB.H+2 FileID ldy #S.NETBIOS+S.SMB.H+2 FileID
sta (ZPReqPtr),y sta (ZPReqPtr),y
pla pla
dey dey
sta (ZPReqPtr),y sta (ZPReqPtr),y
ply
tya jsr SetReqLen
iny Skip ByteCount
iny
jsr SetReqLenYAtA
jsr WriteSocket jsr WriteSocket
bcs .9 bcs .9
@ -696,12 +727,12 @@ CIFS2.FClose sta hFILE
lda #MLI.E.DUPFILE lda #MLI.E.DUPFILE
sec sec
bra .80 bra .80
.8 lda hFILE .8 lda hFILE
jsr CIFS.CloseDir jsr CIFS.CloseDir
clc clc
.80 jsr FreeRespData .80 jsr FreeRespData
stz CIFS.Status stz CIFS.Status
@ -731,11 +762,11 @@ CIFS2.FRead
clc clc
>RET 5 >RET 5
*-------------------------------------- *--------------------------------------
CIFS.FWrite ldy #4 CIFS.FWrite ldy #4 hNod
lda (pStack),y lda (pStack),y
jsr GetPFD jsr GetPFD
jsr GetGTX jsr GetGTX
ldx #S.SMB.H.CMD.WRITE.ANDX ldx #S.SMB.H.CMD.WRITE.ANDX
@ -750,38 +781,110 @@ CIFS.FWrite ldy #4
cpx #SMB.ComWrite.H.Len cpx #SMB.ComWrite.H.Len
bne .1 bne .1
sty LenOfs jsr ReqSetupPtr2
iny
iny
sty ZPReqLen
stz ZPReqLen+1
ldy #S.FD.REG.REF ldy #S.FD.REG.REF
lda (pFD),y lda (pFD),y
pha pha
iny iny
lda (pFD),y lda (pFD),y
ldy #S.NETBIOS+S.SMB.H+6 FileID ldy #S.NETBIOS+S.SMB.H+6 FileID
sta (ZPReqPtr),y sta (ZPReqPtr),y
pla pla
dey dey
sta (ZPReqPtr),y sta (ZPReqPtr),y
ldy #3 DataPtr HI
lda (pStack),y
sta ZPPtr1+1
dey DataPtr LO
lda (pStack),y
sta ZPPtr1
dey DataLen HI
lda (pStack),y
beq .5
lda #0
ldx #1 write $100
bra .6
.5 dey DataLen LO
lda (pStack),y
ldx #0 write $0xx
.6 pha
ldy #S.NETBIOS+S.SMB.H+21 DataLength
clc
adc #2
sta (ZPReqPtr),y
iny
txa
adc #0
sta (ZPReqPtr),y
pla
pha
clc
adc ZPReqLen
sta ZPReqLen
txa
adc ZPReqLen+1
sta ZPReqLen+1
pla
pha
ldy ByteCountOfs
sta (ZPReqPtr),y
txa
iny
sta (ZPReqPtr),y
ldy #0
plx
.70 lda (ZPPtr1),y
sta (ZPPtr2),y
iny
dex
bne .70
jsr SetReqLen jsr SetReqLen
jsr WriteSocket jsr WriteSocket
bcs .9 bcs .9
jmp Sleep ldy #1 DataLen HI
lda (pStack),y
beq .7
dec
sta (pStack),y
ldy #3 DataPtr HI
lda (pStack),y
inc
sta (pStack),y
bra .8
.7 lda #0
sta (pStack) DataLen LO
.8 jmp Sleep
.9 >RET 5 .9 >RET 5
*-------------------------------------- *--------------------------------------
CIFS2.FWrite ldy #4 CIFS2.FWrite ldy #4
lda (pStack),y lda (pStack),y
jsr ReadSocket jsr ReadSocket
bcs .9 bcs .9
@ -794,12 +897,16 @@ CIFS2.FWrite ldy #4
lda #MLI.E.IO lda #MLI.E.IO
sec sec
.8 jsr FreeRespData .8 jsr FreeRespData
stz CIFS.Status ldy #1
lda (pStack),y
ora (pStack)
clc
beq .90
>RET 5 jmp Sleep2
.9 cmp #E.NODATA .9 cmp #E.NODATA
bne .99 bne .99
@ -814,7 +921,8 @@ CIFS2.FWrite ldy #4
.98 lda #MLI.E.IO .98 lda #MLI.E.IO
.99 sec .99 sec
stz CIFS.Status
.90 stz CIFS.Status
>RET 5 >RET 5
*-------------------------------------- *--------------------------------------
@ -829,10 +937,8 @@ CIFS2.FEOF
CIFS.Remove CIFS.Remove
CIFS2.Remove CIFS2.Remove
CIFS.Rename CIFS.Rename
CIFS2.Rename CIFS2.Rename >DEBUG
* lda #MLI.E.BADCALL lda #MLI.E.BADCALL
txa
ora #$80
sec sec
rts rts
*-------------------------------------- *--------------------------------------

View File

@ -35,7 +35,7 @@ auxtype .BS 2
ZPRespPtr .BS 2 ZPRespPtr .BS 2
bFlag .BS 1 bFlag .BS 1
LenOfs .BS 1 ByteCountOfs .BS 1
ZS.END .ED ZS.END .ED
*-------------------------------------- *--------------------------------------
@ -536,6 +536,7 @@ CIFS.CallBack bit CIFS.Status
phy phy
pha pha
ldy #S.PS.PID ldy #S.PS.PID
lda (pPS),y lda (pPS),y
cmp CIFS.PID cmp CIFS.PID
@ -574,9 +575,7 @@ GetGTX lda MountTable+2
>STYA ZPCtxPtr >STYA ZPCtxPtr
rts rts
*-------------------------------------- *--------------------------------------
MakeTrans2Req jsr GetGTX MakeTrans2Req ldx #S.SMB.H.CMD.TRANS2
ldx #S.SMB.H.CMD.TRANS2
jsr RequestSetupX jsr RequestSetupX
ldx #0 ldx #0
@ -601,15 +600,13 @@ RequestSetupX phx
>SYSCALL2 GetMemPtr >SYSCALL2 GetMemPtr
>STYA ZPReqPtr >STYA ZPReqPtr
plx
ldy #0 ldy #0
.1 lda (ZPCtxPtr),y .1 lda (ZPCtxPtr),y
cpy #S.NETBIOS+S.SMB.H.CMD cpy #S.NETBIOS+S.SMB.H.CMD
bne .2 bne .2
txa pla
.2 sta (ZPReqPtr),y .2 sta (ZPReqPtr),y
iny iny
@ -618,13 +615,52 @@ RequestSetupX phx
rts rts
*-------------------------------------- *--------------------------------------
GetPathLen ldy #$ff ReqSetupPtr2 sty ByteCountOfs
iny
iny +2 for ByteCount
ReqT2SetupPtr2 sty ZPReqLen
stz ZPReqLen+1
tya
clc
adc ZPReqPtr
sta ZPPtr2
lda ZPReqPtr+1
adc #0
sta ZPPtr2+1
rts
*--------------------------------------
AppendPathPtr2 ldx #0
ldy #$ff
.1 iny .1 iny
lda (pPath),y lda (pPath),y
bne .1 beq .4
tya .2 cmp #'/'
bne .3
lda #'\'
.3 sta (ZPPtr2),y
tax
bra .1
.4 cpx #'\'
bne .5
dey
.5
* lda #0
sta (ZPPtr2),y
rts rts
*-------------------------------------- *--------------------------------------
AppendPath ldx #0 AppendPath ldx #0
@ -654,21 +690,6 @@ AppendPath ldx #0
.5 rts .5 rts
*-------------------------------------- *--------------------------------------
SetReqLen lda ZPReqLen
sec
sbc LenOfs
ldy LenOfs
sta (ZPReqPtr),y
iny
lda ZPReqLen+1
sbc #0
sta (ZPReqPtr),y
bra SetReqLenNETBIOS
*--------------------------------------
* Y = LEN from S.NETBIOS.TYPE * Y = LEN from S.NETBIOS.TYPE
* A = Ptr to LEN Word * A = Ptr to LEN Word
*-------------------------------------- *--------------------------------------
@ -691,12 +712,12 @@ SetReqLenYAtA sty ZPReqLen
iny iny
lda #0 lda #0
sta (ZPReqPtr),y sta (ZPReqPtr),y
bra SetReqLenNETBIOS bra SetReqLen
*-------------------------------------- *--------------------------------------
SetT2ReqLenYA sty ZPReqLen SetT2ReqLenYA sty ZPReqLen
stz ZPReqLen+1 stz ZPReqLen+1
tya SetT2ReqLen lda ZPReqLen
sec sec
sbc #S.NETBIOS+S.SMB.H+SMB.Trans2.H.Len+7 sbc #S.NETBIOS+S.SMB.H+SMB.Trans2.H.Len+7
@ -712,13 +733,13 @@ SetT2ReqLenYA sty ZPReqLen
ldy #S.NETBIOS+S.SMB.H+SMB.Trans2.H.Len+2 ldy #S.NETBIOS+S.SMB.H+SMB.Trans2.H.Len+2
sta (ZPReqPtr),y sta (ZPReqPtr),y
*--------------------------------------
SetReqLenNETBIOS SetReqLen lda ZPReqLen
lda ZPReqLen
sec sec
sbc #S.NETBIOS sbc #S.NETBIOS
ldy #S.NETBIOS.LEN+2 ldy #S.NETBIOS.LEN+2
sta (ZPReqPtr),y sta (ZPReqPtr),y
lda ZPReqLen+1 lda ZPReqLen+1
sec sec
sbc /S.NETBIOS sbc /S.NETBIOS
@ -733,7 +754,7 @@ Sleep ldy #S.PS.PID
dec CIFS.Status dec CIFS.Status
stz CIFS.Retries Sleep2 stz CIFS.Retries
lda #0 lda #0
sec sec
@ -1008,16 +1029,16 @@ SMB.ComCreate.H .DA #24 WORD COUNT
.BS 2 NameLength .BS 2 NameLength
.HS 00000000 Flags .HS 00000000 Flags
.HS 00000000 RootDirectoryFID .HS 00000000 RootDirectoryFID
.BS 4 DesiredAccess .HS 00000010 DesiredAccess = GENERIC_ALL
.HS 0000000000000000 AllocationSize .HS 0000000000000000 AllocationSize
.HS 00000000 ExtFileAttributes .HS 00000000 ExtFileAttributes
.HS 00000000 ShareAccess .HS 00000000 ShareAccess
.BS 4 CreateDisposition .BS 4 CreateDisposition
.HS 00000000 CreateOptions .HS 00000000 CreateOptions
.HS 00000000 ImpersonationLevel .HS 00000000 ImpersonationLevel
.HS 00 SecurityFlags .HS 00 SecurityFlags
SMB.ComCreate.H.Len .EQ *-SMB.ComCreate.H SMB.ComCreate.H.Len .EQ *-SMB.ComCreate.H
* .BS 2 ByteCount * .BS 2 ByteCount
* .AZ "path\file" * .AZ "path\file"
*-------------------------------------- *--------------------------------------
SMB.ComClose.H .DA #3 WORD COUNT SMB.ComClose.H .DA #3 WORD COUNT
@ -1026,6 +1047,27 @@ SMB.ComClose.H .DA #3 WORD COUNT
.HS 0000 ByteCount .HS 0000 ByteCount
SMB.ComClose.H.Len .EQ *-SMB.ComClose.H SMB.ComClose.H.Len .EQ *-SMB.ComClose.H
*-------------------------------------- *--------------------------------------
SMB.ComFlush.H .DA #1 WORD COUNT
.BS 2 FID
.HS 0000 ByteCount
SMB.ComFlush.H.Len .EQ *-SMB.ComFlush.H
*--------------------------------------
SMB.ComDelete.H .DA #1 WORD COUNT
.HS 0000 SearchAttributes
SMB.ComDelete.H.Len .EQ *-SMB.ComDelete.H
* .BS 2 ByteCount
* .HS 04 BufferFormat
* .AZ "path\file"
*--------------------------------------
SMB.ComRename.H .DA #1 WORD COUNT
.HS 0000 SearchAttributes
SMB.ComRename.H.Len .EQ *-SMB.ComRename.H
* .BS 2 ByteCount
* .HS 04 BufferFormat
* .AZ "oldpath"
* .HS 04 BufferFormat
* .AZ "newpath"
*--------------------------------------
SMB.ComRead.H .DA #10 WORD COUNT SMB.ComRead.H .DA #10 WORD COUNT
.HS FF000000 NO MORE CMD .HS FF000000 NO MORE CMD
.BS 2 FID .BS 2 FID
@ -1042,11 +1084,11 @@ SMB.ComWrite.H .DA #12 WORD COUNT
.BS 2 FID .BS 2 FID
.BS 4 Offset .BS 4 Offset
.HS 00000000 Timeout .HS 00000000 Timeout
.HS 0001 WriteMode=WritethroughMode .HS 0100 WriteMode=WritethroughMode
.HS 0000 Remaining .HS 0000 Remaining
.HS 0000 Reserved .HS 0000 Reserved
.BS 2 DataLength .BS 2 DataLength
.BS 2 DataOffset .DA S.SMB.H+SMB.ComWrite.H.Len DataOffset
SMB.ComWrite.H.Len .EQ *-SMB.ComWrite.H SMB.ComWrite.H.Len .EQ *-SMB.ComWrite.H
* .BS 2 ByteCount * .BS 2 ByteCount
* DATA..... * DATA.....

View File

@ -43,11 +43,15 @@ PFT.CheckPathYA >PUSHYA
bra .8 bra .8
.3 lda K.Buf256,y path is "/FILTER/..." ? .3 lda K.Buf256,y
cmp #'/' beq .4 path is "/FILTER" ?
cmp #'/' path is "/FILTER/..." ?
bne .8 bne .8
lda Flt.Table.cbLO-1,x iny
.4 lda Flt.Table.cbLO-1,x
sta .7+1 sta .7+1
lda Flt.Table.cbHI-1,x lda Flt.Table.cbHI-1,x
@ -57,9 +61,8 @@ PFT.CheckPathYA >PUSHYA
pla discard JSR return @ pla discard JSR return @
pla pla
lda /K.Buf256 pass full path to handler lda /K.Buf256 pass full path to handler
iny skip "/"
* ldy #K.Buf256
.6 ldx #$ff SELF MODIFIED SYSCALL # .6 ldx #$ff SELF MODIFIED SYSCALL #

View File

@ -311,6 +311,7 @@ STDIO.Get1 >PUSHA
>PUSHA >PUSHA
inc read 1 byte inc read 1 byte
>PUSHA >PUSHA
ldx #SYS.FRead
jmp K.FRead jmp K.FRead
*/-------------------------------------- */--------------------------------------
* # ungetc * # ungetc
@ -834,6 +835,7 @@ K.PrintF.1 sec format string->ptr2
>PUSHA >PUSHA
>PUSHWI K.IOBuf >PUSHWI K.IOBuf
>PUSHW PrintF.Cnt Writing to File/dev... >PUSHW PrintF.Cnt Writing to File/dev...
ldx #SYS.FWrite Needed by PFT
jsr K.FWrite jsr K.FWrite
bcc .81 bcc .81