mirror of
https://github.com/samba-team/samba.git
synced 2025-01-25 06:04:04 +03:00
783851099b
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 ebdd1393fde44a0a35446d1a922d29a7c1769ba7)
108 lines
2.2 KiB
Plaintext
Executable File
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;
|