Source code for plaso.formatters.asl
# -*- coding: utf-8 -*-
"""The Apple System Log (ASL) event formatter."""
from __future__ import unicode_literals
from plaso.formatters import interface
from plaso.formatters import manager
from plaso.lib import errors
from plaso.lib import py2to3
[docs]class ASLFormatter(interface.ConditionalEventFormatter):
"""Formatter for an Apple System Log (ASL) log event."""
DATA_TYPE = 'mac:asl:event'
FORMAT_STRING_PIECES = [
'MessageID: {message_id}',
'Level: {level}',
'User ID: {user_sid}',
'Group ID: {group_id}',
'Read User: {read_uid}',
'Read Group: {read_gid}',
'Host: {computer_name}',
'Sender: {sender}',
'Facility: {facility}',
'Message: {message}',
'{extra_information}']
FORMAT_STRING_SHORT_PIECES = [
'Host: {host}',
'Sender: {sender}',
'Facility: {facility}']
SOURCE_LONG = 'ASL entry'
SOURCE_SHORT = 'LOG'
# Priority levels (criticality)
_PRIORITY_LEVELS = {
0 : 'EMERGENCY',
1 : 'ALERT',
2 : 'CRITICAL',
3 : 'ERROR',
4 : 'WARNING',
5 : 'NOTICE',
6 : 'INFO',
7 : 'DEBUG'}
# pylint: disable=unused-argument
[docs] def GetMessages(self, formatter_mediator, event):
"""Determines the formatted message strings for an event object.
Args:
formatter_mediator (FormatterMediator): mediates the interactions
between formatters and other components, such as storage and Windows
EventLog resources.
event (EventObject): event.
Returns:
tuple(str, str): formatted message string and short message string.
Raises:
WrongFormatter: if the event object cannot be formatted by the formatter.
"""
if self.DATA_TYPE != event.data_type:
raise errors.WrongFormatter('Unsupported data type: {0:s}.'.format(
event.data_type))
event_values = event.CopyToDict()
priority_level = event_values.get('level', None)
if isinstance(priority_level, py2to3.INTEGER_TYPES):
event_values['level'] = '{0:s} ({1:d})'.format(
self._PRIORITY_LEVELS.get(priority_level, 'UNKNOWN'), priority_level)
# If no rights are assigned the value is 0xffffffff (-1).
read_uid = event_values.get('read_uid', None)
if read_uid == -1:
event_values['read_uid'] = 'ALL'
# If no rights are assigned the value is 0xffffffff (-1).
read_gid = event_values.get('read_gid', None)
if read_gid == -1:
event_values['read_gid'] = 'ALL'
# TODO: get the real name for the user of the group having the uid or gid.
return self._ConditionalFormatMessages(event_values)
manager.FormattersManager.RegisterFormatter(ASLFormatter)