From: Volker Lendecke Date: Fri, 30 Dec 2022 15:26:38 +0000 (+0100) Subject: smbd: Move SMB_QUERY_FILE_UNIX_[BASIC|INFO2] to smb1_trans2.c X-Git-Tag: talloc-2.4.0~85 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=01e14e0fe138f13f64067ae3c932e9564cd7dd4e;p=thirdparty%2Fsamba.git smbd: Move SMB_QUERY_FILE_UNIX_[BASIC|INFO2] to smb1_trans2.c Signed-off-by: Volker Lendecke Reviewed-by: Ralph Boehme --- diff --git a/source3/smbd/smb1_trans2.c b/source3/smbd/smb1_trans2.c index f70998e0e13..82a8072b142 100644 --- a/source3/smbd/smb1_trans2.c +++ b/source3/smbd/smb1_trans2.c @@ -2097,6 +2097,52 @@ total_data=%u (should be %u)\n", (unsigned int)total_data, (unsigned int)IVAL(pd max_data_bytes); } +static NTSTATUS smb_q_unix_basic( + struct connection_struct *conn, + struct smb_request *req, + struct smb_filename *smb_fname, + struct files_struct *fsp, + char **ppdata, + int *ptotal_data) +{ + const int total_data = 100; + char *pdata = NULL; + + pdata = SMB_REALLOC(*ppdata, total_data); + if (pdata == NULL) { + return NT_STATUS_NO_MEMORY; + } + store_file_unix_basic(conn, pdata, fsp, &smb_fname->st); + + *ppdata = pdata; + *ptotal_data = total_data; + + return NT_STATUS_OK; +} + +static NTSTATUS smb_q_unix_info2( + struct connection_struct *conn, + struct smb_request *req, + struct smb_filename *smb_fname, + struct files_struct *fsp, + char **ppdata, + int *ptotal_data) +{ + const int total_data = 116; + char *pdata = NULL; + + pdata = SMB_REALLOC(*ppdata, total_data); + if (pdata == NULL) { + return NT_STATUS_NO_MEMORY; + } + store_file_unix_basic_info2(conn, pdata, fsp, &smb_fname->st); + + *ppdata = pdata; + *ptotal_data = total_data; + + return NT_STATUS_OK; +} + static void call_trans2qpathinfo( connection_struct *conn, struct smb_request *req, @@ -2118,6 +2164,7 @@ static void call_trans2qpathinfo( char *fname = NULL; uint32_t ucf_flags = ucf_flags_from_smb_request(req); NTTIME twrp = 0; + bool info_level_handled; NTSTATUS status = NT_STATUS_OK; int ret; @@ -2279,6 +2326,48 @@ static void call_trans2qpathinfo( return; } + info_level_handled = true; /* Untouched in switch cases below */ + + switch (info_level) { + + default: + info_level_handled = false; + break; + + case SMB_QUERY_FILE_UNIX_BASIC: + status = smb_q_unix_basic( + conn, + req, + smb_fname, + smb_fname->fsp, + ppdata, + &total_data); + break; + + case SMB_QUERY_FILE_UNIX_INFO2: + status = smb_q_unix_info2( + conn, + req, + smb_fname, + smb_fname->fsp, + ppdata, + &total_data); + break; + } + + if (info_level_handled) { + handle_trans2qfilepathinfo_result( + conn, + req, + info_level, + status, + *ppdata, + total_data, + total_data, + max_data_bytes); + return; + } + call_trans2qfilepathinfo( conn, req, @@ -2300,8 +2389,7 @@ static NTSTATUS smb_q_posix_lock( struct smb_request *req, struct files_struct *fsp, char **ppdata, - int *ptotal_data, - unsigned int max_data_bytes) + int *ptotal_data) { char *pdata = *ppdata; int total_data = *ptotal_data; @@ -2498,8 +2586,17 @@ static void call_trans2qfileinfo( break; case SMB_QUERY_POSIX_LOCK: - status = smb_q_posix_lock( - conn, req, fsp, ppdata, &total_data, max_data_bytes); + status = smb_q_posix_lock(conn, req, fsp, ppdata, &total_data); + break; + + case SMB_QUERY_FILE_UNIX_BASIC: + status = smb_q_unix_basic( + conn, req, fsp->fsp_name, fsp, ppdata, &total_data); + break; + + case SMB_QUERY_FILE_UNIX_INFO2: + status = smb_q_unix_info2( + conn, req, fsp->fsp_name, fsp, ppdata, &total_data); break; } diff --git a/source3/smbd/smb2_trans2.c b/source3/smbd/smb2_trans2.c index e3df0363442..8c7f15e9213 100644 --- a/source3/smbd/smb2_trans2.c +++ b/source3/smbd/smb2_trans2.c @@ -4196,33 +4196,6 @@ NTSTATUS smbd_do_qfilepathinfo(connection_struct *conn, * CIFS UNIX Extensions. */ - case SMB_QUERY_FILE_UNIX_BASIC: - - pdata = store_file_unix_basic(conn, pdata, fsp, psbuf); - data_size = PTR_DIFF(pdata,(*ppdata)); - - DEBUG(4,("smbd_do_qfilepathinfo: " - "SMB_QUERY_FILE_UNIX_BASIC\n")); - dump_data(4, (uint8_t *)(*ppdata), data_size); - - break; - - case SMB_QUERY_FILE_UNIX_INFO2: - - pdata = store_file_unix_basic_info2(conn, pdata, fsp, psbuf); - data_size = PTR_DIFF(pdata,(*ppdata)); - - { - int i; - DEBUG(4,("smbd_do_qfilepathinfo: SMB_QUERY_FILE_UNIX_INFO2 ")); - - for (i=0; i<100; i++) - DEBUG(4,("%d=%x, ",i, (*ppdata)[i])); - DEBUG(4,("\n")); - } - - break; - case SMB_QUERY_FILE_UNIX_LINK: { status = smb_unix_read_symlink(conn,