[SCM] Samba Shared Repository - branch master updated

Jeremy Allison jra at samba.org
Wed Jun 11 13:14:04 MDT 2014


The branch, master has been updated
       via  4e95d78 smbd: tevent_req_nterror already returns bool :-)
       via  25c14ef smbd: Use full_path_tos() where appropriate
       via  62403c4 s3: smbd : SMB2 - fix SMB2_SEARCH when searching non wildcard string with a case-canonicalized share.
       via  b297583 s3: smbd - SMB[2|3]. Ensure a \ or / can't be found anywhere in a search path, not just at the start.
      from  ba4467c s3-winbindd: Implement SamLogon IRPC call

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 4e95d785277439a4deb93029581cbd7ab0163680
Author: Volker Lendecke <vl at samba.org>
Date:   Wed Jun 11 09:35:37 2014 +0000

    smbd: tevent_req_nterror already returns bool :-)
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>
    
    Autobuild-User(master): Jeremy Allison <jra at samba.org>
    Autobuild-Date(master): Wed Jun 11 21:13:06 CEST 2014 on sn-devel-104

commit 25c14ef0928ed46131dd4599fed37ec74bbc74e5
Author: Volker Lendecke <vl at samba.org>
Date:   Wed Jun 11 09:32:56 2014 +0000

    smbd: Use full_path_tos() where appropriate
    
    Recently I've got reports that SMB2_FIND is slower than trans2 findfirst,
    so this tries to use recent performance-sensitive APIs right from the
    start :-)
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 62403c49924274d58b2e15196fa8082f984a548b
Author: Jeremy Allison <jra at samba.org>
Date:   Tue Jun 10 15:58:15 2014 -0700

    s3: smbd : SMB2 - fix SMB2_SEARCH when searching non wildcard string with a case-canonicalized share.
    
    We need to go through filename_convert() in order for the filename
    canonicalization to be done on a non-wildcard search string (as is
    done in the SMB1 findfirst code path).
    
    Fixes Bug #10650 - "case sensitive = True" option doesn't work with "max protocol = SMB2" or higher in large directories.
    
    https://bugzilla.samba.org/show_bug.cgi?id=10650
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Volker Lendecke <Volker.Lendecke at SerNet.DE>
    Reviewed-by: Ira Cooper <ira at samba.org>

commit b297583dfdeeaef0a9f2a0c8f22b3d22ef187c76
Author: Jeremy Allison <jra at samba.org>
Date:   Tue Jun 10 14:41:45 2014 -0700

    s3: smbd - SMB[2|3]. Ensure a \ or / can't be found anywhere in a search path, not just at the start.
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Volker Lendecke <Volker.Lendecke at SerNet.DE>
    Reviewed-by: Ira Cooper <ira at samba.org>

-----------------------------------------------------------------------

Summary of changes:
 source3/smbd/smb2_find.c |   48 +++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 43 insertions(+), 5 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/smbd/smb2_find.c b/source3/smbd/smb2_find.c
index 3f779b8..6bc44a5 100644
--- a/source3/smbd/smb2_find.c
+++ b/source3/smbd/smb2_find.c
@@ -224,6 +224,7 @@ static struct tevent_req *smbd_smb2_find_send(TALLOC_CTX *mem_ctx,
 	uint32_t dirtype = FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_DIRECTORY;
 	bool dont_descend = false;
 	bool ask_sharemode = true;
+	bool wcard_has_wild;
 	struct tm tm;
 	char *p;
 
@@ -252,11 +253,11 @@ static struct tevent_req *smbd_smb2_find_send(TALLOC_CTX *mem_ctx,
 		tevent_req_nterror(req, NT_STATUS_OBJECT_NAME_INVALID);
 		return tevent_req_post(req, ev);
 	}
-	if (strcmp(in_file_name, "\\") == 0) {
+	if (strchr_m(in_file_name, '\\') != NULL) {
 		tevent_req_nterror(req, NT_STATUS_OBJECT_NAME_INVALID);
 		return tevent_req_post(req, ev);
 	}
-	if (strcmp(in_file_name, "/") == 0) {
+	if (strchr_m(in_file_name, '/') != NULL) {
 		tevent_req_nterror(req, NT_STATUS_OBJECT_NAME_INVALID);
 		return tevent_req_post(req, ev);
 	}
@@ -323,11 +324,48 @@ static struct tevent_req *smbd_smb2_find_send(TALLOC_CTX *mem_ctx,
 		dptr_CloseDir(fsp);
 	}
 
-	if (fsp->dptr == NULL) {
-		bool wcard_has_wild;
+	wcard_has_wild = ms_has_wild(in_file_name);
+
+	/* Ensure we've canonicalized any search path if not a wildcard. */
+	if (!wcard_has_wild) {
+		struct smb_filename *smb_fname = NULL;
+		const char *fullpath;
+		char tmpbuf[PATH_MAX];
+		char *to_free = NULL;
+
+		if (ISDOT(fsp->fsp_name->base_name)) {
+			fullpath = in_file_name;
+		} else {
+			size_t len;
+			char *tmp;
+
+			len = full_path_tos(
+				fsp->fsp_name->base_name, in_file_name,
+				tmpbuf, sizeof(tmpbuf), &tmp, &to_free);
+			if (len == -1) {
+				tevent_req_oom(req);
+				return tevent_req_post(req, ev);
+			}
+			fullpath = tmp;
+		}
+		status = filename_convert(state,
+				conn,
+				false, /* Not a DFS path. */
+				fullpath,
+				UCF_SAVE_LCOMP | UCF_ALWAYS_ALLOW_WCARD_LCOMP,
+				&wcard_has_wild,
+				&smb_fname);
+
+		TALLOC_FREE(to_free);
 
-		wcard_has_wild = ms_has_wild(in_file_name);
+		if (tevent_req_nterror(req, status)) {
+			return tevent_req_post(req, ev);
+		}
 
+		in_file_name = smb_fname->original_lcomp;
+	}
+
+	if (fsp->dptr == NULL) {
 		status = dptr_create(conn,
 				     NULL, /* req */
 				     fsp,


-- 
Samba Shared Repository


More information about the samba-cvs mailing list