mirror of
https://github.com/samba-team/samba.git
synced 2025-01-11 05:18:09 +03:00
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 commit is contained in:
parent
46e91f269c
commit
ebdd1393fd
@ -61,13 +61,15 @@ function list_values(path) {
|
||||
}
|
||||
|
||||
function list_path(path) {
|
||||
var count = 0;
|
||||
var list = reg.enum_path(path);
|
||||
if (list == undefined) {
|
||||
println("Unable to list " + path);
|
||||
return;
|
||||
return 0;
|
||||
}
|
||||
var i;
|
||||
list_values(path);
|
||||
count = count + list.length;
|
||||
for (i=0;i<list.length;i++) {
|
||||
var npath;
|
||||
if (path) {
|
||||
@ -76,8 +78,9 @@ function list_path(path) {
|
||||
npath = list[i];
|
||||
}
|
||||
println(npath);
|
||||
list_path(npath);
|
||||
count = count + list_path(npath);
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
var root;
|
||||
@ -95,6 +98,10 @@ if (options.createkey) {
|
||||
}
|
||||
} else {
|
||||
printf("Listing registry tree '%s'\n", root);
|
||||
list_path(root);
|
||||
var count = list_path(root);
|
||||
if (count == 0) {
|
||||
println("No entries found");
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
|
@ -32,6 +32,14 @@ struct MprVar mprObject(const char *name)
|
||||
return ejsCreateObj(name && *name?name:"(NULL)", MPR_DEFAULT_HASH_SIZE);
|
||||
}
|
||||
|
||||
/*
|
||||
return a empty mpr array
|
||||
*/
|
||||
struct MprVar mprArray(const char *name)
|
||||
{
|
||||
return ejsCreateArray(name && *name?name:"(NULL)", 0);
|
||||
}
|
||||
|
||||
/*
|
||||
find a mpr component, allowing for sub objects, using the '.' convention
|
||||
*/
|
||||
@ -101,7 +109,6 @@ struct MprVar mprObject(const char *name)
|
||||
char idx[16];
|
||||
mprItoa(i, idx, sizeof(idx));
|
||||
mprSetVar(var, idx, v);
|
||||
mprSetVar(var, "length", mprCreateIntegerVar(i+1));
|
||||
}
|
||||
|
||||
/*
|
||||
@ -112,13 +119,10 @@ struct MprVar mprList(const char *name, const char **list)
|
||||
struct MprVar var;
|
||||
int i;
|
||||
|
||||
var = mprObject(name);
|
||||
var = mprArray(name);
|
||||
for (i=0;list && list[i];i++) {
|
||||
mprAddArray(&var, i, mprString(list[i]));
|
||||
}
|
||||
if (i==0) {
|
||||
mprSetVar(&var, "length", mprCreateIntegerVar(i));
|
||||
}
|
||||
return var;
|
||||
}
|
||||
|
||||
@ -182,7 +186,7 @@ static struct MprVar mprLdbMessage(struct ldb_context *ldb, struct ldb_message *
|
||||
val = mprData(v.data, v.length);
|
||||
} else {
|
||||
int j;
|
||||
val = mprObject(el->name);
|
||||
val = mprArray(el->name);
|
||||
for (j=0;j<el->num_values;j++) {
|
||||
if (attr->ldif_write_fn(ldb, msg,
|
||||
&el->values[j], &v) != 0) {
|
||||
@ -214,13 +218,10 @@ struct MprVar mprLdbArray(struct ldb_context *ldb,
|
||||
struct MprVar res;
|
||||
int i;
|
||||
|
||||
res = mprObject(name);
|
||||
res = mprArray(name);
|
||||
for (i=0;i<count;i++) {
|
||||
mprAddArray(&res, i, mprLdbMessage(ldb, msg[i]));
|
||||
}
|
||||
if (i==0) {
|
||||
mprSetVar(&res, "length", mprCreateIntegerVar(0));
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
@ -230,6 +231,9 @@ struct MprVar mprLdbArray(struct ldb_context *ldb,
|
||||
*/
|
||||
const char *mprToString(const struct MprVar *v)
|
||||
{
|
||||
if (v->trigger) {
|
||||
mprReadProperty(v, 0);
|
||||
}
|
||||
if (!mprVarIsString(v->type)) return NULL;
|
||||
return v->string;
|
||||
}
|
||||
@ -239,6 +243,9 @@ const char *mprToString(const struct MprVar *v)
|
||||
*/
|
||||
int mprToInt(const struct MprVar *v)
|
||||
{
|
||||
if (v->trigger) {
|
||||
mprReadProperty(v, 0);
|
||||
}
|
||||
if (!mprVarIsNumber(v->type)) return 0;
|
||||
return mprVarToNumber(v);
|
||||
}
|
||||
|
@ -88,7 +88,7 @@ static int ejs_blobToArray(MprVarHandle eid, int argc, struct MprVar **argv)
|
||||
goto failed;
|
||||
}
|
||||
|
||||
array = mprObject("array");
|
||||
array = mprArray("array");
|
||||
|
||||
for (i=0;i<blob->length;i++) {
|
||||
mprAddArray(&array, i, mprCreateNumberVar(blob->data[i]));
|
||||
|
@ -31,14 +31,14 @@ static struct MprVar mprRegistry(struct samba3_regdb *reg)
|
||||
struct MprVar mpv = mprObject("registry"), ks, vs, k, v;
|
||||
int i, j;
|
||||
|
||||
ks = mprObject("array");
|
||||
ks = mprArray("array");
|
||||
|
||||
for (i = 0; i < reg->key_count; i++) {
|
||||
k = mprObject("regkey");
|
||||
|
||||
mprSetVar(&k, "name", mprString(reg->keys[i].name));
|
||||
|
||||
vs = mprObject("array");
|
||||
vs = mprArray("array");
|
||||
|
||||
for (j = 0; j < reg->keys[i].value_count; j++) {
|
||||
v = mprObject("regval");
|
||||
@ -90,7 +90,7 @@ static struct MprVar mprIdmapDb(struct samba3_idmapdb *db)
|
||||
mprSetVar(&mpv, "user_hwm", mprCreateIntegerVar(db->user_hwm));
|
||||
mprSetVar(&mpv, "group_hwm", mprCreateIntegerVar(db->group_hwm));
|
||||
|
||||
mps = mprObject("array");
|
||||
mps = mprArray("array");
|
||||
|
||||
for (i = 0; i < db->mapping_count; i++) {
|
||||
char *tmp;
|
||||
@ -120,7 +120,7 @@ static struct MprVar mprIdmapDb(struct samba3_idmapdb *db)
|
||||
|
||||
static struct MprVar mprGroupMappings(struct samba3_groupdb *db)
|
||||
{
|
||||
struct MprVar mpv = mprObject("array"), g;
|
||||
struct MprVar mpv = mprArray("array"), g;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < db->groupmap_count; i++) {
|
||||
@ -161,7 +161,7 @@ static struct MprVar mprAliases(struct samba3_groupdb *db)
|
||||
mprSetVar(&a, "sid", mprString(tmp));
|
||||
talloc_free(tmp);
|
||||
|
||||
am = mprObject("array");
|
||||
am = mprArray("array");
|
||||
|
||||
for (j = 0; j < db->aliases[i].member_count; j++) {
|
||||
tmp = dom_sid_string(NULL, db->aliases[i].members[j]);
|
||||
@ -218,7 +218,7 @@ static struct MprVar mprSecrets(struct samba3_secrets *sec)
|
||||
struct MprVar mpv = mprObject("samba3_secrets"), es, e;
|
||||
int i;
|
||||
|
||||
es = mprObject("array");
|
||||
es = mprArray("array");
|
||||
|
||||
for (i = 0; i < sec->ldappw_count; i++) {
|
||||
e = mprObject("ldappw");
|
||||
@ -231,7 +231,7 @@ static struct MprVar mprSecrets(struct samba3_secrets *sec)
|
||||
|
||||
mprSetVar(&mpv, "ldappws", es);
|
||||
|
||||
es = mprObject("array");
|
||||
es = mprArray("array");
|
||||
|
||||
for (i = 0; i < sec->domain_count; i++) {
|
||||
mprAddArray(&es, i, mprDomainSecrets(&sec->domains[i]));
|
||||
@ -243,7 +243,7 @@ static struct MprVar mprSecrets(struct samba3_secrets *sec)
|
||||
|
||||
mprSetVar(&mpv, "domains", es);
|
||||
|
||||
es = mprObject("trusted_domains");
|
||||
es = mprArray("trusted_domains");
|
||||
|
||||
for (i = 0; i < sec->trusted_domain_count; i++) {
|
||||
struct MprVar ns;
|
||||
@ -251,7 +251,7 @@ static struct MprVar mprSecrets(struct samba3_secrets *sec)
|
||||
int j;
|
||||
e = mprObject("trusted_domain");
|
||||
|
||||
ns = mprObject("array");
|
||||
ns = mprArray("array");
|
||||
|
||||
for (j = 0; j < sec->trusted_domains[i].uni_name_len; j++) {
|
||||
mprAddArray(&ns, j, mprString(sec->trusted_domains[i].uni_name[j]));
|
||||
@ -275,7 +275,7 @@ static struct MprVar mprSecrets(struct samba3_secrets *sec)
|
||||
|
||||
mprSetVar(&mpv, "trusted_domains", es);
|
||||
|
||||
es = mprObject("array");
|
||||
es = mprArray("array");
|
||||
|
||||
for (i = 0; i < sec->afs_keyfile_count; i++) {
|
||||
struct MprVar ks;
|
||||
@ -284,7 +284,7 @@ static struct MprVar mprSecrets(struct samba3_secrets *sec)
|
||||
|
||||
mprSetVar(&e, "cell", mprString(sec->afs_keyfiles[i].cell));
|
||||
|
||||
ks = mprObject("array");
|
||||
ks = mprArray("array");
|
||||
|
||||
for (j = 0; j < 8; j++) {
|
||||
struct MprVar k = mprObject("entry");
|
||||
@ -318,7 +318,7 @@ static struct MprVar mprSecrets(struct samba3_secrets *sec)
|
||||
|
||||
static struct MprVar mprShares(struct samba3 *samba3)
|
||||
{
|
||||
struct MprVar mpv = mprObject("array"), s;
|
||||
struct MprVar mpv = mprArray("array"), s;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < samba3->share_count; i++) {
|
||||
@ -340,7 +340,7 @@ static struct MprVar mprShares(struct samba3 *samba3)
|
||||
|
||||
static struct MprVar mprSamAccounts(struct samba3 *samba3)
|
||||
{
|
||||
struct MprVar mpv = mprObject("array"), m;
|
||||
struct MprVar mpv = mprArray("array"), m;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < samba3->samaccount_count; i++) {
|
||||
@ -391,7 +391,7 @@ static struct MprVar mprSamAccounts(struct samba3 *samba3)
|
||||
|
||||
static struct MprVar mprWinsEntries(struct samba3 *samba3)
|
||||
{
|
||||
struct MprVar mpv = mprObject("array");
|
||||
struct MprVar mpv = mprArray("array");
|
||||
int i, j;
|
||||
|
||||
for (i = 0; i < samba3->winsdb_count; i++) {
|
||||
|
@ -109,7 +109,7 @@ static int ejs_split(MprVarHandle eid, int argc, char **argv)
|
||||
separator = argv[0];
|
||||
s = argv[1];
|
||||
|
||||
ret = mprObject("list");
|
||||
ret = mprArray("list");
|
||||
|
||||
while ((p = strstr(s, separator))) {
|
||||
char *s2 = talloc_strndup(tmp_ctx, s, (int)(p-s));
|
||||
|
@ -32,7 +32,7 @@
|
||||
static int ejs_sys_interfaces(MprVarHandle eid, int argc, struct MprVar **argv)
|
||||
{
|
||||
int i, count = iface_count();
|
||||
struct MprVar ret = mprObject("interfaces");
|
||||
struct MprVar ret = mprArray("interfaces");
|
||||
for (i=0;i<count;i++) {
|
||||
mprAddArray(&ret, i, mprString(iface_n_ip(i)));
|
||||
}
|
||||
|
@ -24,7 +24,7 @@ function smbsrv_sessions()
|
||||
}
|
||||
|
||||
/* gather the results into a single array */
|
||||
var i, count=0, ret = new Object();
|
||||
var i, count=0, ret = new Array(0);
|
||||
for (i=0;i<io.results.length;i++) {
|
||||
var sessions = io.results[i].info.sessions.sessions;
|
||||
var j;
|
||||
@ -33,7 +33,6 @@ function smbsrv_sessions()
|
||||
count++;
|
||||
}
|
||||
}
|
||||
ret.length = count;
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -51,16 +51,13 @@ function __winreg_open_path(path)
|
||||
{
|
||||
var s = string_init();
|
||||
var i, components = s.split('\\', path);
|
||||
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--;
|
||||
delete(components[i]);
|
||||
}
|
||||
|
||||
if (components.length == 0) {
|
||||
@ -108,8 +105,7 @@ function __winreg_open_path(path)
|
||||
*/
|
||||
function __winreg_enum_path(path)
|
||||
{
|
||||
var list = new Object();
|
||||
list.length = 0;
|
||||
var list = new Array(0);
|
||||
|
||||
if (path == null || path == "\\" || path == "") {
|
||||
return new Array("HKLM", "HKU");
|
||||
@ -155,7 +151,6 @@ function __winreg_enum_path(path)
|
||||
return list;
|
||||
}
|
||||
list[list.length] = out.name.name;
|
||||
list.length++;
|
||||
}
|
||||
|
||||
this.close(handle);
|
||||
@ -174,8 +169,7 @@ function __winreg_enum_path(path)
|
||||
function __winreg_enum_values(path)
|
||||
{
|
||||
var data = datablob_init();
|
||||
var list = new Object();
|
||||
list.length = 0;
|
||||
var list = new Array(0);
|
||||
|
||||
var handle = this.open_path(path);
|
||||
if (handle == undefined) {
|
||||
@ -224,7 +218,6 @@ function __winreg_enum_values(path)
|
||||
el.value = data.regToVar(el.rawvalue, el.type);
|
||||
el.size = out.size;
|
||||
list[list.length] = el;
|
||||
list.length++;
|
||||
}
|
||||
|
||||
this.close(handle);
|
||||
|
Loading…
Reference in New Issue
Block a user