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"
.AZ " Dump DNS Cache, DNSINFO\r\n"
*--------------------------------------
.DUMMY
.OR 0
DS.START
DST.IP .BS 4
DS.END
DS.END .ED
*--------------------------------------
MAN
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.CMD .EQ 4
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.WRITE.ANDX .EQ $2F
S.SMB.H.CMD.TRANS2 .EQ $32

View File

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

View File

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

View File

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

View File

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