11f94efc6265c77e9b45058a88eb86f8d49c2c7c7Serhiy Storchakaimport os 21f94efc6265c77e9b45058a88eb86f8d49c2c7c7Serhiy Storchakaimport unittest 31f94efc6265c77e9b45058a88eb86f8d49c2c7c7Serhiy Storchakafrom test import test_support 41f94efc6265c77e9b45058a88eb86f8d49c2c7c7Serhiy Storchaka 51f94efc6265c77e9b45058a88eb86f8d49c2c7c7Serhiy Storchakaspwd = test_support.import_module('spwd') 61f94efc6265c77e9b45058a88eb86f8d49c2c7c7Serhiy Storchaka 71f94efc6265c77e9b45058a88eb86f8d49c2c7c7Serhiy Storchaka 81f94efc6265c77e9b45058a88eb86f8d49c2c7c7Serhiy Storchaka@unittest.skipUnless(hasattr(os, 'geteuid') and os.geteuid() == 0, 91f94efc6265c77e9b45058a88eb86f8d49c2c7c7Serhiy Storchaka 'root privileges required') 101f94efc6265c77e9b45058a88eb86f8d49c2c7c7Serhiy Storchakaclass TestSpwdRoot(unittest.TestCase): 111f94efc6265c77e9b45058a88eb86f8d49c2c7c7Serhiy Storchaka 121f94efc6265c77e9b45058a88eb86f8d49c2c7c7Serhiy Storchaka def test_getspall(self): 131f94efc6265c77e9b45058a88eb86f8d49c2c7c7Serhiy Storchaka entries = spwd.getspall() 141f94efc6265c77e9b45058a88eb86f8d49c2c7c7Serhiy Storchaka self.assertIsInstance(entries, list) 151f94efc6265c77e9b45058a88eb86f8d49c2c7c7Serhiy Storchaka for entry in entries: 161f94efc6265c77e9b45058a88eb86f8d49c2c7c7Serhiy Storchaka self.assertIsInstance(entry, spwd.struct_spwd) 171f94efc6265c77e9b45058a88eb86f8d49c2c7c7Serhiy Storchaka 181f94efc6265c77e9b45058a88eb86f8d49c2c7c7Serhiy Storchaka def test_getspnam(self): 191f94efc6265c77e9b45058a88eb86f8d49c2c7c7Serhiy Storchaka entries = spwd.getspall() 201f94efc6265c77e9b45058a88eb86f8d49c2c7c7Serhiy Storchaka if not entries: 211f94efc6265c77e9b45058a88eb86f8d49c2c7c7Serhiy Storchaka self.skipTest('empty shadow password database') 221f94efc6265c77e9b45058a88eb86f8d49c2c7c7Serhiy Storchaka random_name = entries[0].sp_nam 231f94efc6265c77e9b45058a88eb86f8d49c2c7c7Serhiy Storchaka entry = spwd.getspnam(random_name) 241f94efc6265c77e9b45058a88eb86f8d49c2c7c7Serhiy Storchaka self.assertIsInstance(entry, spwd.struct_spwd) 251f94efc6265c77e9b45058a88eb86f8d49c2c7c7Serhiy Storchaka self.assertEqual(entry.sp_nam, random_name) 261f94efc6265c77e9b45058a88eb86f8d49c2c7c7Serhiy Storchaka self.assertEqual(entry.sp_nam, entry[0]) 271f94efc6265c77e9b45058a88eb86f8d49c2c7c7Serhiy Storchaka self.assertIsInstance(entry.sp_pwd, str) 281f94efc6265c77e9b45058a88eb86f8d49c2c7c7Serhiy Storchaka self.assertEqual(entry.sp_pwd, entry[1]) 291f94efc6265c77e9b45058a88eb86f8d49c2c7c7Serhiy Storchaka self.assertIsInstance(entry.sp_lstchg, int) 301f94efc6265c77e9b45058a88eb86f8d49c2c7c7Serhiy Storchaka self.assertEqual(entry.sp_lstchg, entry[2]) 311f94efc6265c77e9b45058a88eb86f8d49c2c7c7Serhiy Storchaka self.assertIsInstance(entry.sp_min, int) 321f94efc6265c77e9b45058a88eb86f8d49c2c7c7Serhiy Storchaka self.assertEqual(entry.sp_min, entry[3]) 331f94efc6265c77e9b45058a88eb86f8d49c2c7c7Serhiy Storchaka self.assertIsInstance(entry.sp_max, int) 341f94efc6265c77e9b45058a88eb86f8d49c2c7c7Serhiy Storchaka self.assertEqual(entry.sp_max, entry[4]) 351f94efc6265c77e9b45058a88eb86f8d49c2c7c7Serhiy Storchaka self.assertIsInstance(entry.sp_warn, int) 361f94efc6265c77e9b45058a88eb86f8d49c2c7c7Serhiy Storchaka self.assertEqual(entry.sp_warn, entry[5]) 371f94efc6265c77e9b45058a88eb86f8d49c2c7c7Serhiy Storchaka self.assertIsInstance(entry.sp_inact, int) 381f94efc6265c77e9b45058a88eb86f8d49c2c7c7Serhiy Storchaka self.assertEqual(entry.sp_inact, entry[6]) 391f94efc6265c77e9b45058a88eb86f8d49c2c7c7Serhiy Storchaka self.assertIsInstance(entry.sp_expire, int) 401f94efc6265c77e9b45058a88eb86f8d49c2c7c7Serhiy Storchaka self.assertEqual(entry.sp_expire, entry[7]) 411f94efc6265c77e9b45058a88eb86f8d49c2c7c7Serhiy Storchaka self.assertIsInstance(entry.sp_flag, int) 421f94efc6265c77e9b45058a88eb86f8d49c2c7c7Serhiy Storchaka self.assertEqual(entry.sp_flag, entry[8]) 431f94efc6265c77e9b45058a88eb86f8d49c2c7c7Serhiy Storchaka with self.assertRaises(KeyError) as cx: 441f94efc6265c77e9b45058a88eb86f8d49c2c7c7Serhiy Storchaka spwd.getspnam('invalid user name') 451f94efc6265c77e9b45058a88eb86f8d49c2c7c7Serhiy Storchaka self.assertEqual(str(cx.exception), "'getspnam(): name not found'") 461f94efc6265c77e9b45058a88eb86f8d49c2c7c7Serhiy Storchaka self.assertRaises(TypeError, spwd.getspnam) 471f94efc6265c77e9b45058a88eb86f8d49c2c7c7Serhiy Storchaka self.assertRaises(TypeError, spwd.getspnam, 0) 481f94efc6265c77e9b45058a88eb86f8d49c2c7c7Serhiy Storchaka self.assertRaises(TypeError, spwd.getspnam, random_name, 0) 491f94efc6265c77e9b45058a88eb86f8d49c2c7c7Serhiy Storchaka if test_support.have_unicode: 501f94efc6265c77e9b45058a88eb86f8d49c2c7c7Serhiy Storchaka try: 511f94efc6265c77e9b45058a88eb86f8d49c2c7c7Serhiy Storchaka unicode_name = unicode(random_name) 521f94efc6265c77e9b45058a88eb86f8d49c2c7c7Serhiy Storchaka except UnicodeDecodeError: 531f94efc6265c77e9b45058a88eb86f8d49c2c7c7Serhiy Storchaka pass 541f94efc6265c77e9b45058a88eb86f8d49c2c7c7Serhiy Storchaka else: 551f94efc6265c77e9b45058a88eb86f8d49c2c7c7Serhiy Storchaka self.assertEqual(spwd.getspnam(unicode_name), entry) 561f94efc6265c77e9b45058a88eb86f8d49c2c7c7Serhiy Storchaka 571f94efc6265c77e9b45058a88eb86f8d49c2c7c7Serhiy Storchaka 581f94efc6265c77e9b45058a88eb86f8d49c2c7c7Serhiy Storchakadef test_main(): 591f94efc6265c77e9b45058a88eb86f8d49c2c7c7Serhiy Storchaka test_support.run_unittest(TestSpwdRoot) 601f94efc6265c77e9b45058a88eb86f8d49c2c7c7Serhiy Storchaka 611f94efc6265c77e9b45058a88eb86f8d49c2c7c7Serhiy Storchakaif __name__ == "__main__": 621f94efc6265c77e9b45058a88eb86f8d49c2c7c7Serhiy Storchaka test_main() 63