提交 310c98d0 编写于 作者: S Shivaprasad G Bhat 提交者: Laine Stump

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: NShivaprasad G Bhat <sbhat@linux.vnet.ibm.com>
上级 6a28687b
......@@ -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;
}
......
##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&quot;with&quot;quotes&quot;.hostsfile
addn-hosts=/var/lib/libvirt/dnsmasq/default&quot;with&quot;quotes&quot;.addnhosts
<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);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册