/usr/lib/cups/driver/foo2zjs is in printer-driver-foo2zjs-common 20140925dfsg0-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.2\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
|