svn commit: samba r9218 - in branches/SAMBA_4_0: source/scripting/libjs testprogs/ejs

tridge at samba.org tridge at samba.org
Mon Aug 8 22:29:45 GMT 2005


Author: tridge
Date: 2005-08-08 22:29:44 +0000 (Mon, 08 Aug 2005)
New Revision: 9218

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=9218

Log:
make the winreg library code handle arbitrary paths more efficiently
and more conveniently (caller doesn't need to know the hive names now)


Modified:
   branches/SAMBA_4_0/source/scripting/libjs/winreg.js
   branches/SAMBA_4_0/testprogs/ejs/winreg.js


Changeset:
Modified: branches/SAMBA_4_0/source/scripting/libjs/winreg.js
===================================================================
--- branches/SAMBA_4_0/source/scripting/libjs/winreg.js	2005-08-08 22:14:40 UTC (rev 9217)
+++ branches/SAMBA_4_0/source/scripting/libjs/winreg.js	2005-08-08 22:29:44 UTC (rev 9218)
@@ -42,29 +42,48 @@
 	var list = new Object();
 
 	list.length = 0;
+
+	/* cope with a leading slash */
+	if (components[0] == '') {
+		for (i=0;i<(components.length-1);i++) {
+			components[i] = components[i+1];
+		}
+		components.length--;
+	}
 	
+	if (components.length == 0) {
+		return undefined;
+	}
+
 	var handle = winreg_open_hive(reg, components[0]);
 	if (handle == undefined) {
 		return undefined;
 	}
 
-	for (i=1;i<components.length;i++) {
-		io = irpcObj();
-		io.input.handle  = handle;
-		io.input.keyname = components[i];
-		io.input.unknown = 0;
-		io.input.access_mask = reg.SEC_FLAG_MAXIMUM_ALLOWED;
-		var status = reg.winreg_OpenKey(io);
-		if (!status.is_ok) {
-			return undefined;
-		}
-		if (io.output.result != "WERR_OK") {
-			return undefined;
-		}
+	if (components.length == 1) {
+		return handle;
+	}
 
-		handle = io.output.handle;
+	var hpath = components[1];
+
+	for (i=2;i<components.length;i++) {
+		hpath = hpath + "\\" + components[i];
 	}
-	return handle;
+
+	io = irpcObj();
+	io.input.handle  = handle;
+	io.input.keyname = hpath;
+	io.input.unknown = 0;
+	io.input.access_mask = reg.SEC_FLAG_MAXIMUM_ALLOWED;
+	var status = reg.winreg_OpenKey(io);
+	if (!status.is_ok) {
+		return undefined;
+	}
+	if (io.output.result != "WERR_OK") {
+		return undefined;
+	}
+	
+	return io.output.handle;
 }
 
 /*
@@ -76,6 +95,10 @@
 {
 	var list = new Object();
 	list.length = 0;
+
+	if (path == null || path == "\\" || path == "") {
+		return new Array("HKLM", "HKU");
+	}
 	
 	handle = winreg_open_path(reg, path);
 	if (handle == undefined) {
@@ -106,7 +129,6 @@
 		if (out.result != "WERR_OK") {
 			return list;
 		}
-
 		list[list.length] = out.out_name.name;
 		list.length++;
 	}

Modified: branches/SAMBA_4_0/testprogs/ejs/winreg.js
===================================================================
--- branches/SAMBA_4_0/testprogs/ejs/winreg.js	2005-08-08 22:14:40 UTC (rev 9217)
+++ branches/SAMBA_4_0/testprogs/ejs/winreg.js	2005-08-08 22:29:44 UTC (rev 9218)
@@ -13,15 +13,15 @@
 		"POPT_COMMON_SAMBA",
 		"POPT_COMMON_CREDENTIALS");
 if (ok == false) {
-   println("Failed to parse options: " + options.ERROR);
-   return -1;
+	println("Failed to parse options: " + options.ERROR);
+	return -1;
 }
 
 libinclude("base.js");
 
-if (options.ARGV.length != 1) {
-   println("Usage: winreg.js <BINDING>");
-   return -1;
+if (options.ARGV.length < 1) {
+	println("Usage: winreg.js <BINDING>");
+	return -1;
 }
 var binding = options.ARGV[0];
 reg = winreg_init();
@@ -30,8 +30,8 @@
 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;
+	print("Failed to connect to " + binding + " - " + status.errstr + "\n");
+	return -1;
 }
 
 function list_path(path) {
@@ -41,18 +41,25 @@
 		return;
 	}
 	for (i=0;i<list.length;i++) {
-		var npath = path + "\\" + list[i];
+		var npath;
+		if (path) {
+			npath = path + "\\" + list[i];
+		} else {
+			npath = list[i];
+		}
 		println(npath);
 		list_path(npath);
 	}
 }
 
-var trees = new Array("HKCR", "HKLM", "HKPD", "HKU");
+var root;
 
-for (i=0;i<trees.length;i++) {
-	printf("Listing tree '%s'\n", trees[i]);
-	list_path(trees[i]);
+if (options.ARGV.length > 1) {
+	root = options.ARGV[1];
+} else {
+	root = '';
 }
 
-print("All OK\n");
+printf("Listing registry tree '%s'\n", root);
+list_path(root);
 return 0;



More information about the samba-cvs mailing list