summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--librpc/ndr.pc.in (renamed from source4/librpc/ndr.pc.in)0
-rw-r--r--source3/Makefile.in2
-rw-r--r--source3/include/ndr.h1
-rw-r--r--source3/librpc/idl/idl_types.h17
-rw-r--r--source3/librpc/ndr/ndr.c1113
-rwxr-xr-xsource3/script/build_idl.sh6
-rw-r--r--source4/cldap_server/netlogon.c2
-rw-r--r--source4/configure.ac2
-rw-r--r--source4/lib/ldb/modules/asq.c4
-rw-r--r--source4/lib/samba3/config.mk2
-rw-r--r--source4/lib/samba3/samba3.h190
-rw-r--r--source4/librpc/config.mk2
-rw-r--r--source4/librpc/idl/lsa.idl17
-rw-r--r--source4/librpc/idl/nbt.idl81
-rw-r--r--source4/torture/ldap/cldap.c8
15 files changed, 73 insertions, 1374 deletions
diff --git a/source4/librpc/ndr.pc.in b/librpc/ndr.pc.in
index 2f4d95006f..2f4d95006f 100644
--- a/source4/librpc/ndr.pc.in
+++ b/librpc/ndr.pc.in
diff --git a/source3/Makefile.in b/source3/Makefile.in
index bd29792701..76fc101af3 100644
--- a/source3/Makefile.in
+++ b/source3/Makefile.in
@@ -1198,10 +1198,10 @@ samba3-idl::
epmapper.idl messaging.idl xattr.idl misc.idl samr.idl security.idl \
dssetup.idl krb5pac.idl ntsvcs.idl libnetapi.idl drsuapi.idl drsblobs.idl \
nbt.idl" \
+ IDL_PATH="librpc/idl" \
CPP="$(CPP)" PIDL="../pidl/pidl" \
srcdir="$(srcdir)" $(srcdir)/script/build_idl.sh $(PIDL_ARGS)
-
#####################################################################
diff --git a/source3/include/ndr.h b/source3/include/ndr.h
deleted file mode 100644
index a416866ef2..0000000000
--- a/source3/include/ndr.h
+++ /dev/null
@@ -1 +0,0 @@
-/* dummy file to deal with pidl autogenerated ndr files */
diff --git a/source3/librpc/idl/idl_types.h b/source3/librpc/idl/idl_types.h
index f21f3e660d..9885ca5bf6 100644
--- a/source3/librpc/idl/idl_types.h
+++ b/source3/librpc/idl/idl_types.h
@@ -5,33 +5,16 @@
#define STR_NOTERM LIBNDR_FLAG_STR_NOTERM
#define STR_NULLTERM LIBNDR_FLAG_STR_NULLTERM
#define STR_BYTESIZE LIBNDR_FLAG_STR_BYTESIZE
-#define STR_FIXLEN32 LIBNDR_FLAG_STR_FIXLEN32
-#define STR_FIXLEN15 LIBNDR_FLAG_STR_FIXLEN15
#define STR_CONFORMANT LIBNDR_FLAG_STR_CONFORMANT
#define STR_CHARLEN LIBNDR_FLAG_STR_CHARLEN
#define STR_UTF8 LIBNDR_FLAG_STR_UTF8
/*
- a UCS2 string prefixed with [size], 32 bits
-*/
-#define lstring [flag(STR_SIZE4)] string
-
-/*
a null terminated UCS2 string
*/
#define nstring [flag(STR_NULLTERM)] string
/*
- fixed length 32 character UCS-2 string
-*/
-#define string32 [flag(STR_FIXLEN32)] string
-
-/*
- fixed length 16 character ascii string
-*/
-#define astring15 [flag(STR_ASCII|STR_FIXLEN15)] string
-
-/*
an ascii string prefixed with [offset] [length], both 32 bits
null terminated
*/
diff --git a/source3/librpc/ndr/ndr.c b/source3/librpc/ndr/ndr.c
deleted file mode 100644
index d19e861145..0000000000
--- a/source3/librpc/ndr/ndr.c
+++ /dev/null
@@ -1,1113 +0,0 @@
-/*
- Unix SMB/CIFS implementation.
-
- libndr interface
-
- Copyright (C) Andrew Tridgell 2003
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-/*
- this provides the core routines for NDR parsing functions
-
- see http://www.opengroup.org/onlinepubs/9629399/chap14.htm for details
- of NDR encoding rules
-*/
-
-#include "includes.h"
-
-#define NDR_BASE_MARSHALL_SIZE 1024
-
-/* this guid indicates NDR encoding in a protocol tower */
-const struct ndr_syntax_id ndr_transfer_syntax = {
- { 0x8a885d04, 0x1ceb, 0x11c9, {0x9f, 0xe8}, {0x08,0x00,0x2b,0x10,0x48,0x60} },
- 2
-};
-
-const struct ndr_syntax_id ndr64_transfer_syntax = {
- { 0x71710533, 0xbeba, 0x4937, {0x83, 0x19}, {0xb5,0xdb,0xef,0x9c,0xcc,0x36} },
- 1
-};
-
-/*
- work out the number of bytes needed to align on a n byte boundary
-*/
-_PUBLIC_ size_t ndr_align_size(uint32_t offset, size_t n)
-{
- if ((offset & (n-1)) == 0) return 0;
- return n - (offset & (n-1));
-}
-
-/*
- initialise a ndr parse structure from a data blob
-*/
-_PUBLIC_ struct ndr_pull *ndr_pull_init_blob(const DATA_BLOB *blob, TALLOC_CTX *mem_ctx, struct smb_iconv_convenience *iconv_convenience)
-{
- struct ndr_pull *ndr;
-
- ndr = talloc_zero(mem_ctx, struct ndr_pull);
- if (!ndr) return NULL;
- ndr->current_mem_ctx = mem_ctx;
-
- ndr->data = blob->data;
- ndr->data_size = blob->length;
- ndr->iconv_convenience = talloc_reference(ndr, iconv_convenience);
-
- return ndr;
-}
-
-/*
- advance by 'size' bytes
-*/
-_PUBLIC_ enum ndr_err_code ndr_pull_advance(struct ndr_pull *ndr, uint32_t size)
-{
- ndr->offset += size;
- if (ndr->offset > ndr->data_size) {
- return ndr_pull_error(ndr, NDR_ERR_BUFSIZE,
- "ndr_pull_advance by %u failed",
- size);
- }
- return NDR_ERR_SUCCESS;
-}
-
-/*
- set the parse offset to 'ofs'
-*/
-static enum ndr_err_code ndr_pull_set_offset(struct ndr_pull *ndr, uint32_t ofs)
-{
- ndr->offset = ofs;
- if (ndr->offset > ndr->data_size) {
- return ndr_pull_error(ndr, NDR_ERR_BUFSIZE,
- "ndr_pull_set_offset %u failed",
- ofs);
- }
- return NDR_ERR_SUCCESS;
-}
-
-/* create a ndr_push structure, ready for some marshalling */
-_PUBLIC_ struct ndr_push *ndr_push_init_ctx(TALLOC_CTX *mem_ctx, struct smb_iconv_convenience *iconv_convenience)
-{
- struct ndr_push *ndr;
-
- ndr = talloc_zero(mem_ctx, struct ndr_push);
- if (!ndr) {
- return NULL;
- }
-
- ndr->flags = 0;
- ndr->alloc_size = NDR_BASE_MARSHALL_SIZE;
- ndr->data = talloc_array(ndr, uint8_t, ndr->alloc_size);
- if (!ndr->data) {
- return NULL;
- }
- ndr->iconv_convenience = talloc_reference(ndr, iconv_convenience);
-
- return ndr;
-}
-
-/* return a DATA_BLOB structure for the current ndr_push marshalled data */
-_PUBLIC_ DATA_BLOB ndr_push_blob(struct ndr_push *ndr)
-{
- DATA_BLOB blob;
- blob = data_blob_const(ndr->data, ndr->offset);
- if (ndr->alloc_size > ndr->offset) {
- ndr->data[ndr->offset] = 0;
- }
- return blob;
-}
-
-
-/*
- expand the available space in the buffer to ndr->offset + extra_size
-*/
-_PUBLIC_ enum ndr_err_code ndr_push_expand(struct ndr_push *ndr, uint32_t extra_size)
-{
- uint32_t size = extra_size + ndr->offset;
-
- if (size < ndr->offset) {
- /* extra_size overflowed the offset */
- return ndr_push_error(ndr, NDR_ERR_BUFSIZE, "Overflow in push_expand to %u",
- size);
- }
-
- if (ndr->alloc_size > size) {
- return NDR_ERR_SUCCESS;
- }
-
- ndr->alloc_size += NDR_BASE_MARSHALL_SIZE;
- if (size+1 > ndr->alloc_size) {
- ndr->alloc_size = size+1;
- }
- ndr->data = talloc_realloc(ndr, ndr->data, uint8_t, ndr->alloc_size);
- if (!ndr->data) {
- return ndr_push_error(ndr, NDR_ERR_ALLOC, "Failed to push_expand to %u",
- ndr->alloc_size);
- }
-
- return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_debug_helper(struct ndr_print *ndr, const char *format, ...) _PRINTF_ATTRIBUTE(2,3)
-{
- va_list ap;
- char *s = NULL;
- int i, ret;
-
- va_start(ap, format);
- ret = vasprintf(&s, format, ap);
- va_end(ap);
-
- if (ret == -1) {
- return;
- }
-
- for (i=0;i<ndr->depth;i++) {
- DEBUGADD(0,(" "));
- }
-
- DEBUGADD(0,("%s\n", s));
- free(s);
-}
-
-_PUBLIC_ void ndr_print_string_helper(struct ndr_print *ndr, const char *format, ...)
-{
- va_list ap;
- int i;
-
- for (i=0;i<ndr->depth;i++) {
- ndr->private_data = talloc_asprintf_append_buffer(
- (char *)ndr->private_data, " ");
- }
-
- va_start(ap, format);
- ndr->private_data = talloc_vasprintf_append_buffer((char *)ndr->private_data,
- format, ap);
- va_end(ap);
- ndr->private_data = talloc_asprintf_append_buffer((char *)ndr->private_data,
- "\n");
-}
-
-/*
- a useful helper function for printing idl structures via DEBUG()
-*/
-_PUBLIC_ void ndr_print_debug(ndr_print_fn_t fn, const char *name, void *ptr)
-{
- struct ndr_print *ndr;
-
- ndr = talloc_zero(NULL, struct ndr_print);
- if (!ndr) return;
- ndr->print = ndr_print_debug_helper;
- ndr->depth = 1;
- ndr->flags = 0;
- fn(ndr, name, ptr);
- talloc_free(ndr);
-}
-
-/*
- a useful helper function for printing idl unions via DEBUG()
-*/
-_PUBLIC_ void ndr_print_union_debug(ndr_print_fn_t fn, const char *name, uint32_t level, void *ptr)
-{
- struct ndr_print *ndr;
-
- ndr = talloc_zero(NULL, struct ndr_print);
- if (!ndr) return;
- ndr->print = ndr_print_debug_helper;
- ndr->depth = 1;
- ndr->flags = 0;
- ndr_print_set_switch_value(ndr, ptr, level);
- fn(ndr, name, ptr);
- talloc_free(ndr);
-}
-
-/*
- a useful helper function for printing idl function calls via DEBUG()
-*/
-_PUBLIC_ void ndr_print_function_debug(ndr_print_function_t fn, const char *name, int flags, void *ptr)
-{
- struct ndr_print *ndr;
-
- ndr = talloc_zero(NULL, struct ndr_print);
- if (!ndr) return;
- ndr->print = ndr_print_debug_helper;
- ndr->depth = 1;
- ndr->flags = 0;
- fn(ndr, name, flags, ptr);
- talloc_free(ndr);
-}
-
-/*
- a useful helper function for printing idl structures to a string
-*/
-_PUBLIC_ char *ndr_print_struct_string(TALLOC_CTX *mem_ctx, ndr_print_fn_t fn, const char *name, void *ptr)
-{
- struct ndr_print *ndr;
- char *ret = NULL;
-
- ndr = talloc_zero(mem_ctx, struct ndr_print);
- if (!ndr) return NULL;
- ndr->private_data = talloc_strdup(ndr, "");
- if (!ndr->private_data) {
- goto failed;
- }
- ndr->print = ndr_print_string_helper;
- ndr->depth = 1;
- ndr->flags = 0;
- fn(ndr, name, ptr);
- ret = talloc_steal(mem_ctx, (char *)ndr->private_data);
-failed:
- talloc_free(ndr);
- return ret;
-}
-
-/*
- a useful helper function for printing idl unions to a string
-*/
-_PUBLIC_ char *ndr_print_union_string(TALLOC_CTX *mem_ctx, ndr_print_fn_t fn, const char *name, uint32_t level, void *ptr)
-{
- struct ndr_print *ndr;
- char *ret = NULL;
-
- ndr = talloc_zero(mem_ctx, struct ndr_print);
- if (!ndr) return NULL;
- ndr->private_data = talloc_strdup(ndr, "");
- if (!ndr->private_data) {
- goto failed;
- }
- ndr->print = ndr_print_string_helper;
- ndr->depth = 1;
- ndr->flags = 0;
- ndr_print_set_switch_value(ndr, ptr, level);
- fn(ndr, name, ptr);
- ret = talloc_steal(mem_ctx, (char *)ndr->private_data);
-failed:
- talloc_free(ndr);
- return ret;
-}
-
-/*
- a useful helper function for printing idl function calls to a string
-*/
-_PUBLIC_ char *ndr_print_function_string(TALLOC_CTX *mem_ctx,
- ndr_print_function_t fn, const char *name,
- int flags, void *ptr)
-{
- struct ndr_print *ndr;
- char *ret = NULL;
-
- ndr = talloc_zero(mem_ctx, struct ndr_print);
- if (!ndr) return NULL;
- ndr->private_data = talloc_strdup(ndr, "");
- if (!ndr->private_data) {
- goto failed;
- }
- ndr->print = ndr_print_string_helper;
- ndr->depth = 1;
- ndr->flags = 0;
- fn(ndr, name, flags, ptr);
- ret = talloc_steal(mem_ctx, (char *)ndr->private_data);
-failed:
- talloc_free(ndr);
- return ret;
-}
-
-_PUBLIC_ void ndr_set_flags(uint32_t *pflags, uint32_t new_flags)
-{
- /* the big/little endian flags are inter-dependent */
- if (new_flags & LIBNDR_FLAG_LITTLE_ENDIAN) {
- (*pflags) &= ~LIBNDR_FLAG_BIGENDIAN;
- }
- if (new_flags & LIBNDR_FLAG_BIGENDIAN) {
- (*pflags) &= ~LIBNDR_FLAG_LITTLE_ENDIAN;
- }
- if (new_flags & LIBNDR_FLAG_REMAINING) {
- (*pflags) &= ~LIBNDR_ALIGN_FLAGS;
- }
- if (new_flags & LIBNDR_ALIGN_FLAGS) {
- (*pflags) &= ~LIBNDR_FLAG_REMAINING;
- }
- (*pflags) |= new_flags;
-}
-
-/*
- return and possibly log an NDR error
-*/
-_PUBLIC_ enum ndr_err_code ndr_pull_error(struct ndr_pull *ndr,
- enum ndr_err_code ndr_err,
- const char *format, ...) _PRINTF_ATTRIBUTE(3,4)
-{
- char *s=NULL;
- va_list ap;
- int ret;
-
- va_start(ap, format);
- ret = vasprintf(&s, format, ap);
- va_end(ap);
-
- if (ret == -1) {
- return NDR_ERR_ALLOC;
- }
-
- DEBUG(1,("ndr_pull_error(%u): %s\n", ndr_err, s));
-
- free(s);
-
- return ndr_err;
-}
-
-/*
- return and possibly log an NDR error
-*/
-_PUBLIC_ enum ndr_err_code ndr_push_error(struct ndr_push *ndr,
- enum ndr_err_code ndr_err,
- const char *format, ...) _PRINTF_ATTRIBUTE(3,4)
-{
- char *s=NULL;
- va_list ap;
- int ret;
-
- va_start(ap, format);
- ret = vasprintf(&s, format, ap);
- va_end(ap);
-
- if (ret == -1) {
- return NDR_ERR_ALLOC;
- }
-
- DEBUG(1,("ndr_push_error(%u): %s\n", ndr_err, s));
-
- free(s);
-
- return ndr_err;
-}
-
-/*
- handle subcontext buffers, which in midl land are user-marshalled, but
- we use magic in pidl to make them easier to cope with
-*/
-_PUBLIC_ enum ndr_err_code ndr_pull_subcontext_start(struct ndr_pull *ndr,
- struct ndr_pull **_subndr,
- size_t header_size,
- ssize_t size_is)
-{
- struct ndr_pull *subndr;
- uint32_t r_content_size;
- bool force_le = false;
- bool force_be = false;
-
- switch (header_size) {
- case 0: {
- uint32_t content_size = ndr->data_size - ndr->offset;
- if (size_is >= 0) {
- content_size = size_is;
- }
- r_content_size = content_size;
- break;
- }
-
- case 2: {
- uint16_t content_size;
- NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &content_size));
- if (size_is >= 0 && size_is != content_size) {
- return ndr_pull_error(ndr, NDR_ERR_SUBCONTEXT, "Bad subcontext (PULL) size_is(%d) mismatch content_size %d",
- (int)size_is, (int)content_size);
- }
- r_content_size = content_size;
- break;
- }
-
- case 4: {
- uint32_t content_size;
- NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &content_size));
- if (size_is >= 0 && size_is != content_size) {
- return ndr_pull_error(ndr, NDR_ERR_SUBCONTEXT, "Bad subcontext (PULL) size_is(%d) mismatch content_size %d",
- (int)size_is, (int)content_size);
- }
- r_content_size = content_size;
- break;
- }
- case 0xFFFFFC01: {
- /*
- * Common Type Header for the Serialization Stream
- * See [MS-RPCE] 2.2.6 Type Serialization Version 1
- */
- uint8_t version;
- uint8_t drep;
- uint16_t hdrlen;
- uint32_t filler;
- uint32_t content_size;
- uint32_t reserved;
-
- /* version */
- NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &version));
-
- if (version != 1) {
- return ndr_pull_error(ndr, NDR_ERR_SUBCONTEXT,
- "Bad subcontext (PULL) Common Type Header version %d != 1",
- (int)version);
- }
-
- /*
- * 0x10 little endian
- * 0x00 big endian
- */
- NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &drep));
- if (drep == 0x10) {
- force_le = true;
- } else if (drep == 0x00) {
- force_be = true;
- } else {
- return ndr_pull_error(ndr, NDR_ERR_SUBCONTEXT,
- "Bad subcontext (PULL) Common Type Header invalid drep 0x%02X",
- (unsigned int)drep);
- }
-
- /* length of the "Private Header for Constructed Type" */
- NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &hdrlen));
- if (hdrlen != 8) {
- return ndr_pull_error(ndr, NDR_ERR_SUBCONTEXT,
- "Bad subcontext (PULL) Common Type Header length %d != 8",
- (int)hdrlen);
- }
-
- /* filler should be ignored */
- NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &filler));
-
- /*
- * Private Header for Constructed Type
- */
- /* length - will be updated latter */
- NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &content_size));
- if (size_is >= 0 && size_is != content_size) {
- return ndr_pull_error(ndr, NDR_ERR_SUBCONTEXT, "Bad subcontext (PULL) size_is(%d) mismatch content_size %d",
- (int)size_is, (int)content_size);
- }
- /* the content size must be a multiple of 8 */
- if ((content_size % 8) != 0) {
- return ndr_pull_error(ndr, NDR_ERR_SUBCONTEXT,
- "Bad subcontext (PULL) size_is(%d) not padded to 8 content_size %d",
- (int)size_is, (int)content_size);
- }
- r_content_size = content_size;
-
- /* reserved */
- NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &reserved));
- break;
- }
- default:
- return ndr_pull_error(ndr, NDR_ERR_SUBCONTEXT, "Bad subcontext (PULL) header_size %d",
- (int)header_size);
- }
-
- NDR_PULL_NEED_BYTES(ndr, r_content_size);
-
- subndr = talloc_zero(ndr, struct ndr_pull);
- NDR_ERR_HAVE_NO_MEMORY(subndr);
- subndr->flags = ndr->flags;
- subndr->current_mem_ctx = ndr->current_mem_ctx;
-
- subndr->data = ndr->data + ndr->offset;
- subndr->offset = 0;
- subndr->data_size = r_content_size;
- subndr->iconv_convenience = talloc_reference(subndr, ndr->iconv_convenience);
-
- if (force_le) {
- ndr_set_flags(&ndr->flags, LIBNDR_FLAG_LITTLE_ENDIAN);
- } else if (force_be) {
- ndr_set_flags(&ndr->flags, LIBNDR_FLAG_BIGENDIAN);
- }
-
- *_subndr = subndr;
- return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_subcontext_end(struct ndr_pull *ndr,
- struct ndr_pull *subndr,
- size_t header_size,
- ssize_t size_is)
-{
- uint32_t advance;
- if (size_is >= 0) {
- advance = size_is;
- } else if (header_size > 0) {
- advance = subndr->data_size;
- } else {
- advance = subndr->offset;
- }
- NDR_CHECK(ndr_pull_advance(ndr, advance));
- return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_subcontext_start(struct ndr_push *ndr,
- struct ndr_push **_subndr,
- size_t header_size,
- ssize_t size_is)
-{
- struct ndr_push *subndr;
-
- subndr = ndr_push_init_ctx(ndr, ndr->iconv_convenience);
- NDR_ERR_HAVE_NO_MEMORY(subndr);
- subndr->flags = ndr->flags;
-
- *_subndr = subndr;
- return NDR_ERR_SUCCESS;
-}
-
-/*
- push a subcontext header
-*/
-_PUBLIC_ enum ndr_err_code ndr_push_subcontext_end(struct ndr_push *ndr,
- struct ndr_push *subndr,
- size_t header_size,
- ssize_t size_is)
-{
- ssize_t padding_len;
-
- if (size_is >= 0) {
- padding_len = size_is - subndr->offset;
- if (padding_len > 0) {
- NDR_CHECK(ndr_push_zero(subndr, padding_len));
- } else if (padding_len < 0) {
- return ndr_push_error(ndr, NDR_ERR_SUBCONTEXT, "Bad subcontext (PUSH) content_size %d is larger than size_is(%d)",
- (int)subndr->offset, (int)size_is);
- }
- }
-
- switch (header_size) {
- case 0:
- break;
-
- case 2:
- NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, subndr->offset));
- break;
-
- case 4:
- NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, subndr->offset));
- break;
-
- case 0xFFFFFC01:
- /*
- * Common Type Header for the Serialization Stream
- * See [MS-RPCE] 2.2.6 Type Serialization Version 1
- */
- padding_len = NDR_ROUND(subndr->offset, 8) - subndr->offset;
- if (padding_len > 0) {
- NDR_CHECK(ndr_push_zero(subndr, padding_len));
- }
-
- /* version */
- NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, 1));
-
- /*
- * 0x10 little endian
- * 0x00 big endian
- */
- NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, NDR_BE(ndr)?0x00:0x10));
-
- /* length of the "Private Header for Constructed Type" */
- NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, 8));
-
- /* filler */
- NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0xCCCCCCCC));
-
- /*
- * Private Header for Constructed Type
- */
- /* length - will be updated latter */
- NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, subndr->offset));
-
- /* reserved */
- NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
- break;
-
- default:
- return ndr_push_error(ndr, NDR_ERR_SUBCONTEXT, "Bad subcontext header size %d",
- (int)header_size);
- }
-
- NDR_CHECK(ndr_push_bytes(ndr, subndr->data, subndr->offset));
- return NDR_ERR_SUCCESS;
-}
-
-/*
- store a token in the ndr context, for later retrieval
-*/
-_PUBLIC_ enum ndr_err_code ndr_token_store(TALLOC_CTX *mem_ctx,
- struct ndr_token_list **list,
- const void *key,
- uint32_t value)
-{
- struct ndr_token_list *tok;
- tok = talloc(mem_ctx, struct ndr_token_list);
- NDR_ERR_HAVE_NO_MEMORY(tok);
- tok->key = key;
- tok->value = value;
- DLIST_ADD((*list), tok);
- return NDR_ERR_SUCCESS;
-}
-
-/*
- retrieve a token from a ndr context, using cmp_fn to match the tokens
-*/
-_PUBLIC_ enum ndr_err_code ndr_token_retrieve_cmp_fn(struct ndr_token_list **list, const void *key, uint32_t *v,
- comparison_fn_t _cmp_fn, bool _remove_tok)
-{
- struct ndr_token_list *tok;
- for (tok=*list;tok;tok=tok->next) {
- if (_cmp_fn && _cmp_fn(tok->key,key)==0) goto found;
- else if (!_cmp_fn && tok->key == key) goto found;
- }
- return NDR_ERR_TOKEN;
-found:
- *v = tok->value;
- if (_remove_tok) {
- DLIST_REMOVE((*list), tok);
- talloc_free(tok);
- }
- return NDR_ERR_SUCCESS;
-}
-
-/*
- retrieve a token from a ndr context
-*/
-_PUBLIC_ enum ndr_err_code ndr_token_retrieve(struct ndr_token_list **list, const void *key, uint32_t *v)
-{
- return ndr_token_retrieve_cmp_fn(list, key, v, NULL, true);
-}
-
-/*
- peek at but don't removed a token from a ndr context
-*/
-_PUBLIC_ uint32_t ndr_token_peek(struct ndr_token_list **list, const void *key)
-{
- enum ndr_err_code status;
- uint32_t v;
-
- status = ndr_token_retrieve_cmp_fn(list, key, &v, NULL, false);
- if (!NDR_ERR_CODE_IS_SUCCESS(status)) {
- return 0;
- }
-
- return v;
-}
-
-/*
- pull an array size field and add it to the array_size_list token list
-*/
-_PUBLIC_ enum ndr_err_code ndr_pull_array_size(struct ndr_pull *ndr, const void *p)
-{
- uint32_t size;
- NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &size));
- return ndr_token_store(ndr, &ndr->array_size_list, p, size);
-}
-
-/*
- get the stored array size field
-*/
-_PUBLIC_ uint32_t ndr_get_array_size(struct ndr_pull *ndr, const void *p)
-{
- return ndr_token_peek(&ndr->array_size_list, p);
-}
-
-/*
- check the stored array size field
-*/
-_PUBLIC_ enum ndr_err_code ndr_check_array_size(struct ndr_pull *ndr, void *p, uint32_t size)
-{
- uint32_t stored;
- stored = ndr_token_peek(&ndr->array_size_list, p);
- if (stored != size) {
- return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE,
- "Bad array size - got %u expected %u\n",
- stored, size);
- }
- return NDR_ERR_SUCCESS;
-}
-
-/*
- pull an array length field and add it to the array_length_list token list
-*/
-_PUBLIC_ enum ndr_err_code ndr_pull_array_length(struct ndr_pull *ndr, const void *p)
-{
- uint32_t length, offset;
- NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &offset));
- if (offset != 0) {
- return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE,
- "non-zero array offset %u\n", offset);
- }
- NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &length));
- return ndr_token_store(ndr, &ndr->array_length_list, p, length);
-}
-
-/*
- get the stored array length field
-*/
-_PUBLIC_ uint32_t ndr_get_array_length(struct ndr_pull *ndr, const void *p)
-{
- return ndr_token_peek(&ndr->array_length_list, p);
-}
-
-/*
- check the stored array length field
-*/
-_PUBLIC_ enum ndr_err_code ndr_check_array_length(struct ndr_pull *ndr, void *p, uint32_t length)
-{
- uint32_t stored;
- stored = ndr_token_peek(&ndr->array_length_list, p);
- if (stored != length) {
- return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE,
- "Bad array length - got %u expected %u\n",
- stored, length);
- }
- return NDR_ERR_SUCCESS;
-}
-
-/*
- store a switch value
- */
-_PUBLIC_ enum ndr_err_code ndr_push_set_switch_value(struct ndr_push *ndr, const void *p, uint32_t val)
-{
- return ndr_token_store(ndr, &ndr->switch_list, p, val);
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_set_switch_value(struct ndr_pull *ndr, const void *p, uint32_t val)
-{
- return ndr_token_store(ndr, &ndr->switch_list, p, val);
-}
-
-_PUBLIC_ enum ndr_err_code ndr_print_set_switch_value(struct ndr_print *ndr, const void *p, uint32_t val)
-{
- return ndr_token_store(ndr, &ndr->switch_list, p, val);
-}
-
-/*
- retrieve a switch value
- */
-_PUBLIC_ uint32_t ndr_push_get_switch_value(struct ndr_push *ndr, const void *p)
-{
- return ndr_token_peek(&ndr->switch_list, p);
-}
-
-_PUBLIC_ uint32_t ndr_pull_get_switch_value(struct ndr_pull *ndr, const void *p)
-{
- return ndr_token_peek(&ndr->switch_list, p);
-}
-
-_PUBLIC_ uint32_t ndr_print_get_switch_value(struct ndr_print *ndr, const void *p)
-{
- return ndr_token_peek(&ndr->switch_list, p);
-}
-
-/*
- pull a struct from a blob using NDR
-*/
-_PUBLIC_ enum ndr_err_code ndr_pull_struct_blob(const DATA_BLOB *blob, TALLOC_CTX *mem_ctx, struct smb_iconv_convenience *iconv_convenience, void *p,
- ndr_pull_flags_fn_t fn)
-{
- struct ndr_pull *ndr;
- ndr = ndr_pull_init_blob(blob, mem_ctx, iconv_convenience);
- NDR_ERR_HAVE_NO_MEMORY(ndr);
- NDR_CHECK(fn(ndr, NDR_SCALARS|NDR_BUFFERS, p));
- return NDR_ERR_SUCCESS;
-}
-
-/*
- pull a struct from a blob using NDR - failing if all bytes are not consumed
-*/
-_PUBLIC_ enum ndr_err_code ndr_pull_struct_blob_all(const DATA_BLOB *blob, TALLOC_CTX *mem_ctx,
- struct smb_iconv_convenience *iconv_convenience,
- void *p, ndr_pull_flags_fn_t fn)
-{
- struct ndr_pull *ndr;
- ndr = ndr_pull_init_blob(blob, mem_ctx, iconv_convenience);
- NDR_ERR_HAVE_NO_MEMORY(ndr);
- NDR_CHECK(fn(ndr, NDR_SCALARS|NDR_BUFFERS, p));
- if (ndr->offset < ndr->data_size) {
- return ndr_pull_error(ndr, NDR_ERR_UNREAD_BYTES,
- "not all bytes consumed ofs[%u] size[%u]",
- ndr->offset, ndr->data_size);
- }
- return NDR_ERR_SUCCESS;
-}
-
-/*
- pull a union from a blob using NDR, given the union discriminator
-*/
-_PUBLIC_ enum ndr_err_code ndr_pull_union_blob(const DATA_BLOB *blob, TALLOC_CTX *mem_ctx,
- struct smb_iconv_convenience *iconv_convenience, void *p,
- uint32_t level, ndr_pull_flags_fn_t fn)
-{
- struct ndr_pull *ndr;
- ndr = ndr_pull_init_blob(blob, mem_ctx, iconv_convenience);
- NDR_ERR_HAVE_NO_MEMORY(ndr);
- NDR_CHECK(ndr_pull_set_switch_value(ndr, p, level));
- NDR_CHECK(fn(ndr, NDR_SCALARS|NDR_BUFFERS, p));
- return NDR_ERR_SUCCESS;
-}
-
-/*
- pull a union from a blob using NDR, given the union discriminator,
- failing if all bytes are not consumed
-*/
-_PUBLIC_ enum ndr_err_code ndr_pull_union_blob_all(const DATA_BLOB *blob, TALLOC_CTX *mem_ctx,
- struct smb_iconv_convenience *iconv_convenience, void *p,
- uint32_t level, ndr_pull_flags_fn_t fn)
-{
- struct ndr_pull *ndr;
- ndr = ndr_pull_init_blob(blob, mem_ctx, iconv_convenience);
- NDR_ERR_HAVE_NO_MEMORY(ndr);
- NDR_CHECK(ndr_pull_set_switch_value(ndr, p, level));
- NDR_CHECK(fn(ndr, NDR_SCALARS|NDR_BUFFERS, p));
- if (ndr->offset < ndr->data_size) {
- return ndr_pull_error(ndr, NDR_ERR_UNREAD_BYTES,
- "not all bytes consumed ofs[%u] size[%u]",
- ndr->offset, ndr->data_size);
- }
- return NDR_ERR_SUCCESS;
-}
-
-/*
- push a struct to a blob using NDR
-*/
-_PUBLIC_ enum ndr_err_code ndr_push_struct_blob(DATA_BLOB *blob, TALLOC_CTX *mem_ctx, struct smb_iconv_convenience *iconv_convenience, const void *p, ndr_push_flags_fn_t fn)
-{
- struct ndr_push *ndr;
- ndr = ndr_push_init_ctx(mem_ctx, iconv_convenience);
- NDR_ERR_HAVE_NO_MEMORY(ndr);
-
- NDR_CHECK(fn(ndr, NDR_SCALARS|NDR_BUFFERS, p));
-
- *blob = ndr_push_blob(ndr);
- talloc_steal(mem_ctx, blob->data);
- talloc_free(ndr);
-
- return NDR_ERR_SUCCESS;
-}
-
-/*
- push a union to a blob using NDR
-*/
-_PUBLIC_ enum ndr_err_code ndr_push_union_blob(DATA_BLOB *blob, TALLOC_CTX *mem_ctx, struct smb_iconv_convenience *iconv_convenience, void *p,
- uint32_t level, ndr_push_flags_fn_t fn)
-{
- struct ndr_push *ndr;
- ndr = ndr_push_init_ctx(mem_ctx, iconv_convenience);
- NDR_ERR_HAVE_NO_MEMORY(ndr);
-
- NDR_CHECK(ndr_push_set_switch_value(ndr, p, level));
- NDR_CHECK(fn(ndr, NDR_SCALARS|NDR_BUFFERS, p));
-
- *blob = ndr_push_blob(ndr);
- talloc_steal(mem_ctx, blob->data);
- talloc_free(ndr);
-
- return NDR_ERR_SUCCESS;
-}
-
-/*
- generic ndr_size_*() handler for structures
-*/
-_PUBLIC_ size_t ndr_size_struct(const void *p, int flags, ndr_push_flags_fn_t push)
-{
- struct ndr_push *ndr;
- enum ndr_err_code status;
- size_t ret;
-
- /* avoid recursion */
- if (flags & LIBNDR_FLAG_NO_NDR_SIZE) return 0;
-
- ndr = ndr_push_init_ctx(NULL, NULL);
- if (!ndr) return 0;
- ndr->flags |= flags | LIBNDR_FLAG_NO_NDR_SIZE;
- status = push(ndr, NDR_SCALARS|NDR_BUFFERS, discard_const(p));
- if (!NDR_ERR_CODE_IS_SUCCESS(status)) {
- talloc_free(ndr);
- return 0;
- }
- ret = ndr->offset;
- talloc_free(ndr);
- return ret;
-}
-
-/*
- generic ndr_size_*() handler for unions
-*/
-_PUBLIC_ size_t ndr_size_union(const void *p, int flags, uint32_t level, ndr_push_flags_fn_t push)
-{
- struct ndr_push *ndr;
- enum ndr_err_code status;
- size_t ret;
-
- /* avoid recursion */
- if (flags & LIBNDR_FLAG_NO_NDR_SIZE) return 0;
-
- ndr = ndr_push_init_ctx(NULL, NULL);
- if (!ndr) return 0;
- ndr->flags |= flags | LIBNDR_FLAG_NO_NDR_SIZE;
-
- status = ndr_push_set_switch_value(ndr, p, level);
- if (!NDR_ERR_CODE_IS_SUCCESS(status)) {
- talloc_free(ndr);
- return 0;
- }
- status = push(ndr, NDR_SCALARS|NDR_BUFFERS, p);
- if (!NDR_ERR_CODE_IS_SUCCESS(status)) {
- talloc_free(ndr);
- return 0;
- }
- ret = ndr->offset;
- talloc_free(ndr);
- return ret;
-}
-
-/*
- get the current base for relative pointers for the push
-*/
-_PUBLIC_ uint32_t ndr_push_get_relative_base_offset(struct ndr_push *ndr)
-{
- return ndr->relative_base_offset;
-}
-
-/*
- restore the old base for relative pointers for the push
-*/
-_PUBLIC_ void ndr_push_restore_relative_base_offset(struct ndr_push *ndr, uint32_t offset)
-{
- ndr->relative_base_offset = offset;
-}
-
-/*
- setup the current base for relative pointers for the push
- called in the NDR_SCALAR stage
-*/
-_PUBLIC_ enum ndr_err_code ndr_push_setup_relative_base_offset1(struct ndr_push *ndr, const void *p, uint32_t offset)
-{
- ndr->relative_base_offset = offset;
- return ndr_token_store(ndr, &ndr->relative_base_list, p, offset);
-}
-
-/*
- setup the current base for relative pointers for the push
- called in the NDR_BUFFERS stage
-*/
-_PUBLIC_ enum ndr_err_code ndr_push_setup_relative_base_offset2(struct ndr_push *ndr, const void *p)
-{
- return ndr_token_retrieve(&ndr->relative_base_list, p, &ndr->relative_base_offset);
-}
-
-/*
- push a relative object - stage1
- this is called during SCALARS processing
-*/
-_PUBLIC_ enum ndr_err_code ndr_push_relative_ptr1(struct ndr_push *ndr, const void *p)
-{
- if (p == NULL) {
- NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
- return NDR_ERR_SUCCESS;
- }
- NDR_CHECK(ndr_push_align(ndr, 4));
- NDR_CHECK(ndr_token_store(ndr, &ndr->relative_list, p, ndr->offset));
- return ndr_push_uint32(ndr, NDR_SCALARS, 0xFFFFFFFF);
-}
-
-/*
- push a relative object - stage2
- this is called during buffers processing
-*/
-_PUBLIC_ enum ndr_err_code ndr_push_relative_ptr2(struct ndr_push *ndr, const void *p)
-{
- uint32_t save_offset;
- uint32_t ptr_offset = 0xFFFFFFFF;
- if (p == NULL) {
- return NDR_ERR_SUCCESS;
- }
- save_offset = ndr->offset;
- NDR_CHECK(ndr_token_retrieve(&ndr->relative_list, p, &ptr_offset));
- if (ptr_offset > ndr->offset) {
- return ndr_push_error(ndr, NDR_ERR_BUFSIZE,
- "ndr_push_relative_ptr2 ptr_offset(%u) > ndr->offset(%u)",
- ptr_offset, ndr->offset);
- }
- ndr->offset = ptr_offset;
- if (save_offset < ndr->relative_base_offset) {
- return ndr_push_error(ndr, NDR_ERR_BUFSIZE,
- "ndr_push_relative_ptr2 save_offset(%u) < ndr->relative_base_offset(%u)",
- save_offset, ndr->relative_base_offset);
- }
- NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, save_offset - ndr->relative_base_offset));
- ndr->offset = save_offset;
- return NDR_ERR_SUCCESS;
-}
-
-/*
- get the current base for relative pointers for the pull
-*/
-_PUBLIC_ uint32_t ndr_pull_get_relative_base_offset(struct ndr_pull *ndr)
-{
- return ndr->relative_base_offset;
-}
-
-/*
- restore the old base for relative pointers for the pull
-*/
-_PUBLIC_ void ndr_pull_restore_relative_base_offset(struct ndr_pull *ndr, uint32_t offset)
-{
- ndr->relative_base_offset = offset;
-}
-
-/*
- setup the current base for relative pointers for the pull
- called in the NDR_SCALAR stage
-*/
-_PUBLIC_ enum ndr_err_code ndr_pull_setup_relative_base_offset1(struct ndr_pull *ndr, const void *p, uint32_t offset)
-{
- ndr->relative_base_offset = offset;
- return ndr_token_store(ndr, &ndr->relative_base_list, p, offset);
-}
-
-/*
- setup the current base for relative pointers for the pull
- called in the NDR_BUFFERS stage
-*/
-_PUBLIC_ enum ndr_err_code ndr_pull_setup_relative_base_offset2(struct ndr_pull *ndr, const void *p)
-{
- return ndr_token_retrieve(&ndr->relative_base_list, p, &ndr->relative_base_offset);
-}
-
-/*
- pull a relative object - stage1
- called during SCALARS processing
-*/
-_PUBLIC_ enum ndr_err_code ndr_pull_relative_ptr1(struct ndr_pull *ndr, const void *p, uint32_t rel_offset)
-{
- rel_offset += ndr->relative_base_offset;
- if (rel_offset > ndr->data_size) {
- return ndr_pull_error(ndr, NDR_ERR_BUFSIZE,
- "ndr_pull_relative_ptr1 rel_offset(%u) > ndr->data_size(%u)",
- rel_offset, ndr->data_size);
- }
- return ndr_token_store(ndr, &ndr->relative_list, p, rel_offset);
-}
-
-/*
- pull a relative object - stage2
- called during BUFFERS processing
-*/
-_PUBLIC_ enum ndr_err_code ndr_pull_relative_ptr2(struct ndr_pull *ndr, const void *p)
-{
- uint32_t rel_offset;
- NDR_CHECK(ndr_token_retrieve(&ndr->relative_list, p, &rel_offset));
- return ndr_pull_set_offset(ndr, rel_offset);
-}
diff --git a/source3/script/build_idl.sh b/source3/script/build_idl.sh
index 2027fd3937..75f8612957 100755
--- a/source3/script/build_idl.sh
+++ b/source3/script/build_idl.sh
@@ -20,11 +20,11 @@ for f in ${IDL_FILES}; do
ndr="librpc/gen_ndr/ndr_$basename.c"
if [ -f $ndr ]; then
- if [ "x`find librpc/idl/$f -newer $ndr -print`" = "xlibrpc/idl/$f" ]; then
- list="$list librpc/idl/$f"
+ if [ "x`find ${IDL_PATH}/$f -newer $ndr -print`" = "x${IDL_PATH}/$f" ]; then
+ list="$list ${IDL_PATH}/$f"
fi
else
- list="$list librpc/idl/$f"
+ list="$list ${IDL_PATH}/$f"
fi
done
diff --git a/source4/cldap_server/netlogon.c b/source4/cldap_server/netlogon.c
index 1cb0d50d02..cc2c69b27e 100644
--- a/source4/cldap_server/netlogon.c
+++ b/source4/cldap_server/netlogon.c
@@ -349,7 +349,7 @@ NTSTATUS fill_netlogon_samlogon_response(struct ldb_context *sam_ctx,
if (version & NETLOGON_NT_VERSION_5EX_WITH_IP) {
/* Clearly this needs to be fixed up for IPv6 */
extra_flags = NETLOGON_NT_VERSION_5EX_WITH_IP;
- netlogon->data.nt5_ex.sockaddr.sa_family = 2;
+ netlogon->data.nt5_ex.sockaddr.sockaddr_family = 2;
netlogon->data.nt5_ex.sockaddr.pdc_ip = pdc_ip;
netlogon->data.nt5_ex.sockaddr.remaining = data_blob_talloc_zero(mem_ctx, 8);
}
diff --git a/source4/configure.ac b/source4/configure.ac
index 8fcaefdf6c..5ea0e51edf 100644
--- a/source4/configure.ac
+++ b/source4/configure.ac
@@ -31,7 +31,7 @@ m4_include(../pidl/config.m4)
AC_CONFIG_FILES(lib/registry/registry.pc)
AC_CONFIG_FILES(lib/events/events.pc)
AC_CONFIG_FILES(librpc/dcerpc.pc)
-AC_CONFIG_FILES(librpc/ndr.pc)
+AC_CONFIG_FILES(../librpc/ndr.pc)
AC_CONFIG_FILES(lib/torture/torture.pc)
AC_CONFIG_FILES(auth/gensec/gensec.pc)
AC_CONFIG_FILES(param/samba-hostconfig.pc)
diff --git a/source4/lib/ldb/modules/asq.c b/source4/lib/ldb/modules/asq.c
index 17896a006a..835715e7dc 100644
--- a/source4/lib/ldb/modules/asq.c
+++ b/source4/lib/ldb/modules/asq.c
@@ -222,10 +222,10 @@ static int asq_build_first_request(struct asq_context *ac, struct ldb_request **
base_attrs[1] = NULL;
- ret = ldb_build_search_req_ex(base_req, ac->module->ldb, ac,
+ ret = ldb_build_search_req(base_req, ac->module->ldb, ac,
ac->req->op.search.base,
LDB_SCOPE_BASE,
- ac->req->op.search.tree,
+ NULL,
(const char * const *)base_attrs,
NULL,
ac, asq_base_callback,
diff --git a/source4/lib/samba3/config.mk b/source4/lib/samba3/config.mk
index e089149393..365347fe21 100644
--- a/source4/lib/samba3/config.mk
+++ b/source4/lib/samba3/config.mk
@@ -6,5 +6,3 @@ PRIVATE_DEPENDENCIES = CHARSET LIBSAMBA-UTIL
################################################
SMBPASSWD_OBJ_FILES = $(libsrcdir)/samba3/smbpasswd.o
-
-$(eval $(call proto_header_template,$(libsrcdir)/samba3/samba3_smbpasswd_proto.h,$(SMBPASSWD_OBJ_FILES:.o=.c)))
diff --git a/source4/lib/samba3/samba3.h b/source4/lib/samba3/samba3.h
index aea87dac14..1a0ce04143 100644
--- a/source4/lib/samba3/samba3.h
+++ b/source4/lib/samba3/samba3.h
@@ -24,191 +24,9 @@
#include "librpc/gen_ndr/samr.h"
#include "param/param.h"
-struct samba3_samaccount {
- uint32_t logon_time,
- logoff_time,
- kickoff_time,
- bad_password_time,
- pass_last_set_time,
- pass_can_change_time,
- pass_must_change_time;
- char *username;
- char *domain;
- char *nt_username;
- char *dir_drive;
- char *unknown_str;
- char *munged_dial;
- char *fullname;
- char *homedir;
- char *logon_script;
- char *profile_path;
- char *acct_desc;
- char *workstations;
- uint32_t user_rid, group_rid, hours_len, unknown_6;
- uint16_t acct_ctrl, logon_divs;
- uint16_t bad_password_count, logon_count;
- struct samr_Password lm_pw, nt_pw;
- uint8_t *nt_pw_hist_ptr;
- uint8_t *hours;
-};
-
-struct samba3_groupmapping {
- gid_t gid;
- struct dom_sid *sid;
- int sid_name_use;
- const char *nt_name;
- const char *comment;
-};
-
-struct samba3_alias {
- struct dom_sid *sid;
- uint32_t member_count;
- struct dom_sid **members;
-};
-
-struct samba3_groupdb {
- uint32_t groupmap_count;
- struct samba3_groupmapping *groupmappings;
-
- uint32_t alias_count;
- struct samba3_alias *aliases;
-};
-
-struct samba3_idmap_mapping
-{
- enum { IDMAP_GROUP, IDMAP_USER } type;
- uint32_t unix_id;
- struct dom_sid *sid;
-};
-
-struct samba3_idmapdb
-{
- /* High water marks */
- uint32_t user_hwm;
- uint32_t group_hwm;
-
- uint32_t mapping_count;
- struct samba3_idmap_mapping *mappings;
-};
-
-struct samba3_winsdb_entry
-{
- char *name;
- int nb_flags;
- int type;
- time_t ttl;
- uint32_t ip_count;
- struct in_addr *ips;
-};
-
-struct samba3_policy
-{
- uint32_t min_password_length;
- uint32_t password_history;
- uint32_t user_must_logon_to_change_password;
- uint32_t maximum_password_age;
- uint32_t minimum_password_age;
- uint32_t lockout_duration;
- uint32_t reset_count_minutes;
- uint32_t bad_lockout_minutes;
- uint32_t disconnect_time;
- uint32_t refuse_machine_password_change;
-};
-
-struct samba3_regval {
- char *name;
- uint16_t type;
- DATA_BLOB data;
-};
-
-struct samba3_regkey {
- char *name;
-
- uint32_t value_count;
- struct samba3_regval *values;
-
- uint32_t subkey_count;
- char **subkeys;
-};
-
-struct samba3_regdb
-{
- uint32_t key_count;
- struct samba3_regkey *keys;
-};
-
-struct samba3_secrets
-{
- struct cli_credentials *ipc_cred;
-
- uint32_t ldappw_count;
- struct samba3_ldappw
- {
- char *dn;
- char *password;
- } *ldappws;
-
- uint32_t domain_count;
- struct samba3_domainsecrets
- {
- char *name;
- struct dom_sid sid;
- struct GUID guid;
- char *plaintext_pw;
- time_t last_change_time;
- struct {
- uint8_t hash[16];
- time_t mod_time;
- } hash_pw;
- int sec_channel_type;
- } *domains;
-
- uint32_t trusted_domain_count;
- struct samba3_trusted_dom_pass {
- uint32_t uni_name_len;
- const char *uni_name[32]; /* unicode domain name */
- const char *pass; /* trust relationship's password */
- time_t mod_time;
- struct dom_sid domain_sid; /* remote domain's sid */
- } *trusted_domains;
-
- uint32_t afs_keyfile_count;
-
- struct samba3_afs_keyfile {
- uint32_t nkeys;
- struct {
- uint32_t kvno;
- char key[8];
- } entry[8];
- char *cell;
- } *afs_keyfiles;
-};
-
-struct samba3_share_info {
- char *name;
- struct security_descriptor secdesc;
-};
-
-struct samba3
-{
- struct param_context *configuration;
-
- uint32_t winsdb_count;
- struct samba3_winsdb_entry *winsdb_entries;
-
- uint32_t samaccount_count;
- struct samba3_samaccount *samaccounts;
-
- uint32_t share_count;
- struct samba3_share_info *shares;
-
- struct samba3_secrets secrets;
- struct samba3_groupdb group;
- struct samba3_idmapdb idmap;
- struct samba3_policy policy;
- struct samba3_regdb registry;
-};
-
-#include "lib/samba3/samba3_smbpasswd_proto.h"
+struct samr_Password *smbpasswd_gethexpwd(TALLOC_CTX *mem_ctx, const char *p);
+char *smbpasswd_sethexpwd(TALLOC_CTX *mem_ctx, struct samr_Password *pwd, uint16_t acb_info);
+uint16_t smbpasswd_decode_acb_info(const char *p);
+char *smbpasswd_encode_acb_info(TALLOC_CTX *mem_ctx, uint16_t acb_info);
#endif /* _SAMBA3_H */
diff --git a/source4/librpc/config.mk b/source4/librpc/config.mk
index 9f1d5df96f..44e05dff35 100644
--- a/source4/librpc/config.mk
+++ b/source4/librpc/config.mk
@@ -12,7 +12,7 @@ LIBNDR_OBJ_FILES = $(addprefix $(ndrsrcdir)/, ndr_string.o) ../librpc/ndr/ndr_ba
$(eval $(call proto_header_template,$(ndrsrcdir)/libndr_proto.h,$(LIBNDR_OBJ_FILES:.o=.c)))
-PC_FILES += $(librpcsrcdir)/ndr.pc
+PC_FILES += ../librpc/ndr.pc
LIBNDR_VERSION = 0.0.1
LIBNDR_SOVERSION = 0
diff --git a/source4/librpc/idl/lsa.idl b/source4/librpc/idl/lsa.idl
index 4dce6d6d1e..341489ed23 100644
--- a/source4/librpc/idl/lsa.idl
+++ b/source4/librpc/idl/lsa.idl
@@ -124,12 +124,27 @@ import "misc.idl", "security.idl";
lsa_QosInfo *sec_qos;
} lsa_ObjectAttribute;
+ typedef [public,bitmap32bit] bitmap {
+ LSA_POLICY_VIEW_LOCAL_INFORMATION = 0x00000001,
+ LSA_POLICY_VIEW_AUDIT_INFORMATION = 0x00000002,
+ LSA_POLICY_GET_PRIVATE_INFORMATION = 0x00000004,
+ LSA_POLICY_TRUST_ADMIN = 0x00000008,
+ LSA_POLICY_CREATE_ACCOUNT = 0x00000010,
+ LSA_POLICY_CREATE_SECRET = 0x00000020,
+ LSA_POLICY_CREATE_PRIVILEGE = 0x00000040,
+ LSA_POLICY_SET_DEFAULT_QUOTA_LIMITS = 0x00000080,
+ LSA_POLICY_SET_AUDIT_REQUIREMENTS = 0x00000100,
+ LSA_POLICY_AUDIT_LOG_ADMIN = 0x00000200,
+ LSA_POLICY_SERVER_ADMIN = 0x00000400,
+ LSA_POLICY_LOOKUP_NAMES = 0x00000800
+ } lsa_PolicyAccessMask;
+
/* notice the screwup with the system_name - thats why MS created
OpenPolicy2 */
[public] NTSTATUS lsa_OpenPolicy (
[in,unique] uint16 *system_name,
[in] lsa_ObjectAttribute *attr,
- [in] uint32 access_mask,
+ [in] lsa_PolicyAccessMask access_mask,
[out] policy_handle *handle
);
diff --git a/source4/librpc/idl/nbt.idl b/source4/librpc/idl/nbt.idl
index 38a2b9596a..b001b0a500 100644
--- a/source4/librpc/idl/nbt.idl
+++ b/source4/librpc/idl/nbt.idl
@@ -291,7 +291,7 @@ interface nbt
[switch_is(smb_command)] smb_body body;
} dgram_smb_packet;
- const uint32 DGRAM_SMB = 0xff534d42; /* 0xffSMB */
+ const uint32 DGRAM_SMB = 0xff534d42; /* 0xffSMB */
typedef [nodiscriminant] union {
[case(DGRAM_SMB)] dgram_smb_packet smb;
@@ -334,58 +334,57 @@ interface nbt
/******************************************
* \MAILSLOT\NET\NETLOGON mailslot requests
- * and
- * \MAILSLOT\NET\NTLOGON mailslot requests
+ * and
+ * \MAILSLOT\NET\NTLOGON mailslot requests
*/
typedef [public,gensize] struct {
- uint32 sa_family;
+ uint32 sockaddr_family;
[flag(NDR_BIG_ENDIAN)] ipv4address pdc_ip;
[flag(NDR_REMAINING)] DATA_BLOB remaining;
} nbt_sockaddr;
typedef [bitmap32bit,public] bitmap {
- NBT_SERVER_PDC = 0x00000001,
- NBT_SERVER_GC = 0x00000004,
- NBT_SERVER_LDAP = 0x00000008,
- NBT_SERVER_DS = 0x00000010,
- NBT_SERVER_KDC = 0x00000020,
- NBT_SERVER_TIMESERV = 0x00000040,
- NBT_SERVER_CLOSEST = 0x00000080,
- NBT_SERVER_WRITABLE = 0x00000100,
- NBT_SERVER_GOOD_TIMESERV = 0x00000200,
- NBT_SERVER_NDNC = 0x00000400,
- NBT_SERVER_SEL_SEC_DOM_6 = 0x00000800,
- NBT_SERVER_FUL_SEC_DOM_6 = 0x00001000,
- NBT_SERVER_DS_DNS_CONTR = 0x04000000,
- NBT_SERVER_DS_DNS_DOMAIN = 0x02000000,
- NBT_SERVER_DS_DNS_FOREST = 0x01000000
+ NBT_SERVER_PDC = 0x00000001,
+ NBT_SERVER_GC = 0x00000004,
+ NBT_SERVER_LDAP = 0x00000008,
+ NBT_SERVER_DS = 0x00000010,
+ NBT_SERVER_KDC = 0x00000020,
+ NBT_SERVER_TIMESERV = 0x00000040,
+ NBT_SERVER_CLOSEST = 0x00000080,
+ NBT_SERVER_WRITABLE = 0x00000100,
+ NBT_SERVER_GOOD_TIMESERV = 0x00000200,
+ NBT_SERVER_NDNC = 0x00000400,
+ NBT_SERVER_SELECT_SECRET_DOMAIN_6 = 0x00000800,
+ NBT_SERVER_FULL_SECRET_DOMAIN_6 = 0x00001000,
+ NBT_SERVER_DS_DNS_CONTR = 0x04000000,
+ NBT_SERVER_DS_DNS_DOMAIN = 0x02000000,
+ NBT_SERVER_DS_DNS_FOREST = 0x01000000
} nbt_server_type;
typedef [bitmap32bit,public] bitmap {
- NETLOGON_NT_VERSION_1 = 0x00000001,
- NETLOGON_NT_VERSION_5 = 0x00000002,
- NETLOGON_NT_VERSION_5EX = 0x00000004,
- NETLOGON_NT_VERSION_5EX_WITH_IP = 0x00000008,
- NETLOGON_NT_VERSION_WITH_CLOSEST_SITE = 0x00000010,
- NETLOGON_NT_VERSION_AVIOD_NT4EMUL = 0x01000000,
- NETLOGON_NT_VERSION_PDC = 0x10000000,
- NETLOGON_NT_VERSION_IP = 0x20000000,
- NETLOGON_NT_VERSION_LOCAL = 0x40000000,
- NETLOGON_NT_VERSION_GC = 0x80000000
+ NETLOGON_NT_VERSION_1 = 0x00000001,
+ NETLOGON_NT_VERSION_5 = 0x00000002,
+ NETLOGON_NT_VERSION_5EX = 0x00000004,
+ NETLOGON_NT_VERSION_5EX_WITH_IP = 0x00000008,
+ NETLOGON_NT_VERSION_WITH_CLOSEST_SITE = 0x00000010,
+ NETLOGON_NT_VERSION_AVIOD_NT4EMUL = 0x01000000,
+ NETLOGON_NT_VERSION_PDC = 0x10000000,
+ NETLOGON_NT_VERSION_IP = 0x20000000,
+ NETLOGON_NT_VERSION_LOCAL = 0x40000000,
+ NETLOGON_NT_VERSION_GC = 0x80000000
} netlogon_nt_version_flags;
-
typedef [enum16bit,public] enum {
LOGON_PRIMARY_QUERY = 7, /* Was also NETLOGON_QUERY_FOR_PDC */
NETLOGON_ANNOUNCE_UAS = 10,
NETLOGON_RESPONSE_FROM_PDC = 12,
LOGON_SAM_LOGON_REQUEST = 18, /* Was also NETLOGON_QUERY_FOR_PDC2, NTLOGON_SAM_LOGON */
LOGON_SAM_LOGON_RESPONSE = 19, /* Was also NTLOGON_SAM_LOGON_REPLY */
- LOGON_SAM_LOGON_PAUSE_RESPONSE = 20,
+ LOGON_SAM_LOGON_PAUSE_RESPONSE = 20,
LOGON_SAM_LOGON_USER_UNKNOWN = 21, /* Was also NTLOGON_SAM_LOGON_REPLY15 */
LOGON_SAM_LOGON_RESPONSE_EX = 23, /* was NETLOGON_RESPONSE_FROM_PDC2 */
- LOGON_SAM_LOGON_PAUSE_RESPONSE_EX = 24,
+ LOGON_SAM_LOGON_PAUSE_RESPONSE_EX = 24,
LOGON_SAM_LOGON_USER_UNKNOWN_EX = 25 /* was NETLOGON_RESPONSE_FROM_PDC_USER */
} netlogon_command;
@@ -437,7 +436,7 @@ interface nbt
nbt_server_type server_type;
netlogon_nt_version_flags nt_version;
uint16 lmnt_token;
- uint16 lm20_token;
+ uint16 lm20_token;
} NETLOGON_SAM_LOGON_RESPONSE;
/* response from pdc hand marshaled (we have an additional
@@ -458,11 +457,11 @@ interface nbt
nbt_string client_site;
/* Optional on NETLOGON_NT_VERSION_5EX_WITH_IP */
- [value(ndr_size_nbt_sockaddr(&sockaddr, ndr->flags))] uint8 sockaddr_size;
- [subcontext(0),subcontext_size(sockaddr_size)] nbt_sockaddr sockaddr;
-
+ [value(ndr_size_nbt_sockaddr(&sockaddr, ndr->flags))] uint8 sockaddr_size;
+ [subcontext(0),subcontext_size(sockaddr_size)] nbt_sockaddr sockaddr;
+
/* Optional on NETLOGON_NT_VERSION_WITH_CLOSEST_SITE */
- nbt_string next_closest_site;
+ nbt_string next_closest_site;
netlogon_nt_version_flags nt_version;
uint16 lmnt_token;
@@ -548,7 +547,7 @@ interface nbt
/********************************************************/
typedef bitmap svcctl_ServerType svcctl_ServerType;
- typedef [enum8bit] enum {
+ typedef [enum8bit] enum {
HostAnnouncement = 1,
AnnouncementRequest = 2,
Election = 8,
@@ -576,7 +575,7 @@ interface nbt
typedef struct {
uint8 Unused;
- astring ResponseName;
+ astring ResponseName;
} nbt_browse_announcement_request;
typedef struct {
@@ -584,7 +583,7 @@ interface nbt
uint32 Criteria;
uint32 UpTime; /* In milliseconds */
uint32 Reserved; /* Must be zero */
- astring ServerName;
+ astring ServerName;
} nbt_browse_election_request;
typedef struct {
@@ -649,6 +648,6 @@ interface nbt
typedef [public,flag(NDR_NOALIGN)] struct {
nbt_browse_opcode opcode;
- [switch_is(opcode)] nbt_browse_payload payload;
+ [switch_is(opcode)] nbt_browse_payload payload;
} nbt_browse_packet;
}
diff --git a/source4/torture/ldap/cldap.c b/source4/torture/ldap/cldap.c
index 23b0554c4f..2c95d46058 100644
--- a/source4/torture/ldap/cldap.c
+++ b/source4/torture/ldap/cldap.c
@@ -280,10 +280,10 @@ static bool test_cldap_netlogon_flags(struct torture_context *tctx,
printf("NBT_SERVER_GOOD_TIMESERV ");
if (server_type & NBT_SERVER_NDNC)
printf("NBT_SERVER_NDNC ");
- if (server_type & NBT_SERVER_SEL_SEC_DOM_6)
- printf("NBT_SERVER_SEL_SEC_DOM_6 ");
- if (server_type & NBT_SERVER_FUL_SEC_DOM_6)
- printf("NBT_SERVER_FUL_SEC_DOM_6 ");
+ if (server_type & NBT_SERVER_SELECT_SECRET_DOMAIN_6)
+ printf("NBT_SERVER_SELECT_SECRET_DOMAIN_6");
+ if (server_type & NBT_SERVER_FULL_SECRET_DOMAIN_6)
+ printf("NBT_SERVER_FULL_SECRET_DOMAIN_6");
if (server_type & NBT_SERVER_DS_DNS_CONTR)
printf("NBT_SERVER_DS_DNS_CONTR ");
if (server_type & NBT_SERVER_DS_DNS_DOMAIN)