diff options
-rwxr-xr-x | source4/script/tests/test_ejs.sh | 1 | ||||
-rwxr-xr-x | source4/scripting/bin/winreg | 75 |
2 files changed, 76 insertions, 0 deletions
diff --git a/source4/script/tests/test_ejs.sh b/source4/script/tests/test_ejs.sh index 75a47155b7..bec130dc86 100755 --- a/source4/script/tests/test_ejs.sh +++ b/source4/script/tests/test_ejs.sh @@ -24,3 +24,4 @@ for f in samr.js echo.js ldb.js; do testit "$f" $SCRIPTDIR/$f $CONFIGURATION ncalrpc: -U$USERNAME%$PASSWORD || failed=`expr $failed + 1` done +testit "winreg" scripting/bin/winreg $CONFIGURATION ncalrpc: 'HKLM' -U$USERNAME%$PASSWORD || failed=`expr $failed + 1` diff --git a/source4/scripting/bin/winreg b/source4/scripting/bin/winreg new file mode 100755 index 0000000000..d869d356fd --- /dev/null +++ b/source4/scripting/bin/winreg @@ -0,0 +1,75 @@ +#!/bin/sh +exec smbscript "$0" ${1+"$@"} +/* + tool to manipulate a remote registry + Copyright Andrew Tridgell 2005 + Released under the GNU GPL v2 or later +*/ + +libinclude("base.js"); +libinclude("winreg.js"); + +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; +} + +if (options.ARGV.length < 1) { + println("Usage: winreg.js <BINDING> [path]"); + 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_values(path) { + var list = winreg_enum_values(reg, path); + var i; + if (list == undefined) { + return; + } + for (i=0;i<list.length;i++) { + printf("\ttype=%2d size=%4d '%s'\n", list[i].type, list[i].size, list[i].name); + } +} + +function list_path(path) { + var list = winreg_enum_path(reg, path); + var i; + list_values(path); + for (i=0;i<list.length;i++) { + var npath; + if (path) { + npath = path + "\\" + list[i]; + } else { + npath = list[i]; + } + println(npath); + list_path(npath); + } +} + +var root; + +if (options.ARGV.length > 1) { + root = options.ARGV[1]; +} else { + root = ''; +} + +printf("Listing registry tree '%s'\n", root); +list_path(root); +return 0; |