diff options
author | Andrew Tridgell <tridge@samba.org> | 2005-08-06 00:36:17 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 13:31:24 -0500 |
commit | 10043db676f9db8d1933b6a5f9ae050cefc538ac (patch) | |
tree | d10df5135116052c29890809947ceb88a75c0d03 /testprogs | |
parent | d1868bd5912c5bb90509ace5c7ac8589c29e423c (diff) | |
download | samba-10043db676f9db8d1933b6a5f9ae050cefc538ac.tar.gz |
r9153: added a sample program for enumerating winreg via js
Diffstat (limited to 'testprogs')
-rwxr-xr-x | testprogs/ejs/winreg.js | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/testprogs/ejs/winreg.js b/testprogs/ejs/winreg.js new file mode 100755 index 00000000000..4d8b97d1c29 --- /dev/null +++ b/testprogs/ejs/winreg.js @@ -0,0 +1,97 @@ +#!/usr/bin/env smbscript +/* + test winreg calls from ejs +*/ + +var options = new Object(); + +ok = GetOptions(ARGV, options, + "POPT_AUTOHELP", + "POPT_COMMON_SAMBA", + "POPT_COMMON_CREDENTIALS"); +if (ok == false) { + println("Failed to parse options: " + options.ERROR); + return -1; +} + +libinclude("base.js"); + +if (options.ARGV.length != 1) { + println("Usage: winreg.js <BINDING>"); + return -1; +} +var binding = options.ARGV[0]; +reg = winreg_init(); +security_init(reg); + +print("Connecting to " + binding + "\n"); +status = reg.connect(binding); +if (status.is_ok != true) { + print("Failed to connect to " + binding + " - " + status.errstr + "\n"); + return -1; +} + + + +function list(handle, path, name) { + var io = irpcObj(); + var wtime = new Object(); + wtime.low = 2147483647; + wtime.high = 2147483647; + var keyname = new Object(); + keyname.unknown = 522; + keyname.key_name = NULL; + + var idx = 0; + for (idx=0;idx >= 0;idx++) { + io.input.handle = handle; + io.input.enum_index = idx; + io.input.key_name_len = 0; + io.input.unknown = 1044; + io.input.in_name = keyname; + io.input.class = ""; + io.input.last_changed_time = wtime; + var status = reg.winreg_EnumKey(io); + if (!status.is_ok) return; + var out = io.output; + if (out.result != "WERR_OK") { + return; + } + printf("%s\\%s\n", path, out.out_name.name); + + io = irpcObj(); + io.input.handle = handle; + io.input.keyname = out.out_name.name; + io.input.unknown = 0; + io.input.access_mask = reg.SEC_FLAG_MAXIMUM_ALLOWED; + status = reg.winreg_OpenKey(io); + if (!status.is_ok) return; + assert(io.output.result == "WERR_OK"); + + list(io.output.handle, + path + "\\" + out.out_name.name, + out.out_name.name); + } +} + +function list_tree(name) { + var io = irpcObj(); + io.input.system_name = NULL; + io.input.access_required = reg.SEC_FLAG_MAXIMUM_ALLOWED; + status = reg.winreg_OpenHKLM(io); + assert(status.is_ok); + + var handle = io.output.handle; + + list(handle, "", NULL); +} + +var trees = new Array("HKCR", "HKLM", "HKPD", "HKU"); + +for (i=0;i<trees.length;i++) { + printf("Listing tree '%s'\n", trees[i]); + list_tree(trees[i]); +} + +print("All OK\n"); +return 0; |