[Samba] open 2nd pdf on dfs share with Acrobat Reader not possible

Hubert Hoffmann hubert.hoffmann at wuestenrot.at
Thu May 14 14:07:06 UTC 2020


Hello everybody,

after updating samba from Version 4.9.1 to 4.10.4 (Centos 7)
opening a PDF Document in Acrobat Reader with a double click, 
when the document resides on a dfs share, is only possible for the 1st 
document.

I know, this is not not a samba bug, because windows 2019 Server behaves 
the same, i just want to share my findings.

https://community.adobe.com/t5/acrobat-reader/open-two-pdfs-from-dfs-server-2019/td-p/10332133?page=1&profile.language=de

This behavior was introduced in samba 4.9.10 with the following Patch:
* BUG 13919: smbd: Implement SMB_FILE_NORMALIZED_NAME_INFORMATION 
handling. 

when "unpatching" the following patch the behavior is as "expected"

diff -Npur samba-4.9.9/source3/smbd/trans2.c 
samba-4.9.10/source3/smbd/trans2.c
--- samba-4.9.9/source3/smbd/trans2.c   2019-05-01 07:49:16.000000000 
+0200
+++ samba-4.9.10/source3/smbd/trans2.c  2019-07-02 11:59:02.000000000 
+0200
@@ -5208,6 +5208,63 @@ NTSTATUS smbd_do_qfilepathinfo(connectio
                        break;
                }
 
+               case SMB_FILE_NORMALIZED_NAME_INFORMATION:
+               {
+                       char *nfname = NULL;
+
+                       if (!fsp->conn->sconn->using_smb2) {
+                               return NT_STATUS_INVALID_LEVEL;
+                       }
+
+                       nfname = talloc_strdup(mem_ctx, 
smb_fname->base_name);
+                       if (nfname == NULL) {
+                               return NT_STATUS_NO_MEMORY;
+                       }
+
+                       if (ISDOT(nfname)) {
+                               nfname[0] = '\0';
+                       }
+                       string_replace(nfname, '/', '\\');
+
+                       if (smb_fname->stream_name != NULL) {
+                               const char *s = smb_fname->stream_name;
+                               const char *e = NULL;
+                               size_t n;
+
+                               SMB_ASSERT(s[0] != '\0');
+
+                               /*
+                                * smb_fname->stream_name is in form
+                                * of ':StrEam:$DATA', but we should only
+                                * append ':StrEam' here.
+                                */
+
+                               e = strchr(&s[1], ':');
+                               if (e == NULL) {
+                                       n = strlen(s);
+                               } else {
+                                       n = PTR_DIFF(e, s);
+                               }
+                               nfname = talloc_strndup_append(nfname, s, 
n);
+                               if (nfname == NULL) {
+                                       return NT_STATUS_NO_MEMORY;
+                               }
+                       }
+
+                       status = srvstr_push(dstart, flags2,
+                                         pdata+4, nfname,
+                                         PTR_DIFF(dend, pdata+4),
+                                         STR_UNICODE, &len);
+                       if (!NT_STATUS_IS_OK(status)) {
+                               return status;
+                       }
+                       DEBUG(10,("smbd_do_qfilepathinfo: 
SMB_FILE_NORMALIZED_NAME_INFORMATION\n"));
+                       data_size = 4 + len;
+                       SIVAL(pdata,0,len);
+                       *fixed_portion = 8;
+                       break;
+               }
+
                case SMB_FILE_ALLOCATION_INFORMATION:
                case SMB_QUERY_FILE_ALLOCATION_INFO:
                        DEBUG(10,("smbd_do_qfilepathinfo: 
SMB_FILE_ALLOCATION_INFORMATION\n"));


greetings,
Hubert 


More information about the samba mailing list