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:
parent
31209e1434
commit
e9f2d54f44
3 changed files with 28 additions and 18 deletions
|
@ -42,11 +42,14 @@ class HostapdGlobal:
|
||||||
self.dbg = hostname + "/" + str(port)
|
self.dbg = hostname + "/" + str(port)
|
||||||
self.mon.attach()
|
self.mon.attach()
|
||||||
|
|
||||||
def cmd_execute(self, cmd_array):
|
def cmd_execute(self, cmd_array, shell=False):
|
||||||
if self.hostname is None:
|
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,
|
proc = subprocess.Popen(cmd, stderr=subprocess.STDOUT,
|
||||||
stdout=subprocess.PIPE, shell=True)
|
stdout=subprocess.PIPE, shell=shell)
|
||||||
out = proc.communicate()[0]
|
out = proc.communicate()[0]
|
||||||
ret = proc.returncode
|
ret = proc.returncode
|
||||||
return ret, out
|
return ret, out
|
||||||
|
@ -146,14 +149,14 @@ class Hostapd:
|
||||||
self.bssid = None
|
self.bssid = None
|
||||||
self.bssidx = bssidx
|
self.bssidx = bssidx
|
||||||
|
|
||||||
def cmd_execute(self, cmd_array):
|
def cmd_execute(self, cmd_array, shell=False):
|
||||||
if self.hostname is None:
|
if self.hostname is None:
|
||||||
cmd = ""
|
if shell:
|
||||||
for arg in cmd_array:
|
cmd = ' '.join(cmd_array)
|
||||||
cmd += arg + " "
|
else:
|
||||||
cmd = cmd.strip()
|
cmd = cmd_array
|
||||||
proc = subprocess.Popen(cmd, stderr=subprocess.STDOUT,
|
proc = subprocess.Popen(cmd, stderr=subprocess.STDOUT,
|
||||||
stdout=subprocess.PIPE, shell=True)
|
stdout=subprocess.PIPE, shell=shell)
|
||||||
out = proc.communicate()[0]
|
out = proc.communicate()[0]
|
||||||
ret = proc.returncode
|
ret = proc.returncode
|
||||||
return ret, out
|
return ret, out
|
||||||
|
@ -588,6 +591,6 @@ def ht40_minus_params(channel="1", ssid=None, country=None):
|
||||||
params['ht_capab'] = "[HT40-]"
|
params['ht_capab'] = "[HT40-]"
|
||||||
return params
|
return params
|
||||||
|
|
||||||
def cmd_execute(apdev, cmd):
|
def cmd_execute(apdev, cmd, shell=False):
|
||||||
hapd_global = HostapdGlobal(apdev)
|
hapd_global = HostapdGlobal(apdev)
|
||||||
return hapd_global.cmd_execute(cmd)
|
return hapd_global.cmd_execute(cmd, shell=shell)
|
||||||
|
|
|
@ -86,12 +86,14 @@ def test_ap_cipher_tkip_countermeasures_ap(dev, apdev):
|
||||||
pairwise="TKIP", group="TKIP", scan_freq="2412")
|
pairwise="TKIP", group="TKIP", scan_freq="2412")
|
||||||
|
|
||||||
dev[0].dump_monitor()
|
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)
|
ev = dev[0].wait_event(["CTRL-EVENT-DISCONNECTED"], timeout=1)
|
||||||
if ev is not None:
|
if ev is not None:
|
||||||
raise Exception("Unexpected disconnection on first Michael MIC failure")
|
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,
|
ev = dev[0].wait_disconnected(timeout=10,
|
||||||
error="No disconnection after two Michael MIC failures")
|
error="No disconnection after two Michael MIC failures")
|
||||||
if "reason=14" not in ev:
|
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")
|
pairwise="TKIP", group="TKIP", scan_freq="2412")
|
||||||
|
|
||||||
dev[0].dump_monitor()
|
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)
|
ev = dev[0].wait_event(["CTRL-EVENT-DISCONNECTED"], timeout=1)
|
||||||
if ev is not None:
|
if ev is not None:
|
||||||
raise Exception("Unexpected disconnection on first Michael MIC failure")
|
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,
|
ev = dev[0].wait_disconnected(timeout=10,
|
||||||
error="No disconnection after two Michael MIC failures")
|
error="No disconnection after two Michael MIC failures")
|
||||||
if "reason=14 locally_generated=1" not in ev:
|
if "reason=14 locally_generated=1" not in ev:
|
||||||
|
|
|
@ -49,11 +49,14 @@ class WpaSupplicant:
|
||||||
else:
|
else:
|
||||||
self.global_mon = None
|
self.global_mon = None
|
||||||
|
|
||||||
def cmd_execute(self, cmd_array):
|
def cmd_execute(self, cmd_array, shell=False):
|
||||||
if self.hostname is None:
|
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,
|
proc = subprocess.Popen(cmd, stderr=subprocess.STDOUT,
|
||||||
stdout=subprocess.PIPE, shell=True)
|
stdout=subprocess.PIPE, shell=shell)
|
||||||
out = proc.communicate()[0]
|
out = proc.communicate()[0]
|
||||||
ret = proc.returncode
|
ret = proc.returncode
|
||||||
return ret, out
|
return ret, out
|
||||||
|
|
Loading…
Reference in a new issue