From nobody Fri May 17 04:49:24 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=poolhem.se Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1690925289141938.6498183167673; Tue, 1 Aug 2023 14:28:09 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qQwu4-0006Uo-Sa; Tue, 01 Aug 2023 17:27:40 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qQwu2-0006Ql-7E for qemu-devel@nongnu.org; Tue, 01 Aug 2023 17:27:38 -0400 Received: from mailout12.inleed.net ([2a0b:dc80:cafe:112::1]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qQwtz-0005rw-G5 for qemu-devel@nongnu.org; Tue, 01 Aug 2023 17:27:37 -0400 Received: from [213.115.245.47] (helo=balrog.lkp.se) by ns12.inleed.net with esmtpa (Exim 4.96-58-g4e9ed49f8) (envelope-from ) id 1qQwtw-002tWa-1n; Tue, 01 Aug 2023 23:27:32 +0200 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=poolhem.se; s=x; h=Content-Transfer-Encoding:Content-Type:Mime-Version:References: In-Reply-To:Message-Id:Subject:Cc:To:From:Date:Sender:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=P4awyS0aCA6Z+D17CBKWYfT9xZF7ZLq2L5sWi3g6uWY=; b=ENlnT6KWBmyvCXg/0XEJnbE9nx ZI6QWPkQV68A/bnsAsq32hSmgSJlLZRIL4e7ATChy640F3nJBaf13xxOAj84/aBUUNkPxY5I05pL2 RFpwN7Iuzav9y+iLA0G9oNh/xiTPyCaKL8ptJZkMsJIfOxSy4hsZlTzl20z9AYPWSiQ9k/qfM+IJy psJVZDrXeN7k+eiNjdaWRnru27Qji05H2hl/zQVEoNl3FOIPM3CZaOaRxWDLK68VjOwidDwhpQwWt dw3qU8CK5Zj9Wbme6nkFEkU2CnJEi2WZurmeu8OFMAYmqrDHEfZcpzBtPb60jnFKQ34+i3TaUzseE wrWVlIdQ==; Date: Tue, 1 Aug 2023 23:27:25 +0200 From: Henrik Carlqvist To: qemu-devel@nongnu.org Cc: samuel.thibault@ens-lyon.org, hc981@poolhem.se Subject: [PATCH v1] Allowing setting and overriding parameters in smb.conf Message-Id: <20230801232725.4cc838fb.hc981@poolhem.se> In-Reply-To: <20230623203007.56d3d182.hc981@poolhem.se> References: <20230328191958.3e3eb5e4.hc981@poolhem.se> <20230328221608.328ab80f.hc981@poolhem.se> <20230430225533.1a57879a.hc981@poolhem.se> <20230608181439.7ea3a5c5.hc981@poolhem.se> <4e8f027a-ca00-c54f-ef2f-f0df1f5b2f9e@ilande.co.uk> <20230610122912.0fc157de.hc981@poolhem.se> <20230611014751.22f22674.hc94@poolhem.se> <20230620215043.6124c450.hc94@poolhem.se> <20230621201447.712ec73a.hc94@poolhem.se> <20230623203007.56d3d182.hc981@poolhem.se> X-Mailer: Sylpheed version 0.9.7 (GTK+ 1.2.10; i686-pc-linux-gnu) Mime-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authenticated-Id: henrik@poolhem.se Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: none client-ip=2a0b:dc80:cafe:112::1; envelope-from=hc981@poolhem.se; helo=mailout12.inleed.net X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_NONE=0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1690925292255100007 Content-Type: text/plain; charset="utf-8" From c480f787981308067a059213a1a7ce9c70ab668e Mon Sep 17 00:00:00 2001 From: Henrik Carlqvist Date: Tue, 1 Aug 2023 23:00:15 +0200 Subject: [PATCH] Allowing setting and overriding parameters in smb.conf Signed-off-by: Henrik Carlqvist --- It would be nice to be able to change settings in smb.conf from the qemu=20 command line. A kludge to edit the qemu smb.conf of a running smbd process=20 is described at https://wiki.archlinux.org/title/QEMU , but IMHO my patch provides a cleaner solution where parameters can be initially set to the preferred values. Best regards Henrik net/slirp.c | 44 ++++++++++++++++++++++++++++++++++++++------ qapi/net.json | 3 +++ qemu-options.hx | 15 ++++++++++++--- 3 files changed, 53 insertions(+), 9 deletions(-) diff --git a/net/slirp.c b/net/slirp.c index c33b3e02e7..f860ea48f6 100644 --- a/net/slirp.c +++ b/net/slirp.c @@ -106,7 +106,8 @@ static int slirp_guestfwd(SlirpState *s, const char *co= nfig_str, Error **errp); =20 #if defined(CONFIG_SMBD_COMMAND) static int slirp_smb(SlirpState *s, const char *exported_dir, - struct in_addr vserver_addr, Error **errp); + struct in_addr vserver_addr, const char *smbparams, + Error **errp); static void slirp_smb_cleanup(SlirpState *s); #else static inline void slirp_smb_cleanup(SlirpState *s) { } @@ -424,6 +425,7 @@ static int net_slirp_init(NetClientState *peer, const c= har *model, const char *bootfile, const char *vdhcp_start, const char *vnameserver, const char *vnameserver= 6, const char *smb_export, const char *vsmbserver, + const char *smbparams, const char **dnssearch, const char *vdomainname, const char *tftp_server_name, Error **errp) @@ -678,7 +680,7 @@ static int net_slirp_init(NetClientState *peer, const c= har *model, } #if defined(CONFIG_SMBD_COMMAND) if (smb_export) { - if (slirp_smb(s, smb_export, smbsrv, errp) < 0) { + if (slirp_smb(s, smb_export, smbsrv, smbparams, errp) < 0) { goto error; } } @@ -891,7 +893,8 @@ static void slirp_smb_cleanup(SlirpState *s) } =20 static int slirp_smb(SlirpState* s, const char *exported_dir, - struct in_addr vserver_addr, Error **errp) + struct in_addr vserver_addr, const char *smbparams, + Error **errp) { char *smb_conf; char *smb_cmdline; @@ -950,10 +953,11 @@ static int slirp_smb(SlirpState* s, const char *expor= ted_dir, "printing =3D bsd\n" "disable spoolss =3D yes\n" "usershare max shares =3D 0\n" - "[qemu]\n" - "path=3D%s\n" "read only=3Dno\n" "guest ok=3Dyes\n" + "%s" + "[qemu]\n" + "path=3D%s\n" "force user=3D%s\n", s->smb_dir, s->smb_dir, @@ -963,6 +967,7 @@ static int slirp_smb(SlirpState* s, const char *exporte= d_dir, s->smb_dir, s->smb_dir, s->smb_dir, + smbparams, exported_dir, passwd->pw_name ); @@ -1143,6 +1148,29 @@ static const char **slirp_dnssearch(const StringList= *dnsname) return ret; } =20 +static char *slirp_smbparams(const StringList *smbparam) +{ + const StringList *c =3D smbparam; + size_t i =3D 1; /* for string terminating 0 */ + char *ret; + + while (c) { + i +=3D strlen(c->value->str); + i++; /* for \n */ + c =3D c->next; + } + ret =3D g_malloc(i * sizeof(*ret)); + ret[0]=3D0; /* Start with empty string */ + + c =3D smbparam; + while (c) { + pstrcat(ret, i * sizeof(*ret), c->value->str); + pstrcat(ret, i * sizeof(*ret), "\n"); + c =3D c->next; + } + return ret; +} + int net_init_slirp(const Netdev *netdev, const char *name, NetClientState *peer, Error **errp) { @@ -1151,6 +1179,7 @@ int net_init_slirp(const Netdev *netdev, const char *= name, int ret; const NetdevUserOptions *user; const char **dnssearch; + char *smbparams; bool ipv4 =3D true, ipv6 =3D true; =20 assert(netdev->type =3D=3D NET_CLIENT_DRIVER_USER); @@ -1170,6 +1199,7 @@ int net_init_slirp(const Netdev *netdev, const char *= name, NULL; =20 dnssearch =3D slirp_dnssearch(user->dnssearch); + smbparams =3D slirp_smbparams(user->smbparam); =20 /* all optional fields are initialized to "all bits zero" */ =20 @@ -1182,7 +1212,8 @@ int net_init_slirp(const Netdev *netdev, const char *= name, user->ipv6_host, user->hostname, user->tftp, user->bootfile, user->dhcpstart, user->dns, user->ipv6_dns, user->smb, - user->smbserver, dnssearch, user->domainname, + user->smbserver, smbparams, + dnssearch, user->domainname, user->tftp_server_name, errp); =20 while (slirp_configs) { @@ -1193,6 +1224,7 @@ int net_init_slirp(const Netdev *netdev, const char *= name, =20 g_free(vnet); g_free(dnssearch); + g_free(smbparams); =20 return ret; } diff --git a/qapi/net.json b/qapi/net.json index 313c8a606e..163091719c 100644 --- a/qapi/net.json +++ b/qapi/net.json @@ -156,6 +156,8 @@ # # @smbserver: IP address of the built-in SMB server # +# @smbparam: list of parameters with values for smb.conf +# # @hostfwd: redirect incoming TCP or UDP host connections to guest # endpoints # @@ -186,6 +188,7 @@ '*ipv6-dns': 'str', '*smb': 'str', '*smbserver': 'str', + '*smbparam': ['String'], '*hostfwd': ['String'], '*guestfwd': ['String'], '*tftp-server-name': 'str' } } diff --git a/qemu-options.hx b/qemu-options.hx index 29b98c3d4c..7b92d08c3e 100644 --- a/qemu-options.hx +++ b/qemu-options.hx @@ -2758,9 +2758,9 @@ DEF("netdev", HAS_ARG, QEMU_OPTION_netdev, " [,ipv6=3Don|off][,ipv6-net=3Daddr[/int]][,ipv6-host=3Daddr]\= n" " [,restrict=3Don|off][,hostname=3Dhost][,dhcpstart=3Daddr]\n" " [,dns=3Daddr][,ipv6-dns=3Daddr][,dnssearch=3Ddomain][,domain= name=3Ddomain]\n" - " [,tftp=3Ddir][,tftp-server-name=3Dname][,bootfile=3Df][,host= fwd=3Drule][,guestfwd=3Drule]" + " [,tftp=3Ddir][,tftp-server-name=3Dname][,bootfile=3Df][,host= fwd=3Drule][,guestfwd=3Drule]\n" #ifndef _WIN32 - "[,smb=3Ddir[,smbserver=3Dadd= r]]\n" + " [,smb=3Ddir[,smbserver=3Daddr][,smbparam=3Dparameter=3Dvalue= ]]\n" #endif " configure a user mode network backend with ID 'str',\= n" " its DHCP server and optional services\n" @@ -3062,7 +3062,7 @@ SRST |qemu_system| -hda linux.img -boot n -device e1000,netdev=3Dn1= \\ -netdev user,id=3Dn1,tftp=3D/path/to/tftp/files,bootfile= =3D/pxelinux.0 =20 - ``smb=3Ddir[,smbserver=3Daddr]`` + ``smb=3Ddir[,smbserver=3Daddr][,smbparam=3Dparameter=3Dvalue]`` When using the user mode network stack, activate a built-in SMB server so that Windows OSes can access to the host files in ``dir`` transparently. The IP address of the SMB server can be @@ -3081,6 +3081,15 @@ SRST =20 Then ``dir`` can be accessed in ``\\smbserver\qemu``. =20 + It is possible to set samba parameters in the generated smb.conf + with one or more ``smbparam=3Dparameter=3Dvalue``. Example: + + .. parsed-literal:: + + |qemu_system| -nic user,smb=3D/tmp,smbparam=3D"read only"=3Dye= s,smbparam=3D"server min protocol"=3DNT1 + + See the man page of smb.conf for a complete listing of parameters. + Note that a SAMBA server must be installed on the host OS. =20 ``hostfwd=3D[tcp|udp]:[hostaddr]:hostport-[guestaddr]:guestport`` --=20 2.35.1