dissect.target.helpers.configutil
¶
Module Contents¶
Classes¶
Source gotten from: |
|
A configuration parser where you can configure certain aspects of the parsing mechanism. |
|
Parse a configuration file specified by |
|
Parses an ini file according using the built-in python ConfigParser |
|
Read the file into |
|
Parses an XML file. Ignores any constructor parameters passed from ``ConfigurationParser`. |
|
Provides utility functions to unwrap dictionary objects out of lists. |
|
Parses a JSON file. |
|
Parses a Yaml file. |
|
Parses a Toml file. |
|
A (context)manager for dictionary scoping. |
|
This parser is used for files that use a single level of indentation to specify a different scope. |
|
A |
|
Functions¶
Parses the content of an |
|
Attributes¶
- dissect.target.helpers.configutil.HAS_YAML = True¶
- dissect.target.helpers.configutil.HAS_TOML = True¶
- class dissect.target.helpers.configutil.PeekableIterator(iterable)¶
Source gotten from: https://more-itertools.readthedocs.io/en/stable/_modules/more_itertools/more.html#peekable
- __iter__()¶
- __next__()¶
- peek()¶
- class dissect.target.helpers.configutil.ConfigurationParser(collapse: bool | Iterable[str] = False, collapse_inverse: bool = False, separator: tuple[str] = ('=',), comment_prefixes: tuple[str] = (';', '#'))¶
A configuration parser where you can configure certain aspects of the parsing mechanism.
- parsed_data¶
The resulting dictionary after parsing.
- Parameters:
collapse – A
bool
or anIterator
: IfTrue
: it will collapse all the resulting dictionary values. If anIterable
it will collapse on the keys defined incollapse
.collapse_inverse – Inverses the collapsing mechanism. Collapse on everything that is not inside
collapse
.separator – Contains what values it should look for as a separator.
comment_prefixes – Contains what constitutes as a comment.
- __getitem__(item: Any) dict | str ¶
- __contains__(item: str) bool ¶
- abstract parse_file(fh: TextIO) None ¶
Parse the contents of
fh
into key/value pairs.This function should set
parsed_data
as a side_effect.- Parameters:
fh – The text to parse.
- get(item: str, default: Any | None = None) Any ¶
- read_file(fh: TextIO) None ¶
Parse a configuration file.
- Raises:
ConfigurationParsingError – If any exception occurs during during the parsing process.
- keys() KeysView ¶
- items() ItemsView ¶
- class dissect.target.helpers.configutil.Default(*args, **kwargs)¶
Bases:
ConfigurationParser
Parse a configuration file specified by
separator
andcomment_prefixes
.This parser splits only on the first
separator
it finds:key<separator>value -> {“key”: “value”}
key<separator>value
- continuation
-> {“key”: “value continuation”}
# Unless we collapse values, we add them to a list to not overwrite any values. key<separator>value1 key<separator>value2
-> {key: [value1, value2]}
<empty_space><comment> -> skip
- line_reader(fh: TextIO, strip_comments: bool = True) Iterator[str] ¶
- parse_file(fh: TextIO) None ¶
Parse the contents of
fh
into key/value pairs.This function should set
parsed_data
as a side_effect.- Parameters:
fh – The text to parse.
- class dissect.target.helpers.configutil.Ini(*args, **kwargs)¶
Bases:
ConfigurationParser
Parses an ini file according using the built-in python ConfigParser
- parse_file(fh: io.TextIO) None ¶
Parse the contents of
fh
into key/value pairs.This function should set
parsed_data
as a side_effect.- Parameters:
fh – The text to parse.
- class dissect.target.helpers.configutil.Txt(collapse: bool | Iterable[str] = False, collapse_inverse: bool = False, separator: tuple[str] = ('=',), comment_prefixes: tuple[str] = (';', '#'))¶
Bases:
ConfigurationParser
Read the file into
content
, and show the bumber of bytes read.- parse_file(fh: TextIO) None ¶
Parse the contents of
fh
into key/value pairs.This function should set
parsed_data
as a side_effect.- Parameters:
fh – The text to parse.
- class dissect.target.helpers.configutil.Xml(collapse: bool | Iterable[str] = False, collapse_inverse: bool = False, separator: tuple[str] = ('=',), comment_prefixes: tuple[str] = (';', '#'))¶
Bases:
ConfigurationParser
Parses an XML file. Ignores any constructor parameters passed from ``ConfigurationParser`.
- parse_file(fh: TextIO) None ¶
Parse the contents of
fh
into key/value pairs.This function should set
parsed_data
as a side_effect.- Parameters:
fh – The text to parse.
- class dissect.target.helpers.configutil.ListUnwrapper¶
Provides utility functions to unwrap dictionary objects out of lists.
- static unwrap(data: dict | list) dict | list ¶
Transforms a list with dictionaries to a dictionary.
The order of the list is preserved. If no dictionary is found, the list remains untouched:
[“value1”, “value2”] -> [“value1”, “value2”]
{“data”: “value”} -> {“data”: “value”}
- [{“data”: “value”}] -> {
- “list_item0”: {
“data”: “value”
}
}
- class dissect.target.helpers.configutil.Json(collapse: bool | Iterable[str] = False, collapse_inverse: bool = False, separator: tuple[str] = ('=',), comment_prefixes: tuple[str] = (';', '#'))¶
Bases:
ConfigurationParser
Parses a JSON file.
- parse_file(fh: TextIO)¶
Parse the contents of
fh
into key/value pairs.This function should set
parsed_data
as a side_effect.- Parameters:
fh – The text to parse.
- class dissect.target.helpers.configutil.Yaml(collapse: bool | Iterable[str] = False, collapse_inverse: bool = False, separator: tuple[str] = ('=',), comment_prefixes: tuple[str] = (';', '#'))¶
Bases:
ConfigurationParser
Parses a Yaml file.
- parse_file(fh: TextIO) None ¶
Parse the contents of
fh
into key/value pairs.This function should set
parsed_data
as a side_effect.- Parameters:
fh – The text to parse.
- class dissect.target.helpers.configutil.Toml(collapse: bool | Iterable[str] = False, collapse_inverse: bool = False, separator: tuple[str] = ('=',), comment_prefixes: tuple[str] = (';', '#'))¶
Bases:
ConfigurationParser
Parses a Toml file.
- parse_file(fh: TextIO) None ¶
Parse the contents of
fh
into key/value pairs.This function should set
parsed_data
as a side_effect.- Parameters:
fh – The text to parse.
- class dissect.target.helpers.configutil.ScopeManager¶
A (context)manager for dictionary scoping.
This class provides utility functions to keep track of scopes inside a dictionary.
- _parents¶
A dictionary accounting what child belongs to which parent dictionary.
- _root¶
The initial dictionary.
- _current¶
The current dictionary.
- _previous¶
The node before the current (changed) node.
- __enter__() ScopeManager ¶
- __exit__(type: ScopeManager.__exit__.type[BaseException] | None, value: BaseException | None, traceback: types.TracebackType | None) None ¶
- push(name: str, keep_prev: bool = False) Literal[True] ¶
Push a new key to the
_current
dictionary and return that we did.
- pop(keep_prev: bool = False) bool ¶
Pop
_current
and return whether we changed the_parents
dictionary.
- is_root() bool ¶
Utility function to check whether the current dictionary is a root dictionary.
- clean() None ¶
Clean up the internal state. This is called automatically when
ScopeManager
is used as a contextmanager.
- class dissect.target.helpers.configutil.Indentation(*args, **kwargs)¶
Bases:
Default
This parser is used for files that use a single level of indentation to specify a different scope.
Examples of these files are the
sshd_config
file. Where “Match” statements use a single layer of indentation to specify a scope for the key value pairs.The parser parses this as the following:
- key value
- key2 value2
-> {“key value”: {“key2”: “value2”}}
- parse_file(fh: TextIO) None ¶
Parse the contents of
fh
into key/value pairs.This function should set
parsed_data
as a side_effect.- Parameters:
fh – The text to parse.
- class dissect.target.helpers.configutil.SystemD(*args, **kwargs)¶
Bases:
Indentation
A
ConfigurationParser
that specifically parses systemd configuration files.Examples
>>> systemd_data = textwrap.dedent( ''' [Section1] Key=Value [Section2] Key2=Value 2\ Value 2 continued ''' ) >>> parser = SystemD(io.StringIO(systemd_data)) >>> parser.parser_items { "Section1": { "Key": "Value }, "Section2": { "Key2": "Value2 Value 2 continued } }
- parse_file(fh: TextIO) None ¶
Parse the contents of
fh
into key/value pairs.This function should set
parsed_data
as a side_effect.- Parameters:
fh – The text to parse.
- class dissect.target.helpers.configutil.ParserOptions¶
- collapse: bool | set | None¶
- collapse_inverse: bool | None¶
- separator: tuple[str] | None¶
- comment_prefixes: tuple[str] | None¶
- class dissect.target.helpers.configutil.ParserConfig¶
- parser: type[ConfigurationParser]¶
- collapse: bool | set | None¶
- collapse_inverse: bool | None¶
- separator: tuple[str] | None¶
- comment_prefixes: tuple[str] | None¶
- create_parser(options: ParserOptions | None = None) ConfigurationParser ¶
- dissect.target.helpers.configutil.MATCH_MAP: dict[str, ParserConfig]¶
- dissect.target.helpers.configutil.CONFIG_MAP: dict[tuple[str, Ellipsis], ParserConfig]¶
- dissect.target.helpers.configutil.KNOWN_FILES: dict[str, type[ConfigurationParser]]¶
- dissect.target.helpers.configutil.parse(path: dissect.target.filesystem.FilesystemEntry | dissect.target.helpers.fsutil.TargetPath, hint: str | None = None, *args, **kwargs) configparser.ConfigParser ¶
Parses the content of an
path
orentry
to a dictionary.- Parameters:
path – The path to either a directory or file.
hint – What kind of parser should be used.
collapse – Whether it should collapse everything or just a certain set of keys.
collapse_inverse – Invert the collapse function to collapse everything but the keys inside
collapse
.separator – The separator that should be used for parsing.
comment_prefixes – What is specified as a comment.
- Raises:
FileNotFoundError – If the
path
is not a file.
- dissect.target.helpers.configutil.parse_config(entry: dissect.target.filesystem.FilesystemEntry, hint: str | None = None, options: ParserOptions | None = None) configparser.ConfigParser ¶