diff options
-rw-r--r-- | sos/archive.py | 10 | ||||
-rw-r--r-- | tests/archive_tests.py | 6 |
2 files changed, 15 insertions, 1 deletions
diff --git a/sos/archive.py b/sos/archive.py index 4d9a4696..463c23b8 100644 --- a/sos/archive.py +++ b/sos/archive.py @@ -24,6 +24,7 @@ import shlex import re import codecs import sys +import errno # required for compression callout (FIXME: move to policy?) from subprocess import Popen, PIPE @@ -209,7 +210,14 @@ class FileCacheArchive(Archive): dest = self.dest_path(path) self._check_path(dest) if not os.path.exists(dest): - os.mknod(dest, mode, device) + try: + os.mknod(dest, mode, device) + except OSError as e: + if e.errno == errno.EPERM: + msg = "Operation not permitted" + self.log_info("add_node: %s - mknod '%s'" % (msg, dest)) + return + raise e shutil.copystat(path, dest) def _makedirs(self, path, mode=0o700): diff --git a/tests/archive_tests.py b/tests/archive_tests.py index dac02a04..febc96b4 100644 --- a/tests/archive_tests.py +++ b/tests/archive_tests.py @@ -39,6 +39,12 @@ class TarFileArchiveTest(unittest.TestCase): self.check_for_file('test/tests/ziptest') + def test_add_node_dev_null(self): + st = os.lstat('/dev/null') + dev_maj = os.major(st.st_rdev) + dev_min = os.minor(st.st_rdev) + self.tf.add_node('/dev/null', st.st_mode, os.makedev(dev_maj, dev_min)) + # when the string comes from tail() output def test_add_string_from_file(self): self.copy_strings = [] |