1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-25 23:21:54 +03:00

r8318: added a bunch more ejs calls.

getgr*()
  getpw*()
  strlower()
  strupper()
  IfaceList()
This commit is contained in:
Andrew Tridgell 2005-07-11 09:19:50 +00:00 committed by Gerald (Jerry) Carter
parent 5f079d7463
commit 1517ad490d
7 changed files with 249 additions and 4 deletions

View File

@ -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

View File

@ -114,6 +114,18 @@ struct MprVar mprList(const char *name, const char **list)
return var;
}
/*
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
*/

View File

@ -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);
}

View File

@ -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);

View File

@ -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);
}

View File

@ -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);
}

View File

@ -50,4 +50,3 @@ function check_array_zero(a)
assert(a[i] == 0);
}
}