This file is indexed.

/usr/share/cain/fio/TriggerEventTextParser.py is in cain 1.10+dfsg-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
"""Parses a text representation of a trigger event."""

if __name__ == '__main__':
    import sys
    sys.path.insert(1, '..')

from state.TriggerEvent import TriggerEvent

import string
import re

class TriggerEventTextParser:
    """Parses a text representation of a trigger event."""
    
    def __init__(self):
        self.errorMessage = ''

    def parse(self, identifier, trigger, assignments, delay,
              useValuesFromTriggerTime, name, identifiers, label=''):
        """If the trigger event can be parsed, define self.event and return
        True."""
        self.errorMessage = ''

        # No need to check the name. It can be anything.
        # Check that the ID string is valid.
        matchObject = re.match('([a-zA-z]|_)[a-zA-Z0-9_]*', identifier)
        if not (matchObject and matchObject.group(0) == identifier):
            self.errorMessage = 'Trigger event ' + label +\
                ' has a bad identifier: ' + identifier + '\n' +\
                'Identifiers must begin with a letter or underscore and\n'+\
                'be composed only of letters, digits, and underscores.'
            return False
        # Check that the ID is distinct.
        if identifier in identifiers:
            self.errorMessage = 'Trigger event ' + label +\
                ' has a duplicate identifier: ' + identifier + '\n' +\
                'The identifiers must be distinct.'
            return False
        # If the trigger string is empty.
        if not trigger:
            self.errorMessage = 'Trigger event ' + label +\
                ' has an empty trigger.'
            return False
        # If the assignments string is empty.
        if not assignments:
            self.errorMessage = 'Trigger event ' + label +\
                ' has an empty assignment.'
            return False
        # Check that the delay is numeric.
        if not delay.strip():
            delay = 0.
        else:
            try:
                delay = float(delay)
            except:
                self.errorMessage = 'In trigger event ' + label +\
                    ': The delay is not a floating-point value.'
                return False
        # Build the event.
        self.event = TriggerEvent(identifier, name, trigger, assignments,
                                  delay, useValuesFromTriggerTime=='1')
        error = self.event.hasErrors()
        if error:
            self.errorMessage = 'In trigger event ' + label + ': ' + error
            return False
        return True

    def parseTable(self, table, identifiers):
        """Return a list of the trigger events."""
        self.errorMessage = ''

        events = []
        count = 1
        for row in table:
            assert len(row) == 6
            if not self.parse(row[0], row[1], row[2], row[3], row[4], row[5],
                              identifiers, str(count)):
                return []
            # Record the reaction.
            events.append(self.event)
            count = count + 1
            identifiers.append(row[0])

        return events

def main():
    parser = TriggerEventTextParser()
    assert parser.parse('e1', 't>1', 's1=2', '0', '', 'name', [])

    assert not parser.parse('1', 't>1', 's1=2', '0', '', 'name', [])
    assert parser.errorMessage
    print parser.errorMessage
    print ''

    assert not parser.parse('e1', '', 's1=2', '0', '', 'name', [])
    assert parser.errorMessage
    print parser.errorMessage
    print ''

    assert not parser.parse('e1', 't>1', '', '0', '', 'name', [])
    assert parser.errorMessage
    print parser.errorMessage
    print ''

    assert not parser.parse('e1', 't>1', 's1=2', 'a', '', 'name', [])
    assert parser.errorMessage
    print parser.errorMessage
    print ''

    assert not parser.parse('e1', 't>1', 's1=2', '-1', '', 'name', [])
    assert parser.errorMessage
    print parser.errorMessage
    print ''

    identifiers = []
    assert parser.parseTable([['e1', 't>1', 's1=2', '0', '', 'name']],
                             identifiers)
    assert not parser.parseTable([['e1', 't>1', 's1=2', '0', '', 'name']],
                                 identifiers)
    assert parser.errorMessage
    print parser.errorMessage
    print ''

if __name__ == '__main__':
    main()