%PDF- %PDF-
Direktori : /usr/lib/cups/driver/ |
Current File : //usr/lib/cups/driver/foo2zjs |
#!/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 import json from io import BytesIO from os.path import basename from errno import EPIPE import lzma def load(): ppds_compressed = base64.b64decode(ppds_compressed_b64) ppds_decompressed = decompress(ppds_compressed) ppds = json.loads(ppds_decompressed.decode(encoding='ASCII')) 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:] # Object for streaming decompression decompressor = lzma.LZMADecompressor() # size for one decompression i.e. ~20MB size = 20000000 ppds = load() ppds['ARCHIVE'] = base64.b64decode(ppds['ARCHIVE'].encode('ASCII')) ppdtext=bytearray() if ppd in ppds: start = ppds[ppd][0] length = ppds[ppd][1] text = BytesIO(decompressor.decompress(ppds['ARCHIVE'],size)) for i in range(int(start/size)): text = BytesIO(decompressor.decompress(ppds['ARCHIVE'],size)) text.seek(start%size) if((size-(start%size)) < length): ppdtext.extend(text.read()) length = length - (size-(start%size)) text = BytesIO(decompressor.decompress(ppds['ARCHIVE'],size)) while(size < length): ppdtext.extend(text.read()) length = length - size text = BytesIO(decompressor.decompress(ppds['ARCHIVE'],size)) ppdtext.extend(text.read(length)) else: ppdtext.extend(text.read(length)) return ppdtext def main(): usage = "usage: %prog list\n" \ " %prog cat URI" version = "%prog 1.1.0\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