[Samba] 4.20: case (in)sensitive is broken

Jeremy Allison jra at samba.org
Mon Jun 10 17:55:38 UTC 2024


On Fri, Jun 07, 2024 at 09:59:14PM +0300, Michael Tokarev via samba wrote:
>07.06.2024 20:52, Jeremy Allison wrote:
>
>>Fair enough. Can you post a minimal smb.conf and directory
>>setup that reproduces the problem and how to demo it with smbclient
>>command lines please ? I know I'm asking to be spoon-fed but my time for
>>Samba these days is quite limited and this would aid immensely
>>in creating a properly tested fix.
>
>You're not asking to be spoon-feeding.  Because the thing turned out to be
>tricky.  This is why it took so long for me to create a small reproducer, -
>initially I found out that turning off wide links triggers this issue.
>However, it turned out to be insufficient alone.  And especially tricky to
>me was another parameter which is also necessary.  Actually two, but one
>of them is something I haven't tried for a long time here, because it is
>set by samba implicitly already.

Here is the fix. Not sure if it breaks anything else (yet) :-).

Can you create me a bug please and I'll add a regression test
for this ?

Thanks,

Jeremy.

diff --git a/source3/modules/vfs_widelinks.c b/source3/modules/vfs_widelinks.c
index c5b5084e108..f3c9f0e359c 100644
--- a/source3/modules/vfs_widelinks.c
+++ b/source3/modules/vfs_widelinks.c
@@ -383,8 +383,14 @@ static int widelinks_openat(vfs_handle_struct *handle,
  		}
  		lstat_ret = SMB_VFS_NEXT_LSTAT(handle,
  				full_fname);
-		if (lstat_ret != -1 &&
-		    VALID_STAT(full_fname->st) &&
+		if (lstat_ret == -1) {
+			/* Can't be a DFS link. */
+			int saved_errno = errno;
+			TALLOC_FREE(full_fname);
+			errno = saved_errno;
+			return -1;
+		}
+		if (VALID_STAT(full_fname->st) &&
  		    S_ISLNK(full_fname->st.st_ex_mode)) {
  			fsp->fsp_name->st = full_fname->st;
  		}



More information about the samba mailing list