summaryrefslogtreecommitdiff
path: root/python/samba
diff options
context:
space:
mode:
Diffstat (limited to 'python/samba')
-rw-r--r--python/samba/graph.py8
-rw-r--r--python/samba/netcmd/visualize.py39
-rw-r--r--python/samba/tests/samba_tool/visualize.py6
3 files changed, 43 insertions, 10 deletions
diff --git a/python/samba/graph.py b/python/samba/graph.py
index 7d195e3574a..a36dc25c2f7 100644
--- a/python/samba/graph.py
+++ b/python/samba/graph.py
@@ -513,7 +513,8 @@ def distance_matrix(vertices, edges,
colour=None,
shorten_names=False,
generate_key=False,
- grouping_function=None):
+ grouping_function=None,
+ row_comments=None):
lines = []
write = lines.append
@@ -525,8 +526,10 @@ def distance_matrix(vertices, edges,
diagonal = '·'
#missing = '🕱'
missing = '-'
+ right_arrow = '←'
else:
vertical, horizontal, corner, diagonal, missing = '|-,0-'
+ right_arrow = '<-'
colours = COLOUR_SETS[colour]
@@ -607,6 +610,9 @@ def distance_matrix(vertices, edges,
link = '+'
row.append('%s%s%s' % (ct, link, c_reset))
+ if row_comments is not None and row_comments[i]:
+ row.append('%s %s %s' % (c_reset, right_arrow, row_comments[i]))
+
write('%s%*s%s %s%s' % (c, vlen, v, c_reset,
''.join(row), c_reset))
diff --git a/python/samba/netcmd/visualize.py b/python/samba/netcmd/visualize.py
index e66030d3107..2b8c5fc57ff 100644
--- a/python/samba/netcmd/visualize.py
+++ b/python/samba/netcmd/visualize.py
@@ -450,7 +450,13 @@ class cmd_ntdsconn(GraphCommand):
ntds_dn = 'CN=NTDS Settings,' + dsa_dn
dn = dsa_dn
- vertices.add(ntds_dn)
+ res = samdb.search(ntds_dn,
+ scope=SCOPE_BASE,
+ attrs=["msDS-isRODC"])
+
+ is_rodc = res[0]["msDS-isRODC"][0] == 'TRUE'
+
+ vertices.add((ntds_dn, 'RODC' if is_rodc else ''))
# XXX we could also look at schedule
res = samdb.search(dn,
scope=SCOPE_SUBTREE,
@@ -482,16 +488,25 @@ class cmd_ntdsconn(GraphCommand):
edges[k] = e
e.attest(attester)
+ vertices, rodc_status = zip(*sorted(vertices))
+
if self.calc_output_format(format, output) == 'distance':
color_scheme = self.calc_distance_color_scheme(color,
color_scheme,
output)
+ colours = COLOUR_SETS[color_scheme]
+ c_header = colours.get('header', '')
+ c_reset = colours.get('reset', '')
+
+ epilog = []
+ if 'RODC' in rodc_status:
+ epilog.append('No outbound connections are expected from RODCs')
+
if not talk_to_remote:
# If we are not talking to remote servers, we list all
# the connections.
graph_edges = edges.keys()
title = 'NTDS Connections known to %s' % local_dsa_dn
- epilog = ''
else:
# If we are talking to the remotes, there are
@@ -521,7 +536,7 @@ class cmd_ntdsconn(GraphCommand):
both_deny.append(e)
title = 'NTDS Connections known to each destination DC'
- epilog = []
+
if both_deny:
epilog.append('The following connections are alleged by '
'DCs other than the source and '
@@ -540,15 +555,25 @@ class cmd_ntdsconn(GraphCommand):
'are not known to the source DC:\n')
for e in source_denies:
epilog.append(' %s -> %s\n' % e)
- epilog = ''.join(epilog)
- s = distance_matrix(sorted(vertices), graph_edges,
+
+ s = distance_matrix(vertices, graph_edges,
utf8=utf8,
colour=color_scheme,
shorten_names=shorten_names,
generate_key=key,
- grouping_function=get_dnstr_site)
- self.write('\n%s\n%s\n%s' % (title, s, epilog), output)
+ grouping_function=get_dnstr_site,
+ row_comments=rodc_status)
+
+ epilog = ''.join(epilog)
+ if epilog:
+ epilog = '\n%sNOTES%s\n%s' % (c_header,
+ c_reset,
+ epilog)
+
+ self.write('\n%s\n\n%s\n%s' % (title,
+ s,
+ epilog), output)
return
dot_edges = []
diff --git a/python/samba/tests/samba_tool/visualize.py b/python/samba/tests/samba_tool/visualize.py
index 1afb210b7bd..43757e7b497 100644
--- a/python/samba/tests/samba_tool/visualize.py
+++ b/python/samba/tests/samba_tool/visualize.py
@@ -71,11 +71,12 @@ def samdb_from_ldif(ldif, tempdir, lp, dsa=None, tag=''):
return (samdb, dburl)
-def collapse_space(s):
+def collapse_space(s, keep_empty_lines=False):
lines = []
for line in s.splitlines():
line = ' '.join(line.strip().split())
- lines.append(line)
+ if line or keep_empty_lines:
+ lines.append(line)
return '\n'.join(lines)
@@ -453,6 +454,7 @@ key_0__label -> elision0 [style=invis; weight=9]
EXPECTED_DISTANCE_GRAPH_WITH_KEY = """
NTDS Connections known to CN=LOCALDC,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=samba,DC=example,DC=com
+
destination
,-------- *,CN=CLIENT+
|,------- *,CN=LOCALDC+