def test_disable_permissions_warnings(self): # Setup the config directory os.chmod(self.TEMP_CONFIG_DIR, 0o0755) self.assertNotEqual(os.stat(self.TEMP_CONFIG_DIR).st_mode & 0o7777, 0o0770) # Setup the config file os.chmod(self.TEMP_FILE_PATH, 0o664) self.assertNotEqual(os.stat(self.TEMP_FILE_PATH).st_mode & 0o777, 0o770) parser = CLIConfigParser(config_file_path=self.TEMP_FILE_PATH, validate_config_exists=True, validate_config_permissions=False) parser.LOG = mock.Mock() result = parser.parse() # noqa F841 self.assertEqual(parser.LOG.info.call_count, 0) self.assertEqual(parser.LOG.warn.call_count, 0) # Make sure we left the file alone self.assertTrue(os.path.exists(self.TEMP_FILE_PATH)) self.assertEqual(os.stat(self.TEMP_FILE_PATH).st_mode & 0o777, 0o664) self.assertTrue(os.path.exists(self.TEMP_CONFIG_DIR)) self.assertEqual(os.stat(self.TEMP_CONFIG_DIR).st_mode & 0o7777, 0o0755)
def test_disable_permissions_warnings(self): # Setup the config directory os.chmod(self.TEMP_CONFIG_DIR, 0o0755) self.assertNotEqual(os.stat(self.TEMP_CONFIG_DIR).st_mode & 0o7777, 0o0770) # Setup the config file os.chmod(self.TEMP_FILE_PATH, 0o664) self.assertNotEqual(os.stat(self.TEMP_FILE_PATH).st_mode & 0o777, 0o770) parser = CLIConfigParser( config_file_path=self.TEMP_FILE_PATH, validate_config_exists=True, validate_config_permissions=False, ) parser.LOG = mock.Mock() result = parser.parse() # noqa F841 self.assertEqual(parser.LOG.info.call_count, 0) self.assertEqual(parser.LOG.warn.call_count, 0) # Make sure we left the file alone self.assertTrue(os.path.exists(self.TEMP_FILE_PATH)) self.assertEqual(os.stat(self.TEMP_FILE_PATH).st_mode & 0o777, 0o664) self.assertTrue(os.path.exists(self.TEMP_CONFIG_DIR)) self.assertEqual(os.stat(self.TEMP_CONFIG_DIR).st_mode & 0o7777, 0o0755)
def test_correct_permissions_emit_no_warnings(self): os.chmod(self.TEMP_CONFIG_DIR, 0o2770) self.assertEqual(os.stat(self.TEMP_CONFIG_DIR).st_mode & 0o7777, 0o2770) # Setup the config file os.chmod(self.TEMP_FILE_PATH, 0o660) self.assertEqual(os.stat(self.TEMP_FILE_PATH).st_mode & 0o777, 0o660) parser = CLIConfigParser( config_file_path=self.TEMP_FILE_PATH, validate_config_exists=True ) parser.LOG = mock.Mock() result = parser.parse() # noqa F841 self.assertEqual(parser.LOG.warn.call_count, 0) # Make sure we left the file alone self.assertTrue(os.path.exists(self.TEMP_FILE_PATH)) self.assertEqual(os.stat(self.TEMP_FILE_PATH).st_mode & 0o777, 0o660) self.assertTrue(os.path.exists(self.TEMP_CONFIG_DIR)) self.assertEqual(os.stat(self.TEMP_CONFIG_DIR).st_mode & 0o7777, 0o2770)
def test_weird_but_correct_permissions_emit_no_warnings(self): os.chmod(self.TEMP_CONFIG_DIR, 0o2770) self.assertEqual(os.stat(self.TEMP_CONFIG_DIR).st_mode & 0o7777, 0o2770) # 1. Config file: 0o640 os.chmod(self.TEMP_FILE_PATH, 0o640) self.assertEqual(os.stat(self.TEMP_FILE_PATH).st_mode & 0o777, 0o640) parser = CLIConfigParser(config_file_path=self.TEMP_FILE_PATH, validate_config_exists=True) parser.LOG = mock.Mock() result = parser.parse() # noqa F841 self.assertEqual(parser.LOG.warn.call_count, 0) # Make sure we left the file alone self.assertTrue(os.path.exists(self.TEMP_FILE_PATH)) self.assertEqual(os.stat(self.TEMP_FILE_PATH).st_mode & 0o777, 0o640) # 2. Config file: 0o600 os.chmod(self.TEMP_FILE_PATH, 0o600) self.assertEqual(os.stat(self.TEMP_FILE_PATH).st_mode & 0o777, 0o600) parser = CLIConfigParser(config_file_path=self.TEMP_FILE_PATH, validate_config_exists=True) parser.LOG = mock.Mock() result = parser.parse() # noqa F841 self.assertEqual(parser.LOG.warn.call_count, 0) # Make sure we left the file alone self.assertTrue(os.path.exists(self.TEMP_FILE_PATH)) self.assertEqual(os.stat(self.TEMP_FILE_PATH).st_mode & 0o777, 0o600) self.assertTrue(os.path.exists(self.TEMP_CONFIG_DIR)) self.assertEqual(os.stat(self.TEMP_CONFIG_DIR).st_mode & 0o7777, 0o2770)
def test_warn_on_bad_config_permissions(self): # Setup the config directory os.chmod(self.TEMP_CONFIG_DIR, 0o0755) self.assertNotEqual(os.stat(self.TEMP_CONFIG_DIR).st_mode & 0o7777, 0o0770) # Setup the config file os.chmod(self.TEMP_FILE_PATH, 0o664) self.assertNotEqual(os.stat(self.TEMP_FILE_PATH).st_mode & 0o777, 0o770) parser = CLIConfigParser( config_file_path=self.TEMP_FILE_PATH, validate_config_exists=True ) parser.LOG = mock.Mock() result = parser.parse() # noqa F841 self.assertEqual(parser.LOG.info.call_count, 1) self.assertEqual( "The SGID bit is not set on the StackStorm configuration directory.", parser.LOG.info.call_args_list[0][0][0], ) self.assertEqual(parser.LOG.warn.call_count, 2) self.assertEqual( "The StackStorm configuration directory permissions are insecure " "(too permissive): others have access.", parser.LOG.warn.call_args_list[0][0][0], ) self.assertEqual( "The StackStorm configuration file permissions are insecure: others have access.", parser.LOG.warn.call_args_list[1][0][0], ) # Make sure we left the file alone self.assertTrue(os.path.exists(self.TEMP_FILE_PATH)) self.assertEqual(os.stat(self.TEMP_FILE_PATH).st_mode & 0o777, 0o664) self.assertTrue(os.path.exists(self.TEMP_CONFIG_DIR)) self.assertEqual(os.stat(self.TEMP_CONFIG_DIR).st_mode & 0o7777, 0o0755)
def test_warn_on_bad_config_permissions(self): # Setup the config directory os.chmod(self.TEMP_CONFIG_DIR, 0o0755) self.assertNotEqual(os.stat(self.TEMP_CONFIG_DIR).st_mode & 0o7777, 0o0770) # Setup the config file os.chmod(self.TEMP_FILE_PATH, 0o664) self.assertNotEqual(os.stat(self.TEMP_FILE_PATH).st_mode & 0o777, 0o770) parser = CLIConfigParser(config_file_path=self.TEMP_FILE_PATH, validate_config_exists=True) parser.LOG = mock.Mock() result = parser.parse() # noqa F841 self.assertEqual(parser.LOG.info.call_count, 1) self.assertEqual( "The SGID bit is not set on the StackStorm configuration directory.", parser.LOG.info.call_args_list[0][0][0]) self.assertEqual(parser.LOG.warn.call_count, 2) self.assertEqual( "The StackStorm configuration directory permissions are insecure " "(too permissive): others have access.", parser.LOG.warn.call_args_list[0][0][0]) self.assertEqual( "The StackStorm configuration file permissions are insecure: others have access.", parser.LOG.warn.call_args_list[1][0][0]) # Make sure we left the file alone self.assertTrue(os.path.exists(self.TEMP_FILE_PATH)) self.assertEqual(os.stat(self.TEMP_FILE_PATH).st_mode & 0o777, 0o664) self.assertTrue(os.path.exists(self.TEMP_CONFIG_DIR)) self.assertEqual(os.stat(self.TEMP_CONFIG_DIR).st_mode & 0o7777, 0o0755)