On 2012-07-06 08:04, Dunrong Huang wrote: > Users may pass the following parameters to qemu: > $ qemu-kvm -net nic -net user,smb= ... > $ qemu-kvm -net nic -net user,smb ... > $ qemu-kvm -net nic -net user,smb=bad_directory ... > > In these cases, qemu started successfully while samba server > failed to start. Users will confuse since samba server > failed silently without any indication of what it did wrong. > > To avoid it, we check whether the shared directory exist and > if users have permission to access this directory when QEMU's > "built-in" SMB server is enabled. > > Signed-off-by: Dunrong Huang <[email protected]> > --- > net/slirp.c | 12 ++++++++++++ > 1 files changed, 12 insertions(+), 0 deletions(-) > > diff --git a/net/slirp.c b/net/slirp.c > index 37b6ccf..ff36fa2 100644 > --- a/net/slirp.c > +++ b/net/slirp.c > @@ -489,6 +489,18 @@ static int slirp_smb(SlirpState* s, const char > *exported_dir, > char smb_cmdline[128]; > FILE *f; > > + if (access(CONFIG_SMBD_COMMAND, F_OK)) { > + error_report("could not find '%s', please install it", > + CONFIG_SMBD_COMMAND); > + return -1; > + } > + > + if (access(exported_dir, R_OK | X_OK)) { > + error_report("no such directory '%s', or you do not have permission " > + "to access it, please check it", exported_dir); > + return -1; > + } > + > snprintf(s->smb_dir, sizeof(s->smb_dir), "/tmp/qemu-smb.%ld-%d", > (long)getpid(), instance++); > if (mkdir(s->smb_dir, 0700) < 0) { >
Thanks, applied to slirp queue.
I added a tiny patch on top that reports the exact error returned by
access():
diff --git a/net/slirp.c b/net/slirp.c
index eb80889..b82eab0 100644
--- a/net/slirp.c
+++ b/net/slirp.c
@@ -504,8 +504,8 @@ static int slirp_smb(SlirpState* s, const char
*exported_dir,
}
if (access(exported_dir, R_OK | X_OK)) {
- error_report("no such directory '%s', or you do not have permission "
- "to access it, please check it", exported_dir);
+ error_report("error accessing shared directory '%s': %s",
+ exported_dir, strerror(errno));
return -1;
}
Jan
signature.asc
Description: OpenPGP digital signature
