From b785373e60a1166987e42d29e74f5b6a4c40432d Mon Sep 17 00:00:00 2001 From: Moritz Bechler Date: Sun, 8 Apr 2018 14:06:08 +0200 Subject: [PATCH] Allow tid = 0 for SMB1 (#63) Proper invalid/reserved TID for SMB1 is 0xFFFF not 0. --- src/main/java/jcifs/internal/TreeConnectResponse.java | 6 ++++++ .../java/jcifs/internal/smb1/ServerMessageBlock.java | 5 +++-- .../smb1/com/SmbComTreeConnectAndXResponse.java | 11 +++++++++++ .../internal/smb2/tree/Smb2TreeConnectResponse.java | 6 ++++++ src/main/java/jcifs/smb/SmbTreeImpl.java | 7 +++---- 5 files changed, 29 insertions(+), 6 deletions(-) diff --git a/src/main/java/jcifs/internal/TreeConnectResponse.java b/src/main/java/jcifs/internal/TreeConnectResponse.java index ebf58cb..15cf692 100644 --- a/src/main/java/jcifs/internal/TreeConnectResponse.java +++ b/src/main/java/jcifs/internal/TreeConnectResponse.java @@ -41,4 +41,10 @@ public interface TreeConnectResponse extends CommonServerMessageBlockResponse { */ boolean isShareDfs (); + + /** + * @return whether the tree id is a valid one + */ + boolean isValidTid (); + } diff --git a/src/main/java/jcifs/internal/smb1/ServerMessageBlock.java b/src/main/java/jcifs/internal/smb1/ServerMessageBlock.java index 45c7fe4..211e37a 100644 --- a/src/main/java/jcifs/internal/smb1/ServerMessageBlock.java +++ b/src/main/java/jcifs/internal/smb1/ServerMessageBlock.java @@ -214,7 +214,8 @@ public abstract class ServerMessageBlock implements CommonServerMessageBlockRequ */ private byte command, flags; - protected int headerStart, length, batchLevel, errorCode, flags2, tid, pid, uid, mid, wordCount, byteCount; + protected int headerStart, length, batchLevel, errorCode, flags2, pid, uid, mid, wordCount, byteCount; + protected int tid = 0xFFFF; private boolean useUnicode, forceUnicode, extendedSecurity; private volatile boolean received; private int signSeq; @@ -984,7 +985,7 @@ public void reset () { this.received = false; this.digest = null; this.uid = 0; - this.tid = 0; + this.tid = 0xFFFF; } diff --git a/src/main/java/jcifs/internal/smb1/com/SmbComTreeConnectAndXResponse.java b/src/main/java/jcifs/internal/smb1/com/SmbComTreeConnectAndXResponse.java index fcf01c3..d742327 100644 --- a/src/main/java/jcifs/internal/smb1/com/SmbComTreeConnectAndXResponse.java +++ b/src/main/java/jcifs/internal/smb1/com/SmbComTreeConnectAndXResponse.java @@ -85,6 +85,17 @@ public final boolean isShareDfs () { } + /** + * {@inheritDoc} + * + * @see jcifs.internal.TreeConnectResponse#isValidTid() + */ + @Override + public boolean isValidTid () { + return getTid() != 0xFFFF; + } + + @Override protected int writeParameterWordsWireFormat ( byte[] dst, int dstIndex ) { return 0; diff --git a/src/main/java/jcifs/internal/smb2/tree/Smb2TreeConnectResponse.java b/src/main/java/jcifs/internal/smb2/tree/Smb2TreeConnectResponse.java index 3c55960..4bbcb95 100644 --- a/src/main/java/jcifs/internal/smb2/tree/Smb2TreeConnectResponse.java +++ b/src/main/java/jcifs/internal/smb2/tree/Smb2TreeConnectResponse.java @@ -197,6 +197,12 @@ public final int getTid () { } + @Override + public boolean isValidTid () { + return getTreeId() != 0; + } + + /** * {@inheritDoc} * diff --git a/src/main/java/jcifs/smb/SmbTreeImpl.java b/src/main/java/jcifs/smb/SmbTreeImpl.java index 1d2a30a..df57420 100644 --- a/src/main/java/jcifs/smb/SmbTreeImpl.java +++ b/src/main/java/jcifs/smb/SmbTreeImpl.java @@ -650,11 +650,10 @@ else if ( transport.isSMB2() ) { * @throws IOException */ private void treeConnected ( SmbTransportImpl transport, SmbSessionImpl sess, TreeConnectResponse response ) throws CIFSException { - int treeId = response.getTid(); - if ( treeId == 0 ) { - throw new SmbException("TreeID is NULL"); + if ( !response.isValidTid() ) { + throw new SmbException("TreeID is invalid"); } - this.tid = treeId; + this.tid = response.getTid(); String rsvc = response.getService(); if ( rsvc == null && !transport.isSMB2() ) { throw new SmbException("Service is NULL");