The branch, v3-2-test has been updated
       via  dcffb885bc5d16e795b71d95e0790d3d7d70cf3c (commit)
       via  7d88cb2e8db8789b923d8f9979b5c9f65664d3eb (commit)
       via  490d0c52bb117561227cbc59a15b15b688814fe2 (commit)
       via  c445a17a91827c6c95b3a1cda9b78f5cdd41aa55 (commit)
       via  d98ac73122d44f3a92531b4ebbe09401652b89c7 (commit)
       via  bf5da9ea08f28f37aecc0674bd9322f0f0cbd82e (commit)
       via  1937d19623029cc4ac0f2c4b336b6460399fa509 (commit)
      from  0a012c12d643e627ea1bad2a2ad6214f78918fa7 (commit)

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


- Log -----------------------------------------------------------------
commit dcffb885bc5d16e795b71d95e0790d3d7d70cf3c
Author: Günther Deschner <[EMAIL PROTECTED]>
Date:   Thu Feb 28 23:37:47 2008 +0100

    Fix samr querydispinfo w.r.t. lsa_AsciiStringLarge.
    Thanks metze for the fix.
    
    Guenther

commit 7d88cb2e8db8789b923d8f9979b5c9f65664d3eb
Author: Günther Deschner <[EMAIL PROTECTED]>
Date:   Thu Feb 28 23:37:18 2008 +0100

    Re-run make idl.
    
    Guenther

commit 490d0c52bb117561227cbc59a15b15b688814fe2
Author: Stefan Metzmacher <[EMAIL PROTECTED]>
Date:   Fri Feb 15 14:56:35 2008 +0100

    samr.idl: windows uses lsa_AsciiStringLarge in QueryDisplayInfo
    
    Tested with nt4 and w2k3.
    
    metze

commit c445a17a91827c6c95b3a1cda9b78f5cdd41aa55
Author: Stefan Metzmacher <[EMAIL PROTECTED]>
Date:   Tue Feb 19 14:47:22 2008 +0100

    lsa.idl: strlen_m*() also for the lsa_AsciiString* versions
    
    We already did this before b994f899b42d294c0418bdc82660a2f7510667d6.
    
    This is needed to handle NULL strings, where strlen() would crash...
    
    Maybe we should add a strlen_a() and strlen_a_term() later...
    
    metze

commit d98ac73122d44f3a92531b4ebbe09401652b89c7
Author: Stefan Metzmacher <[EMAIL PROTECTED]>
Date:   Tue Feb 19 14:44:50 2008 +0100

    lsa.idl: use strlen_m_term() in lsa_StringLarge to support NULL strings
    
    metze

commit bf5da9ea08f28f37aecc0674bd9322f0f0cbd82e
Author: Stefan Metzmacher <[EMAIL PROTECTED]>
Date:   Fri Feb 15 14:56:07 2008 +0100

    lsa.idl: add lsa_AsciiStringLarge
    
    metze

commit 1937d19623029cc4ac0f2c4b336b6460399fa509
Author: Stefan Metzmacher <[EMAIL PROTECTED]>
Date:   Thu Feb 14 16:08:50 2008 +0100

    lsa.idl: don't use ascstr_noterm anymore
    
    metze

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

Summary of changes:
 source/librpc/gen_ndr/lsa.h      |   10 ++-
 source/librpc/gen_ndr/ndr_lsa.c  |  135 ++++++++++++++++++++++++++++----------
 source/librpc/gen_ndr/ndr_lsa.h  |    3 +
 source/librpc/gen_ndr/ndr_samr.c |   10 ++--
 source/librpc/gen_ndr/samr.h     |    2 +-
 source/librpc/idl/lsa.idl        |   10 ++-
 source/librpc/idl/samr.idl       |    2 +-
 source/rpc_client/init_lsa.c     |    9 +++
 source/rpc_server/srv_samr_nt.c  |    8 +-
 9 files changed, 139 insertions(+), 50 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/librpc/gen_ndr/lsa.h b/source/librpc/gen_ndr/lsa.h
index 0f0ed14..4fea08e 100644
--- a/source/librpc/gen_ndr/lsa.h
+++ b/source/librpc/gen_ndr/lsa.h
@@ -19,7 +19,7 @@ struct lsa_String {
 
 struct lsa_StringLarge {
        uint16_t length;/* [value(2*strlen_m(string))] */
-       uint16_t size;/* [value(2*(strlen_m(string)+1))] */
+       uint16_t size;/* [value(2*strlen_m_term(string))] */
        const char *string;/* 
[unique,charset(UTF16),length_is(length/2),size_is(size/2)] */
 }/* [public] */;
 
@@ -31,7 +31,13 @@ struct lsa_Strings {
 struct lsa_AsciiString {
        uint16_t length;/* [value(strlen_m(string))] */
        uint16_t size;/* [value(strlen_m(string))] */
-       const char * string;/* 
[unique,flag(LIBNDR_FLAG_STR_NOTERM|LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_SIZE4|LIBNDR_FLAG_STR_LEN4)]
 */
+       const char *string;/* 
[unique,charset(DOS),length_is(length),size_is(size)] */
+}/* [public] */;
+
+struct lsa_AsciiStringLarge {
+       uint16_t length;/* [value(strlen_m(string))] */
+       uint16_t size;/* [value(strlen_m_term(string))] */
+       const char *string;/* 
[unique,charset(DOS),length_is(length),size_is(size)] */
 }/* [public] */;
 
 struct lsa_LUID {
diff --git a/source/librpc/gen_ndr/ndr_lsa.c b/source/librpc/gen_ndr/ndr_lsa.c
index 2a683fe..03e1c21 100644
--- a/source/librpc/gen_ndr/ndr_lsa.c
+++ b/source/librpc/gen_ndr/ndr_lsa.c
@@ -80,12 +80,12 @@ _PUBLIC_ enum ndr_err_code ndr_push_lsa_StringLarge(struct 
ndr_push *ndr, int nd
        if (ndr_flags & NDR_SCALARS) {
                NDR_CHECK(ndr_push_align(ndr, 4));
                NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, 2 * 
strlen_m(r->string)));
-               NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, 2 * 
(strlen_m(r->string) + 1)));
+               NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, 2 * 
strlen_m_term(r->string)));
                NDR_CHECK(ndr_push_unique_ptr(ndr, r->string));
        }
        if (ndr_flags & NDR_BUFFERS) {
                if (r->string) {
-                       NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 2 * 
(strlen_m(r->string) + 1) / 2));
+                       NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 2 * 
strlen_m_term(r->string) / 2));
                        NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
                        NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 2 * 
strlen_m(r->string) / 2));
                        NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->string, 
2 * strlen_m(r->string) / 2, sizeof(uint16_t), CH_UTF16));
@@ -136,7 +136,7 @@ _PUBLIC_ void ndr_print_lsa_StringLarge(struct ndr_print 
*ndr, const char *name,
        ndr_print_struct(ndr, name, "lsa_StringLarge");
        ndr->depth++;
        ndr_print_uint16(ndr, "length", (ndr->flags & 
LIBNDR_PRINT_SET_VALUES)?2 * strlen_m(r->string):r->length);
-       ndr_print_uint16(ndr, "size", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?2 
* (strlen_m(r->string) + 1):r->size);
+       ndr_print_uint16(ndr, "size", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?2 
* strlen_m_term(r->string):r->size);
        ndr_print_ptr(ndr, "string", r->string);
        ndr->depth++;
        if (r->string) {
@@ -238,21 +238,14 @@ _PUBLIC_ enum ndr_err_code 
ndr_push_lsa_AsciiString(struct ndr_push *ndr, int nd
                NDR_CHECK(ndr_push_align(ndr, 4));
                NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, 
strlen_m(r->string)));
                NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, 
strlen_m(r->string)));
-               {
-                       uint32_t _flags_save_string = ndr->flags;
-                       ndr_set_flags(&ndr->flags, 
LIBNDR_FLAG_STR_NOTERM|LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_SIZE4|LIBNDR_FLAG_STR_LEN4);
-                       NDR_CHECK(ndr_push_unique_ptr(ndr, r->string));
-                       ndr->flags = _flags_save_string;
-               }
+               NDR_CHECK(ndr_push_unique_ptr(ndr, r->string));
        }
        if (ndr_flags & NDR_BUFFERS) {
-               {
-                       uint32_t _flags_save_string = ndr->flags;
-                       ndr_set_flags(&ndr->flags, 
LIBNDR_FLAG_STR_NOTERM|LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_SIZE4|LIBNDR_FLAG_STR_LEN4);
-                       if (r->string) {
-                               NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, 
r->string));
-                       }
-                       ndr->flags = _flags_save_string;
+               if (r->string) {
+                       NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 
strlen_m(r->string)));
+                       NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
+                       NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 
strlen_m(r->string)));
+                       NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->string, 
strlen_m(r->string), sizeof(uint8_t), CH_DOS));
                }
        }
        return NDR_ERR_SUCCESS;
@@ -266,29 +259,30 @@ _PUBLIC_ enum ndr_err_code 
ndr_pull_lsa_AsciiString(struct ndr_pull *ndr, int nd
                NDR_CHECK(ndr_pull_align(ndr, 4));
                NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->length));
                NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->size));
-               {
-                       uint32_t _flags_save_string = ndr->flags;
-                       ndr_set_flags(&ndr->flags, 
LIBNDR_FLAG_STR_NOTERM|LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_SIZE4|LIBNDR_FLAG_STR_LEN4);
-                       NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_string));
-                       if (_ptr_string) {
-                               NDR_PULL_ALLOC(ndr, r->string);
-                       } else {
-                               r->string = NULL;
-                       }
-                       ndr->flags = _flags_save_string;
+               NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_string));
+               if (_ptr_string) {
+                       NDR_PULL_ALLOC(ndr, r->string);
+               } else {
+                       r->string = NULL;
                }
        }
        if (ndr_flags & NDR_BUFFERS) {
-               {
-                       uint32_t _flags_save_string = ndr->flags;
-                       ndr_set_flags(&ndr->flags, 
LIBNDR_FLAG_STR_NOTERM|LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_SIZE4|LIBNDR_FLAG_STR_LEN4);
-                       if (r->string) {
-                               _mem_save_string_0 = NDR_PULL_GET_MEM_CTX(ndr);
-                               NDR_PULL_SET_MEM_CTX(ndr, r->string, 0);
-                               NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, 
&r->string));
-                               NDR_PULL_SET_MEM_CTX(ndr, _mem_save_string_0, 
0);
+               if (r->string) {
+                       _mem_save_string_0 = NDR_PULL_GET_MEM_CTX(ndr);
+                       NDR_PULL_SET_MEM_CTX(ndr, r->string, 0);
+                       NDR_CHECK(ndr_pull_array_size(ndr, &r->string));
+                       NDR_CHECK(ndr_pull_array_length(ndr, &r->string));
+                       if (ndr_get_array_length(ndr, &r->string) > 
ndr_get_array_size(ndr, &r->string)) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, 
"Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, 
&r->string), ndr_get_array_length(ndr, &r->string));
                        }
-                       ndr->flags = _flags_save_string;
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, 
&r->string, ndr_get_array_length(ndr, &r->string), sizeof(uint8_t), CH_DOS));
+                       NDR_PULL_SET_MEM_CTX(ndr, _mem_save_string_0, 0);
+               }
+               if (r->string) {
+                       NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->string, 
r->size));
+               }
+               if (r->string) {
+                       NDR_CHECK(ndr_check_array_length(ndr, 
(void*)&r->string, r->length));
                }
        }
        return NDR_ERR_SUCCESS;
@@ -309,6 +303,77 @@ _PUBLIC_ void ndr_print_lsa_AsciiString(struct ndr_print 
*ndr, const char *name,
        ndr->depth--;
 }
 
+_PUBLIC_ enum ndr_err_code ndr_push_lsa_AsciiStringLarge(struct ndr_push *ndr, 
int ndr_flags, const struct lsa_AsciiStringLarge *r)
+{
+       if (ndr_flags & NDR_SCALARS) {
+               NDR_CHECK(ndr_push_align(ndr, 4));
+               NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, 
strlen_m(r->string)));
+               NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, 
strlen_m_term(r->string)));
+               NDR_CHECK(ndr_push_unique_ptr(ndr, r->string));
+       }
+       if (ndr_flags & NDR_BUFFERS) {
+               if (r->string) {
+                       NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 
strlen_m_term(r->string)));
+                       NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
+                       NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 
strlen_m(r->string)));
+                       NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->string, 
strlen_m(r->string), sizeof(uint8_t), CH_DOS));
+               }
+       }
+       return NDR_ERR_SUCCESS;
+}
+
+_PUBLIC_ enum ndr_err_code ndr_pull_lsa_AsciiStringLarge(struct ndr_pull *ndr, 
int ndr_flags, struct lsa_AsciiStringLarge *r)
+{
+       uint32_t _ptr_string;
+       TALLOC_CTX *_mem_save_string_0;
+       if (ndr_flags & NDR_SCALARS) {
+               NDR_CHECK(ndr_pull_align(ndr, 4));
+               NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->length));
+               NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->size));
+               NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_string));
+               if (_ptr_string) {
+                       NDR_PULL_ALLOC(ndr, r->string);
+               } else {
+                       r->string = NULL;
+               }
+       }
+       if (ndr_flags & NDR_BUFFERS) {
+               if (r->string) {
+                       _mem_save_string_0 = NDR_PULL_GET_MEM_CTX(ndr);
+                       NDR_PULL_SET_MEM_CTX(ndr, r->string, 0);
+                       NDR_CHECK(ndr_pull_array_size(ndr, &r->string));
+                       NDR_CHECK(ndr_pull_array_length(ndr, &r->string));
+                       if (ndr_get_array_length(ndr, &r->string) > 
ndr_get_array_size(ndr, &r->string)) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, 
"Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, 
&r->string), ndr_get_array_length(ndr, &r->string));
+                       }
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, 
&r->string, ndr_get_array_length(ndr, &r->string), sizeof(uint8_t), CH_DOS));
+                       NDR_PULL_SET_MEM_CTX(ndr, _mem_save_string_0, 0);
+               }
+               if (r->string) {
+                       NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->string, 
r->size));
+               }
+               if (r->string) {
+                       NDR_CHECK(ndr_check_array_length(ndr, 
(void*)&r->string, r->length));
+               }
+       }
+       return NDR_ERR_SUCCESS;
+}
+
+_PUBLIC_ void ndr_print_lsa_AsciiStringLarge(struct ndr_print *ndr, const char 
*name, const struct lsa_AsciiStringLarge *r)
+{
+       ndr_print_struct(ndr, name, "lsa_AsciiStringLarge");
+       ndr->depth++;
+       ndr_print_uint16(ndr, "length", (ndr->flags & 
LIBNDR_PRINT_SET_VALUES)?strlen_m(r->string):r->length);
+       ndr_print_uint16(ndr, "size", (ndr->flags & 
LIBNDR_PRINT_SET_VALUES)?strlen_m_term(r->string):r->size);
+       ndr_print_ptr(ndr, "string", r->string);
+       ndr->depth++;
+       if (r->string) {
+               ndr_print_string(ndr, "string", r->string);
+       }
+       ndr->depth--;
+       ndr->depth--;
+}
+
 static enum ndr_err_code ndr_push_lsa_LUID(struct ndr_push *ndr, int 
ndr_flags, const struct lsa_LUID *r)
 {
        if (ndr_flags & NDR_SCALARS) {
diff --git a/source/librpc/gen_ndr/ndr_lsa.h b/source/librpc/gen_ndr/ndr_lsa.h
index 2df42db..a96f2d4 100644
--- a/source/librpc/gen_ndr/ndr_lsa.h
+++ b/source/librpc/gen_ndr/ndr_lsa.h
@@ -188,6 +188,9 @@ void ndr_print_lsa_Strings(struct ndr_print *ndr, const 
char *name, const struct
 enum ndr_err_code ndr_push_lsa_AsciiString(struct ndr_push *ndr, int 
ndr_flags, const struct lsa_AsciiString *r);
 enum ndr_err_code ndr_pull_lsa_AsciiString(struct ndr_pull *ndr, int 
ndr_flags, struct lsa_AsciiString *r);
 void ndr_print_lsa_AsciiString(struct ndr_print *ndr, const char *name, const 
struct lsa_AsciiString *r);
+enum ndr_err_code ndr_push_lsa_AsciiStringLarge(struct ndr_push *ndr, int 
ndr_flags, const struct lsa_AsciiStringLarge *r);
+enum ndr_err_code ndr_pull_lsa_AsciiStringLarge(struct ndr_pull *ndr, int 
ndr_flags, struct lsa_AsciiStringLarge *r);
+void ndr_print_lsa_AsciiStringLarge(struct ndr_print *ndr, const char *name, 
const struct lsa_AsciiStringLarge *r);
 void ndr_print_lsa_LUID(struct ndr_print *ndr, const char *name, const struct 
lsa_LUID *r);
 void ndr_print_lsa_PrivEntry(struct ndr_print *ndr, const char *name, const 
struct lsa_PrivEntry *r);
 void ndr_print_lsa_PrivArray(struct ndr_print *ndr, const char *name, const 
struct lsa_PrivArray *r);
diff --git a/source/librpc/gen_ndr/ndr_samr.c b/source/librpc/gen_ndr/ndr_samr.c
index 3549bfd..3af589f 100644
--- a/source/librpc/gen_ndr/ndr_samr.c
+++ b/source/librpc/gen_ndr/ndr_samr.c
@@ -4124,10 +4124,10 @@ static enum ndr_err_code 
ndr_push_samr_DispEntryAscii(struct ndr_push *ndr, int
        if (ndr_flags & NDR_SCALARS) {
                NDR_CHECK(ndr_push_align(ndr, 4));
                NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->idx));
-               NDR_CHECK(ndr_push_lsa_AsciiString(ndr, NDR_SCALARS, 
&r->account_name));
+               NDR_CHECK(ndr_push_lsa_AsciiStringLarge(ndr, NDR_SCALARS, 
&r->account_name));
        }
        if (ndr_flags & NDR_BUFFERS) {
-               NDR_CHECK(ndr_push_lsa_AsciiString(ndr, NDR_BUFFERS, 
&r->account_name));
+               NDR_CHECK(ndr_push_lsa_AsciiStringLarge(ndr, NDR_BUFFERS, 
&r->account_name));
        }
        return NDR_ERR_SUCCESS;
 }
@@ -4137,10 +4137,10 @@ static enum ndr_err_code 
ndr_pull_samr_DispEntryAscii(struct ndr_pull *ndr, int
        if (ndr_flags & NDR_SCALARS) {
                NDR_CHECK(ndr_pull_align(ndr, 4));
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->idx));
-               NDR_CHECK(ndr_pull_lsa_AsciiString(ndr, NDR_SCALARS, 
&r->account_name));
+               NDR_CHECK(ndr_pull_lsa_AsciiStringLarge(ndr, NDR_SCALARS, 
&r->account_name));
        }
        if (ndr_flags & NDR_BUFFERS) {
-               NDR_CHECK(ndr_pull_lsa_AsciiString(ndr, NDR_BUFFERS, 
&r->account_name));
+               NDR_CHECK(ndr_pull_lsa_AsciiStringLarge(ndr, NDR_BUFFERS, 
&r->account_name));
        }
        return NDR_ERR_SUCCESS;
 }
@@ -4150,7 +4150,7 @@ _PUBLIC_ void ndr_print_samr_DispEntryAscii(struct 
ndr_print *ndr, const char *n
        ndr_print_struct(ndr, name, "samr_DispEntryAscii");
        ndr->depth++;
        ndr_print_uint32(ndr, "idx", r->idx);
-       ndr_print_lsa_AsciiString(ndr, "account_name", &r->account_name);
+       ndr_print_lsa_AsciiStringLarge(ndr, "account_name", &r->account_name);
        ndr->depth--;
 }
 
diff --git a/source/librpc/gen_ndr/samr.h b/source/librpc/gen_ndr/samr.h
index 700c462..c0e2d9d 100644
--- a/source/librpc/gen_ndr/samr.h
+++ b/source/librpc/gen_ndr/samr.h
@@ -594,7 +594,7 @@ struct samr_DispInfoFullGroups {
 
 struct samr_DispEntryAscii {
        uint32_t idx;
-       struct lsa_AsciiString account_name;
+       struct lsa_AsciiStringLarge account_name;
 };
 
 struct samr_DispInfoAscii {
diff --git a/source/librpc/idl/lsa.idl b/source/librpc/idl/lsa.idl
index 68dc049..ee8a2fe 100644
--- a/source/librpc/idl/lsa.idl
+++ b/source/librpc/idl/lsa.idl
@@ -23,7 +23,7 @@ import "security.idl";
 
        typedef [public] struct {
                [value(2*strlen_m(string))] uint16 length;
-               [value(2*(strlen_m(string)+1))] uint16 size;
+               [value(2*strlen_m_term(string))] uint16 size;
                [charset(UTF16),size_is(size/2),length_is(length/2)] uint16 
*string;
        } lsa_StringLarge;
 
@@ -35,9 +35,15 @@ import "security.idl";
        typedef [public] struct {
                [value(strlen_m(string))] uint16 length;
                [value(strlen_m(string))] uint16 size;
-               ascstr_noterm *string;
+               [charset(DOS),size_is(size),length_is(length)] uint8 *string;
        } lsa_AsciiString;
 
+       typedef [public] struct {
+               [value(strlen_m(string))] uint16 length;
+               [value(strlen_m_term(string))] uint16 size;
+               [charset(DOS),size_is(size),length_is(length)] uint8 *string;
+       } lsa_AsciiStringLarge;
+
        /******************/
        /* Function: 0x00 */
        NTSTATUS lsa_Close (
diff --git a/source/librpc/idl/samr.idl b/source/librpc/idl/samr.idl
index ac0934d..c2449d3 100644
--- a/source/librpc/idl/samr.idl
+++ b/source/librpc/idl/samr.idl
@@ -976,7 +976,7 @@ import "misc.idl", "lsa.idl", "security.idl";
 
        typedef struct {
                uint32    idx;
-               lsa_AsciiString account_name;
+               lsa_AsciiStringLarge account_name;
        } samr_DispEntryAscii;
 
        typedef struct {
diff --git a/source/rpc_client/init_lsa.c b/source/rpc_client/init_lsa.c
index fce382e..2637158 100644
--- a/source/rpc_client/init_lsa.c
+++ b/source/rpc_client/init_lsa.c
@@ -47,6 +47,15 @@ void init_lsa_AsciiString(struct lsa_AsciiString *name, 
const char *s)
 }
 
 /*******************************************************************
+ inits a structure.
+********************************************************************/
+
+void init_lsa_AsciiStringLarge(struct lsa_AsciiStringLarge *name, const char 
*s)
+{
+       name->string = s;
+}
+
+/*******************************************************************
  Inits an lsa_QosInfo structure.
 ********************************************************************/
 
diff --git a/source/rpc_server/srv_samr_nt.c b/source/rpc_server/srv_samr_nt.c
index f8b9539..f38a8fc 100644
--- a/source/rpc_server/srv_samr_nt.c
+++ b/source/rpc_server/srv_samr_nt.c
@@ -1318,8 +1318,8 @@ static NTSTATUS init_samr_dispinfo_4(TALLOC_CTX *ctx,
 
        for (i = 0; i < num_entries ; i++) {
 
-               init_lsa_AsciiString(&r->entries[i].account_name,
-                                    entries[i].account_name);
+               init_lsa_AsciiStringLarge(&r->entries[i].account_name,
+                                         entries[i].account_name);
 
                r->entries[i].idx = start_idx+i+1;
        }
@@ -1354,8 +1354,8 @@ static NTSTATUS init_samr_dispinfo_5(TALLOC_CTX *ctx,
 
        for (i = 0; i < num_entries ; i++) {
 
-               init_lsa_AsciiString(&r->entries[i].account_name,
-                                    entries[i].account_name);
+               init_lsa_AsciiStringLarge(&r->entries[i].account_name,
+                                         entries[i].account_name);
 
                r->entries[i].idx = start_idx+i+1;
        }


-- 
Samba Shared Repository

Reply via email to