rpc_server: correctly calculate the auth padding
authorStefan Metzmacher <metze@samba.org>
Sat, 13 Sep 2008 08:22:39 +0000 (10:22 +0200)
committerStefan Metzmacher <metze@samba.org>
Sat, 13 Sep 2008 18:37:11 +0000 (20:37 +0200)
metze

source/rpc_server/dcesrv_auth.c

index 0aad3775d0bfdf08a763c279e956164a1285e900..3a7f2420b38ad45d8e467667f24fa043b3bfd878 100644 (file)
@@ -429,10 +429,15 @@ bool dcesrv_auth_response(struct dcesrv_call_state *call,
        }
 
        /* pad to 16 byte multiple, match win2k3 */
-       dce_conn->auth_state.auth_info->auth_pad_length = NDR_ALIGN(ndr, 16);
-       ndr_push_zero(ndr, dce_conn->auth_state.auth_info->auth_pad_length);
+       dce_conn->auth_state.auth_info->auth_pad_length =
+               (16 - (pkt->u.response.stub_and_verifier.length & 15)) & 15;
+       ndr_err = ndr_push_zero(ndr, dce_conn->auth_state.auth_info->auth_pad_length);
+       if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
+               return false;
+       }
 
-       payload_length = ndr->offset - DCERPC_REQUEST_LENGTH;
+       payload_length = pkt->u.response.stub_and_verifier.length +
+               dce_conn->auth_state.auth_info->auth_pad_length;
 
        if (dce_conn->auth_state.auth_info->auth_level == DCERPC_AUTH_LEVEL_CONNECT) {
                status = dcesrv_connect_verifier(call,