3.2.5.1 Receiving a DFS Referral Request
The server receives DFS referral requests from clients when they need to resolve DFS paths into file server paths.
The MaxReferralLevel field of the REQ_GET_DFS_REFERRAL (section 2.2.2) or REQ_GET_DFS_REFERRAL_EX (section 2.2.3) message contains the highest DFS referral version understood by the client. The server MUST respond with a version number less than or equal to the value specified by the client in the request. It SHOULD respond with the highest version number that it supports that can meet this constraint.<18>
The server MUST determine the maximum response data buffer size specified by the client. The source of this information depends on the transport protocol used by the client, as follows:
If the transport protocol is SMB [MS-SMB], the TRANS2_GET_DFS_REFERRAL SMB packet, as specified in [MS-CIFS] section 2.2.6.16.1, contains this information. It is passed to the DFS server as specified in [MS-CIFS] section 3.3.5.38.
If the transport protocol is SMB2 [MS-SMB2], the SMB2 I/O control (IOCTL) request packet, as specified in [MS-SMB2] section 2.2.31, contains this information. It is passed to the DFS server as specified in [MS-SMB2] section 3.3.5.15.2.
The server MUST restrict the referral response to the response data buffer size. It MUST NOT return partial referral entries. If the response data buffer size does not permit at least one complete referral entry, the server MUST fail the referral request with STATUS_BUFFER_OVERFLOW (0x80000005). The server MAY<19> set the Padding field with a variable number of padding bytes.
Processing of individual referral requests is explained in the following sections.