diff options
-rw-r--r-- | source4/scripting/ejs/ejsnet.c | 16 | ||||
-rw-r--r-- | source4/scripting/ejs/smbcalls_auth.c | 17 |
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); |