mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-01 09:47:20 +03:00
network: escape quotes for dsmasq conf contents
dnsmasq conf file contents needs to have quotes escaped for it to work. Because of this, the network-create/start for a network with quotes in the name fails. The patch escapes strings for the entries that go into the conf file. Signed-off-by: Shivaprasad G Bhat <sbhat@linux.vnet.ibm.com>
This commit is contained in:
parent
6a28687b6e
commit
310c98d0c4
@ -151,6 +151,7 @@ addnhostsNew(const char *name,
|
||||
const char *config_dir)
|
||||
{
|
||||
dnsmasqAddnHostsfile *addnhostsfile;
|
||||
virBuffer buf = VIR_BUFFER_INITIALIZER;
|
||||
|
||||
if (VIR_ALLOC(addnhostsfile) < 0)
|
||||
return NULL;
|
||||
@ -158,13 +159,20 @@ addnhostsNew(const char *name,
|
||||
addnhostsfile->hosts = NULL;
|
||||
addnhostsfile->nhosts = 0;
|
||||
|
||||
if (virAsprintf(&addnhostsfile->path, "%s/%s.%s", config_dir, name,
|
||||
DNSMASQ_ADDNHOSTSFILE_SUFFIX) < 0)
|
||||
virBufferAsprintf(&buf, "%s", config_dir);
|
||||
virBufferEscapeString(&buf, "/%s", name);
|
||||
virBufferAsprintf(&buf, ".%s", DNSMASQ_ADDNHOSTSFILE_SUFFIX);
|
||||
|
||||
if (virBufferCheckError(&buf) < 0)
|
||||
goto error;
|
||||
|
||||
if (!(addnhostsfile->path = virBufferContentAndReset(&buf)))
|
||||
goto error;
|
||||
|
||||
return addnhostsfile;
|
||||
|
||||
error:
|
||||
virBufferFreeAndReset(&buf);
|
||||
addnhostsFree(addnhostsfile);
|
||||
return NULL;
|
||||
}
|
||||
@ -357,6 +365,7 @@ hostsfileNew(const char *name,
|
||||
const char *config_dir)
|
||||
{
|
||||
dnsmasqHostsfile *hostsfile;
|
||||
virBuffer buf = VIR_BUFFER_INITIALIZER;
|
||||
|
||||
if (VIR_ALLOC(hostsfile) < 0)
|
||||
return NULL;
|
||||
@ -364,13 +373,19 @@ hostsfileNew(const char *name,
|
||||
hostsfile->hosts = NULL;
|
||||
hostsfile->nhosts = 0;
|
||||
|
||||
if (virAsprintf(&hostsfile->path, "%s/%s.%s", config_dir, name,
|
||||
DNSMASQ_HOSTSFILE_SUFFIX) < 0)
|
||||
goto error;
|
||||
virBufferAsprintf(&buf, "%s", config_dir);
|
||||
virBufferEscapeString(&buf, "/%s", name);
|
||||
virBufferAsprintf(&buf, ".%s", DNSMASQ_HOSTSFILE_SUFFIX);
|
||||
|
||||
if (virBufferCheckError(&buf) < 0)
|
||||
goto error;
|
||||
|
||||
if (!(hostsfile->path = virBufferContentAndReset(&buf)))
|
||||
goto error;
|
||||
return hostsfile;
|
||||
|
||||
error:
|
||||
virBufferFreeAndReset(&buf);
|
||||
hostsfileFree(hostsfile);
|
||||
return NULL;
|
||||
}
|
||||
|
@ -45,12 +45,19 @@ VIR_LOG_INIT("util.pidfile");
|
||||
|
||||
char *virPidFileBuildPath(const char *dir, const char* name)
|
||||
{
|
||||
char *pidfile;
|
||||
virBuffer buf = VIR_BUFFER_INITIALIZER;
|
||||
|
||||
if (virAsprintf(&pidfile, "%s/%s.pid", dir, name) < 0)
|
||||
return NULL;
|
||||
virBufferAsprintf(&buf, "%s", dir);
|
||||
virBufferEscapeString(&buf, "/%s.pid", name);
|
||||
|
||||
return pidfile;
|
||||
if (virBufferCheckError(&buf) < 0)
|
||||
goto error;
|
||||
|
||||
return virBufferContentAndReset(&buf);
|
||||
|
||||
error:
|
||||
virBufferFreeAndReset(&buf);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
|
20
tests/networkxml2confdata/nat-network-name-with-quotes.conf
Normal file
20
tests/networkxml2confdata/nat-network-name-with-quotes.conf
Normal file
@ -0,0 +1,20 @@
|
||||
##WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE
|
||||
##OVERWRITTEN AND LOST. Changes to this configuration should be made using:
|
||||
## virsh net-edit default"with"quotes"
|
||||
## or other application using the libvirt API.
|
||||
##
|
||||
## dnsmasq conf file created by libvirt
|
||||
strict-order
|
||||
except-interface=lo
|
||||
bind-interfaces
|
||||
listen-address=192.168.122.1
|
||||
listen-address=192.168.123.1
|
||||
listen-address=fc00:db8:ac10:fe01::1
|
||||
listen-address=fc00:db8:ac10:fd01::1
|
||||
listen-address=10.24.10.1
|
||||
srv-host=_name._tcp
|
||||
dhcp-range=192.168.122.2,192.168.122.254
|
||||
dhcp-no-override
|
||||
dhcp-lease-max=253
|
||||
dhcp-hostsfile=/var/lib/libvirt/dnsmasq/default"with"quotes".hostsfile
|
||||
addn-hosts=/var/lib/libvirt/dnsmasq/default"with"quotes".addnhosts
|
26
tests/networkxml2confdata/nat-network-name-with-quotes.xml
Normal file
26
tests/networkxml2confdata/nat-network-name-with-quotes.xml
Normal file
@ -0,0 +1,26 @@
|
||||
<network>
|
||||
<name>default"with"quotes"</name>
|
||||
<uuid>81ff0d90-c91e-6742-64da-4a736edb9a9b</uuid>
|
||||
<forward dev='eth1' mode='nat'>
|
||||
<interface dev='eth1'/>
|
||||
</forward>
|
||||
<bridge name='virbr0' stp='on' delay='0'/>
|
||||
<dns>
|
||||
<srv service='name' protocol='tcp'/>
|
||||
</dns>
|
||||
<ip address='192.168.122.1' netmask='255.255.255.0'>
|
||||
<dhcp>
|
||||
<range start='192.168.122.2' end='192.168.122.254'/>
|
||||
<host mac='00:16:3e:77:e2:ed' name='a.example.com' ip='192.168.122.10'/>
|
||||
<host mac='00:16:3e:3e:a9:1a' name='b.example.com' ip='192.168.122.11'/>
|
||||
</dhcp>
|
||||
</ip>
|
||||
<ip family='ipv4' address='192.168.123.1' netmask='255.255.255.0'>
|
||||
</ip>
|
||||
<ip family='ipv6' address='fc00:db8:ac10:fe01::1' prefix='64'>
|
||||
</ip>
|
||||
<ip family='ipv6' address='fc00:db8:ac10:fd01::1' prefix='64'>
|
||||
</ip>
|
||||
<ip family='ipv4' address='10.24.10.1'>
|
||||
</ip>
|
||||
</network>
|
@ -115,6 +115,7 @@ mymain(void)
|
||||
DO_TEST("netboot-network", restricted);
|
||||
DO_TEST("netboot-proxy-network", restricted);
|
||||
DO_TEST("nat-network-dns-srv-record-minimal", restricted);
|
||||
DO_TEST("nat-network-name-with-quotes", restricted);
|
||||
DO_TEST("routed-network", full);
|
||||
DO_TEST("nat-network", dhcpv6);
|
||||
DO_TEST("nat-network-dns-txt-record", full);
|
||||
|
Loading…
x
Reference in New Issue
Block a user