r25598: Add missing become_root/unbecome_root around calls of add_aliases.
[samba.git] / source / python / samba / printerdata.py
index 3384de4f30b29b5aa2e671ea0f6df1a91d28403c..6c40cc4b26dd7a95315a32f26b124fe7e65f6afd 100644 (file)
@@ -1,14 +1,24 @@
+#!/usr/bin/env python
+
 #
 # A python module that maps printerdata to a dictionary.  We define
 # two classes.  The printerdata class maps to Get/Set/Enum/DeletePrinterData
 # and the printerdata_ex class maps to Get/Set/Enum/DeletePrinterDataEx
 #
 
-import spoolss
+#
+# TODO:
+#
+#   - Implement __delitem__
+#
+
+from samba import spoolss
 
 class printerdata:
-    def __init__(self, host, creds = {}):
-        self.hnd = spoolss.openprinter(host, creds = creds)
+    def __init__(self, host, creds = {}, access = 0x02000000):
+       # For read access, use MAXIMUM_ALLOWED_ACCESS = 0x02000000
+       # For write access, use PRINTER_ACCESS_ADMINISTER = 0x00000004
+        self.hnd = spoolss.openprinter(host, creds = creds, access = access)
 
     def keys(self):
         return self.hnd.enumprinterdata().keys()
@@ -22,17 +32,35 @@ class printerdata:
                                  "data": value})
         
 class printerdata_ex:
-    def __init__(self, host, creds = {}):
-        self.hnd = spoolss.openprinter(host, creds = creds)
+    def __init__(self, host, creds = {}, access = 0x02000000):
+       # For read access, use MAXIMUM_ALLOWED_ACCESS = 0x02000000
+       # For write access, use PRINTER_ACCESS_ADMINISTER = 0x00000004
+        self.host = host
+        self.top_level_keys = ["PrinterDriverData", "DsSpooler", "DsDriver",
+                               "DsUser"]
+       self.creds = creds
+       self.access = access
 
     def keys(self):
-        return self.hnd.enumprinterdataex("PrinterDriverData").keys()
+        return self.top_level_keys
 
-    def __getitem__(self, key):
-        return self.hnd.getprinterdataex("PrinterDriverData", key)['data']
+    def has_key(self, key):
+        for k in self.top_level_keys:
+            if k == key:
+                return 1
+        return 0
 
-    def __setitem__(self, key, value):
-        # Store as REG_BINARY for now
-        self.hnd.setprinterdataex({"key": "PrinterDriverData", "value": key, "type": 3,
-                                 "data": value})
-        
+    class printerdata_ex_subkey:
+        def __init__(self, host, key, creds, access):
+            self.hnd = spoolss.openprinter(host, creds, access)
+            self.key = key
+
+        def keys(self):
+            return self.hnd.enumprinterdataex(self.key).keys()
+
+        def __getitem__(self, key):
+            return self.hnd.getprinterdataex(self.key, key)['data']
+
+    def __getitem__(self, key):
+        return self.printerdata_ex_subkey(
+            self.host, key, self.creds, self.access)