r9377: made winreg a user tool (I find it quite useful). I expect it to get the ability
authorAndrew Tridgell <tridge@samba.org>
Thu, 18 Aug 2005 05:09:26 +0000 (05:09 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:33:30 +0000 (13:33 -0500)
to add/remove keys and values in the future.

add it to the standard tests, ensuring that we know if winreg
breaks. This is particularly important as winreg uses such unusual IDL
constructs

source/script/tests/test_ejs.sh
source/scripting/bin/winreg [new file with mode: 0755]

index 75a47155b7957ad8b6736f54d2e38960d515fbe5..bec130dc869a6e36e4f5659d79130851dc546858 100755 (executable)
@@ -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/source/scripting/bin/winreg b/source/scripting/bin/winreg
new file mode 100755 (executable)
index 0000000..d869d35
--- /dev/null
@@ -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;