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;
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;
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) {