aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBryn M. Reeves <bmr@redhat.com>2014-09-16 20:15:04 +0100
committerBryn M. Reeves <bmr@redhat.com>2014-09-16 20:15:04 +0100
commitfe3c416205b9c07c42df6bdece35e22e0902d042 (patch)
treef28f923938c5f5702c6c9a70a6d2610396f3d834
parentada9ca9514f97fe92a4dbcf2c51cf0f87f2194d2 (diff)
downloadsos-fe3c416205b9c07c42df6bdece35e22e0902d042.tar.gz
[utilities,plugin] check for return status 126
A return status of 126 indicates 'found but not executable'. This is returned from timeout for some malformed commands when running as a normal user but not when running as root, e.g.: Running 1/1: multipath... [plugin:multipath] collecting path '/etc/multipath/' [plugin:multipath] unpacked command tuple: ('['multipath -l', 'multipath -v4 -ll']', 'None', 'None', 300, 'None') [plugin:multipath] collecting output of '['multipath -l', 'multipath -v4 -ll']' Traceback (most recent call last): File "/usr/sbin/sosreport", line 25, in <module> main(sys.argv[1:]) File "/usr/lib/python2.7/site-packages/sos/sosreport.py", line 1389, in main sos.execute() AttributeError: 'list' object has no attribute 'split' > /usr/lib/python2.7/site-packages/sos/plugins/__init__.py(563)get_cmd_output_now() -> % (exe.split()[0], time() - start)) (Pdb) bt /usr/sbin/sosreport(25)<module>() -> main(sys.argv[1:]) /usr/lib/python2.7/site-packages/sos/sosreport.py(1389)main() -> sos.execute() /usr/lib/python2.7/site-packages/sos/sosreport.py(1369)execute() -> self.collect() /usr/lib/python2.7/site-packages/sos/sosreport.py(1144)collect() -> plug.collect() /usr/lib/python2.7/site-packages/sos/plugins/__init__.py(633)collect() -> self._collect_cmd_output() /usr/lib/python2.7/site-packages/sos/plugins/__init__.py(613)_collect_cmd_output() -> timeout=timeout, runat=runat) > /usr/lib/python2.7/site-packages/sos/plugins/__init__.py(563)get_cmd_output_now() -> % (exe.split()[0], time() - start)) (Pdb) result {'status': 126, 'output': u"timeout: failed to run command '[multipath -l,': Permission denied\n"} Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
-rw-r--r--sos/plugins/__init__.py6
-rw-r--r--sos/utilities.py2
2 files changed, 5 insertions, 3 deletions
diff --git a/sos/plugins/__init__.py b/sos/plugins/__init__.py
index f53fc94f..03e82f1b 100644
--- a/sos/plugins/__init__.py
+++ b/sos/plugins/__init__.py
@@ -468,7 +468,8 @@ class Plugin(object):
if result['status'] == 124:
self._log_warn("command '%s' timed out after %ds"
% (prog, timeout))
- if result['status'] == 127:
+ # 126 means 'found but not executable'
+ if result['status'] == 126 or result['status'] == 127:
self._log_debug("could not run '%s': command not found" % prog)
return result
@@ -557,7 +558,8 @@ class Plugin(object):
"""
start = time()
result = self.get_command_output(exe, timeout=timeout, runat=runat)
- if result['status'] == 127:
+ # 126 means 'found but not executable'
+ if result['status'] == 126 or result['status'] == 127:
return None
self._log_debug("collected output of '%s' in %s"
% (exe.split()[0], time() - start))
diff --git a/sos/utilities.py b/sos/utilities.py
index 333d7d0c..4dffe695 100644
--- a/sos/utilities.py
+++ b/sos/utilities.py
@@ -153,7 +153,7 @@ def sos_get_command_output(command, timeout=300, runat=None):
# Required hack while we still pass shell=True to Popen; a Popen
# call with shell=False for a non-existant binary will raise OSError.
- if p.returncode == 127:
+ if p.returncode == 126 or p.returncode == 127:
stdout = six.binary_type(b"")
return {'status': p.returncode, 'output': stdout.decode('utf-8')}