[SCM] Samba Shared Repository - branch master updated

Jeremy Allison jra at samba.org
Wed Jul 5 20:25:02 UTC 2023


The branch, master has been updated
       via  6f073f258f1 s3:rpc_server: Fix double blackslash issue in dfs path
       via  8c10f539286 s3:rpc_server: Initialize consumedcnt to 0 in _dfs_GetInfo()
       via  2af9c65f2a1 s3:tests: Add rpcclient 'dfsgetinfo' test
      from  083fe1c28c6 smbd: call exit_server_cleanly() to avoid panicking

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


- Log -----------------------------------------------------------------
commit 6f073f258f1f4f03a8eb568ea05be78fdbec49eb
Author: Pavel Filipenský <pfilipensky at samba.org>
Date:   Tue Jun 20 16:24:55 2023 +0200

    s3:rpc_server: Fix double blackslash issue in dfs path
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=15400
    
    Signed-off-by: Pavel Filipenský <pfilipensky at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>
    
    Autobuild-User(master): Jeremy Allison <jra at samba.org>
    Autobuild-Date(master): Wed Jul  5 20:24:35 UTC 2023 on atb-devel-224

commit 8c10f53928653d02bbb75d6ab05510e87ee97420
Author: Pavel Filipenský <pfilipensky at samba.org>
Date:   Fri Jun 23 10:08:39 2023 +0200

    s3:rpc_server: Initialize consumedcnt to 0 in _dfs_GetInfo()
    
    Signed-off-by: Pavel Filipenský <pfilipensky at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 2af9c65f2a17ace4e1021b5c8fd6df636c904cfe
Author: Pavel Filipenský <pfilipensky at samba.org>
Date:   Fri Jun 23 12:03:30 2023 +0200

    s3:tests: Add rpcclient 'dfsgetinfo' test
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=15400
    
    Signed-off-by: Pavel Filipenský <pfilipensky at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

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

Summary of changes:
 source3/rpc_server/dfs/srv_dfs_nt.c        | 32 ++++++++++++++++++++++--------
 source3/script/tests/test_rpcclient_dfs.sh |  7 +++++++
 2 files changed, 31 insertions(+), 8 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/rpc_server/dfs/srv_dfs_nt.c b/source3/rpc_server/dfs/srv_dfs_nt.c
index 7b5119bbaf7..8eaa59a8b0e 100644
--- a/source3/rpc_server/dfs/srv_dfs_nt.c
+++ b/source3/rpc_server/dfs/srv_dfs_nt.c
@@ -63,6 +63,7 @@ WERROR _dfs_Add(struct pipes_struct *p, struct dfs_Add *r)
 	char *altpath = NULL;
 	NTSTATUS status;
 	TALLOC_CTX *ctx = talloc_tos();
+	const char *pathnamep = r->in.path;
 
 	if (session_info->unix_token->uid != sec_initial_uid()) {
 		DEBUG(10,("_dfs_add: uid != 0. Access denied.\n"));
@@ -84,10 +85,15 @@ WERROR _dfs_Add(struct pipes_struct *p, struct dfs_Add *r)
 		return WERR_NOT_ENOUGH_MEMORY;
 	}
 
+	while (IS_DIRECTORY_SEP(pathnamep[0]) &&
+	       IS_DIRECTORY_SEP(pathnamep[1])) {
+		pathnamep++;
+	}
+
 	/* The following call can change the cwd. */
 	status = get_referred_path(ctx,
 				   session_info,
-				   r->in.path,
+				   pathnamep,
 				   remote_address,
 				   local_address,
 				   jn, &consumedcnt, &self_ref);
@@ -141,6 +147,7 @@ WERROR _dfs_Remove(struct pipes_struct *p, struct dfs_Remove *r)
 	TALLOC_CTX *ctx = talloc_tos();
 	char *altpath = NULL;
 	NTSTATUS status;
+	const char *pathnamep = r->in.dfs_entry_path;
 
 	if (session_info->unix_token->uid != sec_initial_uid()) {
 		DEBUG(10,("_dfs_remove: uid != 0. Access denied.\n"));
@@ -166,9 +173,14 @@ WERROR _dfs_Remove(struct pipes_struct *p, struct dfs_Remove *r)
 			r->in.dfs_entry_path, r->in.servername, r->in.sharename));
 	}
 
+	while (IS_DIRECTORY_SEP(pathnamep[0]) &&
+	       IS_DIRECTORY_SEP(pathnamep[1])) {
+		pathnamep++;
+	}
+
 	status = get_referred_path(ctx,
 				   session_info,
-				   r->in.dfs_entry_path,
+				   pathnamep,
 				   remote_address,
 				   local_address,
 				   jn, &consumedcnt, &self_ref);
@@ -390,20 +402,25 @@ WERROR _dfs_GetInfo(struct pipes_struct *p, struct dfs_GetInfo *r)
 		dcesrv_connection_get_remote_address(dcesrv_conn);
 	struct auth_session_info *session_info =
 		dcesrv_call_session_info(dce_call);
-	size_t consumedcnt = strlen(r->in.dfs_entry_path);
+	size_t consumedcnt = 0;
 	struct junction_map *jn = NULL;
 	bool self_ref = False;
 	TALLOC_CTX *ctx = talloc_tos();
 	bool ret;
 	NTSTATUS status;
+	const char *pathnamep = r->in.dfs_entry_path;
 
 	jn = talloc_zero(ctx, struct junction_map);
 	if (!jn) {
 		return WERR_NOT_ENOUGH_MEMORY;
 	}
 
-	ret = create_junction(ctx, r->in.dfs_entry_path,
-			      jn);
+	while (IS_DIRECTORY_SEP(pathnamep[0]) &&
+	       IS_DIRECTORY_SEP(pathnamep[1])) {
+		pathnamep++;
+	}
+
+	ret = create_junction(ctx, pathnamep, jn);
 	if (!ret) {
 		return WERR_NERR_DFSNOSUCHSERVER;
 	}
@@ -411,12 +428,11 @@ WERROR _dfs_GetInfo(struct pipes_struct *p, struct dfs_GetInfo *r)
 	/* The following call can change the cwd. */
 	status = get_referred_path(ctx,
 				   session_info,
-				   r->in.dfs_entry_path,
+				   pathnamep,
 				   remote_address,
 				   local_address,
 				   jn, &consumedcnt, &self_ref);
-	if(!NT_STATUS_IS_OK(status) ||
-			consumedcnt < strlen(r->in.dfs_entry_path)) {
+	if(!NT_STATUS_IS_OK(status) || consumedcnt < strlen(pathnamep)) {
 		return WERR_NERR_DFSNOSUCHVOLUME;
 	}
 
diff --git a/source3/script/tests/test_rpcclient_dfs.sh b/source3/script/tests/test_rpcclient_dfs.sh
index 6d588d2ced2..0ae9e5015cd 100755
--- a/source3/script/tests/test_rpcclient_dfs.sh
+++ b/source3/script/tests/test_rpcclient_dfs.sh
@@ -31,8 +31,15 @@ ${RPCCLIENTCMD} -c "dfsenum 5"
 RC=$?
 testit "dfsenum" test ${RC} -eq 0 || failed=$((failed + 1))
 
+# This test fails: _dfs_EnumEx() is not implemented on samba RPC server side
 ${RPCCLIENTCMD} -c "dfsenumex 5"
 RC=$?
 testit "dfsenumex" test ${RC} -eq 0 || failed=$((failed + 1))
 
+# Every backslash is reduced twice, so we need to enter it 4 times.
+# Rpc server then gets: '\\server\share\path'
+${RPCCLIENTCMD} -c "dfsgetinfo \\\\\\\\${SERVER}\\\\msdfs-share\\\\msdfs-src1 ${SERVER} msdfs-src1"
+RC=$?
+testit "dfsgetinfo" test ${RC} -eq 0 || failed=$((failed + 1))
+
 testok "$0" "${failed}"


-- 
Samba Shared Repository



More information about the samba-cvs mailing list