[jcifs] Even-byte-alignment padding in Write AndX Request

Michael B Allen mba2000 at ioplex.com
Thu Jul 15 19:55:01 GMT 2004


On Thu, 15 Jul 2004 11:57:00 -0500
ddkilzer at kilzer.net (David D. Kilzer) wrote:

> Hi,
> 
> I'm looking for help debugging an issue with named pipes and JCIFS-0.9.5.
> I believe I need to pad the data section of an SMB Write AndX Request
> packet by 1 byte, but I'm not sure how to make JCIFS go about doing
> this (or if it would even help).  Any thoughts or suggestions would be
> appreciated.  More details below.
> 
> So I went insane yesterday and tried to incorporate JCIFS into the jTDS
> JDBC driver so that jTDS could talk to SQL Server 6.5 servers that use
> named pipe IPC.  You may read about it here:
> 
> [ 991684 ] Implement named pipe IPC for SQL Server 6.5
> http://sourceforge.net/tracker/index.php?func=detail&aid=991684&group_id=33291&atid=407765
> 
> I have hacked up jTDS so that it emits a TDS 4.2 logon packet (which is
> the data after the Write AndX Request) that is identical to what the SQL
> Enterprise Manager tool sends.  Unfortunately, there are still a few
> minor differences between the two packets:
> 
>   - The SQL Enterprise Manager packet has the TDS 4.2 logon packet
>     even-byte-aligned by including a padding byte of 0xEE between the
>     Write AndX Request and the data (TDS 4.2 logon packet).
> 
>   - Fields that differ in the SMB Header:
> 
>     Fields        SQL-E-M   JCIFS
>     ------------- --------  --------
>     Flags2:       0xc807    0xc003

Bit 0x800 is extended security but if you're writing data then you
already authenticated successfully so I don't think this would matter.

>     Tree ID:      6150      2055
>     Process ID:   65279     50097
>     User ID:      6150      2050
>     Multiplex ID: 57601     4

No problem.

>   - Fields that differ in the Write AndX Request:
> 
>     Fields        SQL-E-M   JCIFS
>     ------------- --------  --------
>     Reserved:     FFFFFFFF  00000000
>     Write Mode:   0x0008    0x0000

Mmm, Ethereal claims 0x0008 is "write start". We don't do anything with
that flag. Try setting writeMode = 0x0008 in the SmbComWriteAndX.java
constructor (temporarily just to see if it works).

>     Remaining:    512       0

Probably doesn't matter.

>     Data Offset:  64        63
>     Byte Count:   513       512
>     Padding:      EE        (n/a)

Alignment could be an issue. Try uncommenting
jcifs/smb/SmbComWriteAndX.java:110 where the comment reads "Netware
doesn't like this". Make it 0xEE if you like. I don't think it should
make any difference.

Mike

-- 
Greedo shoots first? Not in my Star Wars.


More information about the jcifs mailing list