示例#1
0
  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
示例#2
0
    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