Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def ParseOptions(cls, options, configuration_object):
"""Parse and validate the configuration options.
Args:
options (argparse.Namespace): parser options.
configuration_object (object): object to be configured by the argument
helper.
Raises:
BadConfigOption: when a configuration parameter fails validation.
"""
if not hasattr(options, 'correcto'):
raise errors.BadConfigOption('Correcto not set.')
if not isinstance(getattr(options, 'correcto', None), bool):
raise errors.BadConfigOption('Correcto wrongly formatted.')
def testParseOptions(self):
"""Tests the ParseOptions function."""
options = cli_test_lib.TestOptions()
output_mediator = self._CreateOutputMediator()
output_module = xlsx.XLSXOutputModule(output_mediator)
with self.assertRaises(errors.BadConfigOption):
xlsx_output.XLSXOutputArgumentsHelper.ParseOptions(
options, output_module)
options.write = 'plaso.xlsx'
xlsx_output.XLSXOutputArgumentsHelper.ParseOptions(
options, output_module)
with self.assertRaises(errors.BadConfigObject):
xlsx_output.XLSXOutputArgumentsHelper.ParseOptions(
options, None)
raise errors.BadConfigObject(
'Configuration object is not an instance of CLITool')
filter_file = cls._ParseStringOption(options, 'file_filter')
# Search the data location for the filter file.
if filter_file and not os.path.isfile(filter_file):
data_location = getattr(configuration_object, '_data_location', None)
if data_location:
filter_file_basename = os.path.basename(filter_file)
filter_file_path = os.path.join(data_location, filter_file_basename)
if os.path.isfile(filter_file_path):
filter_file = filter_file_path
if filter_file and not os.path.isfile(filter_file):
raise errors.BadConfigOption(
'No such collection filter file: {0:s}.'.format(filter_file))
setattr(configuration_object, '_filter_file', filter_file)
super(PregTool, self).ParseOptions(options)
source_path = image
self._front_end.SetSingleFile(False)
else:
self._ParseInformationalOptions(options)
source_path = registry_file
self._front_end.SetSingleFile(True)
if source_path is None:
raise errors.BadConfigOption(u'No source path set.')
self._front_end.SetSourcePath(source_path)
self._source_path = os.path.abspath(source_path)
if not image and not registry_file:
raise errors.BadConfigOption(u'Not enough parameters to proceed.')
if registry_file:
if not image and not os.path.isfile(registry_file):
raise errors.BadConfigOption(
u'Registry file: {0:s} does not exist.'.format(registry_file))
self._key_path = self.ParseStringOption(options, u'key')
self._parse_restore_points = getattr(options, u'restore_points', False)
self._quiet = getattr(options, u'quiet', False)
self._verbose_output = getattr(options, u'verbose', False)
if image:
file_to_check = image
else:
Raises:
BadConfigOption: if the options are invalid.
"""
self._buffer_size = getattr(options, 'buffer_size', 0)
if self._buffer_size:
# TODO: turn this into a generic function that supports more size
# suffixes both MB and MiB and also that does not allow m as a valid
# indicator for MiB since m represents milli not Mega.
try:
if self._buffer_size[-1].lower() == 'm':
self._buffer_size = int(self._buffer_size[:-1], 10)
self._buffer_size *= self._BYTES_IN_A_MIB
else:
self._buffer_size = int(self._buffer_size, 10)
except ValueError:
raise errors.BadConfigOption(
'Invalid buffer size: {0!s}.'.format(self._buffer_size))
self._queue_size = self.ParseNumericOption(options, 'queue_size')
def AnalyzeEvents(self):
"""Analyzes events from a plaso storage file and generate a report.
Raises:
BadConfigOption: when a configuration parameter fails validation or the
storage file cannot be opened with read access.
RuntimeError: if a non-recoverable situation is encountered.
"""
session = engine.BaseEngine.CreateSession(
command_line_arguments=self._command_line_arguments,
preferred_encoding=self.preferred_encoding)
storage_reader = storage_factory.StorageFactory.CreateStorageReaderForFile(
self._storage_file_path)
if not storage_reader:
raise errors.BadConfigOption(
'Format of storage file: {0:s} not supported'.format(
self._storage_file_path))
self._number_of_analysis_reports = (
storage_reader.GetNumberOfAnalysisReports())
storage_reader.Close()
configuration = self._CreateProcessingConfiguration(
self._knowledge_base)
counter = collections.Counter()
if self._output_format != 'null':
self._status_view.SetMode(self._status_view_mode)
self._status_view.SetStorageFileInformation(self._storage_file_path)
status_update_callback = (
def _GenerateStorageFileName(self):
"""Generates a name for the storage file.
The result use a timestamp and the basename of the source path.
Returns:
str: a filename for the storage file in the form <time>-<source>.plaso
Raises:
BadConfigOption: raised if the source path is not set.
"""
if not self._source_path:
raise errors.BadConfigOption('Please define a source (--source).')
timestamp = datetime.datetime.now()
datetime_string = timestamp.strftime('%Y%m%dT%H%M%S')
source_path = os.path.abspath(self._source_path)
if source_path.endswith(os.path.sep):
source_path = os.path.dirname(source_path)
source_name = os.path.basename(source_path)
if not source_name or source_name in ('/', '\\'):
# The user passed the filesystem's root as source
source_name = 'ROOT'
return '{0:s}-{1:s}.plaso'.format(datetime_string, source_name)</time>
Args:
options (argparse.Namespace): parser options.
configuration_object (CLITool): object to be configured by the argument
helper.
Raises:
BadConfigObject: when the configuration object is of the wrong type.
"""
if not isinstance(configuration_object, tools.CLITool):
raise errors.BadConfigObject(
'Configuration object is not an instance of CLITool')
temporary_directory = getattr(options, 'temporary_directory', None)
if temporary_directory and not os.path.isdir(temporary_directory):
raise errors.BadConfigOption(
'No such temporary directory: {0:s}'.format(temporary_directory))
setattr(configuration_object, '_temporary_directory', temporary_directory)
return True
if not tool.has_filters:
logging.warning('No filter defined exporting all files.')
# TODO: print more status information like PrintOptions.
tool.PrintFilterCollection()
try:
tool.ProcessSources()
except (KeyboardInterrupt, errors.UserAbort):
logging.warning('Aborted by user.')
return False
except errors.BadConfigOption as exception:
logging.warning(exception)
return False
except errors.SourceScannerError as exception:
logging.warning((
'Unable to scan for a supported filesystem with error: {0!s}\n'
'Most likely the image format is not supported by the '
'tool.').format(exception))
return False
return True