This file is indexed.

/usr/share/pyshared/checkbox/parsers/dmidecode.py is in checkbox 0.13.7.

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
#
# This file is part of Checkbox.
#
# Copyright 2011 Canonical Ltd.
#
# Checkbox is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Checkbox is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Checkbox.  If not, see <http://www.gnu.org/licenses/>.
#
import re

from string import (
    hexdigits,
    uppercase,
    )

from checkbox.lib.dmi import (
    Dmi,
    DmiDevice,
    )


HANDLE_RE = re.compile(
    r"^Handle (?P<handle>0x[%s]{4}), "
    r"DMI type (?P<type>\d+), "
    r"(?P<size>\d+) bytes$"
    % hexdigits)
KEY_VALUE_RE = re.compile(
    r"^\t(?P<key>[%s].+):( (?P<value>.+))?$"
    % uppercase)


class DmidecodeParser:
    """Parser for the dmidecode command."""

    _key_map = {
        "ID": "serial",
        "Manufacturer": "vendor",
        "Product Name": "name",
        "Serial Number": "serial",
        "Type": "type",
        "Vendor": "vendor",
        "Version": "version",
        }

    def __init__(self, stream):
        self.stream = stream

    def _parseKey(self, key):
        return self._key_map.get(key)

    def _parseValue(self, value):
        if value is not None:
            value = value.strip()
            if not value:
                value = None

        return value

    def run(self, result):
        output = self.stream.read()
        for record in re.split(r"\n{2,}", output):
            record = record.strip()
            # Skip empty records
            if not record:
                continue

            # Skip header record
            lines = record.split("\n")
            line = lines.pop(0)
            if line.startswith("#"):
                continue

            # Skip records with an unsupported handle
            match = HANDLE_RE.match(line)
            if not match:
                continue

            # Skip records that are empty or inactive
            if not lines or lines.pop(0) == "Inactive":
                continue

            # Skip disabled entries and end-of-table marker
            type_index = int(match.group("type"))
            if type_index >= len(Dmi.type_names):
                continue

            category = Dmi.type_names[type_index]
            category = category.upper().split(" ")[-1]
            if category not in (
                "BOARD", "BIOS", "CHASSIS", "PROCESSOR", "SYSTEM"):
                continue

            # Parse attributes
            attributes = {}
            for line in lines:
                # Skip lines with an unsupported key/value pair
                match = KEY_VALUE_RE.match(line)
                if not match:
                    continue

                # Skip lines with an unsupported key
                key = self._parseKey(match.group("key"))
                if not key:
                    continue

                key = "%s_%s" % (category.lower(), key)
                value = self._parseValue(match.group("value"))
                attributes[key] = value

            device = DmiDevice(attributes, category)
            result.addDmiDevice(device)

        return result