The branch, master has been updated via cf5f7b14899 s3: smbd: Plumb close_type parameter through close_file_in_loop(), file_close_conn() via 7005a6354df s3: smbd: Add "enum file_close_type close_type" parameter to file_close_conn(). via 9203d17106c s3: smbd: Add "enum file_close_type close_type" parameter to close_cnum(). from e4371a4c3b8 release-script: Fix shellcheck errors
https://git.samba.org/?p=samba.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit cf5f7b1489930f6d64c3e3512f116ccf286d4605 Author: Jeremy Allison <j...@samba.org> Date: Wed Aug 17 11:43:47 2022 -0700 s3: smbd: Plumb close_type parameter through close_file_in_loop(), file_close_conn() Allows close_file_in_loop() to differentiate between SHUTDOWN_CLOSE (previously it only used this close type) and ERROR_CLOSE - called on error from smbXsrv_tcon_disconnect() in the error path. In that case we want to close the fd, but not run any delete-on-close actions. BUG: https://bugzilla.samba.org/show_bug.cgi?id=15128 Signed-off-by: Jeremy Allison <j...@samba.org> Reivewed-by: Noel Power <npo...@samba.org> Autobuild-User(master): Noel Power <npo...@samba.org> Autobuild-Date(master): Thu Aug 18 14:10:18 UTC 2022 on sn-devel-184 commit 7005a6354df5522d9f665fb30052c458dfc93124 Author: Jeremy Allison <j...@samba.org> Date: Wed Aug 17 11:39:36 2022 -0700 s3: smbd: Add "enum file_close_type close_type" parameter to file_close_conn(). Not yet used. BUG: https://bugzilla.samba.org/show_bug.cgi?id=15128 Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Noel Power <npo...@samba.org> commit 9203d17106c0e55a30813ff1ed76869c7581a343 Author: Jeremy Allison <j...@samba.org> Date: Wed Aug 17 11:35:29 2022 -0700 s3: smbd: Add "enum file_close_type close_type" parameter to close_cnum(). Not yet used, but needed so we can differentiate between SHUTDOWN_CLOSE and ERROR_CLOSE in smbXsrv_tcon_disconnect() if we fail to chdir. In that case we want to close the fd, but not run any delete-on-close actions. BUG: https://bugzilla.samba.org/show_bug.cgi?id=15128 Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Noel Power <npo...@samba.org> ----------------------------------------------------------------------- Summary of changes: source3/smbd/files.c | 17 ++++++++++------- source3/smbd/proto.h | 6 ++++-- source3/smbd/smb2_service.c | 6 ++++-- source3/smbd/smbXsrv_tcon.c | 4 ++-- 4 files changed, 20 insertions(+), 13 deletions(-) Changeset truncated at 500 lines: diff --git a/source3/smbd/files.c b/source3/smbd/files.c index a6c41f2b928..b494a8b789a 100644 --- a/source3/smbd/files.c +++ b/source3/smbd/files.c @@ -1258,7 +1258,8 @@ NTSTATUS parent_pathref(TALLOC_CTX *mem_ctx, return NT_STATUS_OK; } -static bool close_file_in_loop(struct files_struct *fsp) +static bool close_file_in_loop(struct files_struct *fsp, + enum file_close_type close_type) { if (fsp_is_alternate_stream(fsp)) { /* @@ -1276,7 +1277,7 @@ static bool close_file_in_loop(struct files_struct *fsp) fsp->base_fsp->stream_fsp = NULL; fsp->base_fsp = NULL; - close_file_free(NULL, &fsp, SHUTDOWN_CLOSE); + close_file_free(NULL, &fsp, close_type); return NULL; } @@ -1300,7 +1301,7 @@ static bool close_file_in_loop(struct files_struct *fsp) return false; } - close_file_free(NULL, &fsp, SHUTDOWN_CLOSE); + close_file_free(NULL, &fsp, close_type); return true; } @@ -1310,6 +1311,7 @@ static bool close_file_in_loop(struct files_struct *fsp) struct file_close_conn_state { struct connection_struct *conn; + enum file_close_type close_type; bool fsp_left_behind; }; @@ -1331,7 +1333,7 @@ static struct files_struct *file_close_conn_fn( fsp->op->global->durable = false; } - did_close = close_file_in_loop(fsp); + did_close = close_file_in_loop(fsp, state->close_type); if (!did_close) { state->fsp_left_behind = true; } @@ -1339,9 +1341,10 @@ static struct files_struct *file_close_conn_fn( return NULL; } -void file_close_conn(connection_struct *conn) +void file_close_conn(connection_struct *conn, enum file_close_type close_type) { - struct file_close_conn_state state = { .conn = conn }; + struct file_close_conn_state state = { .conn = conn, + .close_type = close_type }; files_forall(conn->sconn, file_close_conn_fn, &state); @@ -1427,7 +1430,7 @@ static struct files_struct *file_close_user_fn( return NULL; } - did_close = close_file_in_loop(fsp); + did_close = close_file_in_loop(fsp, SHUTDOWN_CLOSE); if (!did_close) { state->fsp_left_behind = true; } diff --git a/source3/smbd/proto.h b/source3/smbd/proto.h index 5ac0f713958..c4a33014515 100644 --- a/source3/smbd/proto.h +++ b/source3/smbd/proto.h @@ -383,7 +383,7 @@ void fsp_set_gen_id(files_struct *fsp); NTSTATUS file_new(struct smb_request *req, connection_struct *conn, files_struct **result); NTSTATUS fsp_bind_smb(struct files_struct *fsp, struct smb_request *req); -void file_close_conn(connection_struct *conn); +void file_close_conn(connection_struct *conn, enum file_close_type close_type); bool file_init_global(void); bool file_init(struct smbd_server_connection *sconn); void file_close_user(struct smbd_server_connection *sconn, uint64_t vuid); @@ -1053,7 +1053,9 @@ NTSTATUS make_connection_snum(struct smbXsrv_connection *xconn, int snum, struct smbXsrv_session *session, const char *pdev); -void close_cnum(connection_struct *conn, uint64_t vuid); +void close_cnum(connection_struct *conn, + uint64_t vuid, + enum file_close_type close_type); /* The following definitions come from smbd/session.c */ struct sessionid; diff --git a/source3/smbd/smb2_service.c b/source3/smbd/smb2_service.c index e7a38241515..5affea6b3e4 100644 --- a/source3/smbd/smb2_service.c +++ b/source3/smbd/smb2_service.c @@ -932,14 +932,16 @@ connection_struct *make_connection_smb2(struct smbd_smb2_request *req, Close a cnum. ****************************************************************************/ -void close_cnum(connection_struct *conn, uint64_t vuid) +void close_cnum(connection_struct *conn, + uint64_t vuid, + enum file_close_type close_type) { char rootpath[2] = { '/', '\0'}; struct smb_filename root_fname = { .base_name = rootpath }; const struct loadparm_substitution *lp_sub = loadparm_s3_global_substitution(); - file_close_conn(conn); + file_close_conn(conn, close_type); change_to_root_user(); diff --git a/source3/smbd/smbXsrv_tcon.c b/source3/smbd/smbXsrv_tcon.c index b515b19e88f..8707082edd6 100644 --- a/source3/smbd/smbXsrv_tcon.c +++ b/source3/smbd/smbXsrv_tcon.c @@ -921,12 +921,12 @@ NTSTATUS smbXsrv_tcon_disconnect(struct smbXsrv_tcon *tcon, uint64_t vuid) * removed from the linked list * conn->sconn->connections. */ - close_cnum(tcon->compat, vuid); + close_cnum(tcon->compat, vuid, ERROR_CLOSE); tcon->compat = NULL; return status; } - close_cnum(tcon->compat, vuid); + close_cnum(tcon->compat, vuid, SHUTDOWN_CLOSE); tcon->compat = NULL; } -- Samba Shared Repository