s3:smbd: pass (raw) ev to SMB_VFS_GET_DOS_ATTRIBUTES_SEND() instead of smb_vfs_ev_glue
authorRalph Boehme <slow@samba.org>
Fri, 28 Dec 2018 11:12:20 +0000 (12:12 +0100)
committerStefan Metzmacher <metze@samba.org>
Fri, 11 Jan 2019 22:11:11 +0000 (23:11 +0100)
This also removes smb_vfs_ev_glue_[push|pop]_use() as the only caller
got removed.

Signed-off-by: Ralph Boehme <slow@samba.org>
Reviewed-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Stefan Metzmacher <metze@samba.org>
examples/VFS/skel_opaque.c
examples/VFS/skel_transparent.c
source3/include/vfs.h
source3/modules/vfs_default.c
source3/modules/vfs_full_audit.c
source3/modules/vfs_not_implemented.c
source3/modules/vfs_time_audit.c
source3/smbd/dosmode.c
source3/smbd/vfs.c

index b3cd83a..6510ef3 100644 (file)
@@ -714,12 +714,11 @@ struct skel_get_dos_attributes_state {
 
 static struct tevent_req *skel_get_dos_attributes_send(
                        TALLOC_CTX *mem_ctx,
-                       const struct smb_vfs_ev_glue *evg,
+                       struct tevent_context *ev,
                        struct vfs_handle_struct *handle,
                        files_struct *dir_fsp,
                        struct smb_filename *smb_fname)
 {
-       struct tevent_context *ev = smb_vfs_ev_glue_ev_ctx(evg);
        struct tevent_req *req = NULL;
        struct skel_get_dos_attributes_state *state = NULL;
 
index 4e97857..fc892a2 100644 (file)
@@ -895,12 +895,11 @@ static void skel_get_dos_attributes_done(struct tevent_req *subreq);
 
 static struct tevent_req *skel_get_dos_attributes_send(
                        TALLOC_CTX *mem_ctx,
-                       const struct smb_vfs_ev_glue *evg,
+                       struct tevent_context *ev,
                        struct vfs_handle_struct *handle,
                        files_struct *dir_fsp,
                        struct smb_filename *smb_fname)
 {
-       struct tevent_context *ev = smb_vfs_ev_glue_ev_ctx(evg);
        struct tevent_req *req = NULL;
        struct skel_get_dos_attributes_state *state = NULL;
        struct tevent_req *subreq = NULL;
@@ -912,7 +911,7 @@ static struct tevent_req *skel_get_dos_attributes_send(
        }
 
        subreq = SMB_VFS_NEXT_GET_DOS_ATTRIBUTES_SEND(mem_ctx,
-                                                     evg,
+                                                     ev,
                                                      handle,
                                                      dir_fsp,
                                                      smb_fname);
index 83ae639..619c1a8 100644 (file)
@@ -903,7 +903,7 @@ struct vfs_fn_pointers {
 
        struct tevent_req *(*get_dos_attributes_send_fn)(
                                TALLOC_CTX *mem_ctx,
-                               const struct smb_vfs_ev_glue *evg,
+                               struct tevent_context *ev,
                                struct vfs_handle_struct *handle,
                                files_struct *dir_fsp,
                                struct smb_filename *smb_fname);
@@ -1370,7 +1370,7 @@ NTSTATUS smb_vfs_call_fset_dos_attributes(struct vfs_handle_struct *handle,
                                          uint32_t dosmode);
 struct tevent_req *smb_vfs_call_get_dos_attributes_send(
                        TALLOC_CTX *mem_ctx,
-                       const struct smb_vfs_ev_glue *evg,
+                       struct tevent_context *ev,
                        struct vfs_handle_struct *handle,
                        files_struct *dir_fsp,
                        struct smb_filename *smb_fname);
@@ -1852,7 +1852,7 @@ NTSTATUS vfs_not_implemented_get_dos_attributes(struct vfs_handle_struct *handle
                                                uint32_t *dosmode);
 struct tevent_req *vfs_not_implemented_get_dos_attributes_send(
                        TALLOC_CTX *mem_ctx,
-                       const struct smb_vfs_ev_glue *evg,
+                       struct tevent_context *ev,
                        struct vfs_handle_struct *handle,
                        files_struct *dir_fsp,
                        struct smb_filename *smb_fname);
index f54f87d..0a07d40 100644 (file)
@@ -1504,12 +1504,11 @@ static void vfswrap_get_dos_attributes_getxattr_done(struct tevent_req *subreq);
 
 static struct tevent_req *vfswrap_get_dos_attributes_send(
                        TALLOC_CTX *mem_ctx,
-                       const struct smb_vfs_ev_glue *evg,
+                       struct tevent_context *ev,
                        struct vfs_handle_struct *handle,
                        files_struct *dir_fsp,
                        struct smb_filename *smb_fname)
 {
-       struct tevent_context *ev = dir_fsp->conn->sconn->raw_ev_ctx;
        struct tevent_req *req = NULL;
        struct tevent_req *subreq = NULL;
        struct vfswrap_get_dos_attributes_state *state = NULL;
index 7dbb6e1..fcfb024 100644 (file)
@@ -2141,12 +2141,11 @@ static void smb_full_audit_get_dos_attributes_done(struct tevent_req *subreq);
 
 static struct tevent_req *smb_full_audit_get_dos_attributes_send(
                TALLOC_CTX *mem_ctx,
-               const struct smb_vfs_ev_glue *evg,
+               struct tevent_context *ev,
                struct vfs_handle_struct *handle,
                files_struct *dir_fsp,
                struct smb_filename *smb_fname)
 {
-       struct tevent_context *ev = smb_vfs_ev_glue_ev_ctx(evg);
        struct tevent_req *req = NULL;
        struct smb_full_audit_get_dos_attributes_state *state = NULL;
        struct tevent_req *subreq = NULL;
@@ -2169,7 +2168,7 @@ static struct tevent_req *smb_full_audit_get_dos_attributes_send(
        };
 
        subreq = SMB_VFS_NEXT_GET_DOS_ATTRIBUTES_SEND(mem_ctx,
-                                                     evg,
+                                                     ev,
                                                      handle,
                                                      dir_fsp,
                                                      smb_fname);
index d642a13..2143902 100644 (file)
@@ -717,12 +717,11 @@ struct vfs_not_implemented_get_dos_attributes_state {
 
 struct tevent_req *vfs_not_implemented_get_dos_attributes_send(
                        TALLOC_CTX *mem_ctx,
-                       const struct smb_vfs_ev_glue *evg,
+                       struct tevent_context *ev,
                        struct vfs_handle_struct *handle,
                        files_struct *dir_fsp,
                        struct smb_filename *smb_fname)
 {
-       struct tevent_context *ev = smb_vfs_ev_glue_ev_ctx(evg);
        struct tevent_req *req = NULL;
        struct vfs_not_implemented_get_dos_attributes_state *state = NULL;
 
index 5dd6032..a89c6be 100644 (file)
@@ -1768,12 +1768,11 @@ static void smb_time_audit_get_dos_attributes_done(struct tevent_req *subreq);
 
 static struct tevent_req *smb_time_audit_get_dos_attributes_send(
                        TALLOC_CTX *mem_ctx,
-                       const struct smb_vfs_ev_glue *evg,
+                       struct tevent_context *ev,
                        struct vfs_handle_struct *handle,
                        files_struct *dir_fsp,
                        struct smb_filename *smb_fname)
 {
-       struct tevent_context *ev = smb_vfs_ev_glue_ev_ctx(evg);
        struct tevent_req *req = NULL;
        struct smb_time_audit_get_dos_attributes_state *state = NULL;
        struct tevent_req *subreq = NULL;
@@ -1789,7 +1788,7 @@ static struct tevent_req *smb_time_audit_get_dos_attributes_send(
        };
 
        subreq = SMB_VFS_NEXT_GET_DOS_ATTRIBUTES_SEND(mem_ctx,
-                                                     evg,
+                                                     ev,
                                                      handle,
                                                      dir_fsp,
                                                      smb_fname);
index 966679a..52781ca 100644 (file)
@@ -19,6 +19,7 @@
 */
 
 #include "includes.h"
+#include "globals.h"
 #include "system/filesys.h"
 #include "librpc/gen_ndr/ndr_xattr.h"
 #include "librpc/gen_ndr/ioctl.h"
@@ -764,7 +765,7 @@ struct tevent_req *dos_mode_at_send(TALLOC_CTX *mem_ctx,
                                    files_struct *dir_fsp,
                                    struct smb_filename *smb_fname)
 {
-       struct tevent_context *ev = smb_vfs_ev_glue_ev_ctx(evg);
+       struct tevent_context *ev = dir_fsp->conn->sconn->raw_ev_ctx;
        struct tevent_req *req = NULL;
        struct dos_mode_at_state *state = NULL;
        struct tevent_req *subreq = NULL;
@@ -788,7 +789,7 @@ struct tevent_req *dos_mode_at_send(TALLOC_CTX *mem_ctx,
        }
 
        subreq = SMB_VFS_GET_DOS_ATTRIBUTES_SEND(state,
-                                                evg,
+                                                ev,
                                                 dir_fsp,
                                                 smb_fname);
        if (tevent_req_nomem(subreq, req)) {
index 7d46ec9..0cf8f8c 100644 (file)
@@ -2284,46 +2284,6 @@ struct smb_vfs_ev_glue *smb_vfs_ev_glue_create_switch(
        return evg_u;
 }
 
-static bool smb_vfs_ev_glue_push_use(const struct smb_vfs_ev_glue *evg,
-                                    struct tevent_req *req)
-{
-       if (evg->run_ev == evg->return_ev) {
-               /*
-                * We're already in the correct
-                * impersonation environment.
-                */
-               return true;
-       }
-
-       /*
-        * Make sure that our callers callback function
-        * will be called in the return_ev environment.
-        */
-       tevent_req_defer_callback(req, evg->return_ev);
-
-       /*
-        * let the event context wrapper do
-        * the required impersonation.
-        */
-       return tevent_context_push_use(evg->run_ev);
-}
-
-static void smb_vfs_ev_glue_pop_use(const struct smb_vfs_ev_glue *evg)
-{
-       if (evg->run_ev == evg->return_ev) {
-               /*
-                * smb_vfs_ev_glue_push_use() didn't
-                * change the impersonation environment.
-                */
-               return;
-       }
-
-       /*
-        * undo the impersonation
-        */
-       tevent_context_pop_use(evg->run_ev);
-}
-
 int smb_vfs_call_connect(struct vfs_handle_struct *handle,
                         const char *service, const char *user)
 {
@@ -3265,7 +3225,7 @@ static void smb_vfs_call_get_dos_attributes_done(struct tevent_req *subreq);
 
 struct tevent_req *smb_vfs_call_get_dos_attributes_send(
                        TALLOC_CTX *mem_ctx,
-                       const struct smb_vfs_ev_glue *evg,
+                       struct tevent_context *ev,
                        struct vfs_handle_struct *handle,
                        files_struct *dir_fsp,
                        struct smb_filename *smb_fname)
@@ -3273,7 +3233,6 @@ struct tevent_req *smb_vfs_call_get_dos_attributes_send(
        struct tevent_req *req = NULL;
        struct smb_vfs_call_get_dos_attributes_state *state = NULL;
        struct tevent_req *subreq = NULL;
-       bool ok;
 
        req = tevent_req_create(mem_ctx, &state,
                                struct smb_vfs_call_get_dos_attributes_state);
@@ -3284,22 +3243,16 @@ struct tevent_req *smb_vfs_call_get_dos_attributes_send(
        VFS_FIND(get_dos_attributes_send);
        state->recv_fn = handle->fns->get_dos_attributes_recv_fn;
 
-       ok = smb_vfs_ev_glue_push_use(evg, req);
-       if (!ok) {
-               tevent_req_error(req, EIO);
-               return tevent_req_post(req, evg->return_ev);
-       }
-
        subreq = handle->fns->get_dos_attributes_send_fn(mem_ctx,
-                                                        evg->next_glue,
+                                                        ev,
                                                         handle,
                                                         dir_fsp,
                                                         smb_fname);
-       smb_vfs_ev_glue_pop_use(evg);
-
        if (tevent_req_nomem(subreq, req)) {
-               return tevent_req_post(req, evg->return_ev);
+               return tevent_req_post(req, ev);
        }
+       tevent_req_defer_callback(req, ev);
+
        tevent_req_set_callback(subreq,
                                smb_vfs_call_get_dos_attributes_done,
                                req);