This file is indexed.

/usr/lib/plainbox-providers-1/checkbox/bin/filter_templates is in plainbox-provider-checkbox 0.3-2.

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

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
126
127
128
129
130
131
132
133
134
#!/usr/bin/env python3

import re
import sys
import posixpath

from optparse import OptionParser

from checkbox_support.lib.path import path_expand_recursive
from checkbox_support.lib.template import Template


class FilterError(Exception):

    pass


def compile_filters(filters):
    patterns = {}
    for filter in filters:
        if "=" not in  filter:
            raise FilterError("Missing assignment in filter: %s"
                % filter)

        name, value = filter.split("=", 1)
        try:
            pattern = re.compile(r"^%s$" % value)
        except re.error:
            raise FilterError("Invalid regular expression in filter: %s"
                % value)
        patterns.setdefault(name, [])
        patterns[name].append(pattern)

    return patterns


def match_patterns(patterns_table, element):
    matches = []
    for key, patterns in patterns_table.items():
        if key not in element:
            matches.append(False)
        else:
            value = element[key]
            for pattern in patterns:
                matches.append(True if pattern.match(value) else False)

    return matches


def match_elements(elements, attributes=[], whitelist=[], blacklist=[]):
    whitelist_patterns = compile_filters(whitelist)
    blacklist_patterns = compile_filters(blacklist)

    # Apply attributes
    for element in elements:
        for attribute in attributes:
            name, value = attribute.split("=", 1)
            element[name] = value

    # Apply whitelist and blacklist
    matches = []
    for element in elements:
        if whitelist_patterns \
           and True not in match_patterns(whitelist_patterns, element):
            continue
        if blacklist_patterns \
           and True in match_patterns(blacklist_patterns, element):
            continue

        matches.append(element)

    return matches


def parse_file(file, *args, **kwargs):
    template = Template()
    matches = match_elements(template.load_file(file), *args, **kwargs)
    template.dump_file(matches, sys.stdout)


def parse_path(path, *args, **kwargs):
    for filename in path_expand_recursive(path):
        print("# %s" % filename)

        name = posixpath.basename(filename)
        if name.startswith(".") or name.endswith("~"):
            continue

        file = open(filename, "r")
        parse_file(file, *args, **kwargs)


def parse_paths(paths, *args, **kwargs):
    for path in paths:
        parse_path(path, *args, **kwargs)


def main(args):
    usage = "Usage: %prog [OPTIONS] [FILE...]"
    parser = OptionParser(usage=usage)
    parser.add_option("-a", "--attribute",
        action="append",
        type="string",
        default=[],
        help="Set additional attributes by name and value.")
    parser.add_option("-b", "--blacklist",
        action="append",
        type="string",
        default=[],
        help="Blacklist of elements by name and value.")
    parser.add_option("-w", "--whitelist",
        action="append",
        type="string",
        default=[],
        help="Whitelist of elements by name and value.")
    (options, args) = parser.parse_args(args)

    if args:
        parse_func = parse_paths
    else:
        parse_func = parse_file
        args = sys.stdin

    try:
        parse_func(args, options.attribute,
                   options.whitelist, options.blacklist)
    except FilterError as error:
        parser.error(error.args[0])

    return 0


if __name__ == "__main__":
    sys.exit(main(sys.argv[1:]))