diff options
Diffstat (limited to 'source4/scripting/ejs')
| -rw-r--r-- | source4/scripting/ejs/config.mk | 5 | ||||
| -rw-r--r-- | source4/scripting/ejs/ejsnet.c | 420 | ||||
| -rw-r--r-- | source4/scripting/ejs/ejsnet.h | 26 | ||||
| -rw-r--r-- | source4/scripting/ejs/ejsnet/config.mk | 13 | 
4 files changed, 15 insertions, 449 deletions
diff --git a/source4/scripting/ejs/config.mk b/source4/scripting/ejs/config.mk index 0326bca857..38ed6778f7 100644 --- a/source4/scripting/ejs/config.mk +++ b/source4/scripting/ejs/config.mk @@ -71,11 +71,10 @@ OBJ_FILES = \  		smbcalls_options.o \  		smbcalls_creds.o \  		smbcalls_param.o \ -		ejsnet.o \  		mprutil.o \  		literal.o  PUBLIC_DEPENDENCIES = \ -		EJS LIBSAMBA-UTIL \ +		EJS EJSNET LIBSAMBA-UTIL \  		EJSRPC MESSAGING \  		LIBSAMBA-NET LIBCLI_SMB LIBPOPT \  		CREDENTIALS POPT_CREDENTIALS POPT_SAMBA \ @@ -90,6 +89,6 @@ PUBLIC_DEPENDENCIES = \  INSTALLDIR = BINDIR  OBJ_FILES = \  		smbscript.o -PRIVATE_DEPENDENCIES = EJS LIBSAMBA-UTIL smbcalls LIBSAMBA-CONFIG  +PRIVATE_DEPENDENCIES = EJS EJSNET LIBSAMBA-UTIL smbcalls LIBSAMBA-CONFIG  # End BINARY SMBSCRIPT  ####################### diff --git a/source4/scripting/ejs/ejsnet.c b/source4/scripting/ejs/ejsnet.c deleted file mode 100644 index 41ea1e2327..0000000000 --- a/source4/scripting/ejs/ejsnet.c +++ /dev/null @@ -1,420 +0,0 @@ -/*  -   Unix SMB/CIFS implementation. - -   provide interfaces to libnet calls from ejs scripts - -   Copyright (C) Rafal Szczesniak  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 "lib/appweb/ejs/ejs.h" -#include "scripting/ejs/smbcalls.h" -#include "scripting/ejs/ejsnet.h" -#include "libnet/libnet.h" -#include "events/events.h" -#include "auth/credentials/credentials.h" - -static int ejs_net_userman(MprVarHandle eid, int argc, struct MprVar** argv); -static int ejs_net_createuser(MprVarHandle eid, int argc, char **argv); -static int ejs_net_deleteuser(MprVarHandle eid, int argc, char **argv); -static int ejs_net_userinfo(MprVarHandle eid, int argc, char **argv); -static int ejs_net_join_domain(MprVarHandle eid, int argc, struct MprVar **argv); -static int ejs_net_samsync_ldb(MprVarHandle eid, int argc, struct MprVar **argv); - -/* -  Usage: -  net = NetContext(credentials); -*/ - -static int ejs_net_context(MprVarHandle eid, int argc, struct MprVar **argv) -{ -	TALLOC_CTX *event_mem_ctx = talloc_new(mprMemCtx()); -	struct cli_credentials *creds; -	struct libnet_context *ctx; -	struct MprVar obj; -	struct event_context *ev; - -	if (!event_mem_ctx) { -		ejsSetErrorMsg(eid, "talloc_new() failed"); -		return -1; -	} -	ev = event_context_find(event_mem_ctx); -	ctx = libnet_context_init(ev); -	/* IF we generated a new event context, it will be under here, -	 * and we need it to last as long as the libnet context, so -	 * make it a child */ -	talloc_steal(ctx, event_mem_ctx); - -	if (argc == 0 || (argc == 1 && argv[0]->type == MPR_TYPE_NULL)) { -		creds = cli_credentials_init(ctx); -		if (creds == NULL) { -			ejsSetErrorMsg(eid, "cli_credential_init() failed"); -			talloc_free(ctx); -			return -1; -		} -		cli_credentials_set_conf(creds); -		cli_credentials_set_anonymous(creds); -	} else if (argc == 1 && argv[0]->type == MPR_TYPE_OBJECT) { -		/* get credential values from credentials object */ -		creds = mprGetPtr(argv[0], "creds"); -		if (creds == NULL) { -			ejsSetErrorMsg(eid, "userAuth requires a 'creds' first parameter"); -			talloc_free(ctx); -			return -1; -		} -	} else { -		ejsSetErrorMsg(eid, "NetContext invalid arguments, this function requires an object."); -		talloc_free(ctx); -		return -1; -	} -	ctx->cred = creds; - -	obj = mprObject("NetCtx"); -	mprSetPtrChild(&obj, "ctx", ctx); -	 -	mprSetCFunction(&obj, "UserMgr", ejs_net_userman); -	mprSetCFunction(&obj, "JoinDomain", ejs_net_join_domain); -	mprSetCFunction(&obj, "SamSyncLdb", ejs_net_samsync_ldb); -	mpr_Return(eid, obj); - -	return 0; -} - - -static int ejs_net_join_domain(MprVarHandle eid, int argc, struct MprVar **argv) -{ -	TALLOC_CTX *mem_ctx; -	struct libnet_context *ctx; -	struct libnet_Join *join; -	NTSTATUS status; -	ctx = mprGetThisPtr(eid, "ctx"); -	mem_ctx = talloc_new(mprMemCtx()); - -	join = talloc(mem_ctx, struct libnet_Join); -	if (!join) { -		talloc_free(mem_ctx); -		return -1; -	} - -	/* prepare parameters for the join */ -	join->in.netbios_name  = NULL; -	join->in.join_type     = SEC_CHAN_WKSTA; -	join->in.domain_name   = cli_credentials_get_domain(ctx->cred); -	join->in.level         = LIBNET_JOIN_AUTOMATIC; -	join->out.error_string = NULL; - -	if (argc == 1 && argv[0]->type == MPR_TYPE_OBJECT) { -		MprVar *netbios_name = mprGetProperty(argv[0], "netbios_name", NULL); -		MprVar *domain_name = mprGetProperty(argv[0], "domain_name", NULL); -		MprVar *join_type = mprGetProperty(argv[0], "join_type", NULL); -		if (netbios_name) { -			join->in.netbios_name = mprToString(netbios_name); -		} -		if (domain_name) { -			join->in.domain_name = mprToString(domain_name); -		} -		if (join_type) { -			join->in.join_type = mprToInt(join_type); -		} -	} - -	if (!join->in.domain_name) { -		ejsSetErrorMsg(eid, "a domain must be specified for to join"); -		talloc_free(mem_ctx); -		return -1; -	} - -	/* do the domain join */ -	status = libnet_Join(ctx, join, join); -	 -	if (!NT_STATUS_IS_OK(status)) { -		MprVar error_string = mprString(join->out.error_string); -		 -		mprSetPropertyValue(argv[0], "error_string", error_string); -		mpr_Return(eid, mprCreateBoolVar(False)); -	} else { -		mpr_Return(eid, mprCreateBoolVar(True)); -	} -	talloc_free(mem_ctx); -	return 0; -} - - -static int ejs_net_samsync_ldb(MprVarHandle eid, int argc, struct MprVar **argv) -{ -	TALLOC_CTX *mem_ctx; -	struct libnet_context *ctx; -	struct libnet_samsync_ldb *samsync; -	NTSTATUS status; -	ctx = mprGetThisPtr(eid, "ctx"); -	mem_ctx = talloc_new(mprMemCtx()); - -	samsync = talloc(mem_ctx, struct libnet_samsync_ldb); -	if (!samsync) { -		talloc_free(mem_ctx); -		return -1; -	} - -	/* prepare parameters for the samsync */ -	samsync->in.machine_account = NULL; -	samsync->in.session_info = NULL; -	samsync->in.binding_string = NULL; -	samsync->out.error_string = NULL; - -	if (argc == 1 && argv[0]->type == MPR_TYPE_OBJECT) { -		MprVar *credentials = mprGetProperty(argv[0], "machine_account", NULL); -		MprVar *session_info = mprGetProperty(argv[0], "session_info", NULL); -		if (credentials) { -			samsync->in.machine_account = talloc_get_type(mprGetPtr(credentials, "creds"), struct cli_credentials); -		} -		if (session_info) { -			samsync->in.session_info = talloc_get_type(mprGetPtr(session_info, "session_info"), struct auth_session_info); -		} -	} - -	/* do the domain samsync */ -	status = libnet_samsync_ldb(ctx, samsync, samsync); -	 -	if (!NT_STATUS_IS_OK(status)) { -		MprVar error_string = mprString(samsync->out.error_string); -		 -		mprSetPropertyValue(argv[0], "error_string", error_string); -		mpr_Return(eid, mprCreateBoolVar(False)); -	} else { -		mpr_Return(eid, mprCreateBoolVar(True)); -	} -	talloc_free(mem_ctx); -	return 0; -} - - -/* -  Usage: -  usrCtx = net.UserMgr(domain); -*/ -static int ejs_net_userman(MprVarHandle eid, int argc, struct MprVar **argv) -{ -	TALLOC_CTX *mem_ctx; -	struct libnet_context *ctx; -	const char *userman_domain = NULL; -	struct MprVar *obj = NULL; - -	ctx = mprGetThisPtr(eid, "ctx"); -	mem_ctx = talloc_new(mprMemCtx()); - -	if (argc == 0) { -		userman_domain = cli_credentials_get_domain(ctx->cred); - -	} else if (argc == 1 && mprVarIsString(argv[0]->type)) { -		userman_domain = talloc_strdup(ctx, mprToString(argv[0])); - -	} else { -		ejsSetErrorMsg(eid, "too many arguments"); -		goto done; -	} -	 -	if (!userman_domain) { -		ejsSetErrorMsg(eid, "a domain must be specified for user management"); -		goto done; -	} - -	obj = mprInitObject(eid, "NetUsrCtx", argc, argv); -	mprSetPtrChild(obj, "ctx", ctx); -	mprSetPtrChild(obj, "domain", userman_domain); - -	mprSetStringCFunction(obj, "Create", ejs_net_createuser); -	mprSetStringCFunction(obj, "Delete", ejs_net_deleteuser); -	mprSetStringCFunction(obj, "Info", ejs_net_userinfo); - -	return 0; -done: -	talloc_free(mem_ctx); -	return -1; -} - - -static int ejs_net_createuser(MprVarHandle eid, int argc, char **argv) -{ -	NTSTATUS status = NT_STATUS_UNSUCCESSFUL; -	TALLOC_CTX *mem_ctx; -	struct libnet_context *ctx; -	const char *userman_domain = NULL; -	struct libnet_CreateUser req; - -	if (argc != 1) { -		ejsSetErrorMsg(eid, "argument 1 must be a string"); -		return -1; -	} - -	ctx = mprGetThisPtr(eid, "ctx"); -	if (!ctx) { -		ejsSetErrorMsg(eid, "ctx property returns null pointer"); -		return -1; -	} - -	userman_domain = mprGetThisPtr(eid, "domain"); -	if (!userman_domain) { -		ejsSetErrorMsg(eid, "domain property returns null pointer"); -		return -1; -	} -	 -	mem_ctx = talloc_new(mprMemCtx()); - -    	req.in.domain_name = userman_domain; -	req.in.user_name   = argv[0]; - -	status = libnet_CreateUser(ctx, mem_ctx, &req); -	if (!NT_STATUS_IS_OK(status)) { -		ejsSetErrorMsg(eid, "%s", req.out.error_string); -	} - -	talloc_free(mem_ctx); -	mpr_Return(eid, mprNTSTATUS(status)); -	return 0; -} - - -static int ejs_net_deleteuser(MprVarHandle eid, int argc, char **argv) -{ -	NTSTATUS status = NT_STATUS_UNSUCCESSFUL; -	TALLOC_CTX *mem_ctx; -	struct libnet_context *ctx; -	const char *userman_domain = NULL; -	struct libnet_DeleteUser req; - -	if (argc != 1) { -		ejsSetErrorMsg(eid, "argument 1 must be a string"); -		return -1; -	} - -	ctx = mprGetThisPtr(eid, "ctx"); -	if (!ctx) { -		ejsSetErrorMsg(eid, "ctx property returns null pointer"); -		return -1; -	} - -	userman_domain = mprGetThisPtr(eid, "domain"); -	if (!userman_domain) { -		ejsSetErrorMsg(eid, "domain property returns null pointer"); -		return -1; -	} -	 -	mem_ctx = talloc_new(mprMemCtx()); - -    	req.in.domain_name = userman_domain; -	req.in.user_name   = argv[0]; - -	status = libnet_DeleteUser(ctx, mem_ctx, &req); -	if (!NT_STATUS_IS_OK(status)) { -		ejsSetErrorMsg(eid, "%s", req.out.error_string); -	} - -	talloc_free(mem_ctx); -	mpr_Return(eid, mprNTSTATUS(status)); -	return 0; -} - - -static int ejs_net_userinfo(MprVarHandle eid, int argc, char **argv) -{ -	NTSTATUS status = NT_STATUS_UNSUCCESSFUL; -	TALLOC_CTX *mem_ctx; -	struct libnet_context *ctx; -	const char *userman_domain = NULL; -	struct libnet_UserInfo req; -	struct MprVar mprUserInfo; -	struct MprVar mprAccountName, mprFullName, mprDescription; -	struct MprVar mprHomeDir, mprHomeDrive, mprComment; -	struct MprVar mprLogonScript; -	struct MprVar mprAcctExpiry, mprAllowPassChange, mprForcePassChange; - -	if (argc != 1) { -		ejsSetErrorMsg(eid, "argument 1 must be a string"); -		return -1; -	} - -	ctx = mprGetThisPtr(eid, "ctx"); -	if (!ctx) { -		ejsSetErrorMsg(eid, "ctx property returns null pointer"); -		return -1; -	} - -	userman_domain = mprGetThisPtr(eid, "domain"); -	if (!userman_domain) { -		ejsSetErrorMsg(eid, "domain property returns null pointer"); -		return -1; -	} - -	mem_ctx = talloc_new(mprMemCtx()); -	 -	req.in.domain_name = userman_domain; -	req.in.user_name   = argv[0]; -	 -	status = libnet_UserInfo(ctx, mem_ctx, &req); -	if (!NT_STATUS_IS_OK(status)) { -		ejsSetErrorMsg(eid, "%s", req.out.error_string); -		 -		/* create null object to return */ -		mprUserInfo = mprCreateNullVar(); -		goto done; -	} - -	/* create UserInfo object */ -	mprUserInfo = mprObject("UserInfo"); - -	mprAccountName = mprString(req.out.account_name); -	mprFullName = mprString(req.out.full_name); -	mprDescription = mprString(req.out.description); -	mprHomeDir = mprString(req.out.home_directory); -	mprHomeDrive = mprString(req.out.home_drive); -	mprComment = mprString(req.out.comment); -	mprLogonScript = mprString(req.out.logon_script); -	mprAcctExpiry = mprString(timestring(mem_ctx, req.out.acct_expiry->tv_sec)); -	mprAllowPassChange = mprString(timestring(ctx, req.out.allow_password_change->tv_sec)); -	mprForcePassChange = mprString(timestring(ctx, req.out.force_password_change->tv_sec)); - -	status = mprSetVar(&mprUserInfo, "AccountName", mprAccountName); -	if (!NT_STATUS_IS_OK(status)) goto done; -	status = mprSetVar(&mprUserInfo, "FullName", mprFullName); -	if (!NT_STATUS_IS_OK(status)) goto done; -	status = mprSetVar(&mprUserInfo, "Description", mprDescription); -	if (!NT_STATUS_IS_OK(status)) goto done; -	status = mprSetVar(&mprUserInfo, "HomeDirectory", mprHomeDir); -	if (!NT_STATUS_IS_OK(status)) goto done; -	status = mprSetVar(&mprUserInfo, "HomeDrive", mprHomeDrive); -	if (!NT_STATUS_IS_OK(status)) goto done; -	status = mprSetVar(&mprUserInfo, "Comment", mprComment); -	if (!NT_STATUS_IS_OK(status)) goto done; -	status = mprSetVar(&mprUserInfo, "LogonScript", mprLogonScript); -	if (!NT_STATUS_IS_OK(status)) goto done; -	status = mprSetVar(&mprUserInfo, "AcctExpiry", mprAcctExpiry); -	if (!NT_STATUS_IS_OK(status)) goto done; -	status = mprSetVar(&mprUserInfo, "AllowPasswordChange", mprAllowPassChange); -	if (!NT_STATUS_IS_OK(status)) goto done; -	status = mprSetVar(&mprUserInfo, "ForcePasswordChange", mprForcePassChange); -	if (!NT_STATUS_IS_OK(status)) goto done; -done: -	talloc_free(mem_ctx); -	mpr_Return(eid, mprUserInfo); -	return 0; -} - - -void ejsnet_setup(void) -{ -	ejsDefineCFunction(-1, "NetContext", ejs_net_context, NULL, MPR_VAR_SCRIPT_HANDLE); -} diff --git a/source4/scripting/ejs/ejsnet.h b/source4/scripting/ejs/ejsnet.h deleted file mode 100644 index 7d4bc32753..0000000000 --- a/source4/scripting/ejs/ejsnet.h +++ /dev/null @@ -1,26 +0,0 @@ -/*  -   Unix SMB/CIFS implementation. - -   provide interfaces to libnet calls from ejs scripts - -   Copyright (C) Rafal Szczesniak  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 "lib/appweb/ejs/ejs.h" - - -void ejsnet_setup(void); diff --git a/source4/scripting/ejs/ejsnet/config.mk b/source4/scripting/ejs/ejsnet/config.mk new file mode 100644 index 0000000000..4a3a428e44 --- /dev/null +++ b/source4/scripting/ejs/ejsnet/config.mk @@ -0,0 +1,13 @@ +####################### +# Start LIBRARY EJSNET +[LIBRARY::EJSNET] +SO_VERSION = 0 +VERSION = 0.0.1 +PRIVATE_PROTO_HEADER = proto.h +OBJ_FILES = \ +		net_ctx.o \ +		net_user.o \ +		mpr_user.o +PUBLIC_DEPENDENCIES = LIBSAMBA-NET LIBCLI_SMB CREDENTIALS +# End SUBSYSTEM ejsnet +#######################  | 
