diff options
Diffstat (limited to 'source4/librpc')
-rw-r--r-- | source4/librpc/idl/dcerpc.idl | 40 | ||||
-rw-r--r-- | source4/librpc/idl/dfs.idl | 2 | ||||
-rw-r--r-- | source4/librpc/idl/dssetup.idl | 2 | ||||
-rw-r--r-- | source4/librpc/idl/epmapper.idl | 2 | ||||
-rw-r--r-- | source4/librpc/idl/notify.idl | 2 | ||||
-rw-r--r-- | source4/librpc/idl/orpc.idl | 2 | ||||
-rw-r--r-- | source4/librpc/idl/security.idl | 12 | ||||
-rw-r--r-- | source4/librpc/ndr/libndr.h | 7 | ||||
-rw-r--r-- | source4/librpc/ndr/ndr.c | 21 | ||||
-rw-r--r-- | source4/librpc/ndr/ndr_compression.c | 1 | ||||
-rw-r--r-- | source4/librpc/ndr/ndr_drsuapi.c | 8 | ||||
-rw-r--r-- | source4/librpc/ndr/ndr_string.c | 4 | ||||
-rw-r--r-- | source4/librpc/ndr/ndr_table.c | 4 | ||||
-rw-r--r-- | source4/librpc/ndr/uuid.c | 15 | ||||
-rw-r--r-- | source4/librpc/rpc/dcerpc.c | 24 | ||||
-rw-r--r-- | source4/librpc/rpc/dcerpc_auth.c | 6 | ||||
-rw-r--r-- | source4/librpc/rpc/dcerpc_connect.c | 12 | ||||
-rw-r--r-- | source4/librpc/rpc/dcerpc_smb.c | 29 | ||||
-rw-r--r-- | source4/librpc/rpc/dcerpc_smb2.c | 14 | ||||
-rw-r--r-- | source4/librpc/rpc/dcerpc_sock.c | 22 | ||||
-rw-r--r-- | source4/librpc/rpc/dcerpc_util.c | 24 | ||||
-rw-r--r-- | source4/librpc/tests/binding_string.c | 37 | ||||
-rw-r--r-- | source4/librpc/tools/ndrdump.c | 14 |
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()); |