From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:48211) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WAycg-0003uv-Mf for Qemu-devel@nongnu.org; Wed, 05 Feb 2014 04:18:27 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WAycb-0000Pg-Mp for Qemu-devel@nongnu.org; Wed, 05 Feb 2014 04:18:22 -0500 Received: from isrv.corpit.ru ([86.62.121.231]:57811) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WAycb-0000Or-FZ for Qemu-devel@nongnu.org; Wed, 05 Feb 2014 04:18:17 -0500 Message-ID: <52F201D0.8040400@msgid.tls.msk.ru> Date: Wed, 05 Feb 2014 13:18:08 +0400 From: Michael Tokarev MIME-Version: 1.0 References: <52979A67.80305@msgid.tls.msk.ru> In-Reply-To: <52979A67.80305@msgid.tls.msk.ru> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] slirp smb with modern win guests when samba is also running on host List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Jan Kiszka , Qemu Development List Ping? It's been more than 2 months already... Thanks, /mjt 28.11.2013 23:32, Michael Tokarev wrote: > After numerous reports that -smb (or -netdev user,smb=foo) not working > with modern windows (win7 and vista are reported as non-working), I > started digging myself. And found that indeed it doesn't work, and > why. > > The thing is that modern win tries to connect to port 445 (microsoft-ds) > first, and if that fails, it falls back to old port 139 (netbios-ssn). > > slirp code in qemu only redirects port 139, it does not touch port 445. > > So the prob is that if samba is also running on the host, guest will try > to communicate using port 445, and that will succed, but ofcourse guest > will not talk with our samba but with samba running on the host. > > If samba is not running on the host, guest will fall back to port 139, > and will reach the redirecting rule and qemu will spawn smbd correctly. > > The solution is to redirect both ports (139 and 445), and the fix is > a one-liner, adding second call to slirp_add_exec() at the end of > net/slirp.c:slirp_smb() function (provided below). > > But it looks like that is not a proper fix really, since in theory > we should redirect both ports to the SAME, single samba instance, > but I'm not sure this is possible with slirp. Well, even if two > smbd processes will be run on the same config dir, it should not > be a problem. > > The one-liner (not exactly 1 since it touches previous line too) is like > this: > > Signed-off-By: Michael Tokarev > > diff --git a/net/slirp.c b/net/slirp.c > index 124e953..a22e976 100644 > --- a/net/slirp.c > +++ b/net/slirp.c > @@ -549,7 +549,8 @@ static int slirp_smb(SlirpState* s, const char *exported_dir > snprintf(smb_cmdline, sizeof(smb_cmdline), "%s -s %s", > CONFIG_SMBD_COMMAND, smb_conf); > > - if (slirp_add_exec(s->slirp, 0, smb_cmdline, &vserver_addr, 139) < 0) { > + if (slirp_add_exec(s->slirp, 0, smb_cmdline, &vserver_addr, 139) < 0 || > + slirp_add_exec(s->slirp, 0, smb_cmdline, &vserver_addr, 445) < 0) { > slirp_smb_cleanup(s); > error_report("conflicting/invalid smbserver address"); > return -1; >