diff options
author | Jelmer Vernooij <jelmer@samba.org> | 2007-12-26 20:55:05 -0600 |
---|---|---|
committer | Stefan Metzmacher <metze@samba.org> | 2007-12-26 15:03:02 -0600 |
commit | c4d3666ac2821518be57ca89d963f77bbddaedf4 (patch) | |
tree | dc7cdeb6ff096808c98688541abdbaa33c344abf /source4/scripting/python/samba/samba3.py | |
parent | e0132b560257fd9b8562fbe378604e446d3153f3 (diff) | |
download | samba-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.py | 28 |
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: |