def __load(self): try: with open(self.passwd_filename, 'r') as f: self.passwd = load(f) except (IOError, ValueError) as err: logger.warn('Cannot read {0}: {1}'.format(self.passwd_filename, str(err))) try: with open(self.group_filename, 'r') as f: self.group = load(f) except (IOError, ValueError) as err: logger.warn('Cannot read {0}: {1}'.format(self.group_filename, str(err)))
def run(self, fd): try: with os.fdopen(fd.fd, 'r', closefd=False) as f: dump = load(f) except IOError as err: raise TaskException(errno.ENOENT, "Cannot open input file: {0}".format(str(err))) except ValueError as err: raise TaskException(errno.EINVAL, "Cannot parse input file: {0}".format(str(err))) def progress(name): self.set_progress(50, 'Restored collection {0}'.format(name)) try: restore_db(self.datastore, dump, progress_callback=progress) except DatastoreException as err: raise TaskException(errno.EFAULT, 'Cannot restore factory database: {0}'.format(str(err))) self.join_subtasks(self.run_subtask('system.reboot', 1))
def run(self, fd): try: with os.fdopen(fd.fd, 'r', closefd=False) as f: dump = load(f) except IOError as err: raise TaskException(errno.ENOENT, "Cannot open input file: {0}".format(str(err))) except ValueError as err: raise TaskException(errno.EINVAL, "Cannot parse input file: {0}".format(str(err))) def progress(name): self.set_progress(50, 'Restored collection {0}'.format(name)) try: restore_db(self.datastore, dump, progress_callback=progress) except DatastoreException as err: raise TaskException(errno.EFAULT, 'Cannot restore factory database: {0}'.format(str(err))) self.run_subtask_sync('system.reboot', 1)
def change_password(self, username, password): try: with open(self.passwd_filename, 'r') as f: passwd = load(f) user = first_or_default(lambda u: u['username'] == username, passwd) if not user: raise OSError(errno.ENOENT, os.strerror(errno.ENOENT)) user.update({ 'unixhash': crypted_password(password), 'smbhash': nt_password(password), 'password_changed_at': datetime.datetime.utcnow() }) with open(self.passwd_filename + '.tmp', 'w') as f: dump(passwd, f, indent=4) os.rename(self.passwd_filename + '.tmp', self.passwd_filename) shutil.copy(self.passwd_filename, os.path.join('/conf/base', self.passwd_filename[1:])) self.__load() except (IOError, ValueError) as err: logger.warn('Cannot change password: {0}'.format(str(err))) raise