summaryrefslogtreecommitdiff
path: root/source4/scripting/ejs
diff options
context:
space:
mode:
Diffstat (limited to 'source4/scripting/ejs')
-rw-r--r--source4/scripting/ejs/smbcalls.c1
-rw-r--r--source4/scripting/ejs/smbcalls_cli.c89
2 files changed, 90 insertions, 0 deletions
diff --git a/source4/scripting/ejs/smbcalls.c b/source4/scripting/ejs/smbcalls.c
index 00a2547bac..46fce4b98e 100644
--- a/source4/scripting/ejs/smbcalls.c
+++ b/source4/scripting/ejs/smbcalls.c
@@ -187,6 +187,7 @@ void smb_setup_ejs_functions(void)
smb_setup_ejs_config();
smb_setup_ejs_ldb();
smb_setup_ejs_nbt();
+ smb_setup_ejs_cli();
ejsDefineCFunction(-1, "typeof", ejs_typeof, NULL, MPR_VAR_SCRIPT_HANDLE);
ejsDefineStringCFunction(-1, "getDomainList", ejs_domain_list, NULL, MPR_VAR_SCRIPT_HANDLE);
diff --git a/source4/scripting/ejs/smbcalls_cli.c b/source4/scripting/ejs/smbcalls_cli.c
new file mode 100644
index 0000000000..adb55a0184
--- /dev/null
+++ b/source4/scripting/ejs/smbcalls_cli.c
@@ -0,0 +1,89 @@
+/*
+ Unix SMB/CIFS implementation.
+
+ provide hooks into smbd C calls from ejs scripts
+
+ Copyright (C) Tim Potter 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/ejs/ejs.h"
+#include "librpc/gen_ndr/ndr_nbt.h"
+
+/* Connect to a server */
+
+static int ejs_cli_connect(MprVarHandle eid, int argc, char **argv)
+{
+ struct smbcli_socket *sock;
+ struct smbcli_transport *transport;
+ struct nbt_name calling, called;
+ NTSTATUS result;
+
+ if (argc != 1) {
+ ejsSetErrorMsg(eid, "connect invalid arguments");
+ return -1;
+ }
+
+ /* Socket connect */
+
+ sock = smbcli_sock_init(NULL, NULL);
+
+ if (!sock) {
+ ejsSetErrorMsg(eid, "socket initialisation failed");
+ return -1;
+ }
+
+ if (!smbcli_sock_connect_byname(sock, argv[0], 0)) {
+ ejsSetErrorMsg(eid, "socket connect failed");
+ return -1;
+ }
+
+ transport = smbcli_transport_init(sock, sock, True);
+
+ if (!transport) {
+ ejsSetErrorMsg(eid, "transport init failed");
+ return -1;
+ }
+
+ /* Send a netbios session request */
+
+ make_nbt_name_client(&calling, lp_netbios_name());
+
+ nbt_choose_called_name(NULL, &called, argv[0], NBT_NAME_SERVER);
+
+ if (!smbcli_transport_connect(transport, &calling, &called)) {
+ ejsSetErrorMsg(eid, "transport establishment failed");
+ return -1;
+ }
+
+ result = smb_raw_negotiate(transport, lp_maxprotocol());
+
+ if (!NT_STATUS_IS_OK(result)) {
+ ejsSetReturnValue(eid, mprNTSTATUS(result));
+ return 0;
+ }
+
+ return 0;
+}
+
+/*
+ setup C functions that be called from ejs
+*/
+void smb_setup_ejs_cli(void)
+{
+ ejsDefineStringCFunction(-1, "connect", ejs_cli_connect, NULL, MPR_VAR_SCRIPT_HANDLE);
+}