summaryrefslogtreecommitdiffstats
path: root/source4/scripting/python/samba/samba3.py
diff options
context:
space:
mode:
authorJelmer Vernooij <jelmer@samba.org>2007-12-26 20:55:05 -0600
committerStefan Metzmacher <metze@samba.org>2007-12-26 15:03:02 -0600
commitc4d3666ac2821518be57ca89d963f77bbddaedf4 (patch)
treedc7cdeb6ff096808c98688541abdbaa33c344abf /source4/scripting/python/samba/samba3.py
parente0132b560257fd9b8562fbe378604e446d3153f3 (diff)
downloadsamba-c4d3666ac2821518be57ca89d963f77bbddaedf4.tar.gz
samba-c4d3666ac2821518be57ca89d963f77bbddaedf4.tar.xz
samba-c4d3666ac2821518be57ca89d963f77bbddaedf4.zip
r26607: Fix reading of values and subkeys in Samba 3 registry files.
(This used to be commit e3d7454ef70d6fe9a1ce34eaf57268bd5b713ccf)
Diffstat (limited to 'source4/scripting/python/samba/samba3.py')
-rw-r--r--source4/scripting/python/samba/samba3.py28
1 files changed, 24 insertions, 4 deletions
diff --git a/source4/scripting/python/samba/samba3.py b/source4/scripting/python/samba/samba3.py
index b4261f7c74f..df94f3503c1 100644
--- a/source4/scripting/python/samba/samba3.py
+++ b/source4/scripting/python/samba/samba3.py
@@ -45,16 +45,36 @@ class Registry:
data = self.tdb.get("%s\x00" % key)
if data is None:
return []
- # FIXME: Parse data
- return []
+ import struct
+ (num, ) = struct.unpack("<L", data[0:4])
+ keys = data[4:].split("\0")
+ assert keys[-1] == ""
+ keys.pop()
+ assert len(keys) == num
+ return keys
def values(self, key):
"""Return a dictionary with the values set for a specific key."""
data = self.tdb.get("%s/%s\x00" % (REGISTRY_VALUE_PREFIX, key))
if data is None:
return {}
- # FIXME: Parse data
- return {}
+ ret = {}
+ import struct
+ (num, ) = struct.unpack("<L", data[0:4])
+ data = data[4:]
+ for i in range(num):
+ # Value name
+ (name, data) = data.split("\0", 1)
+
+ (type, ) = struct.unpack("<L", data[0:4])
+ data = data[4:]
+ (value_len, ) = struct.unpack("<L", data[0:4])
+ data = data[4:]
+
+ ret[name] = (type, data[:value_len])
+ data = data[value_len:]
+
+ return ret
class PolicyDatabase: