r9568: updated the winreg js library for CreateKey, and add a --createkey
authorAndrew Tridgell <tridge@samba.org>
Wed, 24 Aug 2005 08:32:51 +0000 (08:32 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:34:29 +0000 (13:34 -0500)
option to the winreg tool
(This used to be commit 881452c7b7cc00222328f743c2c0c4ece39f4c96)

source4/scripting/bin/winreg
source4/scripting/libjs/winreg.js

index 7845f1034c5a53adbaf2d7251f3582e820557a47..12f40f1155515967d0901700fb23781f3976a9c4 100755 (executable)
@@ -12,7 +12,8 @@ libinclude("winreg.js");
 var options = GetOptions(ARGV,
                         "POPT_AUTOHELP",
                         "POPT_COMMON_SAMBA",
-                        "POPT_COMMON_CREDENTIALS");
+                        "POPT_COMMON_CREDENTIALS",
+                        "createkey=s");
 if (options == undefined) {
        println("Failed to parse options");
        return -1;
@@ -61,6 +62,10 @@ function list_values(path) {
 
 function list_path(path) {
        var list = reg.enum_path(path);
+       if (list == undefined) {
+               println("Unable to list " + path);
+               return;
+       }
        var i;
        list_values(path);
        for (i=0;i<list.length;i++) {
@@ -83,6 +88,13 @@ if (options.ARGV.length > 1) {
        root = '';
 }
 
-printf("Listing registry tree '%s'\n", root);
-list_path(root);
+if (options.createkey) {
+       var ok = reg.create_key("HKLM\\SOFTWARE", options.createkey);
+       if (!ok) {
+               
+       }
+} else {
+       printf("Listing registry tree '%s'\n", root);
+       list_path(root);
+}
 return 0;
index 1e9dbcbb5234783b5bbdeaef848acd3b5fad81c2..adcefcae85b8e80ae14de3c027d95084e7fc7e9e 100644 (file)
@@ -35,7 +35,7 @@ function __winreg_open_hive(hive)
        } else if (hive == "HKU") {
                status = this.winreg_OpenHKU(io);
        } else {
-               println("Unknown hive " + hive);
+               this._last_error = "Unknown hive " + hive;
                return undefined;
        }
        if (!status.is_ok) {
@@ -231,6 +231,40 @@ function __winreg_enum_values(path)
        return list;
 }
 
+
+/*
+  create a new key
+    ok = reg.create_key(path, key);
+*/
+function __winreg_create_key(path, key)
+{
+       var handle = this.open_path(path);
+       if (handle == undefined) {
+               return undefined;
+       }
+
+       var io = irpcObj();
+       io.input.handle = handle;
+       io.input.name = key;
+       io.input.class = NULL;
+       io.input.options = 0;
+       io.input.access_required = this.SEC_FLAG_MAXIMUM_ALLOWED;
+       io.input.secdesc = NULL;
+       io.input.action_taken = 0;      
+
+       var status = this.winreg_CreateKey(io);
+       this.close(handle);
+       if (!status.is_ok) {
+               return false;
+       }
+       if (io.output.result != "WERR_OK") {
+               return false;
+       }
+       this.close(io.output.new_handle);
+       return true;
+}
+
+
 /*
   return a string for a winreg type
 */
@@ -252,12 +286,13 @@ function winregObj()
                                  "REG_RESOURCE_LIST", "REG_FULL_RESOURCE_DESCRIPTOR", 
                                  "REG_RESOURCE_REQUIREMENTS_LIST", "REG_QWORD");
 
-       reg.close = __winreg_close;
-       reg.open_hive = __winreg_open_hive;
-       reg.open_path = __winreg_open_path;
-       reg.enum_path = __winreg_enum_path;
+       reg.close       = __winreg_close;
+       reg.open_hive   = __winreg_open_hive;
+       reg.open_path   = __winreg_open_path;
+       reg.enum_path   = __winreg_enum_path;
        reg.enum_values = __winreg_enum_values;
-       reg.typestring = __winreg_typestring;
+       reg.create_key  = __winreg_create_key;
+       reg.typestring  = __winreg_typestring;
 
        return reg;
 }