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"
 | 
			
		||||
 | 
			
		||||
#ifndef _WIN32
 | 
			
		||||
#include <pwd.h>
 | 
			
		||||
#include <sys/wait.h>
 | 
			
		||||
#endif
 | 
			
		||||
#include "net.h"
 | 
			
		||||
| 
						 | 
				
			
			@ -487,8 +488,15 @@ static int slirp_smb(SlirpState* s, const char *exported_dir,
 | 
			
		|||
    static int instance;
 | 
			
		||||
    char smb_conf[128];
 | 
			
		||||
    char smb_cmdline[128];
 | 
			
		||||
    struct passwd *passwd;
 | 
			
		||||
    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",
 | 
			
		||||
             (long)getpid(), instance++);
 | 
			
		||||
    if (mkdir(s->smb_dir, 0700) < 0) {
 | 
			
		||||
| 
						 | 
				
			
			@ -517,14 +525,16 @@ static int slirp_smb(SlirpState* s, const char *exported_dir,
 | 
			
		|||
            "[qemu]\n"
 | 
			
		||||
            "path=%s\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,
 | 
			
		||||
            exported_dir
 | 
			
		||||
            exported_dir,
 | 
			
		||||
            passwd->pw_name
 | 
			
		||||
            );
 | 
			
		||||
    fclose(f);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue