r17339: pass the event context and messaging context together to the
authorStefan Metzmacher <metze@samba.org>
Mon, 31 Jul 2006 13:34:00 +0000 (13:34 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 19:15:16 +0000 (14:15 -0500)
smb ejs functions

metze

source/scripting/ejs/smbcalls.h
source/scripting/ejs/smbcalls_auth.c
source/web_server/http.c

index 5d5f6841d96e77208e6ae238ea436b9b10bbf88b..9fa91002762098a5c901cf8bcb4baacdfa84e4ff 100644 (file)
@@ -29,6 +29,11 @@ void mprAddArray(struct MprVar *var, int i, struct MprVar v);
 void mprSetCFunction(struct MprVar *obj, const char *name, MprCFunction fn);
 void mprSetStringCFunction(struct MprVar *obj, const char *name, MprStringCFunction fn);
 
+struct smbcalls_context {
+       struct event_context *event_ctx;
+       struct messaging_context *msg_ctx;
+};
+
 struct ldb_context;
 struct ldb_message;
 struct cli_credentials;
index 568b24713ccae3cb7254a6e09febfc7efd64bb7a..678d3c6a7ffabee1a53be5df4cd811db63565846 100644 (file)
@@ -39,8 +39,17 @@ static int ejs_doauth(MprVarHandle eid,
        struct MprVar *session_info_obj;
        NTSTATUS nt_status;
 
-       /* Hope we can find the event context somewhere up there... */
-       struct event_context *ev = event_context_find(tmp_ctx);
+       struct smbcalls_context *c;
+       struct event_context *ev;
+
+       /* Hope we can find an smbcalls_context somewhere up there... */
+       c = talloc_find_parent_bytype(tmp_ctx, struct smbcalls_context);
+       if (c) {
+               ev = c->event_ctx;
+       } else {
+               /* Hope we can find the event context somewhere up there... */
+               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)) {
index 8dd594de20c01ea24749e725bbba9cd8505924b6..3e27b8f08975521ecf62076c5169a31bd24c24da 100644 (file)
@@ -755,8 +755,9 @@ static const struct Esp esp_control = {
 void http_process_input(struct websrv_context *web)
 {
        NTSTATUS status;
-       struct esp_state *esp;
+       struct esp_state *esp = NULL;
        struct esp_data *edata = talloc_get_type(web->task->private, struct esp_data);
+       struct smbcalls_context *smbcalls_ctx;
        char *p;
        void *save_mpr_ctx = mprMemCtx();
        void *ejs_save = ejs_save_state();
@@ -777,7 +778,16 @@ void http_process_input(struct websrv_context *web)
                {"esp",  "text/html", True}
        };
 
-       esp = talloc_zero(web, struct esp_state);
+       /*
+        * give the smbcalls a chance to find the event context
+        * and messaging context 
+        */
+       smbcalls_ctx = talloc(web, struct smbcalls_context);
+       if (smbcalls_ctx == NULL) goto internal_error;
+       smbcalls_ctx->event_ctx = web->conn->event.ctx;
+       smbcalls_ctx->msg_ctx = web->conn->msg_ctx;
+
+       esp = talloc_zero(smbcalls_ctx, struct esp_state);
        if (esp == NULL) goto internal_error;
 
        esp->web = web;