summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2014-03-26 22:42:19 +0100
committerAndrew Bartlett <abartlet@samba.org>2014-03-28 08:34:25 +0100
commitf73ef3028c4f4583c81b611a9714608eae79360c (patch)
treeba2ccb4bdd6b757336ade3a8a98e9a34201ea4e7
parent97302100d0935653df3da593277b4e356cccf96b (diff)
downloadsamba-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.idl16
-rw-r--r--source4/rpc_server/dcerpc_server.c9
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) {