slirp: Enforce host-side user of smb share

Windows 7 (and possibly other versions) cannot connect to the samba
share if the exported host directory is not world-readable. This can be
resolved by forcing the username used for access checks to the one
under which QEMU and smbd are running.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
This commit is contained in:
Jan Kiszka 2012-07-05 19:35:57 +02:00
parent 84988cf910
commit 1cb1c5d10b

View File

@ -26,6 +26,7 @@
#include "config-host.h" #include "config-host.h"
#ifndef _WIN32 #ifndef _WIN32
#include <pwd.h>
#include <sys/wait.h> #include <sys/wait.h>
#endif #endif
#include "net.h" #include "net.h"
@ -487,8 +488,15 @@ static int slirp_smb(SlirpState* s, const char *exported_dir,
static int instance; static int instance;
char smb_conf[128]; char smb_conf[128];
char smb_cmdline[128]; char smb_cmdline[128];
struct passwd *passwd;
FILE *f; FILE *f;
passwd = getpwuid(geteuid());
if (!passwd) {
error_report("failed to retrieve user name");
return -1;
}
snprintf(s->smb_dir, sizeof(s->smb_dir), "/tmp/qemu-smb.%ld-%d", snprintf(s->smb_dir, sizeof(s->smb_dir), "/tmp/qemu-smb.%ld-%d",
(long)getpid(), instance++); (long)getpid(), instance++);
if (mkdir(s->smb_dir, 0700) < 0) { if (mkdir(s->smb_dir, 0700) < 0) {
@ -517,14 +525,16 @@ static int slirp_smb(SlirpState* s, const char *exported_dir,
"[qemu]\n" "[qemu]\n"
"path=%s\n" "path=%s\n"
"read only=no\n" "read only=no\n"
"guest ok=yes\n", "guest ok=yes\n"
"force user=%s\n",
s->smb_dir, s->smb_dir,
s->smb_dir, s->smb_dir,
s->smb_dir, s->smb_dir,
s->smb_dir, s->smb_dir,
s->smb_dir, s->smb_dir,
s->smb_dir, s->smb_dir,
exported_dir exported_dir,
passwd->pw_name
); );
fclose(f); fclose(f);