Set a sane umask to create a proper snap #360

Closed
wants to merge 1 commit into
from
Jump to file or symbol
Failed to load files and symbols.
+37 −0
Split
View
@@ -62,6 +62,7 @@
"""
import logging
+import os
import pkg_resources
import sys
import textwrap
@@ -102,6 +103,13 @@ def _get_version():
return 'devel'
+def _get_umask():
+ shell_umask = os.umask(0)
+ os.umask(shell_umask)
+
+ return shell_umask
+
+
def main():
args = docopt(__doc__, version=_get_version(), options_first=True)
@@ -126,6 +134,11 @@ def main():
sys.exit(textwrap.fill(str(e)))
+ umask = _get_umask()
+ if umask != 0o0022 and umask != 0o0002:
+ logger.warning('Umask is set to {:04o}. Some files may not be '
+ 'accessible from your resulting snap'.format(umask))
+
if __name__ == '__main__': # pragma: no cover
main() # pragma: no cover
@@ -20,6 +20,8 @@
import pkg_resources
import sys
+import fixtures
+
import snapcraft.main
import snapcraft.common
@@ -158,3 +160,25 @@ def test_devel_version(self, mock_stdout, mock_resources):
snapcraft.main.main()
self.assertEqual(mock_stdout.getvalue(), 'devel\n')
+
+ @mock.patch('os.umask')
+ @mock.patch('snapcraft.main.docopt')
+ def test_warn_umask(self, mock_docopt, mock_umask):
+ fake_logger = fixtures.FakeLogger(level=logging.WARNING)
+ self.useFixture(fake_logger)
+
+ mock_docopt.return_value = {
+ 'COMMAND': 'help',
+ '--debug': False,
+ '--no-parallel-build': False,
+ 'ARGS': [],
+ }
+
+ mock_umask.return_value = 0o007
+
+ with mock.patch('snapcraft.commands.help.main'):
+ snapcraft.main.main()
+
+ self.assertEqual('Umask is set to 0007. Some files may not be '
+ 'accessible from your resulting snap\n',
+ fake_logger.output)