[SCM] Samba Shared Repository - branch v3-2-stable updated - release-3-2-0pre2-385-g690a297

Karolin Seeger kseeger at samba.org
Tue Apr 1 07:47:48 GMT 2008


The branch, v3-2-stable has been updated
       via  690a2979521618da454f52946618ec0f5cc4fbc8 (commit)
       via  90701e858fa6a987cf26327e325f56998a849d1e (commit)
       via  106805b034dbc602be9da2107b76fabcefa3b59e (commit)
       via  0d218c6fb1713cf7c4d855c74f85dd373f5d9ff9 (commit)
       via  657031c6342a0b53ecd88dd40153525c9069ea88 (commit)
       via  258bde1fd43c83405ffdcd177c7bc160bed5f744 (commit)
       via  0f59ed41fbbbac3177d89d3b2b3fc2cccf3fd165 (commit)
       via  ecb422db8f30df4a1d976042d15b1188918f644f (commit)
       via  99794c5bde4d2110f13482d5075ebf74de7e0c29 (commit)
       via  4da9990e677ae93940e2e40344399d5219c72b19 (commit)
       via  643e84551f9467324e00fc09e13e7362d275ca58 (commit)
       via  631e9d77fdf2999790fddb7a83b5353cc07dbdcd (commit)
       via  a2dc2a34ffc2879eef77a4da506d0f5086059b1b (commit)
       via  b2fb45cb3be4a0b4e3c7efd636b3d9d744c52edc (commit)
      from  33c23b64886bb2f41d9a0403fa4d83b4b23ac3b8 (commit)

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


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

    Fix build of rpcclient.
    
    Guenther
    (cherry picked from commit 3cb1cdee9307cafa80ab95233a536f5dd7882ff1)

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

    Fix build warning.
    
    Guenther
    (cherry picked from commit c40522cfe97c4e5eedccc9c56f47f9d4a8bcdaaf)

commit 106805b034dbc602be9da2107b76fabcefa3b59e
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
    (cherry picked from commit 8b4eac0ab186c02666693d3f007f0c98d60e0eda)

commit 0d218c6fb1713cf7c4d855c74f85dd373f5d9ff9
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
    (cherry picked from commit 776facabf6f09f643d6dc526aa83f8db517465f9)

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

    Re-run make idl.
    
    Guenther
    (cherry picked from commit 3adf82554a6f54878aed99c3e894aef1b7ecfd84)

commit 258bde1fd43c83405ffdcd177c7bc160bed5f744
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
    (cherry picked from commit da7f006539219f8ccd525ef1fcd131d5f9558bf1)

commit 0f59ed41fbbbac3177d89d3b2b3fc2cccf3fd165
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
    (cherry picked from commit b4d944e724f7ae2a97ba788b185aba7b7308b475)

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

    Re-run make idl.
    
    Guenther
    (cherry picked from commit 1b6083449fbc2a252c046a0757c411be64e6b6c0)

commit 99794c5bde4d2110f13482d5075ebf74de7e0c29
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
    (cherry picked from commit 29c42792567870f3dc23363f4357fecbec862937)

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

    Fix _srvsvc_NetShareSetInfo.
    
    Guenther
    (cherry picked from commit 2fd90b62d7e61fa0c23f8f41e9f12fc16f29a8b1)

commit 643e84551f9467324e00fc09e13e7362d275ca58
Author: Günther Deschner <gd at samba.org>
Date:   Mon Mar 31 20:43:18 2008 +0200

    Re-add support for the samr parameters string.
    
    (dialin settings, terminal server settings, etc.)
    
    Guenther
    (cherry picked from commit c4f248df8e34c6a028bf8d789fe9763b0ea063fe)

commit 631e9d77fdf2999790fddb7a83b5353cc07dbdcd
Author: Günther Deschner <gd at samba.org>
Date:   Mon Mar 31 20:42:26 2008 +0200

    Re-run make idl.
    
    Guenther
    (cherry picked from commit 35a70c65beed1c4a1fab4113af7a5b232f23063b)

commit a2dc2a34ffc2879eef77a4da506d0f5086059b1b
Author: Günther Deschner <gd at samba.org>
Date:   Mon Mar 31 20:40:56 2008 +0200

    The parameters string (aka munged dial string) in samr is not a normal lsa_String.
    
    Guenther
    (cherry picked from commit 98606c667a425113d87b2756ee7df34f67445539)

commit b2fb45cb3be4a0b4e3c7efd636b3d9d744c52edc
Author: Günther Deschner <gd at samba.org>
Date:   Mon Mar 31 20:40:16 2008 +0200

    Add init_samr_parameters_string().
    
    Guenther
    (cherry picked from commit 8f6f0d1601cb93af51f8d493382cd707c3eb0cdf)

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

Summary of changes:
 source/librpc/gen_ndr/ndr_samr.c   |   20 ++++----
 source/librpc/gen_ndr/ndr_srvsvc.c |   54 +++++------------------
 source/librpc/gen_ndr/samr.h       |    4 +-
 source/librpc/gen_ndr/srvsvc.h     |    7 +--
 source/librpc/idl/samr.idl         |    4 +-
 source/librpc/idl/srvsvc.idl       |    8 +--
 source/rpc_client/init_samr.c      |   10 ++--
 source/rpc_client/init_srvsvc.c    |   10 ++---
 source/rpc_server/srv_samr_nt.c    |   86 ++++++++++++++++++++++++------------
 source/rpc_server/srv_samr_util.c  |   17 +++----
 source/rpc_server/srv_srvsvc_nt.c  |   30 +++++++-----
 source/rpcclient/cmd_samr.c        |   16 ++++++-
 source/rpcclient/cmd_srvsvc.c      |    4 +-
 source/utils/net_rpc.c             |    4 +-
 14 files changed, 141 insertions(+), 133 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/librpc/gen_ndr/ndr_samr.c b/source/librpc/gen_ndr/ndr_samr.c
index 3af589f..46b3a07 100644
--- a/source/librpc/gen_ndr/ndr_samr.c
+++ b/source/librpc/gen_ndr/ndr_samr.c
@@ -2613,10 +2613,10 @@ static enum ndr_err_code ndr_push_samr_UserInfo20(struct ndr_push *ndr, int ndr_
 {
 	if (ndr_flags & NDR_SCALARS) {
 		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->parameters));
+		NDR_CHECK(ndr_push_lsa_BinaryString(ndr, NDR_SCALARS, &r->parameters));
 	}
 	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->parameters));
+		NDR_CHECK(ndr_push_lsa_BinaryString(ndr, NDR_BUFFERS, &r->parameters));
 	}
 	return NDR_ERR_SUCCESS;
 }
@@ -2625,10 +2625,10 @@ static enum ndr_err_code ndr_pull_samr_UserInfo20(struct ndr_pull *ndr, int ndr_
 {
 	if (ndr_flags & NDR_SCALARS) {
 		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->parameters));
+		NDR_CHECK(ndr_pull_lsa_BinaryString(ndr, NDR_SCALARS, &r->parameters));
 	}
 	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->parameters));
+		NDR_CHECK(ndr_pull_lsa_BinaryString(ndr, NDR_BUFFERS, &r->parameters));
 	}
 	return NDR_ERR_SUCCESS;
 }
@@ -2637,7 +2637,7 @@ _PUBLIC_ void ndr_print_samr_UserInfo20(struct ndr_print *ndr, const char *name,
 {
 	ndr_print_struct(ndr, name, "samr_UserInfo20");
 	ndr->depth++;
-	ndr_print_lsa_String(ndr, "parameters", &r->parameters);
+	ndr_print_lsa_BinaryString(ndr, "parameters", &r->parameters);
 	ndr->depth--;
 }
 
@@ -2711,7 +2711,7 @@ static enum ndr_err_code ndr_push_samr_UserInfo21(struct ndr_push *ndr, int ndr_
 		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->description));
 		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->workstations));
 		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->comment));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->parameters));
+		NDR_CHECK(ndr_push_lsa_BinaryString(ndr, NDR_SCALARS, &r->parameters));
 		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->unknown1));
 		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->unknown2));
 		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->unknown3));
@@ -2741,7 +2741,7 @@ static enum ndr_err_code ndr_push_samr_UserInfo21(struct ndr_push *ndr, int ndr_
 		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->description));
 		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->workstations));
 		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->comment));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->parameters));
+		NDR_CHECK(ndr_push_lsa_BinaryString(ndr, NDR_BUFFERS, &r->parameters));
 		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->unknown1));
 		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->unknown2));
 		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->unknown3));
@@ -2775,7 +2775,7 @@ static enum ndr_err_code ndr_pull_samr_UserInfo21(struct ndr_pull *ndr, int ndr_
 		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->description));
 		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->workstations));
 		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->comment));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->parameters));
+		NDR_CHECK(ndr_pull_lsa_BinaryString(ndr, NDR_SCALARS, &r->parameters));
 		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->unknown1));
 		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->unknown2));
 		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->unknown3));
@@ -2810,7 +2810,7 @@ static enum ndr_err_code ndr_pull_samr_UserInfo21(struct ndr_pull *ndr, int ndr_
 		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->description));
 		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->workstations));
 		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->comment));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->parameters));
+		NDR_CHECK(ndr_pull_lsa_BinaryString(ndr, NDR_BUFFERS, &r->parameters));
 		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->unknown1));
 		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->unknown2));
 		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->unknown3));
@@ -2849,7 +2849,7 @@ _PUBLIC_ void ndr_print_samr_UserInfo21(struct ndr_print *ndr, const char *name,
 	ndr_print_lsa_String(ndr, "description", &r->description);
 	ndr_print_lsa_String(ndr, "workstations", &r->workstations);
 	ndr_print_lsa_String(ndr, "comment", &r->comment);
-	ndr_print_lsa_String(ndr, "parameters", &r->parameters);
+	ndr_print_lsa_BinaryString(ndr, "parameters", &r->parameters);
 	ndr_print_lsa_String(ndr, "unknown1", &r->unknown1);
 	ndr_print_lsa_String(ndr, "unknown2", &r->unknown2);
 	ndr_print_lsa_String(ndr, "unknown3", &r->unknown3);
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/samr.h b/source/librpc/gen_ndr/samr.h
index c0e2d9d..37e27aa 100644
--- a/source/librpc/gen_ndr/samr.h
+++ b/source/librpc/gen_ndr/samr.h
@@ -416,7 +416,7 @@ struct samr_UserInfo18 {
 };
 
 struct samr_UserInfo20 {
-	struct lsa_String parameters;
+	struct lsa_BinaryString parameters;
 };
 
 /* bitmap samr_FieldsPresent */
@@ -467,7 +467,7 @@ struct samr_UserInfo21 {
 	struct lsa_String description;
 	struct lsa_String workstations;
 	struct lsa_String comment;
-	struct lsa_String parameters;
+	struct lsa_BinaryString parameters;
 	struct lsa_String unknown1;
 	struct lsa_String unknown2;
 	struct lsa_String unknown3;
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/samr.idl b/source/librpc/idl/samr.idl
index c2449d3..401de96 100644
--- a/source/librpc/idl/samr.idl
+++ b/source/librpc/idl/samr.idl
@@ -746,7 +746,7 @@ import "misc.idl", "lsa.idl", "security.idl";
 	} samr_UserInfo18;
 
 	typedef struct {
-		lsa_String parameters;
+		lsa_BinaryString parameters;
 	} samr_UserInfo20;
 
 	/* this defines the bits used for fields_present in info21 */
@@ -803,7 +803,7 @@ import "misc.idl", "lsa.idl", "security.idl";
 		lsa_String description;
 		lsa_String workstations;
 		lsa_String comment;
-		lsa_String parameters;
+		lsa_BinaryString parameters;
 		lsa_String unknown1;
 		lsa_String unknown2;
 		lsa_String unknown3;
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_samr.c b/source/rpc_client/init_samr.c
index 1275fc8..3b62e7e 100644
--- a/source/rpc_client/init_samr.c
+++ b/source/rpc_client/init_samr.c
@@ -308,9 +308,9 @@ void init_samr_user_info18(struct samr_UserInfo18 *r,
 ********************************************************************/
 
 void init_samr_user_info20(struct samr_UserInfo20 *r,
-			   const char *munged_dial)
+			   struct lsa_BinaryString *parameters)
 {
-	init_lsa_String(&r->parameters, munged_dial);
+	r->parameters = *parameters;
 }
 
 /*************************************************************************
@@ -333,7 +333,7 @@ void init_samr_user_info21(struct samr_UserInfo21 *r,
 			   const char *description,
 			   const char *workstations,
 			   const char *comment,
-			   const char *parameters,
+			   struct lsa_BinaryString *parameters,
 			   uint32_t rid,
 			   uint32_t primary_gid,
 			   uint32_t acct_flags,
@@ -362,7 +362,7 @@ void init_samr_user_info21(struct samr_UserInfo21 *r,
 	init_lsa_String(&r->description, description);
 	init_lsa_String(&r->workstations, workstations);
 	init_lsa_String(&r->comment, comment);
-	init_lsa_String(&r->parameters, parameters);
+	r->parameters = *parameters;
 	r->rid = rid;
 	r->primary_gid = primary_gid;
 	r->acct_flags = acct_flags;
@@ -397,7 +397,7 @@ void init_samr_user_info23(struct samr_UserInfo23 *r,
 			   const char *description,
 			   const char *workstations,
 			   const char *comment,
-			   const char *parameters,
+			   struct lsa_BinaryString *parameters,
 			   uint32_t rid,
 			   uint32_t primary_gid,
 			   uint32_t acct_flags,
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 f38a8fc..f76cdcc 100644
--- a/source/rpc_server/srv_samr_nt.c
+++ b/source/rpc_server/srv_samr_nt.c
@@ -2155,6 +2155,41 @@ NTSTATUS _samr_OpenUser(pipes_struct *p,
 }
 
 /*************************************************************************
+ *************************************************************************/
+
+static NTSTATUS init_samr_parameters_string(TALLOC_CTX *mem_ctx,
+					    DATA_BLOB *blob,
+					    struct lsa_BinaryString **_r)
+{
+	struct lsa_BinaryString *r;
+
+	if (!blob || !_r) {
+		return NT_STATUS_INVALID_PARAMETER;
+	}
+
+	r = TALLOC_ZERO_P(mem_ctx, struct lsa_BinaryString);
+	if (!r) {
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	r->array = TALLOC_ZERO_ARRAY(mem_ctx, uint16_t, blob->length/2);
+	if (!r->array) {
+		return NT_STATUS_NO_MEMORY;
+	}
+	memcpy(r->array, blob->data, blob->length);
+	r->size = blob->length;
+	r->length = blob->length;
+
+	if (!r->array) {
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	*_r = r;
+
+	return NT_STATUS_OK;
+}
+
+/*************************************************************************
  get_user_info_7. Safe. Only gives out account_name.
  *************************************************************************/
 
@@ -2333,8 +2368,9 @@ static NTSTATUS get_user_info_20(TALLOC_CTX *mem_ctx,
 	struct samu *sampass=NULL;
 	bool ret;
 	const char *munged_dial = NULL;
-	const char *munged_dial_decoded = NULL;
 	DATA_BLOB blob;
+	NTSTATUS status;
+	struct lsa_BinaryString *parameters = NULL;
 
 	ZERO_STRUCTP(r);
 
@@ -2356,28 +2392,23 @@ static NTSTATUS get_user_info_20(TALLOC_CTX *mem_ctx,
 
 	samr_clear_sam_passwd(sampass);
 
-	DEBUG(3,("User:[%s]\n",  pdb_get_username(sampass) ));
+	DEBUG(3,("User:[%s] has [%s] (length: %d)\n", pdb_get_username(sampass),
+		munged_dial, (int)strlen(munged_dial)));
 
 	if (munged_dial) {
 		blob = base64_decode_data_blob(munged_dial);
-		munged_dial_decoded = talloc_strndup(mem_ctx,
-						     (const char *)blob.data,
-						     blob.length);
-		data_blob_free(&blob);
-		if (!munged_dial_decoded) {
-			TALLOC_FREE(sampass);
-			return NT_STATUS_NO_MEMORY;
-		}
+	} else {
+		blob = data_blob_string_const("");
 	}
 
-#if 0
-	init_unistr2_from_datablob(&usr->uni_munged_dial, &blob);
-	init_uni_hdr(&usr->hdr_munged_dial, &usr->uni_munged_dial);
+	status = init_samr_parameters_string(mem_ctx, &blob, &parameters);
 	data_blob_free(&blob);
-#endif
-	init_samr_user_info20(r, munged_dial_decoded);
-
 	TALLOC_FREE(sampass);
+	if (!NT_STATUS_IS_OK(status)) {
+		return status;
+	}
+
+	init_samr_user_info20(r, parameters);
 
 	return NT_STATUS_OK;
 }


-- 
Samba Shared Repository


More information about the samba-cvs mailing list