From de305b1387dad4473ae4cec48467d10d949e0f10 Mon Sep 17 00:00:00 2001 From: Nikolaus Rath Date: Wed, 25 Apr 2012 18:51:27 -0400 Subject: [PATCH 1/2] slirp: don't use "smb ports = 0" option The "smb ports = 0" option causes recent samba versions to crash. It was introduced in commit 157777ef3e with log message "Samba 3 support". However, a value of 0 has never been officially supported by smb and is also not necessary: if stdin is a socket, smb does not try to listen on any ports and uses just stdin. This is necessary to support inetd based operation (otherwise smbd would always fail when called from inetd, because inetd already listens on the SMB port). Since samba has supported inetd operation since pre-3.x, it should be safe to rely on this feature. I have tested it with Samba 3.6.4 -- communication works fine, and smbd is not listening on any ports. I suspect the "smb ports = 0" hack may have been introduced when someone tested the qemu generated samba config from the command line with "smbd -i" and found it to fail (because then stdin isn't a socket). Signed-off-by: Nikolaus Rath Signed-off-by: Jan Kiszka --- net/slirp.c | 1 - 1 file changed, 1 deletion(-) diff --git a/net/slirp.c b/net/slirp.c index 18e07ba609..f49043b5ae 100644 --- a/net/slirp.c +++ b/net/slirp.c @@ -507,7 +507,6 @@ static int slirp_smb(SlirpState* s, const char *exported_dir, fprintf(f, "[global]\n" "private dir=%s\n" - "smb ports=0\n" "socket address=127.0.0.1\n" "pid directory=%s\n" "lock directory=%s\n" From 276eda5735824dd6cf66e1f0951aa8af97354540 Mon Sep 17 00:00:00 2001 From: Nikolaus Rath Date: Wed, 25 Apr 2012 09:57:19 -0400 Subject: [PATCH 2/2] Declare state directory in smb.conf The smb.conf generated by the userspace networking does not include a state directory directive. Samba therefore falls back to the default value. Since the user generally does not have write access to this path, smbd immediately crashes. The "state directory" option was added in Samba 3.4.0 (commit http://gitweb.samba.org/?p=samba.git;a=commit;h=7b02e05eb64f3ffd7aa1cf027d10a7343c0da757). This patch adds the missing option. Signed-off-by: Nikolaus Rath Signed-off-by: Jan Kiszka --- net/slirp.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/net/slirp.c b/net/slirp.c index f49043b5ae..96f5032c4c 100644 --- a/net/slirp.c +++ b/net/slirp.c @@ -510,6 +510,7 @@ static int slirp_smb(SlirpState* s, const char *exported_dir, "socket address=127.0.0.1\n" "pid directory=%s\n" "lock directory=%s\n" + "state directory=%s\n" "log file=%s/log.smbd\n" "smb passwd file=%s/smbpasswd\n" "security = share\n" @@ -522,6 +523,7 @@ static int slirp_smb(SlirpState* s, const char *exported_dir, s->smb_dir, s->smb_dir, s->smb_dir, + s->smb_dir, exported_dir ); fclose(f);