def Parse(self, unused_stat, file_obj, unused_knowledge_base): self._field_parser.ParseEntries( self._field_parser.Preprocess(utils.ReadFileBytesAsUnicode(file_obj))) result = rdf_config_file.SudoersConfig() for entry in self._field_parser.entries: # Handle multiple entries in one line, eg: # foo bar : baz # ... would become ... # [[foo, bar], [foo, baz]] key = entry[0] nested_entries = [] if ":" not in entry: nested_entries = [entry] else: runner = [] for field in entry: if field == ":": nested_entries.append(runner) runner = [key] continue runner.append(field) nested_entries.append(runner) for nested_entry in nested_entries: self._field_parser.ParseSudoersEntry(nested_entry, result) yield result
def ParseFile( self, knowledge_base: rdf_client.KnowledgeBase, pathspec: rdf_paths.PathSpec, filedesc: IO[bytes], ) -> Iterator[rdf_config_file.SudoersConfig]: del knowledge_base # Unused. del pathspec # Unused. self._field_parser.ParseEntries( self._field_parser.Preprocess( utils.ReadFileBytesAsUnicode(filedesc))) result = rdf_config_file.SudoersConfig() for entry in self._field_parser.entries: # Handle multiple entries in one line, eg: # foo bar : baz # ... would become ... # [[foo, bar], [foo, baz]] key = entry[0] nested_entries = [] if ":" not in entry: nested_entries = [entry] else: runner = [] for field in entry: if field == ":": nested_entries.append(runner) runner = [key] continue runner.append(field) nested_entries.append(runner) for nested_entry in nested_entries: self._field_parser.ParseSudoersEntry(nested_entry, result) yield result