]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
smbd: Move SMB_QUERY_FILE_UNIX_[BASIC|INFO2] to smb1_trans2.c
authorVolker Lendecke <vl@samba.org>
Fri, 30 Dec 2022 15:26:38 +0000 (16:26 +0100)
committerRalph Boehme <slow@samba.org>
Wed, 4 Jan 2023 08:54:32 +0000 (08:54 +0000)
Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Ralph Boehme <slow@samba.org>
source3/smbd/smb1_trans2.c
source3/smbd/smb2_trans2.c

index f70998e0e133aa160d682883153e3a7f5bdac311..82a8072b1427e1720589f522352313a8497a6b91 100644 (file)
@@ -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;
        }
 
index e3df036344219fe3867251b74e0996c6f523ee3b..8c7f15e9213a279987630e1d33085d69a0835faf 100644 (file)
@@ -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,