tests: Use shell in local cmd_execute() only if needed

The generic cmd_execute() function was introduced in a manner that
converted the argument array to a string and used shell to run the
command unconditionally. This is not really desirable, so move back to
using the command array by default and use the single command string
with a shell only when really needed.

Signed-off-by: Jouni Malinen <j@w1.fi>
This commit is contained in:
Jouni Malinen 2016-06-27 20:10:23 +03:00
parent 31209e1434
commit e9f2d54f44
3 changed files with 28 additions and 18 deletions

View file

@ -42,11 +42,14 @@ class HostapdGlobal:
self.dbg = hostname + "/" + str(port)
self.mon.attach()
def cmd_execute(self, cmd_array):
def cmd_execute(self, cmd_array, shell=False):
if self.hostname is None:
cmd = ' '.join(cmd_array)
if shell:
cmd = ' '.join(cmd_array)
else:
cmd = cmd_array
proc = subprocess.Popen(cmd, stderr=subprocess.STDOUT,
stdout=subprocess.PIPE, shell=True)
stdout=subprocess.PIPE, shell=shell)
out = proc.communicate()[0]
ret = proc.returncode
return ret, out
@ -146,14 +149,14 @@ class Hostapd:
self.bssid = None
self.bssidx = bssidx
def cmd_execute(self, cmd_array):
def cmd_execute(self, cmd_array, shell=False):
if self.hostname is None:
cmd = ""
for arg in cmd_array:
cmd += arg + " "
cmd = cmd.strip()
if shell:
cmd = ' '.join(cmd_array)
else:
cmd = cmd_array
proc = subprocess.Popen(cmd, stderr=subprocess.STDOUT,
stdout=subprocess.PIPE, shell=True)
stdout=subprocess.PIPE, shell=shell)
out = proc.communicate()[0]
ret = proc.returncode
return ret, out
@ -588,6 +591,6 @@ def ht40_minus_params(channel="1", ssid=None, country=None):
params['ht_capab'] = "[HT40-]"
return params
def cmd_execute(apdev, cmd):
def cmd_execute(apdev, cmd, shell=False):
hapd_global = HostapdGlobal(apdev)
return hapd_global.cmd_execute(cmd)
return hapd_global.cmd_execute(cmd, shell=shell)

View file

@ -86,12 +86,14 @@ def test_ap_cipher_tkip_countermeasures_ap(dev, apdev):
pairwise="TKIP", group="TKIP", scan_freq="2412")
dev[0].dump_monitor()
dev[0].cmd_execute([ "echo", "-n", apdev[0]['bssid'], ">", testfile ])
dev[0].cmd_execute([ "echo", "-n", apdev[0]['bssid'], ">", testfile ],
shell=True)
ev = dev[0].wait_event(["CTRL-EVENT-DISCONNECTED"], timeout=1)
if ev is not None:
raise Exception("Unexpected disconnection on first Michael MIC failure")
dev[0].cmd_execute([ "echo", "-n", "ff:ff:ff:ff:ff:ff", ">", testfile ])
dev[0].cmd_execute([ "echo", "-n", "ff:ff:ff:ff:ff:ff", ">", testfile ],
shell=True)
ev = dev[0].wait_disconnected(timeout=10,
error="No disconnection after two Michael MIC failures")
if "reason=14" not in ev:
@ -118,12 +120,14 @@ def test_ap_cipher_tkip_countermeasures_sta(dev, apdev):
pairwise="TKIP", group="TKIP", scan_freq="2412")
dev[0].dump_monitor()
hapd.cmd_execute([ "echo", "-n", dev[0].own_addr(), ">", testfile ])
hapd.cmd_execute([ "echo", "-n", dev[0].own_addr(), ">", testfile ],
shell=True)
ev = dev[0].wait_event(["CTRL-EVENT-DISCONNECTED"], timeout=1)
if ev is not None:
raise Exception("Unexpected disconnection on first Michael MIC failure")
hapd.cmd_execute([ "echo", "-n", "ff:ff:ff:ff:ff:ff", ">", testfile ])
hapd.cmd_execute([ "echo", "-n", "ff:ff:ff:ff:ff:ff", ">", testfile ],
shell=True)
ev = dev[0].wait_disconnected(timeout=10,
error="No disconnection after two Michael MIC failures")
if "reason=14 locally_generated=1" not in ev:

View file

@ -49,11 +49,14 @@ class WpaSupplicant:
else:
self.global_mon = None
def cmd_execute(self, cmd_array):
def cmd_execute(self, cmd_array, shell=False):
if self.hostname is None:
cmd = ' '.join(cmd_array)
if shell:
cmd = ' '.join(cmd_array)
else:
cmd = cmd_array
proc = subprocess.Popen(cmd, stderr=subprocess.STDOUT,
stdout=subprocess.PIPE, shell=True)
stdout=subprocess.PIPE, shell=shell)
out = proc.communicate()[0]
ret = proc.returncode
return ret, out