diff options
author | Stefan Metzmacher <metze@samba.org> | 2014-03-26 22:42:19 +0100 |
---|---|---|
committer | Andrew Bartlett <abartlet@samba.org> | 2014-03-28 08:34:25 +0100 |
commit | f73ef3028c4f4583c81b611a9714608eae79360c (patch) | |
tree | ba2ccb4bdd6b757336ade3a8a98e9a34201ea4e7 | |
parent | 97302100d0935653df3da593277b4e356cccf96b (diff) | |
download | samba-f73ef3028c4f4583c81b611a9714608eae79360c.tar.gz samba-f73ef3028c4f4583c81b611a9714608eae79360c.tar.xz samba-f73ef3028c4f4583c81b611a9714608eae79360c.zip |
dcerpc.idl: fix dcerpc_bind_nack definition
The version array is always present.
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
-rw-r--r-- | librpc/idl/dcerpc.idl | 16 | ||||
-rw-r--r-- | source4/rpc_server/dcerpc_server.c | 9 |
2 files changed, 12 insertions, 13 deletions
diff --git a/librpc/idl/dcerpc.idl b/librpc/idl/dcerpc.idl index dc6ec8b0bf..1d25daf0ab 100644 --- a/librpc/idl/dcerpc.idl +++ b/librpc/idl/dcerpc.idl @@ -125,19 +125,15 @@ interface dcerpc DCERPC_BIND_NAK_REASON_INVALID_AUTH_TYPE; typedef struct { - uint32 num_versions; - uint32 versions[num_versions]; - } dcerpc_bind_nak_versions; - - typedef [nodiscriminant] union { - [case(DCERPC_BIND_NAK_REASON_PROTOCOL_VERSION_NOT_SUPPORTED)] - dcerpc_bind_nak_versions v; - [default] ; - } dcerpc_bind_nak_versions_ctr; + uint8 rpc_vers; /* RPC version */ + uint8 rpc_vers_minor; /* Minor version */ + } dcerpc_bind_nak_version; typedef struct { dcerpc_bind_nak_reason reject_reason; - [switch_is(reject_reason)] dcerpc_bind_nak_versions_ctr versions; + uint8 num_versions; + dcerpc_bind_nak_version versions[num_versions]; + [flag(NDR_REMAINING)] DATA_BLOB _pad; } dcerpc_bind_nak; const uint8 DCERPC_RESPONSE_LENGTH = 24; diff --git a/source4/rpc_server/dcerpc_server.c b/source4/rpc_server/dcerpc_server.c index a4afde0f19..cf737c6aa7 100644 --- a/source4/rpc_server/dcerpc_server.c +++ b/source4/rpc_server/dcerpc_server.c @@ -457,6 +457,7 @@ static void dcesrv_call_set_list(struct dcesrv_call_state *call, static NTSTATUS dcesrv_bind_nak(struct dcesrv_call_state *call, uint32_t reason) { struct ncacn_packet pkt; + struct dcerpc_bind_nak_version version; struct data_blob_list_item *rep; NTSTATUS status; @@ -467,9 +468,11 @@ static NTSTATUS dcesrv_bind_nak(struct dcesrv_call_state *call, uint32_t reason) pkt.ptype = DCERPC_PKT_BIND_NAK; pkt.pfc_flags = DCERPC_PFC_FLAG_FIRST | DCERPC_PFC_FLAG_LAST; pkt.u.bind_nak.reject_reason = reason; - if (pkt.u.bind_nak.reject_reason == DECRPC_BIND_PROTOCOL_VERSION_NOT_SUPPORTED) { - pkt.u.bind_nak.versions.v.num_versions = 0; - } + version.rpc_vers = 5; + version.rpc_vers_minor = 0; + pkt.u.bind_nak.num_versions = 1; + pkt.u.bind_nak.versions = &version; + pkt.u.bind_nak._pad = data_blob_null; rep = talloc(call, struct data_blob_list_item); if (!rep) { |