windows-smb-is-mask-20081119
authorJeffrey Altman <jaltman@secure-endpoints.com>
Wed, 19 Nov 2008 12:36:39 +0000 (12:36 +0000)
committerJeffrey Altman <jaltman@secure-endpoints.com>
Wed, 19 Nov 2008 12:36:39 +0000 (12:36 +0000)
LICENSE MIT
FIXES 123680

Examination of dump shows that smb_IsMask is being called on a
non-8.3 input buffer.   Separate smb_IsMask() into smb_Is8Dot3Mask()
for 8.3 input buffers and smb_IsMask() for non-8.3 input buffers.

src/WINNT/afsd/smb.c

index bda90ba..1aa85a5 100644 (file)
@@ -914,7 +914,7 @@ smb_vc_t *smb_FindVC(unsigned short lsn, int flags, int lana)
     return vcp;
 }
 
-int smb_IsStarMask(clientchar_t *maskp)
+static int smb_Is8Dot3StarMask(clientchar_t *maskp)
 {
     int i;
     clientchar_t tc;
@@ -927,6 +927,19 @@ int smb_IsStarMask(clientchar_t *maskp)
     return 0;
 }
 
+static int smb_IsStarMask(clientchar_t *maskp)
+{
+    int i;
+    clientchar_t tc;
+        
+    while (*maskp) {
+        tc = *maskp++;
+        if (tc == _C('?') || tc == _C('*') || tc == _C('>'))
+           return 1;
+    }
+    return 0;
+}
+
 #ifdef DEBUG_SMB_REFCOUNT
 void smb_ReleaseVCInternalDbg(smb_vc_t *vcp, char * file, long line)
 #define smb_ReleaseVCInternal(a) smb_ReleaseVCInternalDbg(a, file, line)
@@ -4566,7 +4579,7 @@ long smb_ReceiveCoreSearchDir(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *ou
         memcpy(dsp->mask, mask, 12);
 
         /* track if this is likely to match a lot of entries */
-        if (smb_IsStarMask(mask)) 
+        if (smb_Is8Dot3StarMask(mask)) 
             starPattern = 1;
         else 
             starPattern = 0;