diff options
-rw-r--r-- | source4/scripting/ejs/config.mk | 2 | ||||
-rw-r--r-- | source4/scripting/ejs/mprutil.c | 12 | ||||
-rw-r--r-- | source4/scripting/ejs/smbcalls.c | 17 | ||||
-rw-r--r-- | source4/scripting/ejs/smbcalls.h | 3 | ||||
-rw-r--r-- | source4/scripting/ejs/smbcalls_nss.c | 148 | ||||
-rw-r--r-- | source4/scripting/ejs/smbcalls_string.c | 70 | ||||
-rw-r--r-- | source4/scripting/libjs/base.js | 1 |
7 files changed, 249 insertions, 4 deletions
diff --git a/source4/scripting/ejs/config.mk b/source4/scripting/ejs/config.mk index 7afcacbdf5..5e061cb2a3 100644 --- a/source4/scripting/ejs/config.mk +++ b/source4/scripting/ejs/config.mk @@ -20,6 +20,8 @@ OBJ_FILES = \ scripting/ejs/smbcalls_rpc.o \ scripting/ejs/smbcalls_auth.o \ scripting/ejs/smbcalls_options.o \ + scripting/ejs/smbcalls_nss.o \ + scripting/ejs/smbcalls_string.o \ scripting/ejs/mprutil.o REQUIRED_SUBSYSTEMS = AUTH EJS LIBBASIC EJSRPC MESSAGING # End SUBSYSTEM SMBCALLS diff --git a/source4/scripting/ejs/mprutil.c b/source4/scripting/ejs/mprutil.c index 6b5c02c48d..a9cf71b15d 100644 --- a/source4/scripting/ejs/mprutil.c +++ b/source4/scripting/ejs/mprutil.c @@ -115,6 +115,18 @@ struct MprVar mprList(const char *name, const char **list) } /* + construct a MprVar from a string, using NULL if needed +*/ +struct MprVar mprString(const char *s) +{ + struct MprVar var; + if (s == NULL) { + return mprCreatePtrVar(NULL, "NULL"); + } + return mprCreateStringVar(s, 1); +} + +/* construct a string MprVar from a lump of data */ struct MprVar mprData(const uint8_t *p, size_t length) diff --git a/source4/scripting/ejs/smbcalls.c b/source4/scripting/ejs/smbcalls.c index 328bd14ab5..5972518036 100644 --- a/source4/scripting/ejs/smbcalls.c +++ b/source4/scripting/ejs/smbcalls.c @@ -64,6 +64,20 @@ 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 = mprCreateObjVar("interfaces", MPR_DEFAULT_HASH_SIZE); + 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 @@ -123,8 +137,11 @@ void smb_setup_ejs_functions(void) smb_setup_ejs_rpc(); smb_setup_ejs_auth(); smb_setup_ejs_options(); + smb_setup_ejs_nss(); + smb_setup_ejs_string(); 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); } diff --git a/source4/scripting/ejs/smbcalls.h b/source4/scripting/ejs/smbcalls.h index 5bd7d4e448..57242fac0b 100644 --- a/source4/scripting/ejs/smbcalls.h +++ b/source4/scripting/ejs/smbcalls.h @@ -26,6 +26,3 @@ void mpr_Return(int eid, struct MprVar); NTSTATUS mprSetVar(struct MprVar *v, const char *name, struct MprVar val); NTSTATUS mprGetVar(struct MprVar **v, const char *name); void mprAddArray(struct MprVar *var, int i, struct MprVar v); - - - diff --git a/source4/scripting/ejs/smbcalls_nss.c b/source4/scripting/ejs/smbcalls_nss.c new file mode 100644 index 0000000000..1eef1eff79 --- /dev/null +++ b/source4/scripting/ejs/smbcalls_nss.c @@ -0,0 +1,148 @@ +/* + Unix SMB/CIFS implementation. + + provide access to getpwnam() and related calls + + 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" + + +/* + return a struct passwd as an object +*/ +static struct MprVar mpr_passwd(struct passwd *pwd) +{ + struct MprVar ret; + if (pwd == NULL) { + return mprCreateUndefinedVar(); + } + ret = mprCreateObjVar("passwd", MPR_DEFAULT_HASH_SIZE); + + mprSetVar(&ret, "pw_name", mprString(pwd->pw_name)); + mprSetVar(&ret, "pw_passwd", mprString(pwd->pw_passwd)); + mprSetVar(&ret, "pw_uid", mprCreateIntegerVar(pwd->pw_uid)); + mprSetVar(&ret, "pw_gid", mprCreateIntegerVar(pwd->pw_gid)); + mprSetVar(&ret, "pw_gecos", mprString(pwd->pw_gecos)); + mprSetVar(&ret, "pw_dir", mprString(pwd->pw_dir)); + mprSetVar(&ret, "pw_shell", mprString(pwd->pw_shell)); + return ret; +} + +/* + return a struct passwd as an object +*/ +static struct MprVar mpr_group(struct group *grp) +{ + struct MprVar ret; + if (grp == NULL) { + return mprCreateUndefinedVar(); + } + ret = mprCreateObjVar("group", MPR_DEFAULT_HASH_SIZE); + + mprSetVar(&ret, "gr_name", mprString(grp->gr_name)); + mprSetVar(&ret, "gr_passwd", mprString(grp->gr_passwd)); + mprSetVar(&ret, "gr_gid", mprCreateIntegerVar(grp->gr_gid)); + mprSetVar(&ret, "gr_mem", mprList("gr_mem", (const char **)grp->gr_mem)); + return ret; +} + + +/* + usage: + var pw = getpwnam("root"); + + returns an object containing struct passwd entries +*/ +static int ejs_getpwnam(MprVarHandle eid, int argc, struct MprVar **argv) +{ + /* validate arguments */ + if (argc != 1 || argv[0]->type != MPR_TYPE_STRING) { + ejsSetErrorMsg(eid, "getpwnam invalid arguments"); + return -1; + } + + mpr_Return(eid, mpr_passwd(getpwnam(mprToString(argv[0])))); + return 0; +} + +/* + usage: + var pw = getpwuid(0); + + returns an object containing struct passwd entries +*/ +static int ejs_getpwuid(MprVarHandle eid, int argc, struct MprVar **argv) +{ + /* validate arguments */ + if (argc != 1 || argv[0]->type != MPR_TYPE_INT) { + ejsSetErrorMsg(eid, "getpwuid invalid arguments"); + return -1; + } + mpr_Return(eid, mpr_passwd(getpwuid(mprToInt(argv[0])))); + return 0; +} + +/* + usage: + var pw = getgrnam("users"); + + returns an object containing struct group entries +*/ +static int ejs_getgrnam(MprVarHandle eid, int argc, struct MprVar **argv) +{ + /* validate arguments */ + if (argc != 1 || argv[0]->type != MPR_TYPE_STRING) { + ejsSetErrorMsg(eid, "getgrnam invalid arguments"); + return -1; + } + mpr_Return(eid, mpr_group(getgrnam(mprToString(argv[0])))); + return 0; +} + +/* + usage: + var pw = getgrgid(0); + + returns an object containing struct group entries +*/ +static int ejs_getgrgid(MprVarHandle eid, int argc, struct MprVar **argv) +{ + /* validate arguments */ + if (argc != 1 || argv[0]->type != MPR_TYPE_STRING) { + ejsSetErrorMsg(eid, "getgrgid invalid arguments"); + return -1; + } + mpr_Return(eid, mpr_group(getgrgid(mprToInt(argv[0])))); + return 0; +} + + +/* + setup C functions that be called from ejs +*/ +void smb_setup_ejs_nss(void) +{ + ejsDefineCFunction(-1, "getpwnam", ejs_getpwnam, NULL, MPR_VAR_SCRIPT_HANDLE); + ejsDefineCFunction(-1, "getpwuid", ejs_getpwuid, NULL, MPR_VAR_SCRIPT_HANDLE); + ejsDefineCFunction(-1, "getgrnam", ejs_getgrnam, NULL, MPR_VAR_SCRIPT_HANDLE); + ejsDefineCFunction(-1, "getgrgid", ejs_getgrgid, NULL, MPR_VAR_SCRIPT_HANDLE); +} diff --git a/source4/scripting/ejs/smbcalls_string.c b/source4/scripting/ejs/smbcalls_string.c new file mode 100644 index 0000000000..7817de1b0d --- /dev/null +++ b/source4/scripting/ejs/smbcalls_string.c @@ -0,0 +1,70 @@ +/* + Unix SMB/CIFS implementation. + + provide access to string 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 s = strlower("UPPER"); +*/ +static int ejs_strlower(MprVarHandle eid, int argc, char **argv) +{ + char *s; + if (argc != 1) { + ejsSetErrorMsg(eid, "strlower invalid arguments"); + return -1; + } + s = strlower_talloc(mprMemCtx(), argv[0]); + mpr_Return(eid, mprString(s)); + talloc_free(s); + return 0; +} + +/* + usage: + var s = strupper("lower"); +*/ +static int ejs_strupper(MprVarHandle eid, int argc, char **argv) +{ + char *s; + if (argc != 1) { + ejsSetErrorMsg(eid, "strupper invalid arguments"); + return -1; + } + s = strupper_talloc(mprMemCtx(), argv[0]); + mpr_Return(eid, mprString(s)); + talloc_free(s); + return 0; +} + + +/* + setup C functions that be called from ejs +*/ +void smb_setup_ejs_string(void) +{ + ejsDefineStringCFunction(-1, "strlower", ejs_strlower, NULL, MPR_VAR_SCRIPT_HANDLE); + ejsDefineStringCFunction(-1, "strupper", ejs_strupper, NULL, MPR_VAR_SCRIPT_HANDLE); +} diff --git a/source4/scripting/libjs/base.js b/source4/scripting/libjs/base.js index 504cd82259..f5498789c5 100644 --- a/source4/scripting/libjs/base.js +++ b/source4/scripting/libjs/base.js @@ -50,4 +50,3 @@ function check_array_zero(a) assert(a[i] == 0); } } - |