This file is indexed.

/usr/sbin/smbios-sys-info is in smbios-utils 2.3.0-0ubuntu1.

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
#! /usr/bin/python
# vim:expandtab:autoindent:tabstop=4:shiftwidth=4:filetype=python:tw=0

  #############################################################################
  #
  # Copyright (c) 2005 Dell Computer Corporation
  # Dual Licenced under GNU GPL and OSL
  #
  #############################################################################
"""smbios-sys-info"""

from __future__ import generators

# import arranged alphabetically
import gettext
import locale
import os
import sys
import exceptions

# the following vars are all substituted on install
# this bin isnt byte-compiled, so this is ok
__VERSION__="2.3.0"
pythondir="/usr/lib/python2.7/dist-packages"
clidir="/usr/share/smbios-utils"
# end vars

# import all local modules after this.
sys.path.insert(0,pythondir)
sys.path.insert(0,clidir)

import cli
from  libsmbios_c import system_info as sysinfo, smbios, localedir, GETTEXT_PACKAGE
from libsmbios_c.trace_decorator import decorate, traceLog, getLog

locale.setlocale(locale.LC_ALL, '')
gettext.install(GETTEXT_PACKAGE, localedir, unicode=1)

moduleLog = getLog()
verboseLog = getLog(prefix="verbose.")

def notSettable(*args):
    raise exceptions.Exception("this property is read-only")

def getEsc():
    try:
        return int(sysinfo.get_service_tag(), 36)
    except (ValueError,), e:
        return 0

def get_system_id():
    return "0x%04X" % sysinfo.get_dell_system_id()

info_list = {
        "library-version": ( _("Libsmbios version"), sysinfo.get_library_version_string, notSettable),
        "product-name": ( _("Product Name"), sysinfo.get_system_name, notSettable ),
        "product-vendor": ( _("Vendor"), sysinfo.get_vendor_name, notSettable),
        "bios-version": ( _("BIOS Version"), sysinfo.get_bios_version, notSettable),
        "product-id": ( _("System ID"), get_system_id, notSettable),
        "service-tag": ( _("Service Tag"), sysinfo.get_service_tag, sysinfo.set_service_tag),
        "express-service-code": ( _("Express Service Code"), getEsc, notSettable),
        "asset-tag": ( _("Asset Tag"), sysinfo.get_asset_tag, sysinfo.set_asset_tag ),
        "property-tag": ( _("Property Ownership Tag"), sysinfo.get_property_ownership_tag, sysinfo.set_property_ownership_tag),
    }

output_order = [ "library-version", "product-name", "product-vendor", "bios-version", "product-id", "service-tag", "express-service-code", "asset-tag", "property-tag"]

for tag in info_list.keys():
    if tag not in output_order:
        raise Exception("programming error: %s tag in info_list not in output_order" % tag)

def command_parse():
    parser = cli.OptionParser(usage=__doc__, version=__VERSION__)

    parser.add_option('--service-tag', action="store_const", dest="taglist", const=["service-tag"], default=info_list.keys(), help= _("Show or set service tag"), )
    parser.add_option('--asset-tag', action="store_const", dest="taglist", const=["asset-tag"], help= _("Show or set asset tag"), )
    parser.add_option('--property-tag', action="store_const", dest="taglist", const=["property-tag"], help= _("Show or set property tag"), )
    parser.add_option('--set', action="store", dest="set", default=None, help= _("Set specified tag to new value"), )

    cli.addStdOptions(parser)
    return parser.parse_args()

def main():
    exit_code = 0
    (options, args) = command_parse()
    cli.setup_std_options(options)

    try:
        #instantiate smbios table to ensure we have good perms, etc
        s = smbios.SmbiosTable()

        if options.set and len(options.taglist) > 1:
            raise exceptions.Exception( _("Specify which tag to set.") )
        elif options.set:
            print _("Current tag value:")

        maxlen=0
        for t in options.taglist:
            slen = len(info_list[t][0]) + 1
            if slen>maxlen: maxlen=slen

        for info in [ info_list[t] for t in output_order if t in options.taglist ]:
            label = info[0]
            sys.stdout.write( "%s:" % label)
            sys.stdout.write( " " * (maxlen-len(label)))
            try:
                sys.stdout.write( "%s\n" % info[1]() )
            except Exception, e:
                sys.stdout.write( "%s\n" % e )


        if options.set:
            print
            print _("Setting new tag value: %s") % options.set
            fn = info_list[ options.taglist[0] ][2]
            fn(options.set, options.password_ascii, options.password_scancode)

    except (smbios.TableParseError,), e:
        exit_code=3
        moduleLog.info( _("ERROR: Could not parse system SMBIOS table.") )
        verboseLog.info( _("The smbios library returned this error:") )
        verboseLog.info( str(e) )
        moduleLog.info( cli.standardFailMessage )

    return exit_code

if __name__ == "__main__":
    sys.exit( main() )