ssdn = "CN=NTDS Site Settings,%s" % self.site_dnstr
attrs = ["options",
"interSiteTopologyFailover",
- "interSiteTopologyGenerator",
- "objectGUID"]
+ "interSiteTopologyGenerator"]
try:
res = samdb.search(base=ssdn, scope=ldb.SCOPE_BASE,
attrs=attrs)
+ self_res = samdb.search(base=self.site_dnstr, scope=ldb.SCOPE_BASE,
+ attrs=['objectGUID'])
except ldb.LdbError, (enum, estr):
raise Exception("Unable to find site settings for (%s) - (%s)" %
(ssdn, estr))
if "interSiteTopologyFailover" in msg:
self.site_topo_failover = int(msg["interSiteTopologyFailover"][0])
+ msg = self_res[0]
if "objectGUID" in msg:
self.site_guid = misc.GUID(samdb.schema_format_value("objectGUID",
msg["objectGUID"][0]))
"siteList" ]
try:
res = samdb.search(base=self.dnstr, scope=ldb.SCOPE_BASE,
- attrs=attrs)
+ attrs=attrs, controls=['extended_dn:0'])
except ldb.LdbError, (enum, estr):
raise Exception("Unable to find SiteLink for (%s) - (%s)" %
if "siteList" in msg:
for value in msg["siteList"]:
dsdn = dsdb_Dn(samdb, value)
- dnstr = str(dsdn.dn)
- if dnstr not in self.site_list:
- self.site_list.append(dnstr)
+ guid = misc.GUID(dsdn.dn.get_extended_component('GUID'))
+ if guid not in self.site_list:
+ self.site_list.append(guid)
def is_sitelink(self, site1_dnstr, site2_dnstr):
"""Given a siteLink object, determine if it is a link
self.kcc_failed_links = {}
self.kcc_failed_connections = set()
- self.site_dn_to_guid = {}
-
# Used in inter-site topology computation. A list
# of connections (by NTDSConnection object) that are
# to be kept when pruning un-needed NTDS Connections
self.my_site_guid = site.site_guid
self.my_site = site
- self.site_dn_to_guid[self.my_site_dnstr.lower()] = str(self.my_site_guid)
-
def load_all_sites(self):
"""Discover all sites and instantiate and load each
NTDS Site settings.
self.site_table[str(site.site_guid)] = site
- self.site_dn_to_guid[sitestr.lower()] = str(site.site_guid)
-
def load_my_dsa(self):
"""Discover my nTDSDSA dn thru the rootDSE entry
for transport_guid, transport in self.transport_table.items():
# Currently only ever "IP"
for site_link_dn, site_link in self.sitelink_table.items():
- new_edge = create_edge(transport_guid, site_link, guid_to_vertex,
- self.site_dn_to_guid)
+ new_edge = create_edge(transport_guid, site_link, guid_to_vertex)
connected_vertices.update(new_edge.vertices)
g.edges.add(new_edge)
lstr = samdb.write_ldif(msg, ldb.CHANGETYPE_NONE)
f.write("%s" % lstr)
-def create_edge(con_type, site_link, guid_to_vertex, site_dn_to_guid):
+def create_edge(con_type, site_link, guid_to_vertex):
e = MultiEdge()
e.site_link = site_link
e.vertices = []
- for site_dn in site_link.site_list:
- site_guid = site_dn_to_guid.get(site_dn.lower())
- if site_guid is None:
- continue
- if site_guid in guid_to_vertex:
- e.vertices.extend(guid_to_vertex.get(site_guid))
+ for site_guid in site_link.site_list:
+ if str(site_guid) in guid_to_vertex:
+ e.vertices.extend(guid_to_vertex.get(str(site_guid)))
e.repl_info.cost = site_link.cost
e.repl_info.options = site_link.options
e.repl_info.interval = site_link.interval