/usr/lib/cups/driver/foo2zjs is in printer-driver-foo2zjs-common 20140209dfsg0-1ubuntu1.
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
|