[SCM] Samba Shared Repository - branch v3-2-test updated - release-3-2-0pre2-575-gc40522c

Günther Deschner gd at samba.org
Mon Mar 31 22:28:14 GMT 2008


The branch, v3-2-test has been updated
       via  c40522cfe97c4e5eedccc9c56f47f9d4a8bcdaaf (commit)
       via  8b4eac0ab186c02666693d3f007f0c98d60e0eda (commit)
       via  776facabf6f09f643d6dc526aa83f8db517465f9 (commit)
       via  3adf82554a6f54878aed99c3e894aef1b7ecfd84 (commit)
       via  da7f006539219f8ccd525ef1fcd131d5f9558bf1 (commit)
       via  b4d944e724f7ae2a97ba788b185aba7b7308b475 (commit)
       via  1b6083449fbc2a252c046a0757c411be64e6b6c0 (commit)
       via  29c42792567870f3dc23363f4357fecbec862937 (commit)
       via  2fd90b62d7e61fa0c23f8f41e9f12fc16f29a8b1 (commit)
      from  fa5968a26b552d7f13574a826e506ed2d6630feb (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-2-test


- Log -----------------------------------------------------------------
commit c40522cfe97c4e5eedccc9c56f47f9d4a8bcdaaf
Author: Günther Deschner <gd at samba.org>
Date:   Tue Apr 1 00:14:00 2008 +0200

    Fix build warning.
    
    Guenther

commit 8b4eac0ab186c02666693d3f007f0c98d60e0eda
Author: Günther Deschner <gd at samba.org>
Date:   Tue Apr 1 00:11:55 2008 +0200

    Fix SRVSVC NetShareInfo level 502 client-side.
    
    Guenther

commit 776facabf6f09f643d6dc526aa83f8db517465f9
Author: Günther Deschner <gd at samba.org>
Date:   Tue Apr 1 00:02:48 2008 +0200

    Fix SRVSVC ShareInfo level 502 server side handling.
    
    Guenther

commit 3adf82554a6f54878aed99c3e894aef1b7ecfd84
Author: Günther Deschner <gd at samba.org>
Date:   Mon Mar 31 23:55:16 2008 +0200

    Re-run make idl.
    
    Guenther

commit da7f006539219f8ccd525ef1fcd131d5f9558bf1
Author: Günther Deschner <gd at samba.org>
Date:   Mon Mar 31 23:52:36 2008 +0200

    Fix IDL for srvsvc_NetShareInfo502. It does indeed contain a sec_desc_buf.
    
    Guenther

commit b4d944e724f7ae2a97ba788b185aba7b7308b475
Author: Günther Deschner <gd at samba.org>
Date:   Mon Mar 31 23:51:34 2008 +0200

    Fix SRVSVC ShareInfo max_users handling server side.
    
    Guenther

commit 1b6083449fbc2a252c046a0757c411be64e6b6c0
Author: Günther Deschner <gd at samba.org>
Date:   Mon Mar 31 23:47:26 2008 +0200

    Re-run make idl.
    
    Guenther

commit 29c42792567870f3dc23363f4357fecbec862937
Author: Günther Deschner <gd at samba.org>
Date:   Mon Mar 31 23:45:26 2008 +0200

    Use uint32 in max_users field in SRVSVC ShareInfo levels consistently.
    
    Guenther

commit 2fd90b62d7e61fa0c23f8f41e9f12fc16f29a8b1
Author: Günther Deschner <gd at samba.org>
Date:   Mon Mar 31 22:49:03 2008 +0200

    Fix _srvsvc_NetShareSetInfo.
    
    Guenther

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

Summary of changes:
 source/librpc/gen_ndr/ndr_srvsvc.c |   54 +++++++----------------------------
 source/librpc/gen_ndr/srvsvc.h     |    7 ++--
 source/librpc/idl/srvsvc.idl       |    8 ++---
 source/rpc_client/init_srvsvc.c    |   10 ++----
 source/rpc_server/srv_samr_nt.c    |    2 +-
 source/rpc_server/srv_srvsvc_nt.c  |   30 +++++++++++--------
 source/utils/net_rpc.c             |    4 +-
 7 files changed, 41 insertions(+), 74 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/librpc/gen_ndr/ndr_srvsvc.c b/source/librpc/gen_ndr/ndr_srvsvc.c
index fbf84ab..4e9e81a 100644
--- a/source/librpc/gen_ndr/ndr_srvsvc.c
+++ b/source/librpc/gen_ndr/ndr_srvsvc.c
@@ -4438,12 +4438,11 @@ static enum ndr_err_code ndr_push_srvsvc_NetShareInfo502(struct ndr_push *ndr, i
 		NDR_CHECK(ndr_push_srvsvc_ShareType(ndr, NDR_SCALARS, r->type));
 		NDR_CHECK(ndr_push_unique_ptr(ndr, r->comment));
 		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->permissions));
-		NDR_CHECK(ndr_push_int32(ndr, NDR_SCALARS, r->max_users));
+		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->max_users));
 		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->current_users));
 		NDR_CHECK(ndr_push_unique_ptr(ndr, r->path));
 		NDR_CHECK(ndr_push_unique_ptr(ndr, r->password));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->sd));
+		NDR_CHECK(ndr_push_sec_desc_buf(ndr, NDR_SCALARS, &r->sd_buf));
 	}
 	if (ndr_flags & NDR_BUFFERS) {
 		if (r->name) {
@@ -4470,14 +4469,7 @@ static enum ndr_err_code ndr_push_srvsvc_NetShareInfo502(struct ndr_push *ndr, i
 			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->password, CH_UTF16)));
 			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->password, ndr_charset_length(r->password, CH_UTF16), sizeof(uint16_t), CH_UTF16));
 		}
-		if (r->sd) {
-			{
-				struct ndr_push *_ndr_sd;
-				NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_sd, 4, -1));
-				NDR_CHECK(ndr_push_security_descriptor(_ndr_sd, NDR_SCALARS|NDR_BUFFERS, r->sd));
-				NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_sd, 4, -1));
-			}
-		}
+		NDR_CHECK(ndr_push_sec_desc_buf(ndr, NDR_BUFFERS, &r->sd_buf));
 	}
 	return NDR_ERR_SUCCESS;
 }
@@ -4492,8 +4484,6 @@ static enum ndr_err_code ndr_pull_srvsvc_NetShareInfo502(struct ndr_pull *ndr, i
 	TALLOC_CTX *_mem_save_path_0;
 	uint32_t _ptr_password;
 	TALLOC_CTX *_mem_save_password_0;
-	uint32_t _ptr_sd;
-	TALLOC_CTX *_mem_save_sd_0;
 	if (ndr_flags & NDR_SCALARS) {
 		NDR_CHECK(ndr_pull_align(ndr, 4));
 		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_name));
@@ -4510,7 +4500,7 @@ static enum ndr_err_code ndr_pull_srvsvc_NetShareInfo502(struct ndr_pull *ndr, i
 			r->comment = NULL;
 		}
 		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->permissions));
-		NDR_CHECK(ndr_pull_int32(ndr, NDR_SCALARS, &r->max_users));
+		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->max_users));
 		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->current_users));
 		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_path));
 		if (_ptr_path) {
@@ -4524,13 +4514,7 @@ static enum ndr_err_code ndr_pull_srvsvc_NetShareInfo502(struct ndr_pull *ndr, i
 		} else {
 			r->password = NULL;
 		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_sd));
-		if (_ptr_sd) {
-			NDR_PULL_ALLOC(ndr, r->sd);
-		} else {
-			r->sd = NULL;
-		}
+		NDR_CHECK(ndr_pull_sec_desc_buf(ndr, NDR_SCALARS, &r->sd_buf));
 	}
 	if (ndr_flags & NDR_BUFFERS) {
 		if (r->name) {
@@ -4581,17 +4565,7 @@ static enum ndr_err_code ndr_pull_srvsvc_NetShareInfo502(struct ndr_pull *ndr, i
 			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->password, ndr_get_array_length(ndr, &r->password), sizeof(uint16_t), CH_UTF16));
 			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_password_0, 0);
 		}
-		if (r->sd) {
-			_mem_save_sd_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->sd, 0);
-			{
-				struct ndr_pull *_ndr_sd;
-				NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_sd, 4, -1));
-				NDR_CHECK(ndr_pull_security_descriptor(_ndr_sd, NDR_SCALARS|NDR_BUFFERS, r->sd));
-				NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_sd, 4, -1));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sd_0, 0);
-		}
+		NDR_CHECK(ndr_pull_sec_desc_buf(ndr, NDR_BUFFERS, &r->sd_buf));
 	}
 	return NDR_ERR_SUCCESS;
 }
@@ -4614,7 +4588,7 @@ _PUBLIC_ void ndr_print_srvsvc_NetShareInfo502(struct ndr_print *ndr, const char
 	}
 	ndr->depth--;
 	ndr_print_uint32(ndr, "permissions", r->permissions);
-	ndr_print_int32(ndr, "max_users", r->max_users);
+	ndr_print_uint32(ndr, "max_users", r->max_users);
 	ndr_print_uint32(ndr, "current_users", r->current_users);
 	ndr_print_ptr(ndr, "path", r->path);
 	ndr->depth++;
@@ -4628,13 +4602,7 @@ _PUBLIC_ void ndr_print_srvsvc_NetShareInfo502(struct ndr_print *ndr, const char
 		ndr_print_string(ndr, "password", r->password);
 	}
 	ndr->depth--;
-	ndr_print_uint32(ndr, "unknown", r->unknown);
-	ndr_print_ptr(ndr, "sd", r->sd);
-	ndr->depth++;
-	if (r->sd) {
-		ndr_print_security_descriptor(ndr, "sd", r->sd);
-	}
-	ndr->depth--;
+	ndr_print_sec_desc_buf(ndr, "sd_buf", &r->sd_buf);
 	ndr->depth--;
 }
 
@@ -5007,7 +4975,7 @@ static enum ndr_err_code ndr_push_srvsvc_NetShareInfo1006(struct ndr_push *ndr,
 {
 	if (ndr_flags & NDR_SCALARS) {
 		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_int32(ndr, NDR_SCALARS, r->max_users));
+		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->max_users));
 	}
 	if (ndr_flags & NDR_BUFFERS) {
 	}
@@ -5018,7 +4986,7 @@ static enum ndr_err_code ndr_pull_srvsvc_NetShareInfo1006(struct ndr_pull *ndr,
 {
 	if (ndr_flags & NDR_SCALARS) {
 		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_int32(ndr, NDR_SCALARS, &r->max_users));
+		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->max_users));
 	}
 	if (ndr_flags & NDR_BUFFERS) {
 	}
@@ -5029,7 +4997,7 @@ _PUBLIC_ void ndr_print_srvsvc_NetShareInfo1006(struct ndr_print *ndr, const cha
 {
 	ndr_print_struct(ndr, name, "srvsvc_NetShareInfo1006");
 	ndr->depth++;
-	ndr_print_int32(ndr, "max_users", r->max_users);
+	ndr_print_uint32(ndr, "max_users", r->max_users);
 	ndr->depth--;
 }
 
diff --git a/source/librpc/gen_ndr/srvsvc.h b/source/librpc/gen_ndr/srvsvc.h
index f619dba..8a2bbfb 100644
--- a/source/librpc/gen_ndr/srvsvc.h
+++ b/source/librpc/gen_ndr/srvsvc.h
@@ -310,12 +310,11 @@ struct srvsvc_NetShareInfo502 {
 	enum srvsvc_ShareType type;
 	const char *comment;/* [unique,charset(UTF16)] */
 	uint32_t permissions;
-	int32_t max_users;
+	uint32_t max_users;
 	uint32_t current_users;
 	const char *path;/* [unique,charset(UTF16)] */
 	const char *password;/* [unique,charset(UTF16)] */
-	uint32_t unknown;
-	struct security_descriptor *sd;/* [unique,subcontext(4)] */
+	struct sec_desc_buf sd_buf;
 };
 
 struct srvsvc_NetShareCtr502 {
@@ -346,7 +345,7 @@ struct srvsvc_NetShareCtr1005 {
 };
 
 struct srvsvc_NetShareInfo1006 {
-	int32_t max_users;
+	uint32_t max_users;
 };
 
 struct srvsvc_NetShareCtr1006 {
diff --git a/source/librpc/idl/srvsvc.idl b/source/librpc/idl/srvsvc.idl
index 98a33e2..0bbd24a 100644
--- a/source/librpc/idl/srvsvc.idl
+++ b/source/librpc/idl/srvsvc.idl
@@ -463,13 +463,11 @@ import "security.idl", "svcctl.idl";
 		srvsvc_ShareType type;
 		[string,charset(UTF16)] uint16 *comment;
 		uint32 permissions;
-		int32 max_users;
+		uint32 max_users;
 		uint32 current_users;
 		[string,charset(UTF16)] uint16 *path;
 		[string,charset(UTF16)] uint16 *password;
-		/* maybe here is a struct sec_desc_buf following */
-		uint32 unknown;
-		[subcontext(4)] security_descriptor *sd;
+		sec_desc_buf sd_buf;
 	} srvsvc_NetShareInfo502;
 
 	typedef struct {
@@ -504,7 +502,7 @@ import "security.idl", "svcctl.idl";
 	} srvsvc_NetShareCtr1005;
 
 	typedef struct {
-		int32 max_users;
+		uint32 max_users;
 	} srvsvc_NetShareInfo1006;
 
 	typedef struct {
diff --git a/source/rpc_client/init_srvsvc.c b/source/rpc_client/init_srvsvc.c
index 7b59568..24beb1a 100644
--- a/source/rpc_client/init_srvsvc.c
+++ b/source/rpc_client/init_srvsvc.c
@@ -158,12 +158,11 @@ void init_srvsvc_NetShareInfo502(struct srvsvc_NetShareInfo502 *r,
 				 enum srvsvc_ShareType type,
 				 const char *comment,
 				 uint32_t permissions,
-				 int32_t max_users,
+				 uint32_t max_users,
 				 uint32_t current_users,
 				 const char *path,
 				 const char *password,
-				 uint32_t unknown,
-				 struct security_descriptor *sd)
+				 struct sec_desc_buf *sd_buf)
 {
 	r->name = name;
 	r->type = type;
@@ -173,8 +172,7 @@ void init_srvsvc_NetShareInfo502(struct srvsvc_NetShareInfo502 *r,
 	r->current_users = current_users;
 	r->path = path;
 	r->password = password;
-	r->unknown = unknown;
-	r->sd = sd;
+	r->sd_buf = *sd_buf;
 }
 
 /*******************************************************************
@@ -202,7 +200,7 @@ void init_srvsvc_NetShareInfo1005(struct srvsvc_NetShareInfo1005 *r,
 ********************************************************************/
 
 void init_srvsvc_NetShareInfo1006(struct srvsvc_NetShareInfo1006 *r,
-				  int32_t max_users)
+				  uint32_t max_users)
 {
 	r->max_users = max_users;
 }
diff --git a/source/rpc_server/srv_samr_nt.c b/source/rpc_server/srv_samr_nt.c
index 0f4a5b9..62632d0 100644
--- a/source/rpc_server/srv_samr_nt.c
+++ b/source/rpc_server/srv_samr_nt.c
@@ -2393,7 +2393,7 @@ static NTSTATUS get_user_info_20(TALLOC_CTX *mem_ctx,
 	samr_clear_sam_passwd(sampass);
 
 	DEBUG(3,("User:[%s] has [%s] (length: %d)\n", pdb_get_username(sampass),
-		munged_dial, strlen(munged_dial)));
+		munged_dial, (int)strlen(munged_dial)));
 
 	if (munged_dial) {
 		blob = base64_decode_data_blob(munged_dial);
diff --git a/source/rpc_server/srv_srvsvc_nt.c b/source/rpc_server/srv_srvsvc_nt.c
index 8359511..7188360 100644
--- a/source/rpc_server/srv_srvsvc_nt.c
+++ b/source/rpc_server/srv_srvsvc_nt.c
@@ -291,7 +291,7 @@ static void init_srv_share_info_2(pipes_struct *p, struct srvsvc_NetShareInfo2 *
 	char *remark = NULL;
 	char *path = NULL;
 	int max_connections = lp_max_connections(snum);
-	uint32 max_uses = max_connections!=0 ? max_connections : 0xffffffff;
+	uint32_t max_uses = max_connections!=0 ? max_connections : (uint32_t)-1;
 	int count = 0;
 	char *net_name = lp_servicename(snum);
 
@@ -379,6 +379,7 @@ static void init_srv_share_info_502(pipes_struct *p, struct srvsvc_NetShareInfo5
 	const char *net_name = lp_servicename(snum);
 	char *path = NULL;
 	SEC_DESC *sd = NULL;
+	struct sec_desc_buf *sd_buf = NULL;
 	size_t sd_size = 0;
 	TALLOC_CTX *ctx = p->mem_ctx;
 	char *remark = talloc_strdup(ctx, lp_comment(snum));;
@@ -397,16 +398,17 @@ static void init_srv_share_info_502(pipes_struct *p, struct srvsvc_NetShareInfo5
 
 	sd = get_share_security(ctx, lp_servicename(snum), &sd_size);
 
+	sd_buf = make_sec_desc_buf(p->mem_ctx, sd_size, sd);
+
 	init_srvsvc_NetShareInfo502(r, net_name,
 				    get_share_type(snum),
 				    remark ? remark : "",
 				    0,
-				    0xffffffff,
+				    (uint32_t)-1,
 				    1,
 				    path ? path : "",
 				    "",
-				    0,
-				    sd);
+				    sd_buf);
 }
 
 /***************************************************************************
@@ -447,7 +449,7 @@ static void init_srv_share_info_1005(pipes_struct *p, struct srvsvc_NetShareInfo
 
 static void init_srv_share_info_1006(pipes_struct *p, struct srvsvc_NetShareInfo1006 *r, int snum)
 {
-	init_srvsvc_NetShareInfo1006(r, 0xffffffff);
+	init_srvsvc_NetShareInfo1006(r, (uint32_t)-1);
 }
 
 /***************************************************************************
@@ -1484,7 +1486,9 @@ WERROR _srvsvc_NetShareSetInfo(pipes_struct *p,
 		return WERR_NOMEM;
 	}
 
-	*r->out.parm_error = 0;
+	if (r->out.parm_error) {
+		*r->out.parm_error = 0;
+	}
 
 	if ( strequal(share_name,"IPC$")
 		|| ( lp_enable_asu_support() && strequal(share_name,"ADMIN$") )
@@ -1515,15 +1519,15 @@ WERROR _srvsvc_NetShareSetInfo(pipes_struct *p,
 	switch (r->in.level) {
 	case 1:
 		pathname = talloc_strdup(ctx, lp_pathname(snum));
-		comment = talloc_strdup(ctx, info->info2->comment);
-		type = info->info2->type;
+		comment = talloc_strdup(ctx, info->info1->comment);
+		type = info->info1->type;
 		psd = NULL;
 		break;
 	case 2:
 		comment = talloc_strdup(ctx, info->info2->comment);
 		pathname = info->info2->path;
 		type = info->info2->type;
-		max_connections = (info->info2->max_users == 0xffffffff) ?
+		max_connections = (info->info2->max_users == (uint32_t)-1) ?
 			0 : info->info2->max_users;
 		psd = NULL;
 		break;
@@ -1539,7 +1543,7 @@ WERROR _srvsvc_NetShareSetInfo(pipes_struct *p,
 		comment = talloc_strdup(ctx, info->info502->comment);
 		pathname = info->info502->path;
 		type = info->info502->type;
-		psd = info->info502->sd;
+		psd = info->info502->sd_buf.sd;
 		map_generic_share_sd_bits(psd);
 		break;
 	case 1004:
@@ -1718,7 +1722,7 @@ WERROR _srvsvc_NetShareAdd(pipes_struct *p,
 		share_name = talloc_strdup(ctx, r->in.info->info2->name);
 		comment = talloc_strdup(ctx, r->in.info->info2->comment);
 		pathname = talloc_strdup(ctx, r->in.info->info2->path);
-		max_connections = (r->in.info->info2->max_users == 0xffffffff) ?
+		max_connections = (r->in.info->info2->max_users == (uint32_t)-1) ?
 			0 : r->in.info->info2->max_users;
 		type = r->in.info->info2->type;
 		break;
@@ -1729,10 +1733,10 @@ WERROR _srvsvc_NetShareAdd(pipes_struct *p,
 		share_name = talloc_strdup(ctx, r->in.info->info502->name);
 		comment = talloc_strdup(ctx, r->in.info->info502->comment);
 		pathname = talloc_strdup(ctx, r->in.info->info502->path);
-		max_connections = (r->in.info->info502->max_users == 0xffffffff) ?
+		max_connections = (r->in.info->info502->max_users == (uint32_t)-1) ?
 			0 : r->in.info->info502->max_users;
 		type = r->in.info->info502->type;
-		psd = r->in.info->info502->sd;
+		psd = r->in.info->info502->sd_buf.sd;
 		map_generic_share_sd_bits(psd);
 		break;
 
diff --git a/source/utils/net_rpc.c b/source/utils/net_rpc.c
index 85a3f87..25c1f42 100644
--- a/source/utils/net_rpc.c
+++ b/source/utils/net_rpc.c
@@ -4044,7 +4044,7 @@ static NTSTATUS rpc_share_migrate_security_internals(const DOM_SID *domain_sid,
 			info502.name, info502.path, info502.comment);
 
 		if (opt_verbose)
-			display_sec_desc(info502.sd);
+			display_sec_desc(info502.sd_buf.sd);
 
 		/* FIXME: shouldn't we be able to just set the security descriptor ? */
 		info.info502 = &info502;
@@ -4723,7 +4723,7 @@ static void show_userlist(struct rpc_pipe_client *pipe_hnd,
 		return;
 	}
 
-	share_sd = info.info502->sd;
+	share_sd = info.info502->sd_buf.sd;
 	if (share_sd == NULL) {
 		DEBUG(1, ("Got no secdesc for share %s\n",
 			  netname));


-- 
Samba Shared Repository


More information about the samba-cvs mailing list