def run(self): """ wait for password request on FIFO and answer with password from self.db through FIFO. """ info = configfile.ConfigFile() info.set_int_value('version', self.PW_CACHE_VERSION) info.save(self.config.get_password_cache_info()) os.chmod(self.config.get_password_cache_info(), 0o600) logger.debug('Keyring supported: %s' %self.keyring_supported, self) tools.save_env(self.config.get_cron_env_file()) if not self._collect_passwords(): logger.debug('Nothing to cache. Quit.', self) sys.exit(0) self.fifo.create() atexit.register(self.fifo.delfifo) signal.signal(signal.SIGHUP, self._reload_handler) logger.debug('Start loop', self) while True: try: request = self.fifo.read() request = request.split('\n')[0] task, value = request.split(':', 1) if task == 'get_pw': key = value if key in list(self.db_keyring.keys()): answer = 'pw:' + self.db_keyring[key] elif key in list(self.db_usr.keys()): answer = 'pw:' + self.db_usr[key] else: answer = 'none:' self.fifo.write(answer, 5) elif task == 'set_pw': key, value = value.split(':', 1) self.db_usr[key] = value except IOError as e: logger.error('Error in writing answer to FIFO: %s' % str(e), self) except KeyboardInterrupt: logger.debug('Quit.', self) break except Timeout: logger.error('FIFO timeout', self) except Exception as e: logger.error('ERROR: %s' % str(e), self)
def test_save_env(self): keys = ('GNOME_KEYRING_CONTROL', 'DBUS_SESSION_BUS_ADDRESS', \ 'DBUS_SESSION_BUS_PID', 'DBUS_SESSION_BUS_WINDOWID', \ 'DISPLAY', 'XAUTHORITY', 'GNOME_DESKTOP_SESSION_ID', \ 'KDE_FULL_SESSION') for i, k in enumerate(keys): os.environ[k] = str(i) tools.save_env(self.temp_file) self.assertTrue(os.path.isfile(self.temp_file)) test_env = configfile.ConfigFile() test_env.load(self.temp_file) for i, k in enumerate(keys): with self.subTest(i=i, k=k): #workaround for py.test3 2.5.1 doesn't support subTest msg = 'i = %s, k = %s' % (i, k) self.assertEqual(test_env.get_str_value(k), str(i), msg)
def test_save_env(self): keys = ('GNOME_KEYRING_CONTROL', 'DBUS_SESSION_BUS_ADDRESS', \ 'DBUS_SESSION_BUS_PID', 'DBUS_SESSION_BUS_WINDOWID', \ 'DISPLAY', 'XAUTHORITY', 'GNOME_DESKTOP_SESSION_ID', \ 'KDE_FULL_SESSION') for i, k in enumerate(keys): os.environ[k] = str(i) tools.save_env(self.temp_file) self.assertTrue(os.path.isfile(self.temp_file)) test_env = configfile.ConfigFile() test_env.load(self.temp_file) for i, k in enumerate(keys): with self.subTest(i = i, k = k): #workaround for py.test3 2.5.1 doesn't support subTest msg = 'i = %s, k = %s' %(i, k) self.assertEqual(test_env.get_str_value(k), str(i), msg)