From: Stefan Metzmacher Date: Wed, 23 May 2018 09:54:58 +0000 (+0200) Subject: smbd: add {become,change_to}_user_by_fsp() helper functions X-Git-Tag: tevent-0.9.37~294 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=e4fb4c1d0efe0f9f1c31eac4e57d60f4bcbc7149;p=thirdparty%2Fsamba.git smbd: add {become,change_to}_user_by_fsp() helper functions This can be used if a request operates on two fsp's, e.g. the offload_write_send/recv code. This is important if (at least) one of the shares uses "force user". Signed-off-by: Stefan Metzmacher Reviewed-by: Ralph Boehme --- diff --git a/source3/smbd/proto.h b/source3/smbd/proto.h index 0c4c68187c2..f9f29230162 100644 --- a/source3/smbd/proto.h +++ b/source3/smbd/proto.h @@ -1196,6 +1196,7 @@ NTSTATUS check_user_share_access(connection_struct *conn, uint32_t *p_share_access, bool *p_readonly_share); bool change_to_user(connection_struct *conn, uint64_t vuid); +bool change_to_user_by_fsp(struct files_struct *fsp); bool smbd_change_to_root_user(void); bool smbd_become_authenticated_pipe_user(struct auth_session_info *session_info); bool smbd_unbecome_authenticated_pipe_user(void); @@ -1204,6 +1205,7 @@ void unbecome_root(void); void smbd_become_root(void); void smbd_unbecome_root(void); bool become_user(connection_struct *conn, uint64_t vuid); +bool become_user_by_fsp(struct files_struct *fsp); bool become_user_by_session(connection_struct *conn, const struct auth_session_info *session_info); bool unbecome_user(void); diff --git a/source3/smbd/uid.c b/source3/smbd/uid.c index 289727d9574..35d198b1899 100644 --- a/source3/smbd/uid.c +++ b/source3/smbd/uid.c @@ -418,6 +418,11 @@ bool change_to_user(connection_struct *conn, uint64_t vuid) return change_to_user_internal(conn, vuser->session_info, vuid); } +bool change_to_user_by_fsp(struct files_struct *fsp) +{ + return change_to_user(fsp->conn, fsp->vuid); +} + static bool change_to_user_by_session(connection_struct *conn, const struct auth_session_info *session_info) { @@ -604,6 +609,11 @@ bool become_user(connection_struct *conn, uint64_t vuid) return True; } +bool become_user_by_fsp(struct files_struct *fsp) +{ + return become_user(fsp->conn, fsp->vuid); +} + bool become_user_by_session(connection_struct *conn, const struct auth_session_info *session_info) {