1
0
mirror of https://github.com/samba-team/samba.git synced 2025-01-07 17:18:11 +03:00
samba-mirror/source4/scripting/bin/winreg
Andrew Tridgell 783851099b r11458: fixed our ejs smbscript interfaces to use arrays where appropriate. In
js arrays are a special type of object where the length property is
automatic, and cannot be modified manually. Our code was manually
setting length, which made it abort when someone passed in a real ejs
array. To fix this we need to create real arrays instead of objects,
and remove the code that manually sets the length
(This used to be commit ebdd1393fd)
2007-10-10 13:45:39 -05:00

108 lines
2.2 KiB
Plaintext
Executable File

#!/bin/sh
exec smbscript "$0" ${1+"$@"}
/*
tool to manipulate a remote registry
Copyright Andrew Tridgell 2005
Released under the GNU GPL v2 or later
*/
var options = GetOptions(ARGV,
"POPT_AUTOHELP",
"POPT_COMMON_SAMBA",
"POPT_COMMON_CREDENTIALS",
"createkey=s");
if (options == undefined) {
println("Failed to parse options");
return -1;
}
libinclude("base.js");
libinclude("winreg.js");
if (options.ARGV.length < 1) {
println("Usage: winreg.js <BINDING> [path]");
return -1;
}
var binding = options.ARGV[0];
reg = winregObj();
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 = reg.enum_values(path);
var i;
if (list == undefined) {
return;
}
for (i=0;i<list.length;i++) {
var v = list[i];
printf("\ttype=%-30s size=%4d '%s'\n", reg.typestring(v.type), v.size, v.name);
if (v.type == reg.REG_SZ || v.type == reg.REG_EXPAND_SZ) {
printf("\t\t'%s'\n", v.value);
}
if (v.type == reg.REG_MULTI_SZ) {
var j;
for (j in v.value) {
printf("\t\t'%s'\n", v.value[j]);
}
}
if (v.type == reg.REG_DWORD || v.type == reg.REG_DWORD_BIG_ENDIAN) {
printf("\t\t0x%08x (%d)\n", v.value, v.value);
}
if (v.type == reg.REG_QWORD) {
printf("\t\t0x%llx (%lld)\n", v.value, v.value);
}
}
}
function list_path(path) {
var count = 0;
var list = reg.enum_path(path);
if (list == undefined) {
println("Unable to list " + path);
return 0;
}
var i;
list_values(path);
count = count + list.length;
for (i=0;i<list.length;i++) {
var npath;
if (path) {
npath = path + "\\" + list[i];
} else {
npath = list[i];
}
println(npath);
count = count + list_path(npath);
}
return count;
}
var root;
if (options.ARGV.length > 1) {
root = options.ARGV[1];
} else {
root = '';
}
if (options.createkey) {
var ok = reg.create_key("HKLM\\SOFTWARE", options.createkey);
if (!ok) {
println("Failed to create key");
}
} else {
printf("Listing registry tree '%s'\n", root);
var count = list_path(root);
if (count == 0) {
println("No entries found");
return 1;
}
}
return 0;