This file is indexed.

/usr/share/system-config-printer/install-printerdriver.py is in system-config-printer-gnome 1.5.7+20160212-0ubuntu2.

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
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
#!/usr/bin/python3

from gi.repository import GLib, PackageKitGlib
import sys
from debug import *

# progress callback
# http://www.packagekit.org/gtk-doc/PkProgress.html
def progress(progress, type, user_data):
    if (type.value_name == "PK_PROGRESS_TYPE_PERCENTAGE" and
        progress.props.package is not None):
        sys.stdout.write ("P%d\n" % progress.props.percentage)
        sys.stdout.flush ()
    else:
        sys.stdout.write ("P%d\n" % -10)
        sys.stdout.flush ()

set_debugging (True)

package = sys.argv[1]
repo = sys.argv[2]
try:
    repo_gpg_id = sys.argv[3]
except:
    repo_gpg_id = None

# get PackageKit client
pk = PackageKitGlib.Client()

refresh_cache_needed = False

# install repository key
if repo_gpg_id:
    debugprint("Signature key supplied")
    debugprint("pk.install_signature")
    try:
        res = pk.install_signature(PackageKitGlib.SigTypeEnum.GPG, repo_gpg_id,
                                       '', None, progress, None)
        refresh_cache_needed = True
        debugprint("pk.install_signature succeeded")
    except GLib.GError:
        debugprint("pk.install_signature failed")
        sys.exit(1)
    if res.get_exit_code() != PackageKitGlib.ExitEnum.SUCCESS:
        debugprint("pk.install_signature errored")
        sys.exit(1)

# check if we already have the package installed or available
debugprint("pk.resolve")
try:
    res = pk.resolve(PackageKitGlib.FilterEnum.NONE, [package],
                     None, progress, None)
    repo_enable_needed = False
    debugprint("pk.resolve succeeded")
except GLib.GError:
    repo_enable_needed = True
    debugprint("pk.resolve failed")
package_ids = res.get_package_array()
if len(package_ids) <= 0:
    debugprint("res.get_package_array() failed")
    repo_enable_needed = True

if repo_enable_needed:
    # Cannot resolve, so we need to install the repo
    # add repository; see
    # http://www.packagekit.org/gtk-doc/PackageKit-pk-client-sync.html#pk-client-repo-enable
    debugprint("pk.repo_enable")
    try:
        res = pk.repo_enable(repo, True, None, progress, None)
        refresh_cache_needed = True
        debugprint("pk.repo_enable succeeded")
    except GLib.GError:
        debugprint("pk.repo_enable failed")
        sys.exit(1)
    if res.get_exit_code() != PackageKitGlib.ExitEnum.SUCCESS:
        debugprint("pk.repo_enable errored")
        sys.exit(1)

if refresh_cache_needed:
    # download/update the indexes
    debugprint("pk.refresh_cache")
    try:
        res = pk.refresh_cache(False, None, progress, None)
        debugprint("pk.refresh_cache succeeded")
    except GLib.GError:
        debugprint("pk.refresh_cache failed")
    if res.get_exit_code() != PackageKitGlib.ExitEnum.SUCCESS:
        debugprint("pk.refresh_cache errored")

# map package name to PackageKit ID; do not print progress here, it's fast
debugprint("pk.resolve")
try:
    res = pk.resolve(PackageKitGlib.FilterEnum.NONE, [package],
                     None, progress, None)
    debugprint("pk.resolve succeeded")
except GLib.GError:
    debugprint("pk.resolve failed")
    sys.exit(1)
if res.get_exit_code() != PackageKitGlib.ExitEnum.SUCCESS:
    debugprint("pk.resolve errored")
    sys.exit(1)
package_ids = res.get_package_array()
if len(package_ids) <= 0:
    debugprint("res.get_package_array() failed")
    sys.exit(1)
package_id = package_ids[0].get_id()
debugprint("package_id: %s" % package_id)

# install the first match, unless already installed
if package_ids[0].get_info() & PackageKitGlib.InfoEnum.INSTALLED == 0:
    debugprint("package not installed")
    debugprint("pk.install_packages")
    # install package
    if repo_gpg_id:
        debugprint("Signature key supplied")
        repo_gpg_id_supplied = True
    else:
        debugprint("Signature key not supplied")
        repo_gpg_id_supplied = False
    try:
        res = pk.install_packages(repo_gpg_id_supplied, [package_id], None,
                                  progress, None)
        debugprint("pk.install_packages succeeded")
    except GLib.GError:
        debugprint("pk.install_packages failed, retrying with modified package ID")
        # See aptdaemon Ubuntu bug #1397750.
        try:
            # Remove last element of the package ID, after the last ";"
            package_id_mod = package_id[:package_id.rfind(";")+1]
            res = pk.install_packages(repo_gpg_id_supplied, [package_id_mod],
                                      None, progress, None)
            debugprint("pk.install_packages succeeded")
        except GLib.GError:
            debugprint("pk.install_packages failed")
            sys.exit(1)
    if res.get_exit_code() != PackageKitGlib.ExitEnum.SUCCESS:
        debugprint("pk.install_packages errored")
        sys.exit(1)

debugprint("Package successfully installed")
# If we reach this point, the requested package is on the system, either
# because we have installed it now or because it was already there

# Return the list of files contained in the package
try:
    res = pk.get_files([package_id], None, progress, None)
except GLib.GError:
    pass

files = res.get_files_array()
if files:
    for f in files[0].get_property('files'):
        print(f)

# Tell the caller that we are done
print("done")