
    b^                     @   d Z ddlZddlZddlZddlZddlmZ ddlmZ ddl	m
Z
 ddlmZ ej                            ej        d         d          Zej                            ej        d         d	          Zd
Zdez   Zg dZddZddZ G d de          ZdZdZdZdS )zTests for samba-tool visualize ntdsconn using the test ldif
topologies.

We don't test samba-tool visualize reps here because repsTo and
repsFrom are not replicated, and there are actual remote servers to
query.
    N)SambaToolCmdTest)ldif_import_export)COLOUR_SETS)LoadParm
SRCDIR_ABSz'testdata/ldif-utils-test-multisite.ldifz#testdata/unconnected-intrasite.ldifz DC=ad,DC=samba,DC=example,DC=comz1CN=%s,CN=Servers,CN=%s,CN=Sites,CN=Configuration,)
)WIN01zDefault-First-Site-Name)WIN08Site-4)WIN07r
   )WIN06zSite-3)WIN09Site-5)WIN10r   )WIN02Site-2)WIN04r   )WIN03r   )WIN05r    c                     |d}n
|d d         }t           j                            |d|d|          }t          j        ||| |          }||fS )Nzdefault-DSA   zldif-to-sambdb--)forced_local_dsa)ospathjoinr   ldif_to_samdb)ldiftempdirlpdsatagdsa_namedburlsamdbs           B/usr/lib/python3/dist-packages/samba/tests/samba_tool/visualize.pysamdb_from_ldifr'   =   ss    
{ rr7GLL33*, ,E ,UB>AC C CE5>    Fc                    g }|                                  D ]T}d                    |                                                                          }|s|r|                    |           Ud                    |          S )N 
)
splitlinesr   stripsplitappend)skeep_empty_lineslineslines       r&   collapse_spacer4   J   sx    E  xx

**,,-- 	# 	LL99Ur(   c                   p     e Zd Z fdZ fdZd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Z xZS )SambaToolVisualizeLdifc                     t          t          |                                            t                      | _        t          t          | j        | j                  \  | _        | _	        d| j	        z   | _
        d S )Ntdb://)superr6   setUpr   r    r'   MULTISITE_LDIFr   r%   dbfiler$   self	__class__s    r&   r:   zSambaToolVisualizeLdif.setUpT   sc    $d++11333**"1.26,26'#; #;
DK +


r(   c                     |                      | j                   t          t          |                                            d S N)remove_filesr<   r9   r6   tearDownr=   s    r&   rC   zSambaToolVisualizeLdif.tearDown\   s<    $+&&&$d++4466666r(   c                     |D ]C}|                      |                    | j                             t          j        |           Dd S rA   )
assertTrue
startswithr   r   unlink)r>   filesfs      r&   rB   z#SambaToolVisualizeLdif.remove_files`   sJ     	 	AOOALL66777IaLLLL	 	r(   c                 <   t          j        d          }|                     ddd| j        dd          \  }}}|                     |||           |                     |                    |                     dgg}|d t          D             z  }|D ]} | j        ddd| j        dg|R  \  }}}|                     |||           |                     |	                    |                     |
                    d	|          }|                     ||d
           dS )zEnsure the colour output is the same as the monochrome output
        EXCEPT for the colours, of which the monochrome one should
        know nothing.
\[[\d;]+m	visualizentdsconn-H
--color=no-S--color=yesc                     g | ]}|d|g	S )Nz--color-scheme ).0xs     r&   
<listcomp>z6SambaToolVisualizeLdif.test_colour.<locals>.<listcomp>q   s)     * * *!= *1-(==r(   r   Tr-   N)recompile	runsubcmdr$   assertCmdSuccessassertFalsefindallr   rE   searchsubassertStringsEqual)	r>   	colour_reresult
monochromeerrcolour_argsargsout
uncoloureds	            r&   test_colourz"SambaToolVisualizeLdif.test_coloure   sj    J233	"&..j15tz1=t#E #E
C 	fj#666**:66777%' * *{ * * * 	*   	H 	HD-t~k:.2DJ.2 ;59 ;  ;  ;FC !!&#s333OOI,,S11222"r3//J##J
$#GGGG	H 	Hr(   c           	         |                      ddd| j        ddd          \  }}}|                     |||           t          j                            d          }t          j                    }t          j        	                    |d          }t          j        	                    |d	          }t          |d
          }t          d|           t          d|z  |           |                                 t          j        |d           |t          j        d<   |                      dddt          ddd          \  }}	}t          |          }|                                }
|                                 t          j        |           t          j        |           t          j        |           ||t          j        d<   nt          j        d= |                     ||
|           |                     ||
d           dS )zWe can't test actual xdot, but using the environment we can
        persuade samba-tool that a script we write is xdot and ensure
        it gets the right text.
        rL   rM   rN   rO   rP   --dotSAMBA_TOOL_XDOT_PATH	fake_xdotcontentwz	#!/bin/sh)filezcp $1 %si  --importldifz--xdotNTrW   )rZ   r$   r[   r   environgettempfilemkdtempr   r   openprintclosechmodr;   readremovermdirr`   )r>   rb   expectedrd   old_xdot_pathtmpdirrm   rn   rI   emptyxdots              r&   test_import_ldif_xdotz,SambaToolVisualizeLdif.test_import_ldif_xdot~   s   
 !%{J/3TZ/;T/6!8 !8# 	fh444 
'=>>!##GLL55	',,vy11C  k""""j7"++++				
E"""-6
)*!^^K,:N,8$,46 6s
 MMvvxx				
	)
	'
$1>BJ-..
12fdC000$d;;;;;r(   c                    |                      ddd| j        dd          \  }}}|                     |||           |                      dddt          dd          \  }}}|                     |||           |                     ||           dS )zMake sure the samba-tool visualize --importldif option gives the
        same output as using the externally generated db from the same
        LDIF.rL   rM   rN   rO   rP   rq   N)rZ   r$   r[   r;   r`   )r>   rb   s1rd   s2s        r&   test_import_ldifz'SambaToolVisualizeLdif.test_import_ldif   s     ..j)-tz)5t= =C 	fb#.....j)7)5t= =C 	fb#...B'''''r(   c                 >   t          j        d          }|                     ddd| j        dd          \  }}}|                     |||           |                     |                    |                     |                                }t          j	        
                    | j        d          }|                     ddd| j        ddd|          \  }}}|                     |||           |                     |d	           t          |          }|                                }|                                 |                     ||d
           |                     |           t          j	        
                    | j        d          }	|                     ddd| j        ddd|	          \  }}}|                     |||           |                     |d	           t          |	          }|                                }
|                                 |                     |	           |                     |
|d
           t          j	        
                    | j        d          }|                     ddd| j        ddd|          \  }}}|                     |||           |                     |d	           t          |          }|                                }|                                 |                     |                                |           |                     |           dD ]n\  }}|                     ddd| j        d|ddd	  	        \  }}}|                     |||           |                     |                                |k    |           odS )zJCheck that writing to a file works, with and without
        --color=auto.rK   rL   rM   rN   z--color=autorP   z
color-auto-or   TrW   zcolor-norO   rQ   ))noT)autoT)yesFz--colorr   N)rX   rY   rZ   r$   r[   r\   r^   r-   r   r   r   r   assertEqualrv   rz   rx   r`   rB   assertNotEqual)r>   ra   rb   r}   rd   color_auto_filerg   rI   
color_autocolor_no_filecolor_nocolor_yes_file
colour_yescequals                  r&   test_output_filez'SambaToolVisualizeLdif.test_output_file   s    J233	 ${J/3TZ/=t!E !E# 	fh444))(33444>>##',,t|\BB>>+z*.
*8$*.A AS 	fc3///b!!!!!VVXX
				
HDAAA/***T\:>>>>+z*.
*6*.? ?S 	fc3///b!!!6688				-(((($???dlJ??>>+z*.
*7*.@ @S 	fc3///b!!!  VVXX
				J,,..999.))) G 	? 	?HAu#~~k:.2DJ.7.2D# ?  ?FC !!&#s333ciikkX5>>>>	? 	?r(   c           	      f   |                      ddd| j        ddd          \  }}}|                     |||           |                      ddd| j        dd          \  }}}|                     |||           dD ]8}|                     ||v d|z             |                     ||vd	|z             9d
S )zeEnsure that --utf8 adds at least some expected utf-8, and that it
        isn't there without --utf8.rL   rM   rN   rO   rP   z--utf8)u   │u   ─u   ╭zUTF8 should contain %szASCII should not contain %sN)rZ   r$   r[   rE   )r>   rb   utf8rd   asciir   s         r&   	test_utf8z SambaToolVisualizeLdif.test_utf8   s     !NN;
+/+7xI Ic 	fdC000!^^K,0$*,8$@ @s 	feS111& 	O 	OAOOAI'?!'CDDDOOAUN,IA,MNNNN	O 	Or(   c           	         |                      ddd| j        dd          \  }}}|                     |||           g }|                                                    dd          d         }t
          D ]\  }}t          ||fz  }t          t          | j	        | j
        ||          \  }}	|                      dddd	|	z   dd          \  }}
}|                     ||
|           |
                                                    dd          \  }}|                     ||           |                     ||           |                    |	            | j        |  d S )
NrL   rM   rN   rO   rP   r+      r"   r8   )rZ   r$   r[   r-   r.   MULTISITE_LDIF_DSASDN_TEMPLATEr'   r;   r   r    r`   assertInr/   rB   )r>   rb   targetrd   rH   cnsiter!   r%   r<   rg   titlebodys                r&   test_forced_local_dsaz,SambaToolVisualizeLdif.test_forced_local_dsa  s|    #nn[*-14:-94A A 	ffc222%%dA..q1+ 	! 	!HBT
*C+N,0L,0GS024 4 4ME6
  $~~k:.2Hv4E.:D B  BFC !!&#s333))++++D!44KE4##FD111MM"e$$$LL    5!!!!r(   c           	      .   |                      ddd| j        ddd          \  }}}|                     |||           |                      ddd| j        dd          \  }}}|                     |||           |                    d          }g }dg}g }|D ]}	t	          j        d	|	          }
|
rR|
                                \  }}|                    t          |          ||f           |                    |	           k|                    |	           d	                    |          }|
                    d
           |}|                                                    dd          \  }}|D ]2\  }}}|                    ||          }|                    ||          }3|d|}t          |          }t          |          }t          |          }t          |          }|                     ||d
           |                     ||d
           dS )zEnsure the colour ones are the same as the monochrome ones EXCEPT
        for the colours, of which the monochrome one should know nothingrL   rM   rN   rO   rP   --no-keyr+   r   z'(.{1,2})' stands for '(.+)'T)reverser   rW   N)rZ   r$   r[   r.   rX   matchgroupsr/   lenr   sortr-   replacer4   r`   )r>   rb   shortrd   longr2   replacements	key_linesshort_without_keyr3   mab
short2longlong_header
long2short_s                    r&   test_short_namesz'SambaToolVisualizeLdif.test_short_names'  sP    "^^K,0$*,8$
L Ls 	feS111 NN;
+/+7E Ec 	fdC000D!!D	 	/ 	/D8$??A /xxzz1##SVVQN333  &&&&!((....		+,,$'''
"&**,,"4"4T1"="=Z# 	2 	2GAq!#++Aq11J#++Aq11JJ!,jj9
 $J//
#J//
u%%d##
D===z>>>>>r(   c                 $   t          t          | j        | j        d          \  }}d|z   }|                     ddd|dd          \  }}}|                     |           |                     |||           |                     |t                     d	S )
zZTest that the 'unconnected' ldif shows up and exactly matches the
        expected output.disconnectedr   r8   rL   rM   rN   rO   rP   N)	r'   UNCONNECTED_LDIFr   r    rZ   rB   r[   r`    EXPECTED_DISTANCE_GRAPH_WITH_KEY)r>   r%   r<   r$   rb   outputrd   s          r&   test_disconnected_ldif_with_keyz6SambaToolVisualizeLdif.test_disconnected_ldif_with_keyU  s     ((8(,(,^E E Ev 6!"nn[*-15-94A A 	&!!!ffc222 @	B 	B 	B 	B 	Br(   c           
          |                      ddd| j        dddd          \  }}}|                     |||           |                     t          |           dS )	zGraphviz NTDS Connection outputrL   rM   rN   rO   rP   rk   r   N)rZ   r$   r[   r`   EXPECTED_DOT_MULTISITE_NO_KEY)r>   rb   dotrd   s       r&   test_dot_ntdsconnz(SambaToolVisualizeLdif.test_dot_ntdsconni  sh    >>+z*.
*6g*46 6S 	fc3/// =sCCCCCr(   c                 *   t          t          | j        | j        d          \  }}|                     dddd|z   ddd	d
d	  	        \  }}}|                     |||           |                     |           |                     t          |d           dS )z7Graphviz NTDS Connection output from disconnected graphr   r   rL   rM   rN   r8   rO   rP   rk   r   r   TrW   N)	r'   r   r   r    rZ   r[   rB   r`   "EXPECTED_DOT_NTDSCONN_DISCONNECTED)r>   r%   r<   rb   r   rd   s         r&   test_dot_ntdsconn_disconnectedz5SambaToolVisualizeLdif.test_dot_ntdsconn_disconnectedr  s    '(8(,(,^E E Ev  >>+z*.60A*6g*.5 5S 	fc3///&!!! BC&* 	  	, 	, 	, 	, 	,r(   c                    t          t          | j        | j        d          \  }}t          j                            | j        d          }|                     dddd|z   dd	d
d|	  	        \  }}}|                     |||           t          |          }|
                                }|                                 |                     t          |           |                     ||           dS )z+Graphviz NTDS Connection output into a filer   r   dotfilerL   rM   rN   r8   rO   rP   rk   r   N)r'   r   r   r    r   r   r   rZ   r[   rv   rz   rx   r`   r   rB   )r>   r%   r<   dot_filerb   r   rd   rI   s           r&   &test_dot_ntdsconn_disconnected_to_filez=SambaToolVisualizeLdif.test_dot_ntdsconn_disconnected_to_file  s    '(8(,(,^E E Ev 7<<i88>>+z*.60A*6g*.: :S 	fc3///NNffhh				 BCHHH&(+++++r(   )__name__
__module____qualname__r:   rC   rB   ri   r   r   r   r   r   r   r   r   r   r   __classcell__)r?   s   @r&   r6   r6   S   s       , , , , ,7 7 7 7 7  
H H H2*< *< *<X( ( ( @? @? @?DO O O " " "6,? ,? ,?\B B B(D D D, , ,, , , , , , ,r(   r6   a\  /* generated by samba */
digraph A_samba_tool_production {
label="NTDS Connections known to CN=WIN01,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=ad,DC=samba,DC=example,DC=com";
fontsize=10;

node[fontname=Helvetica; fontsize=10];

"CN=NTDS Settings,\nCN=WIN01,\nCN=Servers,\nCN=Default-\nFirst-Site-Name,\n...";
"CN=NTDS Settings,\nCN=WIN02,\nCN=Servers,\nCN=Site-2,\n...";
"CN=NTDS Settings,\nCN=WIN03,\nCN=Servers,\nCN=Site-2,\n...";
"CN=NTDS Settings,\nCN=WIN04,\nCN=Servers,\nCN=Site-2,\n...";
"CN=NTDS Settings,\nCN=WIN05,\nCN=Servers,\nCN=Site-2,\n...";
"CN=NTDS Settings,\nCN=WIN06,\nCN=Servers,\nCN=Site-3,\n...";
"CN=NTDS Settings,\nCN=WIN07,\nCN=Servers,\nCN=Site-4,\n...";
"CN=NTDS Settings,\nCN=WIN08,\nCN=Servers,\nCN=Site-4,\n...";
"CN=NTDS Settings,\nCN=WIN09,\nCN=Servers,\nCN=Site-5,\n...";
"CN=NTDS Settings,\nCN=WIN10,\nCN=Servers,\nCN=Site-5,\n...";
"CN=NTDS Settings,\nCN=WIN01,\nCN=Servers,\nCN=Default-\nFirst-Site-Name,\n..." -> "CN=NTDS Settings,\nCN=WIN03,\nCN=Servers,\nCN=Site-2,\n..." [color="#000000", ];
"CN=NTDS Settings,\nCN=WIN01,\nCN=Servers,\nCN=Default-\nFirst-Site-Name,\n..." -> "CN=NTDS Settings,\nCN=WIN06,\nCN=Servers,\nCN=Site-3,\n..." [color="#000000", ];
"CN=NTDS Settings,\nCN=WIN01,\nCN=Servers,\nCN=Default-\nFirst-Site-Name,\n..." -> "CN=NTDS Settings,\nCN=WIN07,\nCN=Servers,\nCN=Site-4,\n..." [color="#000000", ];
"CN=NTDS Settings,\nCN=WIN01,\nCN=Servers,\nCN=Default-\nFirst-Site-Name,\n..." -> "CN=NTDS Settings,\nCN=WIN08,\nCN=Servers,\nCN=Site-4,\n..." [color="#000000", ];
"CN=NTDS Settings,\nCN=WIN01,\nCN=Servers,\nCN=Default-\nFirst-Site-Name,\n..." -> "CN=NTDS Settings,\nCN=WIN10,\nCN=Servers,\nCN=Site-5,\n..." [color="#000000", ];
"CN=NTDS Settings,\nCN=WIN02,\nCN=Servers,\nCN=Site-2,\n..." -> "CN=NTDS Settings,\nCN=WIN04,\nCN=Servers,\nCN=Site-2,\n..." [color="#000000", ];
"CN=NTDS Settings,\nCN=WIN02,\nCN=Servers,\nCN=Site-2,\n..." -> "CN=NTDS Settings,\nCN=WIN05,\nCN=Servers,\nCN=Site-2,\n..." [color="#000000", ];
"CN=NTDS Settings,\nCN=WIN03,\nCN=Servers,\nCN=Site-2,\n..." -> "CN=NTDS Settings,\nCN=WIN04,\nCN=Servers,\nCN=Site-2,\n..." [color="#000000", ];
"CN=NTDS Settings,\nCN=WIN03,\nCN=Servers,\nCN=Site-2,\n..." -> "CN=NTDS Settings,\nCN=WIN05,\nCN=Servers,\nCN=Site-2,\n..." [color="#000000", ];
"CN=NTDS Settings,\nCN=WIN04,\nCN=Servers,\nCN=Site-2,\n..." -> "CN=NTDS Settings,\nCN=WIN01,\nCN=Servers,\nCN=Default-\nFirst-Site-Name,\n..." [color="#000000", ];
"CN=NTDS Settings,\nCN=WIN04,\nCN=Servers,\nCN=Site-2,\n..." -> "CN=NTDS Settings,\nCN=WIN02,\nCN=Servers,\nCN=Site-2,\n..." [color="#000000", ];
"CN=NTDS Settings,\nCN=WIN04,\nCN=Servers,\nCN=Site-2,\n..." -> "CN=NTDS Settings,\nCN=WIN03,\nCN=Servers,\nCN=Site-2,\n..." [color="#000000", ];
"CN=NTDS Settings,\nCN=WIN05,\nCN=Servers,\nCN=Site-2,\n..." -> "CN=NTDS Settings,\nCN=WIN02,\nCN=Servers,\nCN=Site-2,\n..." [color="#000000", ];
"CN=NTDS Settings,\nCN=WIN05,\nCN=Servers,\nCN=Site-2,\n..." -> "CN=NTDS Settings,\nCN=WIN03,\nCN=Servers,\nCN=Site-2,\n..." [color="#000000", ];
"CN=NTDS Settings,\nCN=WIN07,\nCN=Servers,\nCN=Site-4,\n..." -> "CN=NTDS Settings,\nCN=WIN01,\nCN=Servers,\nCN=Default-\nFirst-Site-Name,\n..." [color="#000000", ];
"CN=NTDS Settings,\nCN=WIN09,\nCN=Servers,\nCN=Site-5,\n..." -> "CN=NTDS Settings,\nCN=WIN10,\nCN=Servers,\nCN=Site-5,\n..." [color="#000000", ];
"CN=NTDS Settings,\nCN=WIN10,\nCN=Servers,\nCN=Site-5,\n..." -> "CN=NTDS Settings,\nCN=WIN01,\nCN=Servers,\nCN=Default-\nFirst-Site-Name,\n..." [color="#000000", ];
"CN=NTDS Settings,\nCN=WIN10,\nCN=Servers,\nCN=Site-5,\n..." -> "CN=NTDS Settings,\nCN=WIN09,\nCN=Servers,\nCN=Site-5,\n..." [color="#000000", ];
}

u  /* generated by samba */
digraph A_samba_tool_production {
label="NTDS Connections known to CN=LOCALDC,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=samba,DC=example,DC=com";
fontsize=10;

node[fontname=Helvetica; fontsize=10];

"CN=NTDS Settings,\nCN=CLIENT,\n...";
"CN=NTDS Settings,\nCN=LOCALDC,\n...";
"CN=NTDS Settings,\nCN=PROMOTEDVDC,\n...";
"CN=NTDS Settings,\nCN=SERVER1,\n...";
"CN=NTDS Settings,\nCN=SERVER2,\n...";
"CN=NTDS Settings,\nCN=SERVER3,\n...";
"CN=NTDS Settings,\nCN=SERVER4,\n...";
"CN=NTDS Settings,\nCN=SERVER5,\n...";
"CN=NTDS Settings,\nCN=LOCALDC,\n..." -> "CN=NTDS Settings,\nCN=PROMOTEDVDC,\n..." [color="#000000", ];
"CN=NTDS Settings,\nCN=PROMOTEDVDC,\n..." -> "CN=NTDS Settings,\nCN=LOCALDC,\n..." [color="#000000", ];
"CN=NTDS Settings,\nCN=SERVER2,\n..." -> "CN=NTDS Settings,\nCN=PROMOTEDVDC,\n..." [color="#000000", ];
"CN=NTDS Settings,\nCN=SERVER3,\n..." -> "CN=NTDS Settings,\nCN=LOCALDC,\n..." [color="#000000", ];
subgraph cluster_key {
label="Key";
subgraph cluster_key_nodes {
label="";
color = "invis";

}
subgraph cluster_key_edges {
label="";
color = "invis";
subgraph cluster_key_0_ {
key_0_e1[label=src; color="#000000"; group="key_0__g"]
key_0_e2[label=dest; color="#000000"; group="key_0__g"]
key_0_e1 -> key_0_e2 [constraint = false; color="#000000"]
key_0__label[shape=plaintext; style=solid; width=2.000000; label="NTDS Connection\r"]
}
{key_0__label}
}

elision0[shape=plaintext; style=solid; label="\“...”  means  “CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=samba,DC=example,DC=com”\r"]

}
"CN=NTDS Settings,\nCN=CLIENT,\n..." -> key_0__label [style=invis];
"CN=NTDS Settings,\nCN=LOCALDC,\n..." -> key_0__label [style=invis];
"CN=NTDS Settings,\nCN=PROMOTEDVDC,\n..." -> key_0__label [style=invis];
"CN=NTDS Settings,\nCN=SERVER1,\n..." -> key_0__label [style=invis];
"CN=NTDS Settings,\nCN=SERVER2,\n..." -> key_0__label [style=invis];
"CN=NTDS Settings,\nCN=SERVER3,\n..." -> key_0__label [style=invis];
"CN=NTDS Settings,\nCN=SERVER4,\n..." -> key_0__label [style=invis];
"CN=NTDS Settings,\nCN=SERVER5,\n..." -> key_0__label [style=invis]
key_0__label -> elision0 [style=invis; weight=9]

}
an  
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+
                  ||,------ *,CN=PROMOTEDVDC+
                  |||,----- *,CN=SERVER1+
                  ||||,---- *,CN=SERVER2+
                  |||||,--- *,CN=SERVER3+
                  ||||||,-- *,CN=SERVER4+
           source |||||||,- *,CN=SERVER5+
     *,CN=CLIENT+ 0-------
    *,CN=LOCALDC+ -01-----
*,CN=PROMOTEDVDC+ -10-----
    *,CN=SERVER1+ ---0----
    *,CN=SERVER2+ -21-0---
    *,CN=SERVER3+ -12--0--
    *,CN=SERVER4+ ------0-
    *,CN=SERVER5+ -------0

'*' stands for 'CN=NTDS Settings'
'+' stands for ',CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=samba,DC=example,DC=com'

Data can get from source to destination in the indicated number of steps.
0 means zero steps (it is the same DC)
1 means a direct link
2 means a transitive link involving two steps (i.e. one intermediate DC)
- means there is no connection, even through other DCs

)Nr   )F)__doc__sambar   rt   rX   samba.tests.samba_tool.baser   	samba.kccr   samba.graphr   samba.paramr   r   r   rr   r;   r   DOMAINr   r   r'   r4   r6   r   r   r   rS   r(   r&   <module>r      se  (   				  				 8 8 8 8 8 8 ( ( ( ( ( ( # # # # # #            bj6GI I
 7<<
< 8 EG G  
,AFJ   
 
 
 
   @, @, @, @, @,- @, @, @,F
%! P4& "l$      r(   