1
0
mirror of https://github.com/samba-team/samba.git synced 2025-01-19 10:03:58 +03:00
Andrew Tridgell 4cb423f527 s4-python: python is not always in /usr/bin
Using "#!/usr/bin/env python" is more portable. It still isn't ideal
though, as we should really use the python path found at configure
time. We do that in many places already, but some don't.

Signed-off-by: Andrew Bartlett <abartlet@samba.org>
2010-06-24 18:46:57 +10:00

88 lines
2.8 KiB
Python
Executable File

#!/usr/bin/env python
#
# tool to manipulate a remote registry
# Copyright Andrew Tridgell 2005
# Copyright Jelmer Vernooij 2007
# Released under the GNU GPL v3 or later
#
import sys
# Find right directory when running from source tree
sys.path.insert(0, "bin/python")
from samba.dcerpc import winreg
import optparse
import samba.getopt as options
parser = optparse.OptionParser("%s <BINDING> [path]" % sys.argv[0])
sambaopts = options.SambaOptions(parser)
parser.add_option_group(sambaopts)
parser.add_option("--createkey", type="string", metavar="KEYNAME",
help="create a key")
opts, args = parser.parse_args()
if len(args) < 1:
parser.print_usage()
sys.exit(-1)
binding = args[0]
print "Connecting to " + binding
conn = winreg.winreg(binding, sambaopts.get_loadparm())
def list_values(key):
(num_values, max_valnamelen, max_valbufsize) = conn.QueryInfoKey(key, winreg.String())[4:8]
for i in range(num_values):
name = winreg.StringBuf()
name.size = max_valnamelen
(name, type, data, _, data_len) = conn.EnumValue(key, i, name, 0, "", max_valbufsize, 0)
print "\ttype=%-30s size=%4d '%s'" % type, len, name
if type in (winreg.REG_SZ, winreg.REG_EXPAND_SZ):
print "\t\t'%s'" % data
# if (v.type == reg.REG_MULTI_SZ) {
# for (j in v.value) {
# printf("\t\t'%s'\n", v.value[j])
# }
# }
# if (v.type == reg.REG_DWORD || v.type == reg.REG_DWORD_BIG_ENDIAN) {
# printf("\t\t0x%08x (%d)\n", v.value, v.value)
# }
# if (v.type == reg.REG_QWORD) {
# printf("\t\t0x%llx (%lld)\n", v.value, v.value)
# }
def list_path(key, path):
count = 0
(num_subkeys, max_subkeylen, max_subkeysize) = conn.QueryInfoKey(key, winreg.String())[1:4]
for i in range(num_subkeys):
name = winreg.StringBuf()
name.size = max_subkeysize
keyclass = winreg.StringBuf()
keyclass.size = max_subkeysize
(name, _, _) = conn.EnumKey(key, i, name, keyclass=keyclass, last_changed_time=None)[0]
subkey = conn.OpenKey(key, name, 0, winreg.KEY_QUERY_VALUE | winreg.KEY_ENUMERATE_SUB_KEYS)
count += list_path(subkey, "%s\\%s" % (path, name))
list_values(subkey)
return count
if len(args) > 1:
root = args[1]
else:
root = "HKLM"
if opts.createkey:
reg.create_key("HKLM\\SOFTWARE", opt.createkey)
else:
print "Listing registry tree '%s'" % root
try:
root_key = getattr(conn, "Open%s" % root)(None, winreg.KEY_QUERY_VALUE | winreg.KEY_ENUMERATE_SUB_KEYS)
except AttributeError:
print "Unknown root key name %s" % root
sys.exit(1)
count = list_path(root_key, root)
if count == 0:
print "No entries found"
sys.exit(1)