diff options
Diffstat (limited to 'source/librpc/ndr')
-rw-r--r-- | source/librpc/ndr/libndr.h | 1 | ||||
-rw-r--r-- | source/librpc/ndr/ndr.c | 10 | ||||
-rw-r--r-- | source/librpc/ndr/ndr_basic.c | 51 | ||||
-rw-r--r-- | source/librpc/ndr/ndr_misc.c | 16 |
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--; } |