cli: Only use regex matching if the subopt contains [

If we use regex matching all the time, we can erroneously match
certain strings. This already let some cli regressions through
with recent patches.
This commit is contained in:
Cole Robinson 2019-05-15 14:43:37 -04:00
parent 384607e502
commit 61639d9b14
2 changed files with 13 additions and 9 deletions

View File

@ -541,7 +541,7 @@ vcpus.vcpu1.id=2,vcpus.vcpu1.enabled=yes
--input type=keyboard,bus=usb
--input tablet
--serial tcp,host=:2222,mode=bind,protocol=telnet,log_file=/tmp/foo.log,log_append=yes,,target.model.name=pci-serial
--serial tcp,host=:2222,mode=bind,protocol=telnet,log.file=/tmp/foo.log,log.append=yes,,target.model.name=pci-serial
--serial nmdm,source.master=/dev/foo1,source.slave=/dev/foo2,alias.name=testalias7
--parallel udp,host=0.0.0.0:1234,bind_host=127.0.0.1:1234
--parallel unix,path=/tmp/foo-socket,source.seclabel0.model=none,source.seclabel1.model=dac,source.seclabel1.relabel=yes,source.seclabel1.label=foobar,source.seclabel.relabel=no

View File

@ -956,14 +956,18 @@ class _VirtCLIArgumentStatic(object):
def nonregex_cliname(self):
return self.cliname.replace("[0-9]*", "")
def match_name(self, cliname):
def match_name(self, userstr):
"""
Return True if the passed argument name matches this
Return True if the passed user string matches this
VirtCLIArgument. So for an option like --foo bar=X, this
checks if we are the parser for 'bar'
"""
for argname in [self.cliname] + util.listify(self.aliases):
if re.match("^%s$" % argname, cliname):
for cliname in [self.cliname] + util.listify(self.aliases):
if "[" in cliname:
ret = re.match("^%s$" % cliname.replace(".", r"\."), userstr)
else:
ret = (cliname == userstr)
if ret:
return True
return False
@ -2914,10 +2918,10 @@ class ParserNetwork(VirtCLIParser):
"virtualport.type": "virtualport_type",
"virtualport.parameters.managerid": "virtualport_managerid",
"virtualport.parameters.typeid": "virtualport.typeid",
"virtualport.parameters.typeidversion": "virtualport.typeidversion",
"virtualport.parameters.instanceid": "virtualport.instanceid",
"virtualport.parameters.profileid": "virtualport.profileid",
"virtualport.parameters.typeid": "virtualport_typeid",
"virtualport.parameters.typeidversion": "virtualport_typeidversion",
"virtualport.parameters.instanceid": "virtualport_instanceid",
"virtualport.parameters.profileid": "virtualport_profileid",
"virtualport.parameters.interfaceid": "virtualport_interfaceid",
}