summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source4/scripting/ejs/ejsnet.c16
-rw-r--r--source4/scripting/ejs/smbcalls_auth.c17
2 files changed, 22 insertions, 11 deletions
diff --git a/source4/scripting/ejs/ejsnet.c b/source4/scripting/ejs/ejsnet.c
index 8962025259..6c7a0274cf 100644
--- a/source4/scripting/ejs/ejsnet.c
+++ b/source4/scripting/ejs/ejsnet.c
@@ -25,7 +25,7 @@
#include "scripting/ejs/smbcalls.h"
#include "scripting/ejs/ejsnet.h"
#include "libnet/libnet.h"
-
+#include "events/events.h"
static int ejs_net_userman(MprVarHandle, int, struct MprVar**);
static int ejs_net_createuser(MprVarHandle, int, char**);
@@ -39,12 +39,22 @@ static int ejs_net_samsync_ldb(MprVarHandle eid, int argc, struct MprVar **argv)
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;
- /* TODO: Need to get the right event context in here */
- ctx = libnet_context_init(NULL);
+ 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);
diff --git a/source4/scripting/ejs/smbcalls_auth.c b/source4/scripting/ejs/smbcalls_auth.c
index 9b71314d3f..ea9aaf9739 100644
--- a/source4/scripting/ejs/smbcalls_auth.c
+++ b/source4/scripting/ejs/smbcalls_auth.c
@@ -25,24 +25,24 @@
#include "lib/appweb/ejs/ejs.h"
#include "auth/auth.h"
#include "scripting/ejs/smbcalls.h"
+#include "lib/events/events.h"
static int ejs_doauth(MprVarHandle eid,
TALLOC_CTX *tmp_ctx, struct MprVar *auth, const char *username,
const char *password, const char *domain, const char *workstation,
- struct socket_address *remote_host, const char *authtype)
+ struct socket_address *remote_host, const char **auth_types)
{
struct auth_usersupplied_info *user_info = NULL;
struct auth_serversupplied_info *server_info = NULL;
struct auth_session_info *session_info = NULL;
struct auth_context *auth_context;
struct MprVar *session_info_obj;
- const char *auth_types[] = { authtype, NULL };
NTSTATUS nt_status;
- /*
- darn, we need some way to get the right event_context here
- */
- nt_status = auth_context_create(tmp_ctx, auth_types, &auth_context, NULL);
+ /* Hope we can find the event context somewhere up there... */
+ struct event_context *ev = event_context_find(tmp_ctx);
+
+ nt_status = auth_context_create(tmp_ctx, auth_types, &auth_context, ev);
if (!NT_STATUS_IS_OK(nt_status)) {
mprSetPropertyValue(auth, "result", mprCreateBoolVar(False));
mprSetPropertyValue(auth, "report", mprString("Auth System Failure"));
@@ -122,6 +122,7 @@ static int ejs_userAuth(MprVarHandle eid, int argc, struct MprVar **argv)
struct MprVar auth;
struct cli_credentials *creds;
struct socket_address *remote_host;
+ const char *auth_types_unix[] = { "unix", NULL };
if (argc != 2 || argv[0]->type != MPR_TYPE_OBJECT || argv[1]->type != MPR_TYPE_OBJECT) {
ejsSetErrorMsg(eid, "userAuth invalid arguments, this function requires an object.");
@@ -157,9 +158,9 @@ static int ejs_userAuth(MprVarHandle eid, int argc, struct MprVar **argv)
auth = mprObject("auth");
if (domain && (strcmp("SYSTEM USER", domain) == 0)) {
- ejs_doauth(eid, tmp_ctx, &auth, username, password, domain, workstation, remote_host, "unix");
+ ejs_doauth(eid, tmp_ctx, &auth, username, password, domain, workstation, remote_host, auth_types_unix);
} else {
- ejs_doauth(eid, tmp_ctx, &auth, username, password, domain, workstation, remote_host, "sam");
+ ejs_doauth(eid, tmp_ctx, &auth, username, password, domain, workstation, remote_host, lp_auth_methods());
}
mpr_Return(eid, auth);