From 13d840ad2ff0db7320e0cbef86cd47872493292c Mon Sep 17 00:00:00 2001 From: Andreas Schneider Date: Wed, 23 Oct 2013 11:02:39 +0200 Subject: [PATCH] s3-smbd_shim: Add become_authenticated_pipe_user(). Signed-off-by: Andreas Schneider Reviewed-by: Stefan Metzmacher --- source3/include/proto.h | 5 ++++- source3/lib/smbd_shim.c | 18 ++++++++++++++++++ source3/lib/smbd_shim.h | 2 ++ source3/smbd/proto.h | 4 ++-- source3/smbd/server.c | 2 ++ source3/smbd/uid.c | 4 ++-- 6 files changed, 30 insertions(+), 5 deletions(-) diff --git a/source3/include/proto.h b/source3/include/proto.h index 497828e52940..277547bef7da 100644 --- a/source3/include/proto.h +++ b/source3/include/proto.h @@ -1253,7 +1253,7 @@ bool ea_list_has_invalid_name(struct ea_list *ea_list); void become_root(void); void unbecome_root(void); -/* The following definitions come from lib/dummysmbd.c */ +/* The following definitions come from lib/smbd_shim.c */ int find_service(TALLOC_CTX *ctx, const char *service_in, char **p_service_out); void cancel_pending_lock_requests_by_fid(files_struct *fsp, @@ -1263,6 +1263,9 @@ void send_stat_cache_delete_message(struct messaging_context *msg_ctx, const char *name); NTSTATUS can_delete_directory_fsp(files_struct *fsp); bool change_to_root_user(void); +bool become_authenticated_pipe_user(struct auth_session_info *session_info); +bool unbecome_authenticated_pipe_user(void); + void contend_level2_oplocks_begin(files_struct *fsp, enum level2_contention_type type); void contend_level2_oplocks_end(files_struct *fsp, diff --git a/source3/lib/smbd_shim.c b/source3/lib/smbd_shim.c index d5ad5779753d..1b5b4e6ca529 100644 --- a/source3/lib/smbd_shim.c +++ b/source3/lib/smbd_shim.c @@ -58,6 +58,24 @@ bool change_to_root_user(void) return false; } +bool become_authenticated_pipe_user(struct auth_session_info *session_info) +{ + if (shim.become_authenticated_pipe_user) { + return shim.become_authenticated_pipe_user(session_info); + } + + return false; +} + +bool unbecome_authenticated_pipe_user(void) +{ + if (shim.unbecome_authenticated_pipe_user) { + return shim.unbecome_authenticated_pipe_user(); + } + + return false; +} + /** * The following two functions need to be called from inside the low-level BRL * code for oplocks correctness in smbd. Since other utility binaries also diff --git a/source3/lib/smbd_shim.h b/source3/lib/smbd_shim.h index 1645837f36ed..f3da5859027b 100644 --- a/source3/lib/smbd_shim.h +++ b/source3/lib/smbd_shim.h @@ -36,6 +36,8 @@ struct smbd_shim const char *name); bool (*change_to_root_user)(void); + bool (*become_authenticated_pipe_user)(struct auth_session_info *session_info); + bool (*unbecome_authenticated_pipe_user)(void); void (*contend_level2_oplocks_begin)(files_struct *fsp, enum level2_contention_type type); diff --git a/source3/smbd/proto.h b/source3/smbd/proto.h index d365545fe92b..ea424f1e55bb 100644 --- a/source3/smbd/proto.h +++ b/source3/smbd/proto.h @@ -1103,8 +1103,8 @@ NTSTATUS check_user_share_access(connection_struct *conn, bool change_to_user(connection_struct *conn, uint64_t vuid); bool change_to_root_user(void); bool smbd_change_to_root_user(void); -bool become_authenticated_pipe_user(struct auth_session_info *session_info); -bool unbecome_authenticated_pipe_user(void); +bool smbd_become_authenticated_pipe_user(struct auth_session_info *session_info); +bool smbd_unbecome_authenticated_pipe_user(void); void become_root(void); void unbecome_root(void); void smbd_become_root(void); diff --git a/source3/smbd/server.c b/source3/smbd/server.c index 8173a6294d90..36be01948ea8 100644 --- a/source3/smbd/server.c +++ b/source3/smbd/server.c @@ -1058,6 +1058,8 @@ extern void build_options(bool screen); .cancel_pending_lock_requests_by_fid = smbd_cancel_pending_lock_requests_by_fid, .send_stat_cache_delete_message = smbd_send_stat_cache_delete_message, .change_to_root_user = smbd_change_to_root_user, + .become_authenticated_pipe_user = smbd_become_authenticated_pipe_user, + .unbecome_authenticated_pipe_user = smbd_unbecome_authenticated_pipe_user, .contend_level2_oplocks_begin = smbd_contend_level2_oplocks_begin, .contend_level2_oplocks_end = smbd_contend_level2_oplocks_end, diff --git a/source3/smbd/uid.c b/source3/smbd/uid.c index a795eef8af8b..5e09e6b43fa1 100644 --- a/source3/smbd/uid.c +++ b/source3/smbd/uid.c @@ -436,7 +436,7 @@ bool smbd_change_to_root_user(void) user. Doesn't modify current_user. ****************************************************************************/ -bool become_authenticated_pipe_user(struct auth_session_info *session_info) +bool smbd_become_authenticated_pipe_user(struct auth_session_info *session_info) { if (!push_sec_ctx()) return False; @@ -455,7 +455,7 @@ bool become_authenticated_pipe_user(struct auth_session_info *session_info) current_user. ****************************************************************************/ -bool unbecome_authenticated_pipe_user(void) +bool smbd_unbecome_authenticated_pipe_user(void) { return pop_sec_ctx(); } -- 2.34.1