diff options
author | Bryn M. Reeves <bmr@redhat.com> | 2014-09-16 20:15:04 +0100 |
---|---|---|
committer | Bryn M. Reeves <bmr@redhat.com> | 2014-09-16 20:15:04 +0100 |
commit | fe3c416205b9c07c42df6bdece35e22e0902d042 (patch) | |
tree | f28f923938c5f5702c6c9a70a6d2610396f3d834 | |
parent | ada9ca9514f97fe92a4dbcf2c51cf0f87f2194d2 (diff) | |
download | sos-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__.py | 6 | ||||
-rw-r--r-- | sos/utilities.py | 2 |
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')} |