1#!/usr/bin/env python 2 3# 4# A python module that maps printerdata to a dictionary. We define 5# two classes. The printerdata class maps to Get/Set/Enum/DeletePrinterData 6# and the printerdata_ex class maps to Get/Set/Enum/DeletePrinterDataEx 7# 8 9# 10# TODO: 11# 12# - Implement __delitem__ 13# 14 15from samba import spoolss 16 17class printerdata: 18 def __init__(self, host, creds = {}): 19 self.hnd = spoolss.openprinter(host, creds = creds) 20 21 def keys(self): 22 return self.hnd.enumprinterdata().keys() 23 24 def __getitem__(self, key): 25 return self.hnd.getprinterdata(key)['data'] 26 27 def __setitem__(self, key, value): 28 # Store as REG_BINARY for now 29 self.hnd.setprinterdata({"key": "", "value": key, "type": 3, 30 "data": value}) 31 32class printerdata_ex: 33 def __init__(self, host): 34 self.host = host 35 self.top_level_keys = ["PrinterDriverData", "DsSpooler", "DsDriver", 36 "DsUser"] 37 38 def keys(self): 39 return self.top_level_keys 40 41 def has_key(self, key): 42 for k in self.top_level_keys: 43 if k == key: 44 return 1 45 return 0 46 47 class printerdata_ex_subkey: 48 def __init__(self, host, key): 49 self.hnd = spoolss.openprinter(host) 50 self.key = key 51 52 def keys(self): 53 return self.hnd.enumprinterdataex(self.key).keys() 54 55 def __getitem__(self, key): 56 return self.hnd.getprinterdataex(self.key, key)['data'] 57 58 def __getitem__(self, key): 59 return self.printerdata_ex_subkey(self.host, key) 60