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:
parent
84988cf910
commit
1cb1c5d10b
14
net/slirp.c
14
net/slirp.c
@ -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);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user