Simplify call_trans2qfilepathinfo() and smbd_do_qfilepathinfo()
authorJeremy Allison <jra@samba.org>
Fri, 9 Apr 2010 04:24:23 +0000 (21:24 -0700)
committerJeremy Allison <jra@samba.org>
Fri, 9 Apr 2010 04:24:23 +0000 (21:24 -0700)
Remove the bool ms_dfs_link parameter from smbd_do_qfilepathinfo.
It is not possible for this to be a DFS link. Remove the check_msdfs_link()
call from call_trans2qfilepathinfo() - the call to filename_convert()
above with a ucf_flags of zero *MUST* catch a DFS link and return
NT_STATUS_PATH_NOT_COVERED in this case, so the code below checking
for msdfs links is redundent. Don't add this to 3.5.x, as it's an
optimization but not needed to fix bug #7339 - MSDFS is non-functional in 3.5.x.

Jeremy.

source3/smbd/globals.h
source3/smbd/smb2_getinfo.c
source3/smbd/trans2.c

index f9fd71ed751afd58696b4802471b4d24fe46671e..033a77783a7aa437135a0c914eadf0d83fc7eca2 100644 (file)
@@ -187,7 +187,6 @@ NTSTATUS smbd_do_qfilepathinfo(connection_struct *conn,
                               struct smb_filename *smb_fname,
                               bool delete_pending,
                               struct timespec write_time_ts,
-                              bool ms_dfs_link,
                               struct ea_list *ea_list,
                               int lock_data_count,
                               char *lock_data,
index 3b50ab9cd7aede665100e472382571240f532455..3a8c07757e91aa228b776e93a11c396ddcbc0a79 100644 (file)
@@ -246,7 +246,6 @@ static struct tevent_req *smbd_smb2_getinfo_send(TALLOC_CTX *mem_ctx,
                struct ea_list *ea_list = NULL;
                int lock_data_count = 0;
                char *lock_data = NULL;
-               bool ms_dfs_link = false;
                NTSTATUS status;
 
                ZERO_STRUCT(write_time_ts);
@@ -328,7 +327,6 @@ static struct tevent_req *smbd_smb2_getinfo_send(TALLOC_CTX *mem_ctx,
                                               fsp->fsp_name,
                                               delete_pending,
                                               write_time_ts,
-                                              ms_dfs_link,
                                               ea_list,
                                               lock_data_count,
                                               lock_data,
index 06b454ab3970f6a4d37f3be755ae920cb495df7f..991b6058e00faddfa95d63505692e989d971e511 100644 (file)
@@ -4154,7 +4154,6 @@ NTSTATUS smbd_do_qfilepathinfo(connection_struct *conn,
                               struct smb_filename *smb_fname,
                               bool delete_pending,
                               struct timespec write_time_ts,
-                              bool ms_dfs_link,
                               struct ea_list *ea_list,
                               int lock_data_count,
                               char *lock_data,
@@ -4189,12 +4188,7 @@ NTSTATUS smbd_do_qfilepathinfo(connection_struct *conn,
                 smb_fname_str_dbg(smb_fname), fsp ? fsp->fnum : -1,
                 info_level, max_data_bytes));
 
-       if (ms_dfs_link) {
-               mode = dos_mode_msdfs(conn, smb_fname);
-       } else {
-               mode = dos_mode(conn, smb_fname);
-       }
-
+       mode = dos_mode(conn, smb_fname);
        nlink = psbuf->st_ex_nlink;
 
        if (nlink && (mode&aDIR)) {
@@ -4976,7 +4970,6 @@ static void call_trans2qfilepathinfo(connection_struct *conn,
        struct ea_list *ea_list = NULL;
        int lock_data_count = 0;
        char *lock_data = NULL;
-       bool ms_dfs_link = false;
        NTSTATUS status = NT_STATUS_OK;
 
        if (!params) {
@@ -5188,14 +5181,8 @@ static void call_trans2qfilepathinfo(connection_struct *conn,
                                return;
                        }
 
-               } else if (!VALID_STAT(smb_fname->st) &&
-                          SMB_VFS_STAT(conn, smb_fname) &&
-                          (info_level != SMB_INFO_IS_NAME_VALID)) {
-                       ms_dfs_link = check_msdfs_link(conn,
-                                                      smb_fname->base_name,
-                                                      &smb_fname->st);
-
-                       if (!ms_dfs_link) {
+               } else {
+                       if (SMB_VFS_STAT(conn, smb_fname) != 0) {
                                DEBUG(3,("call_trans2qfilepathinfo: "
                                         "SMB_VFS_STAT of %s failed (%s)\n",
                                         smb_fname_str_dbg(smb_fname),
@@ -5319,7 +5306,7 @@ total_data=%u (should be %u)\n", (unsigned int)total_data, (unsigned int)IVAL(pd
        status = smbd_do_qfilepathinfo(conn, req, info_level,
                                       fsp, smb_fname,
                                       delete_pending, write_time_ts,
-                                      ms_dfs_link, ea_list,
+                                      ea_list,
                                       lock_data_count, lock_data,
                                       req->flags2, max_data_bytes,
                                       ppdata, &data_size);