svn commit: samba r22574 - in branches: SAMBA_3_0/source/rpc_server SAMBA_3_0_25/source/rpc_server

jra at samba.org jra at samba.org
Sun Apr 29 19:54:26 GMT 2007


Author: jra
Date: 2007-04-29 19:54:26 +0000 (Sun, 29 Apr 2007)
New Revision: 22574

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

Log:
Fix reply when we have no dfs shares.
Jeremy.

Modified:
   branches/SAMBA_3_0/source/rpc_server/srv_dfs_nt.c
   branches/SAMBA_3_0_25/source/rpc_server/srv_dfs_nt.c


Changeset:
Modified: branches/SAMBA_3_0/source/rpc_server/srv_dfs_nt.c
===================================================================
--- branches/SAMBA_3_0/source/rpc_server/srv_dfs_nt.c	2007-04-29 19:20:48 UTC (rev 22573)
+++ branches/SAMBA_3_0/source/rpc_server/srv_dfs_nt.c	2007-04-29 19:54:26 UTC (rev 22574)
@@ -211,12 +211,15 @@
 	dfs3->num_stores = j->referral_count;
     
 	/* also enumerate the stores */
-	dfs3->stores = TALLOC_ARRAY(mem_ctx, struct dfs_StorageInfo, j->referral_count);
-	if (!dfs3->stores)
-		return False;
+	if (j->referral_count) {
+		dfs3->stores = TALLOC_ARRAY(mem_ctx, struct dfs_StorageInfo, j->referral_count);
+		if (!dfs3->stores)
+			return False;
+		memset(dfs3->stores, '\0', j->referral_count * sizeof(struct dfs_StorageInfo));
+	} else {
+		dfs3->stores = NULL;
+	}
 
-	memset(dfs3->stores, '\0', j->referral_count * sizeof(struct dfs_StorageInfo));
-
 	for(ii=0;ii<j->referral_count;ii++) {
 		char* p; 
 		pstring path;
@@ -262,20 +265,32 @@
 	/* Create the return array */
 	switch (r->in.level) {
 	case 1:
-		if ((r->out.info->e.info1->s = TALLOC_ARRAY(p->mem_ctx, struct dfs_Info1, num_jn)) == NULL) {
-			return WERR_NOMEM;
+		if (num_jn) {
+			if ((r->out.info->e.info1->s = TALLOC_ARRAY(p->mem_ctx, struct dfs_Info1, num_jn)) == NULL) {
+				return WERR_NOMEM;
+			}
+		} else {
+			r->out.info->e.info1->s = NULL;
 		}
 		r->out.info->e.info1->count = num_jn;
 		break;
 	case 2:
-		if ((r->out.info->e.info2->s = TALLOC_ARRAY(p->mem_ctx, struct dfs_Info2, num_jn)) == NULL) {
-			return WERR_NOMEM;
+		if (num_jn) {
+			if ((r->out.info->e.info2->s = TALLOC_ARRAY(p->mem_ctx, struct dfs_Info2, num_jn)) == NULL) {
+				return WERR_NOMEM;
+			}
+		} else {
+			r->out.info->e.info2->s = NULL;
 		}
 		r->out.info->e.info2->count = num_jn;
 		break;
 	case 3:
-		if ((r->out.info->e.info3->s = TALLOC_ARRAY(p->mem_ctx, struct dfs_Info3, num_jn)) == NULL) {
-			return WERR_NOMEM;
+		if (num_jn) {
+			if ((r->out.info->e.info3->s = TALLOC_ARRAY(p->mem_ctx, struct dfs_Info3, num_jn)) == NULL) {
+				return WERR_NOMEM;
+			}
+		} else {
+			r->out.info->e.info3->s = NULL;
 		}
 		r->out.info->e.info3->count = num_jn;
 		break;
@@ -301,7 +316,7 @@
   
 	return WERR_OK;
 }
-      
+
 WERROR _dfs_GetInfo(pipes_struct *p, struct dfs_GetInfo *r)
 {
 	int consumedcnt = sizeof(pstring);

Modified: branches/SAMBA_3_0_25/source/rpc_server/srv_dfs_nt.c
===================================================================
--- branches/SAMBA_3_0_25/source/rpc_server/srv_dfs_nt.c	2007-04-29 19:20:48 UTC (rev 22573)
+++ branches/SAMBA_3_0_25/source/rpc_server/srv_dfs_nt.c	2007-04-29 19:54:26 UTC (rev 22574)
@@ -233,15 +233,19 @@
 	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;
     
 	/* also enumerate the stores */
-	dfs3->stores = TALLOC_ARRAY(ctx, NETDFS_DFS_STORAGEINFO, j->referral_count);
-	if (!dfs3->stores)
-		return False;
+	if (j->referral_count) {
+		dfs3->stores = TALLOC_ARRAY(ctx, NETDFS_DFS_STORAGEINFO, j->referral_count);
+		if (!dfs3->stores)
+			return False;
+		memset(dfs3->stores, '\0', j->referral_count * sizeof(NETDFS_DFS_STORAGEINFO));
+		dfs3->ptr0_stores = 1;
+	} else {
+		dfs3->stores = NULL;
+		dfs3->ptr0_stores = 0;
+	}
 
-	memset(dfs3->stores, '\0', j->referral_count * sizeof(NETDFS_DFS_STORAGEINFO));
-
 	for(ii=0;ii<j->referral_count;ii++) {
 		char* p; 
 		pstring path;
@@ -294,28 +298,34 @@
 	/* Create the return array */
 	switch (level) {
 	case 1:
-		if ((r_u->info.e.u.info1.s = TALLOC_ARRAY(p->mem_ctx, NETDFS_DFS_INFO1, num_jn)) == NULL) {
-			return WERR_NOMEM;
+		r_u->info.e.u.info1.count = num_jn;
+		if (num_jn) {
+			if ((r_u->info.e.u.info1.s = TALLOC_ARRAY(p->mem_ctx, NETDFS_DFS_INFO1, num_jn)) == NULL) {
+				return WERR_NOMEM;
+			}
+			r_u->info.e.u.info1.ptr0_s = 1;
+			r_u->info.e.u.info1.size_s = num_jn;
 		}
-		r_u->info.e.u.info1.count = num_jn;
-		r_u->info.e.u.info1.ptr0_s = 1;
-		r_u->info.e.u.info1.size_s = num_jn;
 		break;
 	case 2:
-		if ((r_u->info.e.u.info2.s = TALLOC_ARRAY(p->mem_ctx, NETDFS_DFS_INFO2, num_jn)) == NULL) {
-			return WERR_NOMEM;
+		r_u->info.e.u.info2.count = num_jn;
+		if (num_jn) {
+			if ((r_u->info.e.u.info2.s = TALLOC_ARRAY(p->mem_ctx, NETDFS_DFS_INFO2, num_jn)) == NULL) {
+				return WERR_NOMEM;
+			}
+			r_u->info.e.u.info2.ptr0_s = 1;
+			r_u->info.e.u.info2.size_s = num_jn;
 		}
-		r_u->info.e.u.info2.count = num_jn;
-		r_u->info.e.u.info2.ptr0_s = 1;
-		r_u->info.e.u.info2.size_s = num_jn;
 		break;
 	case 3:
-		if ((r_u->info.e.u.info3.s = TALLOC_ARRAY(p->mem_ctx, NETDFS_DFS_INFO3, num_jn)) == NULL) {
-			return WERR_NOMEM;
+		r_u->info.e.u.info3.count = num_jn;
+		if (num_jn) {
+			if ((r_u->info.e.u.info3.s = TALLOC_ARRAY(p->mem_ctx, NETDFS_DFS_INFO3, num_jn)) == NULL) {
+				return WERR_NOMEM;
+			}
+			r_u->info.e.u.info3.ptr0_s = 1;
+			r_u->info.e.u.info3.size_s = num_jn;
 		}
-		r_u->info.e.u.info3.count = num_jn;
-		r_u->info.e.u.info3.ptr0_s = 1;
-		r_u->info.e.u.info3.size_s = num_jn;
 		break;
 	default:
 		return WERR_INVALID_PARAM;



More information about the samba-cvs mailing list