[cifs-protocol] MS-ADTS 6.2.2.3.4.3 KCC ColorVertices

Douglas Bagnall douglas.bagnall at catalyst.net.nz
Fri Jul 10 01:27:42 UTC 2015


hi Dochelp,

In the ColorVertices function:

   LET localSiteVertex be the vertex in graph.Vertices such that
   localSiteVertex.ID = objectGUID of the local DC's site object
   FOR each v in g.Vertices
     FOR each interSiteTransport object t that is a child of the
     CN=Inter-Site Transports child of the CN=Sites child of the
     config NC
       IF localSiteVertex.Color = COLOR.RED and t!name ≠ "IP"
       and FLAG_CR_NTDS_DOMAIN bit is set in cr!systemFlags
         Skip t
       ENDIF
       IF no edge e exists in g.Edges such that e.VertexIDs
       contains v.ID
         Skip t
       ENDIF
       LET partialReplicaOkay be TRUE if and only if
       localSiteVertex.Color = COLOR.BLACK

       LET bh be the result of GetBridgeheadDC(
       localSiteVertex.ID, cr, t, partialReplicaOkay,
       detectFailedDCs)
       IF bh = null
         /* No bridgehead DC is currently available. */
         SET foundFailedDCs to TRUE
         Skip t
       ENDIF
       APPEND t!objectGUID to v.AcceptRedRed
       APPEND t!objectGUID to v.AcceptBlack
     ENDFOR
   ENDFOR

... GetBridgeheadDC() is being called for the localSiteVertex in a
loop over all the graph vertices. That's this bit in the middle:

       LET partialReplicaOkay be TRUE if and only if
       localSiteVertex.Color = COLOR.BLACK

       LET bh be the result of GetBridgeheadDC(
       localSiteVertex.ID, cr, t, partialReplicaOkay,
       detectFailedDCs)

which seems invariant with regard to the outer loop -- it will produce
the same answers for each vertex -- and somewhat irrelevant for the
Accept* lists on the remote vertex. It looks to me like it would make
sense to use the vertex v in place of localSiteVertex in this part.
However, the spec is very determined to generate the localSiteVertex
variable for something, so this doesn't look like a simple typo. In
effect this looks like a roundabout way of saying nothing gets added to
anyone's Accept* lists when there is no local bridgehead.

regards,
Douglas



More information about the cifs-protocol mailing list