summaryrefslogtreecommitdiff
path: root/source/librpc/ndr
diff options
context:
space:
mode:
Diffstat (limited to 'source/librpc/ndr')
-rw-r--r--source/librpc/ndr/libndr.h1
-rw-r--r--source/librpc/ndr/ndr.c10
-rw-r--r--source/librpc/ndr/ndr_basic.c51
-rw-r--r--source/librpc/ndr/ndr_misc.c16
4 files changed, 10 insertions, 68 deletions
diff --git a/source/librpc/ndr/libndr.h b/source/librpc/ndr/libndr.h
index 23e9e06bdd9..faa7c56455d 100644
--- a/source/librpc/ndr/libndr.h
+++ b/source/librpc/ndr/libndr.h
@@ -93,7 +93,6 @@ struct ndr_push {
struct ndr_token_list *switch_list;
struct ndr_token_list *relative_list;
struct ndr_token_list *nbt_string_list;
- struct ndr_token_list *full_ptr_list;
/* this is used to ensure we generate unique reference IDs */
uint32_t ptr_count;
diff --git a/source/librpc/ndr/ndr.c b/source/librpc/ndr/ndr.c
index 6d174d38c3f..4f0599e5c03 100644
--- a/source/librpc/ndr/ndr.c
+++ b/source/librpc/ndr/ndr.c
@@ -169,7 +169,7 @@ NTSTATUS ndr_push_expand(struct ndr_push *ndr, uint32_t extra_size)
if (size < ndr->offset) {
/* extra_size overflowed the offset */
return ndr_push_error(ndr, NDR_ERR_BUFSIZE, "Overflow in push_expand to %u",
- size);
+ size);
}
if (ndr->alloc_size > size) {
@@ -709,8 +709,8 @@ NTSTATUS ndr_pull_struct_blob_all(const DATA_BLOB *blob, TALLOC_CTX *mem_ctx, vo
}
status = fn(ndr, NDR_SCALARS|NDR_BUFFERS, p);
if (!NT_STATUS_IS_OK(status)) return status;
- if (ndr->offset < ndr->data_size) {
- return NT_STATUS_PORT_MESSAGE_TOO_LONG;
+ if (ndr->offset != ndr->data_size) {
+ return NT_STATUS_BUFFER_TOO_SMALL;
}
return status;
}
@@ -755,8 +755,6 @@ NTSTATUS ndr_push_struct_blob(DATA_BLOB *blob, TALLOC_CTX *mem_ctx, const void *
}
*blob = ndr_push_blob(ndr);
- talloc_steal(mem_ctx, blob->data);
- talloc_free(ndr);
return NT_STATUS_OK;
}
@@ -780,8 +778,6 @@ NTSTATUS ndr_push_union_blob(DATA_BLOB *blob, TALLOC_CTX *mem_ctx, void *p,
}
*blob = ndr_push_blob(ndr);
- talloc_steal(mem_ctx, blob->data);
- talloc_free(ndr);
return NT_STATUS_OK;
}
diff --git a/source/librpc/ndr/ndr_basic.c b/source/librpc/ndr/ndr_basic.c
index c7c6281fea0..5e75fa1092e 100644
--- a/source/librpc/ndr/ndr_basic.c
+++ b/source/librpc/ndr/ndr_basic.c
@@ -479,17 +479,12 @@ NTSTATUS ndr_push_unique_ptr(struct ndr_push *ndr, const void *p)
/*
push a 'simple' full non-zero value if a pointer is non-NULL, otherwise 0
*/
-NTSTATUS ndr_push_full_ptr(struct ndr_push *ndr, const void *p)
+NTSTATUS ndr_push_sptr_ptr(struct ndr_push *ndr, const void *p)
{
uint32_t ptr = 0;
if (p) {
- /* Check if the pointer already exists and has an id */
- ptr = ndr_token_peek(&ndr->full_ptr_list, p);
- if (ptr == 0) {
- ndr->ptr_count++;
- ptr = ndr->ptr_count;
- ndr_token_store(ndr, &ndr->full_ptr_list, p, ptr);
- }
+ ndr->ptr_count++;
+ ptr = ndr->ptr_count;
}
return ndr_push_uint32(ndr, NDR_SCALARS, ptr);
}
@@ -577,43 +572,6 @@ NTSTATUS ndr_pull_time_t(struct ndr_pull *ndr, int ndr_flags, time_t *t)
return NT_STATUS_OK;
}
-/*
- pull a ipv4address
-*/
-NTSTATUS ndr_pull_ipv4address(struct ndr_pull *ndr, int ndr_flags, const char **address)
-{
- struct in_addr in;
- NDR_CHECK(ndr_pull_uint32(ndr, ndr_flags, &in.s_addr));
- in.s_addr = htonl(in.s_addr);
- *address = talloc_strdup(ndr->current_mem_ctx, inet_ntoa(in));
- NT_STATUS_HAVE_NO_MEMORY(*address);
- return NT_STATUS_OK;
-}
-
-/*
- push a ipv4address
-*/
-NTSTATUS ndr_push_ipv4address(struct ndr_push *ndr, int ndr_flags, const char *address)
-{
- uint32_t addr;
- if (!is_ipaddress(address)) {
- return ndr_push_error(ndr, NDR_ERR_IPV4ADDRESS,
- "Invalid IPv4 address: '%s'",
- address);
- }
- addr = inet_addr(address);
- NDR_CHECK(ndr_push_uint32(ndr, ndr_flags, htonl(addr)));
- return NT_STATUS_OK;
-}
-
-/*
- print a ipv4address
-*/
-void ndr_print_ipv4address(struct ndr_print *ndr, const char *name,
- const char *address)
-{
- ndr->print(ndr, "%-25s: %s", name, address);
-}
void ndr_print_struct(struct ndr_print *ndr, const char *name, const char *type)
{
@@ -783,7 +741,7 @@ void ndr_print_DATA_BLOB(struct ndr_print *ndr, const char *name, DATA_BLOB r)
{
ndr->print(ndr, "%-25s: DATA_BLOB length=%u", name, r.length);
if (r.length) {
- dump_data(10, r.data, r.length);
+ dump_data(10, (const char *)r.data, r.length);
}
}
@@ -841,6 +799,5 @@ NTSTATUS ndr_pull_DATA_BLOB(struct ndr_pull *ndr, int ndr_flags, DATA_BLOB *blob
uint32_t ndr_size_DATA_BLOB(int ret, const DATA_BLOB *data, int flags)
{
- if (!data) return ret;
return ret + data->length;
}
diff --git a/source/librpc/ndr/ndr_misc.c b/source/librpc/ndr/ndr_misc.c
index 17bba77a01c..54face8d7a0 100644
--- a/source/librpc/ndr/ndr_misc.c
+++ b/source/librpc/ndr/ndr_misc.c
@@ -243,11 +243,7 @@ NTSTATUS ndr_push_server_id(struct ndr_push *ndr, int ndr_flags, const struct se
if (ndr_flags & NDR_SCALARS) {
NDR_CHECK(ndr_push_align(ndr, 4));
NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS,
- (uint32_t)r->pid));
-#ifdef CLUSTER_SUPPORT
- NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS,
- (uint32_t)r->vnn));
-#endif
+ (uint32_t)r->id.pid));
}
if (ndr_flags & NDR_BUFFERS) {
}
@@ -260,10 +256,7 @@ NTSTATUS ndr_pull_server_id(struct ndr_pull *ndr, int ndr_flags, struct server_i
uint32_t pid;
NDR_CHECK(ndr_pull_align(ndr, 4));
NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &pid));
-#ifdef CLUSTER_SUPPORT
- NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->vnn));
-#endif
- r->pid = (pid_t)pid;
+ r->id.pid = (pid_t)pid;
}
if (ndr_flags & NDR_BUFFERS) {
}
@@ -274,9 +267,6 @@ void ndr_print_server_id(struct ndr_print *ndr, const char *name, const struct s
{
ndr_print_struct(ndr, name, "server_id");
ndr->depth++;
- ndr_print_uint32(ndr, "id", (uint32_t)r->pid);
-#ifdef CLUSTER_SUPPORT
- ndr_print_uint32(ndr, "vnn", (uint32_t)r->vnn);
-#endif
+ ndr_print_uint32(ndr, "id", (uint32_t)r->id.pid);
ndr->depth--;
}