r6122: Added "hack" fix for broken SMB_INFO_VOLUME level - used by OS/2
authorJeremy Allison <jra@samba.org>
Wed, 30 Mar 2005 02:05:22 +0000 (02:05 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 15:56:23 +0000 (10:56 -0500)
I believe. Reported as fixed by Marcel Müller <mueller@maazl.de>.
Jeremy.
(This used to be commit 14eab937a54dd9f02f289d7e2f47c78c834714a3)

source3/smbd/trans2.c

index ad125788a17bc59f821924b61285d0533f626e91..163cfbd5e374d7976efa63a61bcbdf7d232901d8 100644 (file)
@@ -2097,7 +2097,13 @@ cBytesSector=%u, cUnitTotal=%u, cUnitAvail=%d\n", (unsigned int)st.st_dev, (unsi
                         * the called hostname and the service name.
                         */
                        SIVAL(pdata,0,str_checksum(lp_servicename(snum)) ^ (str_checksum(get_local_machine_name())<<16) );
-                       len = srvstr_push(outbuf, pdata+l2_vol_szVolLabel, vname, -1, STR_NOALIGN);
+                       /*
+                        * Win2k3 and previous mess this up by sending a name length
+                        * one byte short. I believe only older clients (OS/2 Win9x) use
+                        * this call so try fixing this by adding a terminating null to
+                        * the pushed string. The change here was adding the STR_TERMINATE. JRA.
+                        */
+                       len = srvstr_push(outbuf, pdata+l2_vol_szVolLabel, vname, -1, STR_NOALIGN|STR_TERMINATE);
                        SCVAL(pdata,l2_vol_cch,len);
                        data_len = l2_vol_szVolLabel + len;
                        DEBUG(5,("call_trans2qfsinfo : time = %x, namelen = %d, name = %s\n",