summaryrefslogtreecommitdiff
path: root/source4/librpc
diff options
context:
space:
mode:
Diffstat (limited to 'source4/librpc')
-rw-r--r--source4/librpc/idl/dcerpc.idl40
-rw-r--r--source4/librpc/idl/dfs.idl2
-rw-r--r--source4/librpc/idl/dssetup.idl2
-rw-r--r--source4/librpc/idl/epmapper.idl2
-rw-r--r--source4/librpc/idl/notify.idl2
-rw-r--r--source4/librpc/idl/orpc.idl2
-rw-r--r--source4/librpc/idl/security.idl12
-rw-r--r--source4/librpc/ndr/libndr.h7
-rw-r--r--source4/librpc/ndr/ndr.c21
-rw-r--r--source4/librpc/ndr/ndr_compression.c1
-rw-r--r--source4/librpc/ndr/ndr_drsuapi.c8
-rw-r--r--source4/librpc/ndr/ndr_string.c4
-rw-r--r--source4/librpc/ndr/ndr_table.c4
-rw-r--r--source4/librpc/ndr/uuid.c15
-rw-r--r--source4/librpc/rpc/dcerpc.c24
-rw-r--r--source4/librpc/rpc/dcerpc_auth.c6
-rw-r--r--source4/librpc/rpc/dcerpc_connect.c12
-rw-r--r--source4/librpc/rpc/dcerpc_smb.c29
-rw-r--r--source4/librpc/rpc/dcerpc_smb2.c14
-rw-r--r--source4/librpc/rpc/dcerpc_sock.c22
-rw-r--r--source4/librpc/rpc/dcerpc_util.c24
-rw-r--r--source4/librpc/tests/binding_string.c37
-rw-r--r--source4/librpc/tools/ndrdump.c14
23 files changed, 193 insertions, 111 deletions
diff --git a/source4/librpc/idl/dcerpc.idl b/source4/librpc/idl/dcerpc.idl
index c864bd4b39..fcb0be4639 100644
--- a/source4/librpc/idl/dcerpc.idl
+++ b/source4/librpc/idl/dcerpc.idl
@@ -118,26 +118,34 @@ interface dcerpc
} dcerpc_fault;
/* the auth types we know about */
- const uint8 DCERPC_AUTH_TYPE_NONE = 0;
- /* this seems to be not krb5! */
- const uint8 DCERPC_AUTH_TYPE_KRB5_1 = 1;
- const uint8 DCERPC_AUTH_TYPE_SPNEGO = 9;
- const uint8 DCERPC_AUTH_TYPE_NTLMSSP = 10;
- const uint8 DCERPC_AUTH_TYPE_KRB5 = 16;
- const uint8 DCERPC_AUTH_TYPE_SCHANNEL = 68;
- const uint8 DCERPC_AUTH_TYPE_MSMQ = 100;
+ typedef [enum8bit] enum {
+ DCERPC_AUTH_TYPE_NONE = 0,
+ /* this seems to be not krb5! */
+ DCERPC_AUTH_TYPE_KRB5_1 = 1,
+ DCERPC_AUTH_TYPE_SPNEGO = 9,
+ DCERPC_AUTH_TYPE_NTLMSSP = 10,
+ DCERPC_AUTH_TYPE_KRB5 = 16,
+ DCERPC_AUTH_TYPE_DPA = 17,
+ DCERPC_AUTH_TYPE_MSN = 18,
+ DCERPC_AUTH_TYPE_DIGEST = 21,
+ DCERPC_AUTH_TYPE_SCHANNEL = 68,
+ DCERPC_AUTH_TYPE_MSMQ = 100
+ } dcerpc_AuthType;
+
+ typedef [enum8bit] enum {
+ DCERPC_AUTH_LEVEL_NONE = 1,
+ DCERPC_AUTH_LEVEL_CONNECT = 2,
+ DCERPC_AUTH_LEVEL_CALL = 3,
+ DCERPC_AUTH_LEVEL_PACKET = 4,
+ DCERPC_AUTH_LEVEL_INTEGRITY = 5,
+ DCERPC_AUTH_LEVEL_PRIVACY = 6
+ } dcerpc_AuthLevel;
const uint8 DCERPC_AUTH_LEVEL_DEFAULT = DCERPC_AUTH_LEVEL_CONNECT;
- const uint8 DCERPC_AUTH_LEVEL_NONE = 1;
- const uint8 DCERPC_AUTH_LEVEL_CONNECT = 2;
- const uint8 DCERPC_AUTH_LEVEL_CALL = 3;
- const uint8 DCERPC_AUTH_LEVEL_PACKET = 4;
- const uint8 DCERPC_AUTH_LEVEL_INTEGRITY = 5;
- const uint8 DCERPC_AUTH_LEVEL_PRIVACY = 6;
typedef [public] struct {
- uint8 auth_type;
- uint8 auth_level;
+ dcerpc_AuthType auth_type;
+ dcerpc_AuthLevel auth_level;
uint8 auth_pad_length;
uint8 auth_reserved;
uint32 auth_context_id;
diff --git a/source4/librpc/idl/dfs.idl b/source4/librpc/idl/dfs.idl
index 30da410a46..50c8a826df 100644
--- a/source4/librpc/idl/dfs.idl
+++ b/source4/librpc/idl/dfs.idl
@@ -2,6 +2,8 @@
dfs interface definition
*/
+import "misc.idl";
+
[ uuid("4fc742e0-4a10-11cf-8273-00aa004ae673"),
version(3.0),
pointer_default(unique),
diff --git a/source4/librpc/idl/dssetup.idl b/source4/librpc/idl/dssetup.idl
index 9c490aebe3..af6350cc43 100644
--- a/source4/librpc/idl/dssetup.idl
+++ b/source4/librpc/idl/dssetup.idl
@@ -2,6 +2,8 @@
dssetup interface definition
*/
+import "misc.idl";
+
[
uuid("3919286a-b10c-11d0-9ba8-00c04fd92ef5"),
version(0.0),
diff --git a/source4/librpc/idl/epmapper.idl b/source4/librpc/idl/epmapper.idl
index 5611c3de18..baf9f23877 100644
--- a/source4/librpc/idl/epmapper.idl
+++ b/source4/librpc/idl/epmapper.idl
@@ -8,6 +8,8 @@ http://www.opengroup.org/onlinepubs/9629399/chap6.htm#tagcjh_11_02_03_01: bindin
*/
+import "misc.idl";
+
[
uuid("e1af8308-5d1f-11c9-91a4-08002b14a0fa"),
version(3.0),
diff --git a/source4/librpc/idl/notify.idl b/source4/librpc/idl/notify.idl
index c4e633c254..6f9ad25f09 100644
--- a/source4/librpc/idl/notify.idl
+++ b/source4/librpc/idl/notify.idl
@@ -7,6 +7,8 @@
the change notify buffers
*/
+import "misc.idl";
+
[
pointer_default(unique)
]
diff --git a/source4/librpc/idl/orpc.idl b/source4/librpc/idl/orpc.idl
index c1faefd3b1..d023865035 100644
--- a/source4/librpc/idl/orpc.idl
+++ b/source4/librpc/idl/orpc.idl
@@ -5,6 +5,8 @@
http://www.ietf.org/internet-drafts/draft-brown-dcom-v1-spec-04.txt
*/
+import "misc.idl";
+
[
pointer_default(unique)
]
diff --git a/source4/librpc/idl/security.idl b/source4/librpc/idl/security.idl
index f05148aecc..753fad85cf 100644
--- a/source4/librpc/idl/security.idl
+++ b/source4/librpc/idl/security.idl
@@ -138,6 +138,8 @@ interface security
const string SID_NULL = "S-1-0-0";
/* the world domain */
+ const string NAME_WORLD = "WORLD";
+
const string SID_WORLD_DOMAIN = "S-1-1";
const string SID_WORLD = "S-1-1-0";
@@ -147,6 +149,8 @@ interface security
const string SID_CREATOR_GROUP = "S-1-3-1";
/* SECURITY_NT_AUTHORITY */
+ const string NAME_NT_AUTHORITY = "NT AUTHORITY";
+
const string SID_NT_AUTHORITY = "S-1-5";
const string SID_NT_DIALUP = "S-1-5-1";
const string SID_NT_NETWORK = "S-1-5-2";
@@ -167,6 +171,8 @@ interface security
const string SID_NT_NETWORK_SERVICE = "S-1-5-20";
/* SECURITY_BUILTIN_DOMAIN_RID */
+ const string NAME_BUILTIN = "BUILTIN";
+
const string SID_BUILTIN = "S-1-5-32";
const string SID_BUILTIN_ADMINISTRATORS = "S-1-5-32-544";
const string SID_BUILTIN_USERS = "S-1-5-32-545";
@@ -368,6 +374,10 @@ interface security
SECINFO_OWNER = 0x00000001,
SECINFO_GROUP = 0x00000002,
SECINFO_DACL = 0x00000004,
- SECINFO_SACL = 0x00000008
+ SECINFO_SACL = 0x00000008,
+ SECINFO_UNPROTECTED_SACL = 0x10000000,
+ SECINFO_UNPROTECTED_DACL = 0x20000000,
+ SECINFO_PROTECTED_SACL = 0x40000000,
+ SECINFO_PROTECTED_DACL = 0x80000000
} security_secinfo;
}
diff --git a/source4/librpc/ndr/libndr.h b/source4/librpc/ndr/libndr.h
index 09a2680190..d110a25aeb 100644
--- a/source4/librpc/ndr/libndr.h
+++ b/source4/librpc/ndr/libndr.h
@@ -23,7 +23,7 @@
#include <talloc.h>
#include "lib/util/util.h" /* for discard_const */
#include "lib/charset/charset.h"
-#include "libcli/util/nt_status.h"
+#include "libcli/util/ntstatus.h"
/*
this provides definitions for the libcli/rpc/ MSRPC library
@@ -269,7 +269,7 @@ enum ndr_compression_alg {
#define NDR_PUSH_ALLOC_SIZE(ndr, s, size) do { \
- (s) = talloc_size(ndr, size); \
+ (s) = talloc_array(ndr, uint8_t, size); \
if (!(s)) return ndr_push_error(ndr, NDR_ERR_ALLOC, "push alloc %u failed: %s\n", (unsigned)size, __location__); \
} while (0)
@@ -285,6 +285,7 @@ typedef void (*ndr_print_fn_t)(struct ndr_print *, const char *, const void *);
typedef void (*ndr_print_function_t)(struct ndr_print *, const char *, int, const void *);
#include "librpc/gen_ndr/misc.h"
+#include "libcli/util/werror.h"
#include "librpc/ndr/libndr_proto.h"
extern const struct ndr_syntax_id ndr_transfer_syntax;
@@ -328,5 +329,7 @@ NTSTATUS ndr_push_dom_sid28(struct ndr_push *ndr, int ndr_flags, const struct do
NTSTATUS ndr_pull_dom_sid28(struct ndr_pull *ndr, int ndr_flags, struct dom_sid *sid);
void ndr_print_dom_sid28(struct ndr_print *ndr, const char *name, const struct dom_sid *sid);
size_t ndr_size_dom_sid28(const struct dom_sid *sid, int flags);
+void ndr_print_ipv4_addr(struct ndr_print *ndr, const char *name, const struct ipv4_addr *_ip);
+void ndr_print_GUID(struct ndr_print *ndr, const char *name, const struct GUID *guid);
#endif /* __LIBNDR_H__ */
diff --git a/source4/librpc/ndr/ndr.c b/source4/librpc/ndr/ndr.c
index 9fb39beff3..1ee8d05975 100644
--- a/source4/librpc/ndr/ndr.c
+++ b/source4/librpc/ndr/ndr.c
@@ -200,13 +200,16 @@ _PUBLIC_ void ndr_print_string_helper(struct ndr_print *ndr, const char *format,
int i;
for (i=0;i<ndr->depth;i++) {
- ndr->private_data = talloc_asprintf_append(ndr->private_data, " ");
+ ndr->private_data = talloc_asprintf_append_buffer(
+ (char *)ndr->private_data, " ");
}
va_start(ap, format);
- ndr->private_data = talloc_vasprintf_append(ndr->private_data, format, ap);
+ ndr->private_data = talloc_vasprintf_append_buffer((char *)ndr->private_data,
+ format, ap);
va_end(ap);
- ndr->private_data = talloc_asprintf_append(ndr->private_data, "\n");
+ ndr->private_data = talloc_asprintf_append_buffer((char *)ndr->private_data,
+ "\n");
}
/*
@@ -276,7 +279,7 @@ _PUBLIC_ char *ndr_print_struct_string(TALLOC_CTX *mem_ctx, ndr_print_fn_t fn, c
ndr->depth = 1;
ndr->flags = 0;
fn(ndr, name, ptr);
- ret = talloc_steal(mem_ctx, ndr->private_data);
+ ret = talloc_steal(mem_ctx, (char *)ndr->private_data);
failed:
talloc_free(ndr);
return ret;
@@ -301,7 +304,7 @@ _PUBLIC_ char *ndr_print_union_string(TALLOC_CTX *mem_ctx, ndr_print_fn_t fn, co
ndr->flags = 0;
ndr_print_set_switch_value(ndr, ptr, level);
fn(ndr, name, ptr);
- ret = talloc_steal(mem_ctx, ndr->private_data);
+ ret = talloc_steal(mem_ctx, (char *)ndr->private_data);
failed:
talloc_free(ndr);
return ret;
@@ -327,7 +330,7 @@ _PUBLIC_ char *ndr_print_function_string(TALLOC_CTX *mem_ctx,
ndr->depth = 1;
ndr->flags = 0;
fn(ndr, name, flags, ptr);
- ret = talloc_steal(mem_ctx, ndr->private_data);
+ ret = talloc_steal(mem_ctx, (char *)ndr->private_data);
failed:
talloc_free(ndr);
return ret;
@@ -569,7 +572,7 @@ _PUBLIC_ NTSTATUS ndr_token_store(TALLOC_CTX *mem_ctx,
retrieve a token from a ndr context, using cmp_fn to match the tokens
*/
_PUBLIC_ NTSTATUS ndr_token_retrieve_cmp_fn(struct ndr_token_list **list, const void *key, uint32_t *v,
- comparison_fn_t _cmp_fn, BOOL _remove_tok)
+ comparison_fn_t _cmp_fn, bool _remove_tok)
{
struct ndr_token_list *tok;
for (tok=*list;tok;tok=tok->next) {
@@ -591,7 +594,7 @@ found:
*/
_PUBLIC_ NTSTATUS 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);
+ return ndr_token_retrieve_cmp_fn(list, key, v, NULL, true);
}
/*
@@ -601,7 +604,7 @@ _PUBLIC_ uint32_t ndr_token_peek(struct ndr_token_list **list, const void *key)
{
NTSTATUS status;
uint32_t v;
- status = ndr_token_retrieve_cmp_fn(list, key, &v, NULL, False);
+ status = ndr_token_retrieve_cmp_fn(list, key, &v, NULL, false);
if (NT_STATUS_IS_OK(status)) return v;
return 0;
}
diff --git a/source4/librpc/ndr/ndr_compression.c b/source4/librpc/ndr/ndr_compression.c
index 6b3b44109b..1d8cfec649 100644
--- a/source4/librpc/ndr/ndr_compression.c
+++ b/source4/librpc/ndr/ndr_compression.c
@@ -22,6 +22,7 @@
#include "includes.h"
#include "lib/compression/mszip.h"
#include "librpc/ndr/libndr.h"
+#include "librpc/ndr/ndr_compression.h"
static NTSTATUS ndr_pull_compression_mszip_chunk(struct ndr_pull *ndrpull,
struct ndr_push *ndrpush,
diff --git a/source4/librpc/ndr/ndr_drsuapi.c b/source4/librpc/ndr/ndr_drsuapi.c
index 6bd7d73cb8..689439c383 100644
--- a/source4/librpc/ndr/ndr_drsuapi.c
+++ b/source4/librpc/ndr/ndr_drsuapi.c
@@ -64,17 +64,17 @@ void ndr_print_drsuapi_DsReplicaObjectListItemEx(struct ndr_print *ndr, const ch
}
#define _OID_PUSH_CHECK(call) do { \
- BOOL _status; \
+ bool _status; \
_status = call; \
- if (_status != True) { \
+ if (_status != true) { \
return ndr_push_error(ndr, NDR_ERR_SUBCONTEXT, "OID Conversion Error: %s\n", __location__); \
} \
} while (0)
#define _OID_PULL_CHECK(call) do { \
- BOOL _status; \
+ bool _status; \
_status = call; \
- if (_status != True) { \
+ if (_status != true) { \
return ndr_pull_error(ndr, NDR_ERR_SUBCONTEXT, "OID Conversion Error: %s\n", __location__); \
} \
} while (0)
diff --git a/source4/librpc/ndr/ndr_string.c b/source4/librpc/ndr/ndr_string.c
index fca864a5eb..b611f87a41 100644
--- a/source4/librpc/ndr/ndr_string.c
+++ b/source4/librpc/ndr/ndr_string.c
@@ -640,7 +640,7 @@ _PUBLIC_ uint32_t ndr_string_length(const void *_var, uint32_t element_size)
{
uint32_t i;
uint8_t zero[4] = {0,0,0,0};
- const char *var = _var;
+ const char *var = (const char *)_var;
for (i = 0; memcmp(var+i*element_size,zero,element_size) != 0; i++);
@@ -731,5 +731,5 @@ _PUBLIC_ uint32_t ndr_charset_length(const void *var, charset_t chset)
{
/* FIXME: Treat special chars special here, taking chset into account */
/* Also include 0 byte */
- return strlen(var)+1;
+ return strlen((const char *)var)+1;
}
diff --git a/source4/librpc/ndr/ndr_table.c b/source4/librpc/ndr/ndr_table.c
index 9b43f8836d..d73e82bb71 100644
--- a/source4/librpc/ndr/ndr_table.c
+++ b/source4/librpc/ndr/ndr_table.c
@@ -123,10 +123,10 @@ NTSTATUS ndr_table_register_builtin_tables(void);
NTSTATUS ndr_table_init(void)
{
- static BOOL initialized = False;
+ static bool initialized = false;
if (initialized) return NT_STATUS_OK;
- initialized = True;
+ initialized = true;
ndr_table_register_builtin_tables();
diff --git a/source4/librpc/ndr/uuid.c b/source4/librpc/ndr/uuid.c
index 8cf6ab5446..e92df22494 100644
--- a/source4/librpc/ndr/uuid.c
+++ b/source4/librpc/ndr/uuid.c
@@ -22,6 +22,7 @@
*/
#include "includes.h"
+#include "librpc/ndr/libndr.h"
/**
build a GUID from a string
@@ -132,7 +133,7 @@ _PUBLIC_ struct GUID GUID_zero(void)
return guid;
}
-_PUBLIC_ BOOL GUID_all_zero(const struct GUID *u)
+_PUBLIC_ bool GUID_all_zero(const struct GUID *u)
{
if (u->time_low != 0 ||
u->time_mid != 0 ||
@@ -140,12 +141,12 @@ _PUBLIC_ BOOL GUID_all_zero(const struct GUID *u)
u->clock_seq[0] != 0 ||
u->clock_seq[1] != 0 ||
!all_zero(u->node, 6)) {
- return False;
+ return false;
}
- return True;
+ return true;
}
-_PUBLIC_ BOOL GUID_equal(const struct GUID *u1, const struct GUID *u2)
+_PUBLIC_ bool GUID_equal(const struct GUID *u1, const struct GUID *u2)
{
if (u1->time_low != u2->time_low ||
u1->time_mid != u2->time_mid ||
@@ -153,9 +154,9 @@ _PUBLIC_ BOOL GUID_equal(const struct GUID *u1, const struct GUID *u2)
u1->clock_seq[0] != u2->clock_seq[0] ||
u1->clock_seq[1] != u2->clock_seq[1] ||
memcmp(u1->node, u2->node, 6) != 0) {
- return False;
+ return false;
}
- return True;
+ return true;
}
_PUBLIC_ int GUID_compare(const struct GUID *u1, const struct GUID *u2)
@@ -220,7 +221,7 @@ _PUBLIC_ char *NS_GUID_string(TALLOC_CTX *mem_ctx, const struct GUID *guid)
guid->node[4], guid->node[5]);
}
-_PUBLIC_ BOOL policy_handle_empty(struct policy_handle *h)
+_PUBLIC_ bool policy_handle_empty(struct policy_handle *h)
{
return (h->handle_type == 0 && GUID_all_zero(&h->uuid));
}
diff --git a/source4/librpc/rpc/dcerpc.c b/source4/librpc/rpc/dcerpc.c
index 984cc20fbc..1f0cc3699a 100644
--- a/source4/librpc/rpc/dcerpc.c
+++ b/source4/librpc/rpc/dcerpc.c
@@ -43,7 +43,7 @@ static void dcerpc_ship_next_request(struct dcerpc_connection *c);
static int dcerpc_connection_destructor(struct dcerpc_connection *conn)
{
if (conn->dead) {
- conn->free_skipped = True;
+ conn->free_skipped = true;
return -1;
}
dcerpc_connection_dead(conn, NT_STATUS_LOCAL_DISCONNECT);
@@ -752,7 +752,7 @@ struct composite_context *dcerpc_bind_send(struct dcerpc_pipe *p,
talloc_set_destructor(req, dcerpc_req_dequeue);
c->status = p->conn->transport.send_request(p->conn, &blob,
- True);
+ true);
if (!composite_is_ok(c)) return c;
event_add_timed(c->event_ctx, req,
@@ -798,7 +798,7 @@ NTSTATUS dcerpc_auth3(struct dcerpc_connection *c,
}
/* send it on its way */
- status = c->transport.send_request(c, &blob, False);
+ status = c->transport.send_request(c, &blob, false);
if (!NT_STATUS_IS_OK(status)) {
return status;
}
@@ -933,7 +933,7 @@ req_done:
static struct rpc_request *dcerpc_request_send(struct dcerpc_pipe *p,
const struct GUID *object,
uint16_t opnum,
- BOOL async,
+ bool async,
DATA_BLOB *stub_data)
{
struct rpc_request *req;
@@ -953,13 +953,13 @@ static struct rpc_request *dcerpc_request_send(struct dcerpc_pipe *p,
req->flags = 0;
req->fault_code = 0;
req->async_call = async;
- req->ignore_timeout = False;
+ req->ignore_timeout = false;
req->async.callback = NULL;
req->async.private_data = NULL;
req->recv_handler = NULL;
if (object != NULL) {
- req->object = talloc_memdup(req, object, sizeof(*object));
+ req->object = (struct GUID *)talloc_memdup(req, (const void *)object, sizeof(*object));
if (req->object == NULL) {
talloc_free(req);
return NULL;
@@ -1001,7 +1001,7 @@ static void dcerpc_ship_next_request(struct dcerpc_connection *c)
struct ncacn_packet pkt;
DATA_BLOB blob;
uint32_t remaining, chunk_size;
- BOOL first_packet = True;
+ bool first_packet = true;
req = c->request_queue;
if (req == NULL) {
@@ -1044,9 +1044,9 @@ static void dcerpc_ship_next_request(struct dcerpc_connection *c)
/* we send a series of pdus without waiting for a reply */
while (remaining > 0 || first_packet) {
uint32_t chunk = MIN(chunk_size, remaining);
- BOOL last_frag = False;
+ bool last_frag = false;
- first_packet = False;
+ first_packet = false;
pkt.pfc_flags &= ~(DCERPC_PFC_FLAG_FIRST |DCERPC_PFC_FLAG_LAST);
if (remaining == stub_data->length) {
@@ -1054,7 +1054,7 @@ static void dcerpc_ship_next_request(struct dcerpc_connection *c)
}
if (chunk == remaining) {
pkt.pfc_flags |= DCERPC_PFC_FLAG_LAST;
- last_frag = True;
+ last_frag = true;
}
pkt.u.request.stub_and_verifier.data = stub_data->data +
@@ -1123,7 +1123,7 @@ NTSTATUS dcerpc_request_recv(struct rpc_request *req,
NTSTATUS dcerpc_request(struct dcerpc_pipe *p,
struct GUID *object,
uint16_t opnum,
- BOOL async,
+ bool async,
TALLOC_CTX *mem_ctx,
DATA_BLOB *stub_data_in,
DATA_BLOB *stub_data_out)
@@ -1622,7 +1622,7 @@ struct composite_context *dcerpc_alter_context_send(struct dcerpc_pipe *p,
DLIST_ADD_END(p->conn->pending, req, struct rpc_request *);
talloc_set_destructor(req, dcerpc_req_dequeue);
- c->status = p->conn->transport.send_request(p->conn, &blob, True);
+ c->status = p->conn->transport.send_request(p->conn, &blob, true);
if (!composite_is_ok(c)) return c;
event_add_timed(c->event_ctx, req,
diff --git a/source4/librpc/rpc/dcerpc_auth.c b/source4/librpc/rpc/dcerpc_auth.c
index 756cb58e3a..7db6c1b7cd 100644
--- a/source4/librpc/rpc/dcerpc_auth.c
+++ b/source4/librpc/rpc/dcerpc_auth.c
@@ -98,7 +98,7 @@ NTSTATUS dcerpc_bind_auth_none(struct dcerpc_pipe *p,
struct bind_auth_state {
struct dcerpc_pipe *pipe;
DATA_BLOB credentials;
- BOOL more_processing; /* Is there anything more to do after the
+ bool more_processing; /* Is there anything more to do after the
* first bind itself received? */
};
@@ -109,7 +109,7 @@ static void bind_auth_next_step(struct composite_context *c)
struct bind_auth_state *state;
struct dcerpc_security *sec;
struct composite_context *creq;
- BOOL more_processing = False;
+ bool more_processing = false;
state = talloc_get_type(c->private_data, struct bind_auth_state);
sec = &state->pipe->conn->security_state;
@@ -129,7 +129,7 @@ static void bind_auth_next_step(struct composite_context *c)
&state->credentials);
if (NT_STATUS_EQUAL(c->status, NT_STATUS_MORE_PROCESSING_REQUIRED)) {
- more_processing = True;
+ more_processing = true;
c->status = NT_STATUS_OK;
}
diff --git a/source4/librpc/rpc/dcerpc_connect.c b/source4/librpc/rpc/dcerpc_connect.c
index be95f21594..2d6237634d 100644
--- a/source4/librpc/rpc/dcerpc_connect.c
+++ b/source4/librpc/rpc/dcerpc_connect.c
@@ -31,6 +31,7 @@
#include "libcli/smb2/smb2_calls.h"
#include "librpc/rpc/dcerpc.h"
#include "auth/credentials/credentials.h"
+#include "param/param.h"
struct pipe_np_smb_state {
@@ -110,10 +111,13 @@ static struct composite_context *dcerpc_pipe_connect_ncacn_np_smb_send(TALLOC_CT
remote rpc server */
conn->in.dest_host = s->io.binding->host;
conn->in.port = 0;
- conn->in.called_name = s->io.binding->target_hostname;
+ if (s->io.binding->target_hostname == NULL)
+ conn->in.called_name = "*SMBSERVER"; /* FIXME: This is invalid */
+ else
+ conn->in.called_name = s->io.binding->target_hostname;
conn->in.service = "IPC$";
conn->in.service_type = NULL;
- conn->in.workgroup = lp_workgroup();
+ conn->in.workgroup = lp_workgroup(global_loadparm);
/*
* provide proper credentials - user supplied, but allow a
@@ -123,9 +127,9 @@ static struct composite_context *dcerpc_pipe_connect_ncacn_np_smb_send(TALLOC_CT
*/
s->conn.in.credentials = s->io.creds;
if (s->io.binding->flags & DCERPC_SCHANNEL) {
- conn->in.fallback_to_anonymous = True;
+ conn->in.fallback_to_anonymous = true;
} else {
- conn->in.fallback_to_anonymous = False;
+ conn->in.fallback_to_anonymous = false;
}
/* send smb connect request */
diff --git a/source4/librpc/rpc/dcerpc_smb.c b/source4/librpc/rpc/dcerpc_smb.c
index 6b43de3358..718ce694c5 100644
--- a/source4/librpc/rpc/dcerpc_smb.c
+++ b/source4/librpc/rpc/dcerpc_smb.c
@@ -39,7 +39,7 @@ struct smb_private {
*/
static void pipe_dead(struct dcerpc_connection *c, NTSTATUS status)
{
- struct smb_private *smb = c->transport.private_data;
+ struct smb_private *smb = (struct smb_private *)c->transport.private_data;
if (smb->dead) {
return;
@@ -141,7 +141,7 @@ static void smb_read_callback(struct smbcli_request *req)
*/
static NTSTATUS send_read_request_continue(struct dcerpc_connection *c, DATA_BLOB *blob)
{
- struct smb_private *smb = c->transport.private_data;
+ struct smb_private *smb = (struct smb_private *)c->transport.private_data;
union smb_read *io;
struct smb_read_state *state;
struct smbcli_request *req;
@@ -176,7 +176,7 @@ static NTSTATUS send_read_request_continue(struct dcerpc_connection *c, DATA_BLO
io->readx.in.maxcnt = io->readx.in.mincnt;
io->readx.in.offset = 0;
io->readx.in.remaining = 0;
- io->readx.in.read_for_execute = False;
+ io->readx.in.read_for_execute = false;
io->readx.out.data = state->data.data + state->received;
req = smb_raw_read_send(smb->tree, io);
if (req == NULL) {
@@ -197,7 +197,7 @@ static NTSTATUS send_read_request_continue(struct dcerpc_connection *c, DATA_BLO
*/
static NTSTATUS send_read_request(struct dcerpc_connection *c)
{
- struct smb_private *smb = c->transport.private_data;
+ struct smb_private *smb = (struct smb_private *)c->transport.private_data;
if (smb->dead) {
return NT_STATUS_CONNECTION_DISCONNECTED;
@@ -220,7 +220,7 @@ struct smb_trans_state {
*/
static void smb_trans_callback(struct smbcli_request *req)
{
- struct smb_trans_state *state = req->async.private;
+ struct smb_trans_state *state = (struct smb_trans_state *)req->async.private;
struct dcerpc_connection *c = state->c;
NTSTATUS status;
@@ -249,7 +249,7 @@ static void smb_trans_callback(struct smbcli_request *req)
*/
static NTSTATUS smb_send_trans_request(struct dcerpc_connection *c, DATA_BLOB *blob)
{
- struct smb_private *smb = c->transport.private_data;
+ struct smb_private *smb = (struct smb_private *)c->transport.private_data;
struct smb_trans2 *trans;
uint16_t setup[2];
struct smb_trans_state *state;
@@ -297,7 +297,7 @@ static NTSTATUS smb_send_trans_request(struct dcerpc_connection *c, DATA_BLOB *b
*/
static void smb_write_callback(struct smbcli_request *req)
{
- struct dcerpc_connection *c = req->async.private;
+ struct dcerpc_connection *c = (struct dcerpc_connection *)req->async.private;
if (!NT_STATUS_IS_OK(req->status)) {
DEBUG(0,("dcerpc_smb: write callback error\n"));
@@ -310,9 +310,10 @@ static void smb_write_callback(struct smbcli_request *req)
/*
send a packet to the server
*/
-static NTSTATUS smb_send_request(struct dcerpc_connection *c, DATA_BLOB *blob, BOOL trigger_read)
+static NTSTATUS smb_send_request(struct dcerpc_connection *c, DATA_BLOB *blob,
+ bool trigger_read)
{
- struct smb_private *smb = c->transport.private_data;
+ struct smb_private *smb = (struct smb_private *)c->transport.private_data;
union smb_write io;
struct smbcli_request *req;
@@ -356,7 +357,7 @@ static NTSTATUS smb_send_request(struct dcerpc_connection *c, DATA_BLOB *blob, B
*/
static NTSTATUS smb_shutdown_pipe(struct dcerpc_connection *c, NTSTATUS status)
{
- struct smb_private *smb = c->transport.private_data;
+ struct smb_private *smb = (struct smb_private *)c->transport.private_data;
union smb_close io;
struct smbcli_request *req;
@@ -382,7 +383,7 @@ static NTSTATUS smb_shutdown_pipe(struct dcerpc_connection *c, NTSTATUS status)
*/
static const char *smb_peer_name(struct dcerpc_connection *c)
{
- struct smb_private *smb = c->transport.private_data;
+ struct smb_private *smb = (struct smb_private *)c->transport.private_data;
return smb->server_name;
}
@@ -400,7 +401,7 @@ static const char *smb_target_hostname(struct dcerpc_connection *c)
*/
static NTSTATUS smb_session_key(struct dcerpc_connection *c, DATA_BLOB *session_key)
{
- struct smb_private *smb = c->transport.private_data;
+ struct smb_private *smb = (struct smb_private *)c->transport.private_data;
if (smb->tree->session->user_session_key.data) {
*session_key = smb->tree->session->user_session_key;
@@ -430,7 +431,9 @@ struct composite_context *dcerpc_pipe_open_smb_send(struct dcerpc_pipe *p,
/* if we don't have a binding on this pipe yet, then create one */
if (p->binding == NULL) {
NTSTATUS status;
- char *s = talloc_asprintf(p, "ncacn_np:%s", tree->session->transport->socket->hostname);
+ char *s;
+ SMB_ASSERT(tree->session->transport->socket->hostname != NULL);
+ s = talloc_asprintf(p, "ncacn_np:%s", tree->session->transport->socket->hostname);
if (s == NULL) return NULL;
status = dcerpc_parse_binding(p, s, &p->binding);
talloc_free(s);
diff --git a/source4/librpc/rpc/dcerpc_smb2.c b/source4/librpc/rpc/dcerpc_smb2.c
index dcfee1f223..b06964d331 100644
--- a/source4/librpc/rpc/dcerpc_smb2.c
+++ b/source4/librpc/rpc/dcerpc_smb2.c
@@ -41,7 +41,7 @@ struct smb2_private {
*/
static void pipe_dead(struct dcerpc_connection *c, NTSTATUS status)
{
- struct smb2_private *smb = c->transport.private_data;
+ struct smb2_private *smb = (struct smb2_private *)c->transport.private_data;
if (smb->dead) {
return;
@@ -145,7 +145,7 @@ static void smb2_read_callback(struct smb2_request *req)
*/
static NTSTATUS send_read_request_continue(struct dcerpc_connection *c, DATA_BLOB *blob)
{
- struct smb2_private *smb = c->transport.private_data;
+ struct smb2_private *smb = (struct smb2_private *)c->transport.private_data;
struct smb2_read io;
struct smb2_read_state *state;
struct smb2_request *req;
@@ -190,7 +190,7 @@ static NTSTATUS send_read_request_continue(struct dcerpc_connection *c, DATA_BLO
*/
static NTSTATUS send_read_request(struct dcerpc_connection *c)
{
- struct smb2_private *smb = c->transport.private_data;
+ struct smb2_private *smb = (struct smb2_private *)c->transport.private_data;
if (smb->dead) {
return NT_STATUS_CONNECTION_DISCONNECTED;
@@ -280,7 +280,7 @@ static NTSTATUS smb2_send_trans_request(struct dcerpc_connection *c, DATA_BLOB *
*/
static void smb2_write_callback(struct smb2_request *req)
{
- struct dcerpc_connection *c = req->async.private;
+ struct dcerpc_connection *c = (struct dcerpc_connection *)req->async.private;
if (!NT_STATUS_IS_OK(req->status)) {
DEBUG(0,("dcerpc_smb2: write callback error\n"));
@@ -294,9 +294,9 @@ static void smb2_write_callback(struct smb2_request *req)
send a packet to the server
*/
static NTSTATUS smb2_send_request(struct dcerpc_connection *c, DATA_BLOB *blob,
- BOOL trigger_read)
+ bool trigger_read)
{
- struct smb2_private *smb = c->transport.private_data;
+ struct smb2_private *smb = (struct smb2_private *)c->transport.private_data;
struct smb2_write io;
struct smb2_request *req;
@@ -328,7 +328,7 @@ static NTSTATUS smb2_send_request(struct dcerpc_connection *c, DATA_BLOB *blob,
*/
static NTSTATUS smb2_shutdown_pipe(struct dcerpc_connection *c, NTSTATUS status)
{
- struct smb2_private *smb = c->transport.private_data;
+ struct smb2_private *smb = (struct smb2_private *)c->transport.private_data;
struct smb2_close io;
struct smb2_request *req;
diff --git a/source4/librpc/rpc/dcerpc_sock.c b/source4/librpc/rpc/dcerpc_sock.c
index a5abf9b4be..f7ae377e7b 100644
--- a/source4/librpc/rpc/dcerpc_sock.c
+++ b/source4/librpc/rpc/dcerpc_sock.c
@@ -28,6 +28,7 @@
#include "libcli/composite/composite.h"
#include "librpc/rpc/dcerpc.h"
#include "libcli/resolve/resolve.h"
+#include "param/param.h"
/* transport private information used by general socket pipe transports */
struct sock_private {
@@ -45,7 +46,7 @@ struct sock_private {
*/
static void sock_dead(struct dcerpc_connection *p, NTSTATUS status)
{
- struct sock_private *sock = p->transport.private_data;
+ struct sock_private *sock = (struct sock_private *)p->transport.private_data;
if (!sock) return;
@@ -111,7 +112,7 @@ static NTSTATUS sock_process_recv(void *private, DATA_BLOB blob)
{
struct dcerpc_connection *p = talloc_get_type(private,
struct dcerpc_connection);
- struct sock_private *sock = p->transport.private_data;
+ struct sock_private *sock = (struct sock_private *)p->transport.private_data;
sock->pending_reads--;
if (sock->pending_reads == 0) {
packet_recv_disable(sock->packet);
@@ -128,7 +129,7 @@ static void sock_io_handler(struct event_context *ev, struct fd_event *fde,
{
struct dcerpc_connection *p = talloc_get_type(private,
struct dcerpc_connection);
- struct sock_private *sock = p->transport.private_data;
+ struct sock_private *sock = (struct sock_private *)p->transport.private_data;
if (flags & EVENT_FD_WRITE) {
packet_queue_run(sock->packet);
@@ -149,7 +150,7 @@ static void sock_io_handler(struct event_context *ev, struct fd_event *fde,
*/
static NTSTATUS sock_send_read(struct dcerpc_connection *p)
{
- struct sock_private *sock = p->transport.private_data;
+ struct sock_private *sock = (struct sock_private *)p->transport.private_data;
sock->pending_reads++;
if (sock->pending_reads == 1) {
packet_recv_enable(sock->packet);
@@ -161,9 +162,9 @@ static NTSTATUS sock_send_read(struct dcerpc_connection *p)
send an initial pdu in a multi-pdu sequence
*/
static NTSTATUS sock_send_request(struct dcerpc_connection *p, DATA_BLOB *data,
- BOOL trigger_read)
+ bool trigger_read)
{
- struct sock_private *sock = p->transport.private_data;
+ struct sock_private *sock = (struct sock_private *)p->transport.private_data;
DATA_BLOB blob;
NTSTATUS status;
@@ -193,7 +194,7 @@ static NTSTATUS sock_send_request(struct dcerpc_connection *p, DATA_BLOB *data,
*/
static NTSTATUS sock_shutdown_pipe(struct dcerpc_connection *p, NTSTATUS status)
{
- struct sock_private *sock = p->transport.private_data;
+ struct sock_private *sock = (struct sock_private *)p->transport.private_data;
if (sock && sock->sock) {
sock_dead(p, status);
@@ -294,7 +295,7 @@ static void continue_socket_connect(struct composite_context *ctx)
packet_set_initial_read(sock->packet, 16);
/* ensure we don't get SIGPIPE */
- BlockSignals(True,SIGPIPE);
+ BlockSignals(true, SIGPIPE);
composite_done(c);
}
@@ -477,7 +478,8 @@ struct composite_context* dcerpc_pipe_open_tcp_send(struct dcerpc_connection *co
s->conn = conn;
make_nbt_name_server(&name, server);
- resolve_req = resolve_name_send(&name, c->event_ctx, lp_name_resolve_order());
+ resolve_req = resolve_name_send(&name, c->event_ctx,
+ lp_name_resolve_order(global_loadparm));
composite_continue(c, resolve_req, continue_ip_resolve_name, c);
return c;
}
@@ -617,7 +619,7 @@ struct composite_context* dcerpc_pipe_open_pipe_send(struct dcerpc_connection *c
s->conn = conn;
string_replace(canon, '/', '\\');
- s->full_path = talloc_asprintf(canon, "%s/%s", lp_ncalrpc_dir(), canon);
+ s->full_path = talloc_asprintf(canon, "%s/%s", lp_ncalrpc_dir(global_loadparm), canon);
if (composite_nomem(s->full_path, c)) return c;
/* prepare server address using path and transport name */
diff --git a/source4/librpc/rpc/dcerpc_util.c b/source4/librpc/rpc/dcerpc_util.c
index 11f5451891..408860c9ed 100644
--- a/source4/librpc/rpc/dcerpc_util.c
+++ b/source4/librpc/rpc/dcerpc_util.c
@@ -29,6 +29,7 @@
#include "librpc/gen_ndr/ndr_dcerpc.h"
#include "librpc/gen_ndr/ndr_misc.h"
#include "auth/credentials/credentials.h"
+#include "param/param.h"
/*
find a dcerpc call on an interface by name
@@ -254,43 +255,42 @@ char *dcerpc_binding_string(TALLOC_CTX *mem_ctx, const struct dcerpc_binding *b)
}
if (t_name != NULL) {
- s = talloc_asprintf_append(s, "%s:", t_name);
- if (s == NULL)
+ s = talloc_asprintf_append_buffer(s, "%s:", t_name);
+ if (s == NULL) {
return NULL;
- } else {
- s = NULL;
+ }
}
if (b->host) {
- s = talloc_asprintf_append(s, "%s", b->host);
+ s = talloc_asprintf_append_buffer(s, "%s", b->host);
}
if (!b->endpoint && !b->options && !b->flags) {
return s;
}
- s = talloc_asprintf_append(s, "[");
+ s = talloc_asprintf_append_buffer(s, "[");
if (b->endpoint) {
- s = talloc_asprintf_append(s, "%s", b->endpoint);
+ s = talloc_asprintf_append_buffer(s, "%s", b->endpoint);
}
/* this is a *really* inefficent way of dealing with strings,
but this is rarely called and the strings are always short,
so I don't care */
for (i=0;b->options && b->options[i];i++) {
- s = talloc_asprintf_append(s, ",%s", b->options[i]);
+ s = talloc_asprintf_append_buffer(s, ",%s", b->options[i]);
if (!s) return NULL;
}
for (i=0;i<ARRAY_SIZE(ncacn_options);i++) {
if (b->flags & ncacn_options[i].flag) {
- s = talloc_asprintf_append(s, ",%s", ncacn_options[i].name);
+ s = talloc_asprintf_append_buffer(s, ",%s", ncacn_options[i].name);
if (!s) return NULL;
}
}
- s = talloc_asprintf_append(s, "]");
+ s = talloc_asprintf_append_buffer(s, "]");
return s;
}
@@ -930,7 +930,7 @@ struct composite_context *dcerpc_epm_map_binding_send(TALLOC_CTX *mem_ctx,
/* anonymous credentials for rpc connection used to get endpoint mapping */
anon_creds = cli_credentials_init(mem_ctx);
cli_credentials_set_event_context(anon_creds, ev);
- cli_credentials_set_conf(anon_creds);
+ cli_credentials_set_conf(anon_creds, global_loadparm);
cli_credentials_set_anonymous(anon_creds);
/*
@@ -1363,7 +1363,7 @@ void dcerpc_log_packet(const struct ndr_interface_table *ndr,
for (i=0;i<num_examples;i++) {
char *name=NULL;
asprintf(&name, "%s/rpclog/%s-%u.%d.%s",
- lp_lockdir(), ndr->name, opnum, i,
+ lp_lockdir(global_loadparm), ndr->name, opnum, i,
(flags&NDR_IN)?"in":"out");
if (name == NULL) {
return;
diff --git a/source4/librpc/tests/binding_string.c b/source4/librpc/tests/binding_string.c
index 18cf4dfb46..362848049b 100644
--- a/source4/librpc/tests/binding_string.c
+++ b/source4/librpc/tests/binding_string.c
@@ -95,6 +95,41 @@ static const char *test_strings[] = {
"ncacn_unix_stream:[/tmp/epmapper,sign]",
};
+static bool test_parse_check_results(struct torture_context *tctx)
+{
+ struct dcerpc_binding *b;
+ struct GUID uuid;
+
+ torture_assert_ntstatus_ok(tctx,
+ GUID_from_string("308FB580-1EB2-11CA-923B-08002B1075A7", &uuid),
+ "parsing uuid");
+
+ torture_assert_ntstatus_ok(tctx, dcerpc_parse_binding(tctx, "ncacn_np:$SERVER", &b), "parse");
+ torture_assert(tctx, b->transport == NCACN_NP, "ncacn_np expected");
+ torture_assert_ntstatus_ok(tctx, dcerpc_parse_binding(tctx, "ncacn_ip_tcp:$SERVER", &b), "parse");
+ torture_assert(tctx, b->transport == NCACN_IP_TCP, "ncacn_ip_tcp expected");
+ torture_assert_ntstatus_ok(tctx, dcerpc_parse_binding(tctx, "ncacn_np:$SERVER[rpcecho]", &b), "parse");
+ torture_assert_str_equal(tctx, b->endpoint, "rpcecho", "endpoint");
+ torture_assert_ntstatus_ok(tctx, dcerpc_parse_binding(tctx, "ncacn_np:$SERVER[/pipe/rpcecho]", &b), "parse");
+ torture_assert_ntstatus_ok(tctx, dcerpc_parse_binding(tctx, "ncacn_np:$SERVER[/pipe/rpcecho,sign,seal]", &b), "parse");
+ torture_assert(tctx, b->flags == DCERPC_SIGN+DCERPC_SEAL, "sign+seal flags");
+ torture_assert_str_equal(tctx, b->endpoint, "/pipe/rpcecho", "endpoint");
+ torture_assert_ntstatus_ok(tctx, dcerpc_parse_binding(tctx, "ncacn_np:$SERVER[,sign]", &b), "parse");
+ torture_assert_ntstatus_ok(tctx, dcerpc_parse_binding(tctx, "ncacn_ip_tcp:$SERVER[,sign]", &b), "parse");
+ torture_assert(tctx, b->endpoint == NULL, "endpoint");
+ torture_assert(tctx, b->flags == DCERPC_SIGN, "sign flag");
+ torture_assert_ntstatus_ok(tctx, dcerpc_parse_binding(tctx, "ncalrpc:", &b), "parse");
+ torture_assert(tctx, b->transport == NCALRPC, "ncalrpc expected");
+ torture_assert_ntstatus_ok(tctx, dcerpc_parse_binding(tctx,
+ "308FB580-1EB2-11CA-923B-08002B1075A7@ncacn_np:$SERVER", &b), "parse");
+ torture_assert(tctx, GUID_equal(&b->object.uuid, &uuid), "object uuid");
+ torture_assert_int_equal(tctx, b->object.if_version, 0, "object version");
+ torture_assert_ntstatus_ok(tctx, dcerpc_parse_binding(tctx,
+ "308FB580-1EB2-11CA-923B-08002B1075A7@ncacn_ip_tcp:$SERVER", &b), "parse");
+
+ return true;
+}
+
static bool test_no_transport(struct torture_context *tctx)
{
const char *binding = "somehost";
@@ -129,5 +164,7 @@ struct torture_suite *torture_local_binding_string(TALLOC_CTX *mem_ctx)
torture_suite_add_simple_test(suite, "no transport", test_no_transport);
+ torture_suite_add_simple_test(suite, "parsing results", test_parse_check_results);
+
return suite;
}
diff --git a/source4/librpc/tools/ndrdump.c b/source4/librpc/tools/ndrdump.c
index 8a5e55f91e..5a3e63ed93 100644
--- a/source4/librpc/tools/ndrdump.c
+++ b/source4/librpc/tools/ndrdump.c
@@ -50,7 +50,7 @@ static const struct ndr_interface_call *find_function(
#if (_SAMBA_BUILD_ >= 4)
-static void show_pipes(void)
+_NORETURN_ static void show_pipes(void)
{
const struct ndr_interface_list *l;
printf("\nYou must specify a pipe\n");
@@ -67,7 +67,7 @@ static void show_pipes(void)
#endif
-static void show_functions(const struct ndr_interface_table *p)
+_NORETURN_ static void show_functions(const struct ndr_interface_table *p)
{
int i;
printf("\nYou must specify a function\n");
@@ -87,10 +87,10 @@ static char *stdin_load(TALLOC_CTX *mem_ctx, size_t *size)
while((num_read = read(STDIN_FILENO, buf, 255)) > 0) {
if (result) {
- result = (char *) talloc_realloc(
- mem_ctx, result, char *, total_len + num_read);
+ result = talloc_realloc(
+ mem_ctx, result, char, total_len + num_read);
} else {
- result = talloc_size(mem_ctx, num_read);
+ result = talloc_array(mem_ctx, char, num_read);
}
memcpy(result + total_len, buf, num_read);
@@ -104,7 +104,7 @@ static char *stdin_load(TALLOC_CTX *mem_ctx, size_t *size)
return result;
}
-const struct ndr_interface_table *load_iface_from_plugin(const char *plugin, const char *pipe_name)
+static const struct ndr_interface_table *load_iface_from_plugin(const char *plugin, const char *pipe_name)
{
const struct ndr_interface_table *p;
void *handle;
@@ -117,7 +117,7 @@ const struct ndr_interface_table *load_iface_from_plugin(const char *plugin, con
}
symbol = talloc_asprintf(NULL, "ndr_table_%s", pipe_name);
- p = dlsym(handle, symbol);
+ p = (const struct ndr_interface_table *)dlsym(handle, symbol);
if (!p) {
printf("%s: Unable to find DCE/RPC interface table for '%s': %s\n", plugin, pipe_name, dlerror());