3.3.5.2 Receiving a Domain Referral Request

The server MUST return a list of domains, for the forest in which the DC exists, in both NetBIOS and fully qualified domain name forms. It SHOULD include the domains in other forests, which are part of a trust relationship with the DFS client's forest.<33>

To process a domain referral, the client MUST support DFS referral version 3 or DFS referral version 4. If the requested DFS referral version is less than 3, the server SHOULD fail the referral with the STATUS_UNSUCCESSFUL (0xC0000001) return code.<34>

Because there is no difference between DFS referral versions 3 and 4 for a domain referral response, a server that supports DFS referral version 4 MUST return a DFS referral version 3 response even if the DFS client specified DFS referral version 4.

When the number of domains is more than can fit in the response buffer and the response buffer is less than 56 KB, the following sequence of messages MUST occur:

  • The server fails the referral request with STATUS_BUFFER_OVERFLOW (0x80000005).

  • The client retries by doubling the buffer size up to a maximum of 56 KB.

Otherwise the server fills the response buffer as follows:

  • MUST return both the NetBIOS and fully qualified names of a domain or return no entry for the domain.

  • MUST include the NetBIOS and fully qualified name of the local domain to which it is joined. This ensures that a client in the same domain as the server will always be able to access SYSVOL and NETLOGON paths correctly. SHOULD include all other domains.<35>

  • MUST return only complete names and not truncate a name to fit in the response buffer.

  • MUST return the data equal to the requested buffer size or 56 KB of data, whichever is less.

  • Entries in the referral response can be in random order.

The server MUST initialize the RESP_GET_DFS_REFERRAL referral header for the response as follows:

  • PathConsumed MUST be set to 0.

  • NumberOfReferrals MUST be set to the number of complete referral entries that can fit in the response buffer provided by the DFS referral request. The server MAY discard excess referral response entries and MAY return a STATUS_BUFFER_OVERFLOW (0x80000005) error if the response buffer is too small.

  • The ReferralServers and StorageServers fields are set to 0.

The server MUST add one referral entry structure for each of the NetBIOS and fully qualified domain names returned and initialize each referral entry as follows:

  • The VersionNumber field MUST be set to 0x0003.

  • The Size field MUST be set to the total size of the referral entry in bytes, including any padding at the end of the structure. The Size field of a referral entry structure MUST include the size, in bytes, of all immediately following strings so that a client can find the next referral entry in the message. The Size field of a referral entry structure MUST NOT include the size of referenced strings located after the last referral entry in the message.

  • The NameListReferral bit of the ReferralEntryFlags field MUST be set to 1.

  • The TimeToLive field MAY be set to a non-zero cache time-out value in seconds.<36> When there is more than one referral entry, the TimeToLive field of each referral entry MUST be the same.

  • The SpecialNameOffset field MUST be set to the offset in bytes from the beginning of the referral entry to the string that contains the domain name for the entry. The domain name MUST be a null-terminated string of the form "\<domain>", where <domain> MUST be the domain name that corresponds to the referral entry.

  • The ExpandedNameOffset field MUST be set to 0.

  • All other fields SHOULD be set to 0.