svn commit: samba r17453 - in branches: SAMBA_3_0/source/include SAMBA_3_0/source/rpc_client SAMBA_3_0/source/rpc_parse SAMBA_3_0/source/rpc_server SAMBA_3_0/source/rpcclient SAMBA_3_0/source/smbd SAMBA_3_0_23/source/include SAMBA_3_0_23/source/rpc_client SAMBA_3_0_23/source/rpc_parse SAMBA_3_0_23/source/rpc_server SAMBA_3_0_23/source/rpcclient SAMBA_3_0_23/source/smbd

gd at samba.org gd at samba.org
Tue Aug 8 11:00:18 GMT 2006


Author: gd
Date: 2006-08-08 11:00:16 +0000 (Tue, 08 Aug 2006)
New Revision: 17453

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=17453

Log:
Fix msdfs RPC management (this broke with the autogenerated dfs rpcs).

* Remove "unknown" from dfs_Enum (samba4 dfs IDL updates to follow).

* When encountering an unsupported infolevel the rpc server must reply
with a dfs_info_0 structure and WERR_OK (observed from w2k3 when talking
to nt4).

Guenther

Modified:
   branches/SAMBA_3_0/source/include/msdfs.h
   branches/SAMBA_3_0/source/include/rpc_dfs.h
   branches/SAMBA_3_0/source/rpc_client/cli_dfs.c
   branches/SAMBA_3_0/source/rpc_parse/parse_dfs.c
   branches/SAMBA_3_0/source/rpc_server/srv_dfs_nt.c
   branches/SAMBA_3_0/source/rpcclient/cmd_dfs.c
   branches/SAMBA_3_0/source/smbd/msdfs.c
   branches/SAMBA_3_0_23/source/include/msdfs.h
   branches/SAMBA_3_0_23/source/include/rpc_dfs.h
   branches/SAMBA_3_0_23/source/rpc_client/cli_dfs.c
   branches/SAMBA_3_0_23/source/rpc_parse/parse_dfs.c
   branches/SAMBA_3_0_23/source/rpc_server/srv_dfs_nt.c
   branches/SAMBA_3_0_23/source/rpcclient/cmd_dfs.c
   branches/SAMBA_3_0_23/source/smbd/msdfs.c


Changeset:
Modified: branches/SAMBA_3_0/source/include/msdfs.h
===================================================================
--- branches/SAMBA_3_0/source/include/msdfs.h	2006-08-08 09:56:38 UTC (rev 17452)
+++ branches/SAMBA_3_0/source/include/msdfs.h	2006-08-08 11:00:16 UTC (rev 17453)
@@ -53,6 +53,7 @@
 struct junction_map {
 	pstring service_name;
 	pstring volume_name;
+	pstring comment;
 	int referral_count;
 	struct referral* referral_list;
 };

Modified: branches/SAMBA_3_0/source/include/rpc_dfs.h
===================================================================
--- branches/SAMBA_3_0/source/include/rpc_dfs.h	2006-08-08 09:56:38 UTC (rev 17452)
+++ branches/SAMBA_3_0/source/include/rpc_dfs.h	2006-08-08 11:00:16 UTC (rev 17453)
@@ -243,8 +243,6 @@
 	uint32 bufsize;
 	uint32 ptr0_info;
 	NETDFS_DFS_ENUMSTRUCT info;
-	uint32 ptr0_unknown;
-	uint32 unknown;
 	uint32 ptr0_total;
 	uint32 total;
 } NETDFS_Q_DFS_ENUM;

Modified: branches/SAMBA_3_0/source/rpc_client/cli_dfs.c
===================================================================
--- branches/SAMBA_3_0/source/rpc_client/cli_dfs.c	2006-08-08 09:56:38 UTC (rev 17452)
+++ branches/SAMBA_3_0/source/rpc_client/cli_dfs.c	2006-08-08 11:00:16 UTC (rev 17453)
@@ -142,7 +142,7 @@
 	return werror_to_ntstatus(r.status);
 }
 
-NTSTATUS rpccli_dfs_Enum(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, uint32 level, uint32 bufsize, NETDFS_DFS_ENUMSTRUCT *info, uint32 *unknown, uint32 *total)
+NTSTATUS rpccli_dfs_Enum(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, uint32 level, uint32 bufsize, NETDFS_DFS_ENUMSTRUCT *info, uint32 *total)
 {
 	prs_struct qbuf, rbuf;
 	NETDFS_Q_DFS_ENUM q;
@@ -153,7 +153,7 @@
 	
 	/* Marshall data and send request */
 	
-	if (!init_netdfs_q_dfs_Enum(&q, level, bufsize, info, unknown, total))
+	if (!init_netdfs_q_dfs_Enum(&q, level, bufsize, info, total))
 		return NT_STATUS_INVALID_PARAMETER;
 	
 	CLI_DO_RPC(cli, mem_ctx, PI_NETDFS, DFS_ENUM,

Modified: branches/SAMBA_3_0/source/rpc_parse/parse_dfs.c
===================================================================
--- branches/SAMBA_3_0/source/rpc_parse/parse_dfs.c	2006-08-08 09:56:38 UTC (rev 17452)
+++ branches/SAMBA_3_0/source/rpc_parse/parse_dfs.c	2006-08-08 11:00:16 UTC (rev 17453)
@@ -1862,7 +1862,7 @@
 	return True;
 }
 
-BOOL init_netdfs_q_dfs_Enum(NETDFS_Q_DFS_ENUM *v, uint32 level, uint32 bufsize, NETDFS_DFS_ENUMSTRUCT *info, uint32 *unknown, uint32 *total)
+BOOL init_netdfs_q_dfs_Enum(NETDFS_Q_DFS_ENUM *v, uint32 level, uint32 bufsize, NETDFS_DFS_ENUMSTRUCT *info, uint32 *total)
 {
 	DEBUG(5,("init_netdfs_q_dfs_Enum\n"));
 	
@@ -1877,13 +1877,6 @@
 		v->ptr0_info = 0;
 	}
 	
-	if (unknown) {
-		v->ptr0_unknown = 1;
-		v->unknown = *unknown;
-	} else {
-		v->ptr0_unknown = 0;
-	}
-	
 	if (total) {
 		v->ptr0_total = 1;
 		v->total = *total;
@@ -1920,17 +1913,6 @@
 	if (!prs_align_custom(ps, 4))
 		return False;
 	
-	if (!prs_uint32("ptr0_unknown", ps, depth, &v->ptr0_unknown))
-		return False;
-	
-	if (v->ptr0_unknown) {
-		if (!prs_uint32("unknown", ps, depth, &v->unknown))
-			return False;
-	}
-	
-	if (!prs_align_custom(ps, 4))
-		return False;
-	
 	if (!prs_uint32("ptr0_total", ps, depth, &v->ptr0_total))
 		return False;
 	

Modified: branches/SAMBA_3_0/source/rpc_server/srv_dfs_nt.c
===================================================================
--- branches/SAMBA_3_0/source/rpc_server/srv_dfs_nt.c	2006-08-08 09:56:38 UTC (rev 17452)
+++ branches/SAMBA_3_0/source/rpc_server/srv_dfs_nt.c	2006-08-08 11:00:16 UTC (rev 17453)
@@ -200,6 +200,7 @@
 		j->service_name, j->volume_name);
 	init_unistr2(&dfs2->path, str, UNI_STR_TERMINATE);
 	dfs2->ptr0_comment = 0;
+	init_unistr2(&dfs2->comment, j->comment, UNI_STR_TERMINATE);
 	dfs2->state = 1; /* set up state of dfs junction as OK */
 	dfs2->num_stores = j->referral_count;
 	return True;
@@ -219,7 +220,7 @@
 
 	init_unistr2(&dfs3->path, str, UNI_STR_TERMINATE);
 	dfs3->ptr0_comment = 1;
-	init_unistr2(&dfs3->comment, "", UNI_STR_TERMINATE);
+	init_unistr2(&dfs3->comment, j->comment, UNI_STR_TERMINATE);
 	dfs3->state = 1;
 	dfs3->num_stores = dfs3->size_stores = j->referral_count;
 	dfs3->ptr0_stores = 1;
@@ -254,6 +255,14 @@
 	return True;
 }
 
+static BOOL init_reply_dfs_info_100(struct junction_map* j, NETDFS_DFS_INFO100* dfs100)
+{
+	dfs100->ptr0_comment = 1;
+	init_unistr2(&dfs100->comment, j->comment, UNI_STR_TERMINATE);
+	return True;
+}
+
+
 WERROR _dfs_Enum(pipes_struct *p, NETDFS_Q_DFS_ENUM *q_u, NETDFS_R_DFS_ENUM *r_u)
 {
 	uint32 level = q_u->level;
@@ -264,7 +273,7 @@
 	num_jn = enum_msdfs_links(p->mem_ctx, jn, ARRAY_SIZE(jn));
 	vfs_ChDir(p->conn,p->conn->connectpath);
     
-	DEBUG(5,("make_reply_dfs_enum: %d junctions found in Dfs, doing level %d\n", num_jn, level));
+	DEBUG(5,("_dfs_Enum: %d junctions found in Dfs, doing level %d\n", num_jn, level));
 
 	r_u->ptr0_info = q_u->ptr0_info;
 	r_u->ptr0_total = q_u->ptr0_total;
@@ -330,7 +339,7 @@
 	uint32 level = q_u->level;
 	int consumedcnt = sizeof(pstring);
 	pstring path;
-	BOOL ret;
+	BOOL ret = False;
 	struct junction_map jn;
 
 	unistr2_to_ascii(path, uni_path, sizeof(path)-1);
@@ -352,8 +361,12 @@
 		case 1: ret = init_reply_dfs_info_1(&jn, &r_u->info.u.info1); break;
 		case 2: ret = init_reply_dfs_info_2(&jn, &r_u->info.u.info2); break;
 		case 3: ret = init_reply_dfs_info_3(p->mem_ctx, &jn, &r_u->info.u.info3); break;
+		case 100: ret = init_reply_dfs_info_100(&jn, &r_u->info.u.info100); break;
 		default:
-			ret = False;
+			r_u->info.ptr0 = 1;
+			r_u->info.switch_value = 0;
+			r_u->status = WERR_OK;
+			ret = True;
 			break;
 	}
 

Modified: branches/SAMBA_3_0/source/rpcclient/cmd_dfs.c
===================================================================
--- branches/SAMBA_3_0/source/rpcclient/cmd_dfs.c	2006-08-08 09:56:38 UTC (rev 17452)
+++ branches/SAMBA_3_0/source/rpcclient/cmd_dfs.c	2006-08-08 11:00:16 UTC (rev 17453)
@@ -190,7 +190,7 @@
 	NETDFS_DFS_ENUMINFO_CTR ctr;
 	NTSTATUS result;
 	uint32 info_level = 1;
-	uint32 unknown = 0, total = 0;
+	uint32 total = 0;
 
 	if (argc > 2) {
 		printf("Usage: %s [info_level]\n", argv[0]);
@@ -204,7 +204,7 @@
 	init_netdfs_dfs_EnumStruct(&str, info_level, ctr);
 	str.e.ptr0 = 1;
 
-	result = rpccli_dfs_Enum(cli, mem_ctx, info_level, 0xFFFFFFFF, &str, &unknown, &total);
+	result = rpccli_dfs_Enum(cli, mem_ctx, info_level, 0xFFFFFFFF, &str, &total);
 
 	if (NT_STATUS_IS_OK(result))
 		display_dfs_enumstruct(&str);

Modified: branches/SAMBA_3_0/source/smbd/msdfs.c
===================================================================
--- branches/SAMBA_3_0/source/smbd/msdfs.c	2006-08-08 09:56:38 UTC (rev 17452)
+++ branches/SAMBA_3_0/source/smbd/msdfs.c	2006-08-08 11:00:16 UTC (rev 17453)
@@ -901,6 +901,7 @@
 
 	pstrcpy(jucn->service_name,dp.servicename);
 	pstrcpy(jucn->volume_name,dp.reqpath);
+	pstrcpy(jucn->comment, lp_comment(lp_servicenumber(dp.servicename)));
 	return True;
 }
 

Modified: branches/SAMBA_3_0_23/source/include/msdfs.h
===================================================================
--- branches/SAMBA_3_0_23/source/include/msdfs.h	2006-08-08 09:56:38 UTC (rev 17452)
+++ branches/SAMBA_3_0_23/source/include/msdfs.h	2006-08-08 11:00:16 UTC (rev 17453)
@@ -53,6 +53,7 @@
 struct junction_map {
 	pstring service_name;
 	pstring volume_name;
+	pstring comment;
 	int referral_count;
 	struct referral* referral_list;
 };

Modified: branches/SAMBA_3_0_23/source/include/rpc_dfs.h
===================================================================
--- branches/SAMBA_3_0_23/source/include/rpc_dfs.h	2006-08-08 09:56:38 UTC (rev 17452)
+++ branches/SAMBA_3_0_23/source/include/rpc_dfs.h	2006-08-08 11:00:16 UTC (rev 17453)
@@ -243,8 +243,6 @@
 	uint32 bufsize;
 	uint32 ptr0_info;
 	NETDFS_DFS_ENUMSTRUCT info;
-	uint32 ptr0_unknown;
-	uint32 unknown;
 	uint32 ptr0_total;
 	uint32 total;
 } NETDFS_Q_DFS_ENUM;

Modified: branches/SAMBA_3_0_23/source/rpc_client/cli_dfs.c
===================================================================
--- branches/SAMBA_3_0_23/source/rpc_client/cli_dfs.c	2006-08-08 09:56:38 UTC (rev 17452)
+++ branches/SAMBA_3_0_23/source/rpc_client/cli_dfs.c	2006-08-08 11:00:16 UTC (rev 17453)
@@ -142,7 +142,7 @@
 	return werror_to_ntstatus(r.status);
 }
 
-NTSTATUS rpccli_dfs_Enum(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, uint32 level, uint32 bufsize, NETDFS_DFS_ENUMSTRUCT *info, uint32 *unknown, uint32 *total)
+NTSTATUS rpccli_dfs_Enum(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, uint32 level, uint32 bufsize, NETDFS_DFS_ENUMSTRUCT *info, uint32 *total)
 {
 	prs_struct qbuf, rbuf;
 	NETDFS_Q_DFS_ENUM q;
@@ -153,7 +153,7 @@
 	
 	/* Marshall data and send request */
 	
-	if (!init_netdfs_q_dfs_Enum(&q, level, bufsize, info, unknown, total))
+	if (!init_netdfs_q_dfs_Enum(&q, level, bufsize, info, total))
 		return NT_STATUS_INVALID_PARAMETER;
 	
 	CLI_DO_RPC(cli, mem_ctx, PI_NETDFS, DFS_ENUM,

Modified: branches/SAMBA_3_0_23/source/rpc_parse/parse_dfs.c
===================================================================
--- branches/SAMBA_3_0_23/source/rpc_parse/parse_dfs.c	2006-08-08 09:56:38 UTC (rev 17452)
+++ branches/SAMBA_3_0_23/source/rpc_parse/parse_dfs.c	2006-08-08 11:00:16 UTC (rev 17453)
@@ -1862,7 +1862,7 @@
 	return True;
 }
 
-BOOL init_netdfs_q_dfs_Enum(NETDFS_Q_DFS_ENUM *v, uint32 level, uint32 bufsize, NETDFS_DFS_ENUMSTRUCT *info, uint32 *unknown, uint32 *total)
+BOOL init_netdfs_q_dfs_Enum(NETDFS_Q_DFS_ENUM *v, uint32 level, uint32 bufsize, NETDFS_DFS_ENUMSTRUCT *info, uint32 *total)
 {
 	DEBUG(5,("init_netdfs_q_dfs_Enum\n"));
 	
@@ -1877,13 +1877,6 @@
 		v->ptr0_info = 0;
 	}
 	
-	if (unknown) {
-		v->ptr0_unknown = 1;
-		v->unknown = *unknown;
-	} else {
-		v->ptr0_unknown = 0;
-	}
-	
 	if (total) {
 		v->ptr0_total = 1;
 		v->total = *total;
@@ -1920,17 +1913,6 @@
 	if (!prs_align_custom(ps, 4))
 		return False;
 	
-	if (!prs_uint32("ptr0_unknown", ps, depth, &v->ptr0_unknown))
-		return False;
-	
-	if (v->ptr0_unknown) {
-		if (!prs_uint32("unknown", ps, depth, &v->unknown))
-			return False;
-	}
-	
-	if (!prs_align_custom(ps, 4))
-		return False;
-	
 	if (!prs_uint32("ptr0_total", ps, depth, &v->ptr0_total))
 		return False;
 	

Modified: branches/SAMBA_3_0_23/source/rpc_server/srv_dfs_nt.c
===================================================================
--- branches/SAMBA_3_0_23/source/rpc_server/srv_dfs_nt.c	2006-08-08 09:56:38 UTC (rev 17452)
+++ branches/SAMBA_3_0_23/source/rpc_server/srv_dfs_nt.c	2006-08-08 11:00:16 UTC (rev 17453)
@@ -206,6 +206,7 @@
 		j->service_name, j->volume_name);
 	init_unistr2(&dfs2->path, str, UNI_STR_TERMINATE);
 	dfs2->ptr0_comment = 0;
+	init_unistr2(&dfs2->comment, j->comment, UNI_STR_TERMINATE);
 	dfs2->state = 1; /* set up state of dfs junction as OK */
 	dfs2->num_stores = j->referral_count;
 	return True;
@@ -225,7 +226,7 @@
 
 	init_unistr2(&dfs3->path, str, UNI_STR_TERMINATE);
 	dfs3->ptr0_comment = 1;
-	init_unistr2(&dfs3->comment, "", UNI_STR_TERMINATE);
+	init_unistr2(&dfs3->comment, j->comment, UNI_STR_TERMINATE);
 	dfs3->state = 1;
 	dfs3->num_stores = dfs3->size_stores = j->referral_count;
 	dfs3->ptr0_stores = 1;
@@ -260,6 +261,14 @@
 	return True;
 }
 
+static BOOL init_reply_dfs_info_100(struct junction_map* j, NETDFS_DFS_INFO100* dfs100)
+{
+	dfs100->ptr0_comment = 1;
+	init_unistr2(&dfs100->comment, j->comment, UNI_STR_TERMINATE);
+	return True;
+}
+
+
 WERROR _dfs_Enum(pipes_struct *p, NETDFS_Q_DFS_ENUM *q_u, NETDFS_R_DFS_ENUM *r_u)
 {
 	uint32 level = q_u->level;
@@ -270,7 +279,7 @@
 	num_jn = enum_msdfs_links(p->mem_ctx, jn, ARRAY_SIZE(jn));
 	vfs_ChDir(p->conn,p->conn->connectpath);
     
-	DEBUG(5,("make_reply_dfs_enum: %d junctions found in Dfs, doing level %d\n", num_jn, level));
+	DEBUG(5,("_dfs_Enum: %d junctions found in Dfs, doing level %d\n", num_jn, level));
 
 	r_u->ptr0_info = q_u->ptr0_info;
 	r_u->ptr0_total = q_u->ptr0_total;
@@ -336,7 +345,7 @@
 	uint32 level = q_u->level;
 	int consumedcnt = sizeof(pstring);
 	pstring path;
-	BOOL ret;
+	BOOL ret = False;
 	struct junction_map jn;
 
 	unistr2_to_ascii(path, uni_path, sizeof(path)-1);
@@ -358,8 +367,12 @@
 		case 1: ret = init_reply_dfs_info_1(&jn, &r_u->info.u.info1); break;
 		case 2: ret = init_reply_dfs_info_2(&jn, &r_u->info.u.info2); break;
 		case 3: ret = init_reply_dfs_info_3(p->mem_ctx, &jn, &r_u->info.u.info3); break;
+		case 100: ret = init_reply_dfs_info_100(&jn, &r_u->info.u.info100); break;
 		default:
-			ret = False;
+			r_u->info.ptr0 = 1;
+			r_u->info.switch_value = 0;
+			r_u->status = WERR_OK;
+			ret = True;
 			break;
 	}
 

Modified: branches/SAMBA_3_0_23/source/rpcclient/cmd_dfs.c
===================================================================
--- branches/SAMBA_3_0_23/source/rpcclient/cmd_dfs.c	2006-08-08 09:56:38 UTC (rev 17452)
+++ branches/SAMBA_3_0_23/source/rpcclient/cmd_dfs.c	2006-08-08 11:00:16 UTC (rev 17453)
@@ -190,7 +190,7 @@
 	NETDFS_DFS_ENUMINFO_CTR ctr;
 	NTSTATUS result;
 	uint32 info_level = 1;
-	uint32 unknown = 0, total = 0;
+	uint32 total = 0;
 
 	if (argc > 2) {
 		printf("Usage: %s [info_level]\n", argv[0]);
@@ -204,7 +204,7 @@
 	init_netdfs_dfs_EnumStruct(&str, info_level, ctr);
 	str.e.ptr0 = 1;
 
-	result = rpccli_dfs_Enum(cli, mem_ctx, info_level, 0xFFFFFFFF, &str, &unknown, &total);
+	result = rpccli_dfs_Enum(cli, mem_ctx, info_level, 0xFFFFFFFF, &str, &total);
 
 	if (NT_STATUS_IS_OK(result))
 		display_dfs_enumstruct(&str);

Modified: branches/SAMBA_3_0_23/source/smbd/msdfs.c
===================================================================
--- branches/SAMBA_3_0_23/source/smbd/msdfs.c	2006-08-08 09:56:38 UTC (rev 17452)
+++ branches/SAMBA_3_0_23/source/smbd/msdfs.c	2006-08-08 11:00:16 UTC (rev 17453)
@@ -889,6 +889,7 @@
 
 	pstrcpy(jucn->service_name,dp.servicename);
 	pstrcpy(jucn->volume_name,dp.reqpath);
+	pstrcpy(jucn->comment, lp_comment(lp_servicenumber(dp.servicename)));
 	return True;
 }
 



More information about the samba-cvs mailing list