mirror of
https://github.com/samba-team/samba.git
synced 2024-12-25 23:21:54 +03:00
r8337: - use 64 bit access functions in ejs calls
- added access to smbd random functions - fixed ordering in join() - added sys_interfaces(), sys_hostname(), sys_nttime() and sys_ldaptime()
This commit is contained in:
parent
9dd41e78e1
commit
28c1a1f3c0
@ -22,6 +22,8 @@ OBJ_FILES = \
|
||||
scripting/ejs/smbcalls_options.o \
|
||||
scripting/ejs/smbcalls_nss.o \
|
||||
scripting/ejs/smbcalls_string.o \
|
||||
scripting/ejs/smbcalls_rand.o \
|
||||
scripting/ejs/smbcalls_sys.o \
|
||||
scripting/ejs/mprutil.o
|
||||
REQUIRED_SUBSYSTEMS = AUTH EJS LIBBASIC EJSRPC MESSAGING
|
||||
# End SUBSYSTEM SMBCALLS
|
||||
|
@ -211,7 +211,7 @@ struct MprVar mprLdbArray(struct ldb_message **msg, int count, const char *name)
|
||||
*/
|
||||
const char *mprToString(const struct MprVar *v)
|
||||
{
|
||||
if (v->type != MPR_TYPE_STRING) return NULL;
|
||||
if (!mprVarIsString(v->type)) return NULL;
|
||||
return v->string;
|
||||
}
|
||||
|
||||
@ -220,8 +220,8 @@ const char *mprToString(const struct MprVar *v)
|
||||
*/
|
||||
int mprToInt(const struct MprVar *v)
|
||||
{
|
||||
if (v->type != MPR_TYPE_INT) return 0;
|
||||
return v->integer;
|
||||
if (!mprVarIsNumber(v->type)) return 0;
|
||||
return mprVarToNumber(v);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -249,6 +249,38 @@ const char **mprToList(TALLOC_CTX *mem_ctx, struct MprVar *v)
|
||||
return list;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
turn a MprVar object variable into a string list
|
||||
this assumes the object variable is an array of strings
|
||||
*/
|
||||
const char **mprToArray(TALLOC_CTX *mem_ctx, struct MprVar *v)
|
||||
{
|
||||
const char **list = NULL;
|
||||
struct MprVar *len;
|
||||
int length, i;
|
||||
|
||||
len = mprGetProperty(v, "length", NULL);
|
||||
if (len == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
length = mprToInt(len);
|
||||
|
||||
for (i=0;i<length;i++) {
|
||||
char idx[16];
|
||||
struct MprVar *vs;
|
||||
mprItoa(i, idx, sizeof(idx));
|
||||
vs = mprGetProperty(v, idx, NULL);
|
||||
if (vs == NULL || vs->type != MPR_TYPE_STRING) {
|
||||
talloc_free(list);
|
||||
return NULL;
|
||||
}
|
||||
list = str_list_add(list, mprToString(vs));
|
||||
}
|
||||
talloc_steal(mem_ctx, list);
|
||||
return list;
|
||||
}
|
||||
|
||||
/*
|
||||
turn a NTSTATUS into a MprVar object with lots of funky properties
|
||||
*/
|
||||
|
@ -64,21 +64,6 @@ static int ejs_typeof(MprVarHandle eid, int argc, struct MprVar **argv)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
return the list of configured network interfaces
|
||||
*/
|
||||
static int ejs_IfaceList(MprVarHandle eid, int argc, struct MprVar **argv)
|
||||
{
|
||||
int i, count = iface_count();
|
||||
struct MprVar ret = mprObject("interfaces");
|
||||
for (i=0;i<count;i++) {
|
||||
mprAddArray(&ret, i, mprString(iface_n_ip(i)));
|
||||
}
|
||||
mpr_Return(eid, ret);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
libinclude() allows you to include js files using a search path specified
|
||||
in "js include =" in smb.conf.
|
||||
@ -139,9 +124,10 @@ void smb_setup_ejs_functions(void)
|
||||
smb_setup_ejs_options();
|
||||
smb_setup_ejs_nss();
|
||||
smb_setup_ejs_string();
|
||||
smb_setup_ejs_random();
|
||||
smb_setup_ejs_system();
|
||||
|
||||
ejsDefineCFunction(-1, "typeof", ejs_typeof, NULL, MPR_VAR_SCRIPT_HANDLE);
|
||||
ejsDefineCFunction(-1, "IfaceList", ejs_IfaceList, NULL, MPR_VAR_SCRIPT_HANDLE);
|
||||
ejsDefineStringCFunction(-1, "libinclude", ejs_libinclude, NULL, MPR_VAR_SCRIPT_HANDLE);
|
||||
}
|
||||
|
||||
|
@ -60,7 +60,7 @@ static int ejs_resolve_name(MprVarHandle eid, int argc, struct MprVar **argv)
|
||||
if (argc == 2) {
|
||||
make_nbt_name_client(&name, mprToString(argv[1]));
|
||||
} else {
|
||||
if (argv[1]->type != MPR_TYPE_INT) {
|
||||
if (!mprVarIsNumber(argv[1]->type)) {
|
||||
ejsSetErrorMsg(eid, "resolveName invalid arguments");
|
||||
goto done;
|
||||
}
|
||||
|
@ -93,7 +93,7 @@ static int ejs_getpwnam(MprVarHandle eid, int argc, struct MprVar **argv)
|
||||
static int ejs_getpwuid(MprVarHandle eid, int argc, struct MprVar **argv)
|
||||
{
|
||||
/* validate arguments */
|
||||
if (argc != 1 || argv[0]->type != MPR_TYPE_INT) {
|
||||
if (argc != 1 || !mprVarIsNumber(argv[0]->type)) {
|
||||
ejsSetErrorMsg(eid, "getpwuid invalid arguments");
|
||||
return -1;
|
||||
}
|
||||
|
@ -73,7 +73,7 @@ static int ejs_GetOptions(MprVarHandle eid, int argc, struct MprVar **argv)
|
||||
return -1;
|
||||
}
|
||||
|
||||
opt_argv = mprToList(tmp_ctx, argv[0]);
|
||||
opt_argv = mprToArray(tmp_ctx, argv[0]);
|
||||
options = argv[1];
|
||||
opt_argc = str_list_length(opt_argv);
|
||||
|
||||
|
92
source/scripting/ejs/smbcalls_rand.c
Normal file
92
source/scripting/ejs/smbcalls_rand.c
Normal file
@ -0,0 +1,92 @@
|
||||
/*
|
||||
Unix SMB/CIFS implementation.
|
||||
|
||||
provide access to randomisation functions
|
||||
|
||||
Copyright (C) Andrew Tridgell 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/ejs/ejs.h"
|
||||
#include "system/passwd.h"
|
||||
|
||||
/*
|
||||
usage:
|
||||
var i = random();
|
||||
*/
|
||||
static int ejs_random(MprVarHandle eid, int argc, struct MprVar **argv)
|
||||
{
|
||||
mpr_Return(eid, mprCreateIntegerVar(generate_random()));
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
usage:
|
||||
var s = randpass(len);
|
||||
*/
|
||||
static int ejs_randpass(MprVarHandle eid, int argc, struct MprVar **argv)
|
||||
{
|
||||
char *s;
|
||||
if (argc != 1 || !mprVarIsNumber(argv[0]->type)) {
|
||||
ejsSetErrorMsg(eid, "randpass invalid arguments");
|
||||
return -1;
|
||||
}
|
||||
s = generate_random_str(mprMemCtx(), mprToInt(argv[0]));
|
||||
mpr_Return(eid, mprString(s));
|
||||
talloc_free(s);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
usage:
|
||||
var guid = randguid();
|
||||
*/
|
||||
static int ejs_randguid(MprVarHandle eid, int argc, struct MprVar **argv)
|
||||
{
|
||||
struct GUID guid = GUID_random();
|
||||
char *s = GUID_string(mprMemCtx(), &guid);
|
||||
mpr_Return(eid, mprString(s));
|
||||
talloc_free(s);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
usage:
|
||||
var sid = randsid();
|
||||
*/
|
||||
static int ejs_randsid(MprVarHandle eid, int argc, struct MprVar **argv)
|
||||
{
|
||||
char *s = talloc_asprintf(mprMemCtx(), "S-1-5-21-%8u-%8u-%8u",
|
||||
(unsigned)generate_random(),
|
||||
(unsigned)generate_random(),
|
||||
(unsigned)generate_random());
|
||||
mpr_Return(eid, mprString(s));
|
||||
talloc_free(s);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
setup C functions that be called from ejs
|
||||
*/
|
||||
void smb_setup_ejs_random(void)
|
||||
{
|
||||
ejsDefineCFunction(-1, "random", ejs_random, NULL, MPR_VAR_SCRIPT_HANDLE);
|
||||
ejsDefineCFunction(-1, "randpass", ejs_randpass, NULL, MPR_VAR_SCRIPT_HANDLE);
|
||||
ejsDefineCFunction(-1, "randguid", ejs_randguid, NULL, MPR_VAR_SCRIPT_HANDLE);
|
||||
ejsDefineCFunction(-1, "randsid", ejs_randsid, NULL, MPR_VAR_SCRIPT_HANDLE);
|
||||
}
|
@ -115,7 +115,7 @@ static int ejs_join(MprVarHandle eid, int argc, struct MprVar **argv)
|
||||
}
|
||||
|
||||
separator = mprToString(argv[0]);
|
||||
list = mprToList(tmp_ctx, argv[1]);
|
||||
list = mprToArray(tmp_ctx, argv[1]);
|
||||
|
||||
if (list == NULL || list[0] == NULL) {
|
||||
talloc_free(tmp_ctx);
|
||||
|
95
source/scripting/ejs/smbcalls_sys.c
Normal file
95
source/scripting/ejs/smbcalls_sys.c
Normal file
@ -0,0 +1,95 @@
|
||||
/*
|
||||
Unix SMB/CIFS implementation.
|
||||
|
||||
provide access to system functions
|
||||
|
||||
Copyright (C) Andrew Tridgell 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/ejs/ejs.h"
|
||||
|
||||
/*
|
||||
return the list of configured network interfaces
|
||||
*/
|
||||
static int ejs_sys_interfaces(MprVarHandle eid, int argc, struct MprVar **argv)
|
||||
{
|
||||
int i, count = iface_count();
|
||||
struct MprVar ret = mprObject("interfaces");
|
||||
for (i=0;i<count;i++) {
|
||||
mprAddArray(&ret, i, mprString(iface_n_ip(i)));
|
||||
}
|
||||
mpr_Return(eid, ret);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
return the hostname from gethostname()
|
||||
*/
|
||||
static int ejs_sys_hostname(MprVarHandle eid, int argc, struct MprVar **argv)
|
||||
{
|
||||
char name[200];
|
||||
if (gethostname(name, sizeof(name)-1) == -1) {
|
||||
ejsSetErrorMsg(eid, "gethostname failed - %s", strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
mpr_Return(eid, mprString(name));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
return current time as a 64 bit nttime value
|
||||
*/
|
||||
static int ejs_sys_nttime(MprVarHandle eid, int argc, struct MprVar **argv)
|
||||
{
|
||||
struct timeval tv = timeval_current();
|
||||
struct MprVar v = mprCreateNumberVar(timeval_to_nttime(&tv));
|
||||
mpr_Return(eid, v);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
return a ldap time string from a nttime
|
||||
*/
|
||||
static int ejs_sys_ldaptime(MprVarHandle eid, int argc, struct MprVar **argv)
|
||||
{
|
||||
char *s;
|
||||
time_t t;
|
||||
if (argc != 1 || !mprVarIsNumber(argv[0]->type)) {
|
||||
ejsSetErrorMsg(eid, "sys_ldaptime invalid arguments");
|
||||
return -1;
|
||||
}
|
||||
t = nt_time_to_unix(mprVarToNumber(argv[0]));
|
||||
s = ldap_timestring(mprMemCtx(), t);
|
||||
mpr_Return(eid, mprString(s));
|
||||
talloc_free(s);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
setup C functions that be called from ejs
|
||||
*/
|
||||
void smb_setup_ejs_system(void)
|
||||
{
|
||||
ejsDefineCFunction(-1, "sys_interfaces", ejs_sys_interfaces, NULL, MPR_VAR_SCRIPT_HANDLE);
|
||||
ejsDefineCFunction(-1, "sys_hostname", ejs_sys_hostname, NULL, MPR_VAR_SCRIPT_HANDLE);
|
||||
ejsDefineCFunction(-1, "sys_nttime", ejs_sys_nttime, NULL, MPR_VAR_SCRIPT_HANDLE);
|
||||
ejsDefineCFunction(-1, "sys_ldaptime", ejs_sys_ldaptime, NULL, MPR_VAR_SCRIPT_HANDLE);
|
||||
}
|
Loading…
Reference in New Issue
Block a user