none
Exchange 2007 returns 'fault' response if dce-rpc call-id suddenly decreases RRS feed

  • Question

  • When sending MAPI requests to Exchange 2007 (over TCP), if the call-id used in the request dce-rpc header decreases, the server sends a dce-rpc 'fault' response with the status field of the fault response set to nca_proto_error (0x1c01000b).

    For example, if the requests have the following call-ids:

    req 1 = 100

    req 2 = 101

    req 3 = 1073741824 + 101 (i.e. add 1Gig to the previous request's call-id)

    req 4 = 1073741824 + 101 + 1

    req 5 = 102

    the server returns 'fault' response for 'req 5'.

     

    The server should not care about the value of the call-id as long as the call-ids of all outstanding requests being processed by the server are unique - which is true in the above example. The server is supposed to simply copy the call-id from the request to the corresponding response.

     

    Why is Exchange 2007 behaving this way? Exchange 2000 did not have this issue.

    Thanks,

    Hari

    Tuesday, October 5, 2010 4:45 AM

Answers

  • My pleasure to help out! I hadn't read that part either - and it did take some excavating before I was able to tag the relevant topics in [C706] & [MS-RPCE] to each other.

    Regards,
    Bill Wesse

     

    • Marked as answer by Bill Wesse Wednesday, October 6, 2010 7:04 PM
    Wednesday, October 6, 2010 7:04 PM

All replies

  • Good morning Hari, thanks for your post regarding the [MS-RPCE] protocol specification (which specifies the Microsoft RPC implementation). One of the Open Specification Documentation team will be in touch with you shortly.

    Regards,
    Bill Wesse - MSFT

     

    Tuesday, October 5, 2010 9:56 AM
  • Good morning Hari. I agree that [C706] The Open Group, "DCE 1.1: Remote Procedure Call" specifies that the call_id must be distinct. The Microsoft RPC implementation, as described in [MS-RPCE] section 3.3.3.5.2 (link in References below), further requires that the call_id field must increase monotonically. The nca_proto_error (0x1c01000b) error you are seeing is correct.

     

    The Exchange behavior you described is sourced by our RPC implementation.

     

    Regards,

    Bill Wesse - MSFT

     

    ==============================================================================

    Question:

     

    When sending MAPI requests to Exchange 2007 (over TCP), if the call-id used in the request dce-rpc header decreases, the server sends a dce-rpc 'fault' response with the status field of the fault response set to nca_proto_error (0x1c01000b).

     

    ==============================================================================

    References:

     

    [MS-RPCE]: Remote Procedure Call Protocol Extensions

    http://msdn.microsoft.com/en-us/library/cc243560(v=PROT.13).aspx

     

    3.3.3.1.4 Current call_id

    http://msdn.microsoft.com/en-us/library/cc243754(v=PROT.13).aspx

     

    The server maintains a current call_id for each connection. The current call_id is the highest call_id that the server has processed on this connection.

     

    3.3.3.5.2 call_id Field Must Increase Monotonically

    http://msdn.microsoft.com/en-us/library/cc243772(v=PROT.13).aspx

     

    The call_id field of any request that arrives on the server MUST monotonically increase. All PDUs of a fragmented request MUST have the same value in the call_id field. An implementation SHOULD reject PDUs that violate this rule, as specified in section 3.3.3.5.7.

     

    3.3.3.5.7 Handling Protocol Errors

    http://msdn.microsoft.com/en-us/library/cc243778(v=PROT.13).aspx

     

    If a server implementation encounters a condition it interprets to be a protocol error as a result of processing a request PDU, it MUST send back to the client a fault PDU with the status field set to 0x1C01000B. This status value is specified in [C706] section N.2.

     

    [C706] The Open Group, "DCE 1.1: Remote Procedure Call"

    http://www.opengroup.org/public/pubs/catalog/c706.htm

     

    12.6.3.5 The call_id Field

     

    ... The caller must guarantee that at any time, all call_ids for all outstanding messages for the same association group are distinct. The server just returns the call_id on the corresponding message...

     

    • Proposed as answer by Bill Wesse Tuesday, October 5, 2010 2:16 PM
    Tuesday, October 5, 2010 2:16 PM
  • Thanks Bill for the detailed response. Guess I should be reading MS-RPCE in more detail.

    Hari

    Tuesday, October 5, 2010 8:41 PM
  • My pleasure to help out! I hadn't read that part either - and it did take some excavating before I was able to tag the relevant topics in [C706] & [MS-RPCE] to each other.

    Regards,
    Bill Wesse

     

    • Marked as answer by Bill Wesse Wednesday, October 6, 2010 7:04 PM
    Wednesday, October 6, 2010 7:04 PM