1
0
mirror of https://github.com/samba-team/samba.git synced 2025-10-22 07:33:16 +03:00

r9800: Add EJS interface to param. tridge, sorry this overlaps a bit

with your loadparm interface. :-/
This commit is contained in:
Jelmer Vernooij
2005-08-30 14:44:33 +00:00
committed by Gerald (Jerry) Carter
parent 414e5f7f6d
commit bb0cef581a
7 changed files with 252 additions and 22 deletions

View File

@@ -27,6 +27,7 @@ OBJ_FILES = \
scripting/ejs/smbcalls_sys.o \
scripting/ejs/smbcalls_creds.o \
scripting/ejs/smbcalls_samba3.o \
scripting/ejs/smbcalls_param.o \
scripting/ejs/mprutil.o
REQUIRED_SUBSYSTEMS = AUTH EJS LIBBASIC EJSRPC MESSAGING LIBSAMBA3
# End SUBSYSTEM SMBCALLS

View File

@@ -129,6 +129,7 @@ void smb_setup_ejs_functions(void)
smb_setup_ejs_system();
smb_setup_ejs_credentials();
smb_setup_ejs_samba3();
smb_setup_ejs_param();
smb_setup_ejs_datablob();
ejsDefineCFunction(-1, "typeof", ejs_typeof, NULL, MPR_VAR_SCRIPT_HANDLE);

View File

@@ -0,0 +1,207 @@
/*
Unix SMB/CIFS implementation.
provide hooks into smbd C calls from ejs scripts
Copyright (C) Jelmer Vernooij 2005
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include "includes.h"
#include "scripting/ejs/smbcalls.h"
#include "lib/appweb/ejs/ejs.h"
#include "param/generic.h"
#include "dynconfig.h"
/*
get parameter
value = param.get("name");
value = param.get("section", "name");
*/
static int ejs_param_get(MprVarHandle eid, int argc, char **argv)
{
struct param_context *ctx;
const char *ret;
if (argc != 1 && argc != 2) {
ejsSetErrorMsg(eid, "param.get invalid argument count");
return -1;
}
ctx = mprGetThisPtr(eid, "param");
mprAssert(ctx);
if (argc == 2) {
ret = param_get_string(ctx, argv[0], argv[1]);
} else {
ret = param_get_string(ctx, NULL, argv[0]);
}
if (ret) {
mpr_Return(eid, mprString(ret));
} else {
mpr_Return(eid, mprCreateUndefinedVar());
}
return 0;
}
/*
get list parameter
ok = param.get_list("name");
ok = param.get_list("section", "name");
*/
static int ejs_param_get_list(MprVarHandle eid, int argc, char **argv)
{
struct param_context *ctx;
const char **ret;
if (argc != 1 && argc != 2) {
ejsSetErrorMsg(eid, "param.get invalid argument count");
return -1;
}
ctx = mprGetThisPtr(eid, "param");
mprAssert(ctx);
if (argc == 2) {
ret = param_get_string_list(ctx, argv[0], argv[1], NULL);
} else {
ret = param_get_string_list(ctx, NULL, argv[0], NULL);
}
if (ret) {
mpr_Return(eid, mprList("array", ret));
} else {
mpr_Return(eid, mprCreateUndefinedVar());
}
return 0;
}
/*
set parameter
ok = param.set("name", "value");
ok = param.set("section", "name", "value");
*/
static int ejs_param_set(MprVarHandle eid, int argc, char **argv)
{
struct param_context *ctx;
bool ret;
if (argc != 2 && argc != 3) {
ejsSetErrorMsg(eid, "param.set invalid argument count");
return -1;
}
ctx = mprGetThisPtr(eid, "param");
mprAssert(ctx);
if (argc == 3) {
ret = param_set_string(ctx, argv[0], argv[1], argv[2]);
} else {
ret = param_set_string(ctx, NULL, argv[0], argv[2]);
}
mpr_Return(eid, mprCreateBoolVar(ret));
return 0;
}
/*
load file
ok = param.load(file);
*/
static int ejs_param_load(MprVarHandle eid, int argc, char **argv)
{
struct param_context *ctx;
bool ret;
if (argc != 1) {
ejsSetErrorMsg(eid, "param.load invalid argument count");
return -1;
}
ctx = mprGetThisPtr(eid, "param");
mprAssert(ctx);
ret = param_read(ctx, argv[0]);
mpr_Return(eid, mprCreateBoolVar(ret));
return 0;
}
/*
save file
ok = param.save(file);
*/
static int ejs_param_save(MprVarHandle eid, int argc, char **argv)
{
struct param_context *ctx;
bool ret;
if (argc != 1) {
ejsSetErrorMsg(eid, "param.save invalid argument count");
return -1;
}
ctx = mprGetThisPtr(eid, "param");
mprAssert(ctx);
ret = param_write(ctx, argv[0]);
mpr_Return(eid, mprCreateBoolVar(ret));
return 0;
}
static void param_add_members(struct MprVar *obj)
{
mprSetStringCFunction(obj, "get", ejs_param_get);
mprSetStringCFunction(obj, "get_list", ejs_param_get_list);
mprSetStringCFunction(obj, "set", ejs_param_set);
mprSetStringCFunction(obj, "load", ejs_param_load);
mprSetStringCFunction(obj, "save", ejs_param_save);
}
/*
initialise param ejs subsystem
*/
static int ejs_param_init(MprVarHandle eid, int argc, struct MprVar **argv)
{
struct MprVar *obj = mprInitObject(eid, "param", argc, argv);
mprSetPtrChild(obj, "param", param_init(mprMemCtx()));
param_add_members(obj);
return 0;
}
struct MprVar mprParam(struct param_context *ctx)
{
struct MprVar mpv = mprObject("param");
mprSetPtrChild(&mpv, "param", ctx);
param_add_members(&mpv);
return mpv;
}
/*
setup C functions that be called from ejs
*/
void smb_setup_ejs_param(void)
{
ejsDefineCFunction(-1, "param_init", ejs_param_init, NULL, MPR_VAR_SCRIPT_HANDLE);
}

View File

@@ -403,6 +403,8 @@ static int ejs_find_domainsecrets(MprVarHandle eid, int argc, struct MprVar **ar
/*
initialise samba3 ejs subsystem
samba3 = samba3_read(libdir,smbconf)
*/
static int ejs_samba3_read(MprVarHandle eid, int argc, struct MprVar **argv)
{
@@ -415,7 +417,7 @@ static int ejs_samba3_read(MprVarHandle eid, int argc, struct MprVar **argv)
return -1;
}
status = samba3_read(mprToString(argv[0]), mprToString(argv[0]), mprMemCtx(), &samba3);
status = samba3_read(mprToString(argv[0]), mprToString(argv[1]), mprMemCtx(), &samba3);
if (NT_STATUS_IS_ERR(status)) {
ejsSetErrorMsg(eid, "samba3_read: error");
@@ -434,6 +436,7 @@ static int ejs_samba3_read(MprVarHandle eid, int argc, struct MprVar **argv)
mprSetVar(&mpv, "idmapdb", mprIdmapDb(&samba3->idmap));
mprSetVar(&mpv, "policy", mprPolicy(&samba3->policy));
mprSetVar(&mpv, "registry", mprRegistry(&samba3->registry));
mprSetVar(&mpv, "configuration", mprParam(samba3->configuration));
mprSetCFunction(&mpv, "find_domainsecrets", ejs_find_domainsecrets);
mpr_Return(eid, mpv);