HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: //usr/lib/python3/dist-packages/samba/tests/samba_tool/__pycache__/visualize.cpython-310.pyc
o

�/a�^�@s�dZddlZddlZddlZddlZddlmZddlmZddl	m
Z
ddlmZej
�ejdd�Zej
�ejdd	�Zd
ZdeZgd�Zddd�Zddd�ZGdd�de�ZdZdZdZdS)z�Tests 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,)
)�WIN01zDefault-First-Site-Name)�WIN08�Site-4)�WIN07r	)�WIN06zSite-3)�WIN09�Site-5)�WIN10r
)�WIN02�Site-2)�WIN04r)�WIN03r)�WIN05r�cCsJ|durd}n|dd�}tj�|d||f�}tj||||d�}||fS)Nzdefault-DSA�zldif-to-sambdb-%s-%s)�forced_local_dsa)�os�path�joinr�
ldif_to_samdb)�ldif�tempdir�lp�dsa�tag�dsa_name�dburl�samdb�r#�B/usr/lib/python3/dist-packages/samba/tests/samba_tool/visualize.py�samdb_from_ldif=s��
�r%FcCs@g}|��D]}d�|�����}|s|r|�|�qd�|�S)N� �
)�
splitlinesr�strip�split�append)�s�keep_empty_lines�lines�liner#r#r$�collapse_spaceJs
�
r0cs�eZdZ�fdd�Z�fdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Z�ZS)�SambaToolVisualizeLdifcs>tt|���t�|_tt|j|j�\|_|_	d|j	|_
dS)N�tdb://)�superr1�setUprrr%�MULTISITE_LDIFrr"�dbfiler!��self��	__class__r#r$r4Ts�zSambaToolVisualizeLdif.setUpcs|�|j�tt|���dS�N)�remove_filesr6r3r1�tearDownr7r9r#r$r=\szSambaToolVisualizeLdif.tearDowncGs*|D]}|�|�|j��t�|�qdSr;)�
assertTrue�
startswithrr�unlink)r8�files�fr#r#r$r<`s�z#SambaToolVisualizeLdif.remove_filesc	Cs�t�d�}|�ddd|jdd�\}}}|�|||�|�|�|��dgg}|dd	�tD�7}|D]0}|jddd|jdg|�R�\}}}|�|||�|�|�	|��|�
d
|�}|j||dd�q1d
S)z�Ensure 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=yescSsg|]
}|durd|g�qS)Nz--color-schemer#)�.0�xr#r#r$�
<listcomp>qs�z6SambaToolVisualizeLdif.test_colour.<locals>.<listcomp>rT�r)N)�re�compile�	runsubcmdr!�assertCmdSuccess�assertFalse�findallrr>�search�sub�assertStringsEqual)	r8�	colour_re�result�
monochrome�err�colour_args�args�out�
uncolouredr#r#r$�test_coloures*

����z"SambaToolVisualizeLdif.test_colourc	Cs0|�ddd|jddd�\}}}|�|||�tj�d�}t��}tj�	|d�}tj�	|d	�}t
|d
�}td|d�td
||d�|��t�
|d�|tjd<|�dddtddd�\}}	}t
|�}|��}
|��t�|�t�|�t�|�|dur�|tjd<ntjd=|�||
|�|j||
dd�dS)z�We 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.
        rDrErFrGrH�--dot�SAMBA_TOOL_XDOT_PATH�	fake_xdot�content�wz	#!/bin/sh)�filezcp $1 %si��--importldifz--xdotNTrM)rPr!rQr�environ�get�tempfile�mkdtemprr�open�print�close�chmodr5�read�remove�rmdirrV)r8rX�expectedrZ�
old_xdot_path�tmpdirrbrcrB�empty�xdotr#r#r$�test_import_ldif_xdot~s@
�


�


z,SambaToolVisualizeLdif.test_import_ldif_xdotcCsb|�ddd|jdd�\}}}|�|||�|�dddtdd�\}}}|�|||�|�||�dS)z�Make sure the samba-tool visualize --importldif option gives the
        same output as using the externally generated db from the same
        LDIF.rDrErFrGrHrfN)rPr!rQr5rV)r8rX�s1rZ�s2r#r#r$�test_import_ldif�s
�
�z'SambaToolVisualizeLdif.test_import_ldifcCst�d�}|�ddd|jdd�\}}}|�|||�|�|�|��|��}tj	�
|jd�}|�ddd|jddd|�\}}}|�|||�|�|d	�t
|�}|��}|��|j||d
d�|�|�tj	�
|jd�}	|�ddd|jd
dd|	�\}}}|�|||�|�|d	�t
|	�}|��}
|��|�|	�|j|
|d
d�tj	�
|jd�}|�ddd|jddd|�\}}}|�|||�|�|d	�t
|�}|��}|��|�|��|�|�|�dD]&\}
}|�ddd|jd|
ddd�	\}}}|�|||�|�|��|k|�q�dS)zJCheck that writing to a file works, with and without
        --color=auto.rCrDrErFz--color=autorHz
color-auto�-orTrMzcolor-norGrI))�noT)�autoT)�yesFz--color�-N)rNrOrPr!rQrRrTr)rrrr�assertEqualrkrormrVr<�assertNotEqual)r8rWrXrrrZ�color_auto_filer]rB�
color_auto�
color_no_file�color_no�color_yes_file�
colour_yes�c�equalr#r#r$�test_output_file�sp

�
�

�

�

��z'SambaToolVisualizeLdif.test_output_filec	Cs�|�ddd|jddd�\}}}|�|||�|�ddd|jdd�\}}}|�|||�dD]}|�||vd|�|�||vd	|�q-d
S)zeEnsure that --utf8 adds at least some expected utf-8, and that it
        isn't there without --utf8.rDrErFrGrHz--utf8)u│u─u╭zUTF8 should contain %szASCII should not contain %sN)rPr!rQr>)r8rX�utf8rZ�asciir�r#r#r$�	test_utf8�s
�
��z SambaToolVisualizeLdif.test_utf8c
	Cs�|�ddd|jdd�\}}}|�|||�g}|���dd�d}tD]H\}}t||f}tt|j	|j
||d�\}}	|�dddd	|	dd�\}}
}|�||
|�|
���dd�\}}|�||�|�||�|�
|	�q#|j|�dS)
NrDrErFrGrHr'��rr2)rPr!rQr)r*�MULTISITE_LDIF_DSAS�DN_TEMPLATEr%r5rrrV�assertInr+r<)
r8rX�targetrZrA�cn�siterr"r6r]�title�bodyr#r#r$�test_forced_local_dsas0
�
�
�z,SambaToolVisualizeLdif.test_forced_local_dsac	Csd|�ddd|jddd�\}}}|�|||�|�ddd|jdd�\}}}|�|||�|�d�}g}dg}g}|D]%}	t�d	|	�}
|
rY|
��\}}|�t|�||f�|�|	�q9|�|	�q9d�	|�}|j
d
d�|}
|���dd�\}}|D]\}}}|
�||�}
|�||�}qxd
||f}t
|
�}
t
|�}t
|�}t
|�}|j|
|d
d�|j||d
d�dS)z�Ensure the colour ones are the same as the monochrome ones EXCEPT
        for the colours, of which the monochrome one should know nothingrDrErFrGrH�--no-keyr'rz'(.{1,2})' stands for '(.+)'T)�reverser�z%s
%srMN)rPr!rQr*rN�match�groupsr+�lenr�sortr)�replacer0rV)r8rX�shortrZ�longr.�replacements�	key_lines�short_without_keyr/�m�a�b�
short2long�long_header�
long2short�_r#r#r$�test_short_names'sF
�
�

z'SambaToolVisualizeLdif.test_short_namescCsbtt|j|jdd�\}}d|}|�ddd|dd�\}}}|�|�|�|||�|�|t�d	S)
zZTest that the 'unconnected' ldif shows up and exactly matches the
        expected output.�disconnectedr�r2rDrErFrGrHN)	r%�UNCONNECTED_LDIFrrrPr<rQrV� EXPECTED_DISTANCE_GRAPH_WITH_KEY)r8r"r6r!rX�outputrZr#r#r$�test_disconnected_ldif_with_keyUs
�
�
�z6SambaToolVisualizeLdif.test_disconnected_ldif_with_keyc
Cs>|�ddd|jdddd�\}}}|�|||�|�t|�dS)	zGraphviz NTDS Connection outputrDrErFrGrHr`r�N)rPr!rQrV�EXPECTED_DOT_MULTISITE_NO_KEY)r8rX�dotrZr#r#r$�test_dot_ntdsconnis
�z(SambaToolVisualizeLdif.test_dot_ntdsconncCshtt|j|jdd�\}}|�dddd|ddd	d
d�	\}}}|�|||�|�|�|jt|dd
�dS)z7Graphviz NTDS Connection output from disconnected graphr�r�rDrErFr2rGrHr`r{rTrMN)	r%r�rrrPrQr<rV�"EXPECTED_DOT_NTDSCONN_DISCONNECTED)r8r"r6rXr�rZr#r#r$�test_dot_ntdsconn_disconnectedrs
�
�

�z5SambaToolVisualizeLdif.test_dot_ntdsconn_disconnectedcCs�tt|j|jdd�\}}tj�|jd�}|�dddd|dd	d
d|�	\}}}|�|||�t	|�}|�
�}|��|�t
|�|�||�dS)
z+Graphviz NTDS Connection output into a filer�r��dotfilerDrErFr2rGrHr`r{N)r%r�rrrrrrPrQrkrormrVr�r<)r8r"r6�dot_filerXr�rZrBr#r#r$�&test_dot_ntdsconn_disconnected_to_file�s 
�
�z=SambaToolVisualizeLdif.test_dot_ntdsconn_disconnected_to_file)�__name__�
__module__�__qualname__r4r=r<r_rwrzr�r�r�r�r�r�r�r��
__classcell__r#r#r9r$r1Ss,B.	r1a\/* 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__�sambarrirN�samba.tests.samba_tool.baser�	samba.kccr�samba.graphr�samba.paramrrrrgr5r��DOMAINr�r�r%r0r1r�r�r�r#r#r#r$�<module>s4��


	E(6