/usr/lib/cups/driver/pxljr is in printer-driver-pxljr 1.4+repack0-3.
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 | #!/usr/bin/env python3
# compressor.py
from subprocess import Popen, PIPE
def compress(value):
"""Compresses a byte array with the xz binary"""
process = Popen(["xz", "--compress", "--force"], stdin=PIPE, stdout=PIPE)
return process.communicate(value)[0]
def decompress(value):
"""Decompresses a byte array with the xz binary"""
process = Popen(["xz", "--decompress", "--stdout", "--force"],
stdin=PIPE, stdout=PIPE)
return process.communicate(value)[0]
def compress_file(path):
"""Compress the file at 'path' with the xz binary"""
process = Popen(["xz", "--compress", "--force", "--stdout", path], stdout=PIPE)
return process.communicate()[0]
# compressor.py
import os
import sys
from optparse import OptionParser
from sys import argv
import base64
try:
import cPickle as pickle
except ImportError:
import pickle
from io import BytesIO
from os.path import basename
from errno import EPIPE
def load():
ppds_compressed = base64.b64decode(ppds_compressed_b64)
ppds_decompressed = decompress(ppds_compressed)
ppds = pickle.loads(ppds_decompressed)
return ppds
def ls():
binary_name = basename(argv[0])
ppds = load()
for key, value in ppds.items():
if key == 'ARCHIVE': continue
for ppd in value[2]:
try:
print(ppd.replace('"', '"' + binary_name + ':', 1))
except IOError as e:
# Errors like broken pipes (program which takes the standard
# output terminates before this program terminates) should not
# generate a traceback.
if e.errno == EPIPE: exit(0)
raise
def cat(ppd):
# Ignore driver's name, take only PPD's
ppd = ppd.split(":")[-1]
# Remove also the index
ppd = "0/" + ppd[ppd.find("/")+1:]
ppds = load()
ppds['ARCHIVE'] = BytesIO(decompress(ppds['ARCHIVE']))
if ppd in ppds:
start = ppds[ppd][0]
length = ppds[ppd][1]
ppds['ARCHIVE'].seek(start)
return ppds['ARCHIVE'].read(length)
def main():
usage = "usage: %prog list\n" \
" %prog cat URI"
version = "%prog 1.0.1\n" \
"Copyright (c) 2013 Vitor Baptista.\n" \
"This is free software; see the source for copying conditions.\n" \
"There is NO warranty; not even for MERCHANTABILITY or\n" \
"FITNESS FOR A PARTICULAR PURPOSE."
parser = OptionParser(usage=usage,
version=version)
(options, args) = parser.parse_args()
if len(args) == 0 or len(args) > 2:
parser.error("incorrect number of arguments")
if args[0].lower() == 'list':
ls()
elif args[0].lower() == 'cat':
if not len(args) == 2:
parser.error("incorrect number of arguments")
ppd = cat(args[1])
if not ppd:
parser.error("Printer '%s' does not have default driver!" % args[1])
try:
# avoid any assumption of encoding or system locale; just print the
# bytes of the PPD as they are
if sys.version_info.major < 3:
sys.stdout.write(ppd)
else:
sys.stdout.buffer.write(ppd)
except IOError as e:
# Errors like broken pipes (program which takes the standard output
# terminates before this program terminates) should not generate a
# traceback.
if e.errno == EPIPE: exit(0)
raise
else:
parser.error("argument " + args[0] + " invalid")
# PPDs Archive
ppds_compressed_b64 = b"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"
if __name__ == "__main__":
try:
main()
except KeyboardInterrupt:
# We don't want a KeyboardInterrupt throwing a
# traceback into stdout.
pass
|