dcerpc.idl: fix dcerpc_bind_nack definition
authorStefan Metzmacher <metze@samba.org>
Wed, 26 Mar 2014 21:42:19 +0000 (22:42 +0100)
committerAndrew Bartlett <abartlet@samba.org>
Fri, 28 Mar 2014 07:34:25 +0000 (08:34 +0100)
The version array is always present.

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
librpc/idl/dcerpc.idl
source4/rpc_server/dcerpc_server.c

index dc6ec8b0bfaa7453512c2feea2d87e3777779817..1d25daf0ab3fc9712390396ae94e68b73d37596b 100644 (file)
@@ -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;
index a4afde0f19c69f1d3d726e791583b90a8e7a2438..cf737c6aa72e7d4f6c28682eced08081f4cc825c 100644 (file)
@@ -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) {