smbd: add {become,change_to}_user_by_fsp() helper functions
authorStefan Metzmacher <metze@samba.org>
Wed, 23 May 2018 09:54:58 +0000 (11:54 +0200)
committerStefan Metzmacher <metze@samba.org>
Mon, 18 Jun 2018 06:59:18 +0000 (08:59 +0200)
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 <metze@samba.org>
Reviewed-by: Ralph Boehme <slow@samba.org>
source3/smbd/proto.h
source3/smbd/uid.c

index 0c4c68187c224aecaeada49e148d9f4a32ec94dc..f9f29230162c55ce34f8d3a5c955f896b16c2a8d 100644 (file)
@@ -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);
index 289727d957460fa03a65809cd5b94830f8776009..35d198b1899a7f7f0ac0ffc898f08700579f8215 100644 (file)
@@ -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)
 {