This file is indexed.

/usr/sbin/smbios-wakeup-ctl is in smbios-utils 2.2.28-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
135
#! /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-wakeup-ctl"""

from __future__ import generators
from __future__ import division

# import arranged alphabetically
import gettext
import locale
import os
import struct
import sys
import traceback

# the following vars are all substituted on install
# this bin isnt byte-compiled, so this is ok
__VERSION__="2.2.28"
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 token, 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.")

token_wake_hour = 0x2b
token_wake_min = 0x2c
token_wake_disable = 0x28
token_wake_everyday = 0x29
token_wake_weekday = 0x2a

class CmdlineError(Exception): pass

def command_parse():
    parser = cli.OptionParser(usage=__doc__, version=__VERSION__)
    parser.add_option('--hour', action="store", dest="hour", default=0, help= _("Set wakeup hour. Must be 0-23"), )
    parser.add_option('--minute', action="store", dest="minute", default=0, help= _("Set wakeup minute. Must be 0-59"), )
    parser.add_option('--everyday', action="store_const", const=token_wake_everyday, dest="action", default=None, help= _("Set wakeup for every day"), )
    parser.add_option('--weekday', action="store_const", const=token_wake_weekday, dest="action",  help= _("Set wakeup for weekdays only"), )
    parser.add_option('--disable', action="store_const", const=token_wake_disable, dest="action", help= _("Disable wakeups"), )
    cli.addStdOptions(parser)
    return parser.parse_args()

def xform_options(options):
    options.hour = int(options.hour)
    if options.hour < 0 or options.hour > 23:
        raise Exception( _("Wakeup hour must be between 0 and 23. You passed: '%s'") % options.hour)

    options.minute = int(options.minute)
    if options.minute < 0 or options.minute > 59:
        raise Exception( _("Wakeup min must be between 0 and 59. You passed: '%s'") % options.minute)

    options.hour_bcd = ((options.hour // 10) <<4) + (options.hour % 10)
    options.min_bcd = ((options.minute // 10) <<4) + (options.minute % 10)

def getWakeupTime(table):
    hour = struct.unpack("b", table[token_wake_hour].getString()[0])
    minute = struct.unpack("b", table[token_wake_min].getString()[0])
    # time is BCD coded
    return ( int("%x" % hour), int("%x"%minute) )

def showCurrentWakeup(table):
    if table[token_wake_disable].isActive():
        print _("\tWakeup disabled")
    if table[token_wake_everyday].isActive():
        print _("\tWakeup every day")
        print _("\tWakeup time:  %02d:%02d") % getWakeupTime(table)
    if table[token_wake_weekday].isActive():
        print _("\tWakeup weekdays")
        print _("\tWakeup time:  %02d:%02d") % getWakeupTime(table)


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

    try:
        table = token.TokenTable()

        print _("Current wakeup settings:")
        showCurrentWakeup(table)

        if options.action:
            print
            print _("Setting new wakeup time:")
            table[options.action].tryPassword(options.password_ascii, options.password_scancode)
            table[options.action].activate()
            table[token_wake_hour].tryPassword(options.password_ascii, options.password_scancode)
            table[token_wake_hour].setString(struct.pack("b", options.hour_bcd))
            table[token_wake_min].tryPassword(options.password_ascii, options.password_scancode)
            table[token_wake_min].setString(struct.pack("b", options.min_bcd))
            showCurrentWakeup(table)

    except (IndexError, ), e:
        exit_code=10
        moduleLog.info( _("ERROR: This system does not support programmed wakeups.") )

    except (token.TokenTableParseError, ), 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 )

    except (token.TokenManipulationFailure,), e:
        exit_code=4
        moduleLog.info( _("ERROR: Could not manipulate system token.") )
        verboseLog.info( _("The token library returned this error:") )
        verboseLog.info( str(e) )
        moduleLog.info( cli.standardFailMessage )

    return exit_code

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