
    bJ                         d Z ddlmZ ddlmZmZ ddlZddlZddlmZ ddl	m
Z
 ddlmZ  G d d	ej        j                  ZdS )
z)
    Tests GetDCNameEx calls in NETLOGON
    )auth)WERRORErrorwerrorN)Credentials)netlogon)GUIDc                       e Zd Zd Z	 	 d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d Zd Zd Zd Zd Zd ZdS )GetDCNameExc                    t           j                                        | _        t	                      | _        d | _        t          j        	                    d          | _
        t          j        	                    d          | _        t          j        	                    d          | _        t          j        	                    d          | _        t          j        	                    d          | _        d S )NSERVERREALMDOMAINTRUST_REALMTRUST_DOMAIN)sambatestsenv_loadparmlpr   credsnetlogon_connosenvirongetserverrealmdomaintrust_realmtrust_domain)selfs    7/usr/lib/python3/dist-packages/samba/tests/getdcname.pysetUpzGetDCNameEx.setUp!   s    +**,, ]]
!jnnX..Z^^G,,
jnnX..:>>-88JNN>::    NFr   c           	          | j         ,t          j        d|                                           | _         |r%| j                             | j        d d||||          S | j                             | j        ||||          S )Nzncalrpc:[schannel]r   )r   r   get_loadparmnetr_DsRGetDCNameEx2r   netr_DsRGetDCNameEx)r   r   domain_guid	site_nameex2flagss         r    _call_get_dc_namezGetDCNameEx._call_get_dc_name,   s    %!)!23G373D3D3F3F"H "HD  	A%::4;;?;A;F;D;@B B B %99$+:@:E:C:?	A A Ar"   c                    |                      d          }|                     |j        du           |                     |j                            d                     |                     |j        du           |                     |j                            d                     |                     |j                                        | j                                        k    p3|j                                        | j                                        k               |                      dt          j
                  }|                     |j                                        | j                                                   |                      dt          j                  }|                     |j                                        | j                                                   dS )zCheck the most trivial requirements of Ex2 (no domain or site)

        a) The paths are prefixed with two backslashes
        b) The returned domains conform to the format requested
        c) The domain matches our own domain
        T)r)   N\\)r)   r*   )r+   
assertTruedc_unc
startswith
dc_addressdomain_namelowerr   r   r   DS_RETURN_DNS_NAMEassertEqualDS_RETURN_FLAT_NAMEr   responses     r    test_get_dc_ex2zGetDCNameEx.test_get_dc_ex2@   s    ))d)33t3444226::;;;+47888+66v>>???,2244
((**+ , ,2244))++,	- 	- 	-
 ))d080K * M M-3355))++	- 	- 	- ))d080L * N N-3355**,,	. 	. 	. 	. 	.r"   c                    | j         dS |                     | j         d          }|                     | j        d          }|                     |j        du           |                     |j                            d                     |                     |j        du           |                     |j                            d                     |                     |j        |j                   |                     |j        |j                   |                     |j        	                                | j         	                                k    p3|j        	                                | j
        	                                k               |                     | j         t          j        d          }|                     |j        	                                | j         	                                           |                     | j         t          j        d          }|                     |j        	                                | j
        	                                           dS )zCheck what happens to Ex2 requests after being forwarded to winbind

        a) The paths must still have the same backslash prefixes
        b) The returned domain does not match our own domain
        c) The domain matches the format requested
        NT)r   r)   r-   r   r*   r)   )r   r+   r   r.   r/   r0   r1   assertNotEqualr2   r3   r   r   r4   r5   r6   )r   response_trustr8   s      r    test_get_dc_over_winbind_ex2z(GetDCNameEx.test_get_dc_over_winbind_ex2]   s\    #F//t7G48 0 : :)).2 * 4 4 	-T9:::-88@@AAA1=>>>1<<VDDEEEN1$O	- 	- 	-N5$/	1 	1 	1 	288::(..001 2&288::)//112	3 	3 	3
 //t7G6>6Q48 0 : : 	399;;)//11	3 	3 	3 //t7G6>6R48 0 : : 	399;;*0022	4 	4 	4 	4 	4r"   c                    | j         dS |                     | j         t          j                  }|                     |j        du           |                     |j                            d                     |                     |j        du           |                     |j                            d                     |                     |j	        
                                | j         
                                           dS )ziTest the standard Ex version (not Ex2)

        Ex calls Ex2 anyways, from now on, just test Ex.
        Nr   r*   r-   )r   r+   r   r4   r.   r/   r0   r1   r5   r2   r3   )r   r=   s     r    test_get_dc_over_winbindz$GetDCNameEx.test_get_dc_over_winbind   s    
 #F//t7G6>6Q 0 S S 	-T9:::-88@@AAA1=>>>1<<VDDEEE399;;)//11	3 	3 	3 	3 	3r"   c                    | j         dS d}|                     | j         |t          j                  }|                     |j        du           |                     |j                            d                     |                     |j        du           |                     |j                            d                     |                     |j	        
                                | j         
                                           |                     |
                                |j        
                                           dS )pTest the standard Ex version (not Ex2)

        We assume that there is a Default-First-Site-Name site.
        NDefault-First-Site-Namer   r(   r*   r-   )r   r+   r   r4   r.   r/   r0   r1   r5   r2   r3   dc_site_name)r   siter=   s      r    "test_get_dc_over_winbind_with_sitez.GetDCNameEx.test_get_dc_over_winbind_with_site   s-   
 #F(//t7G:>6>6Q 0 S S 	-T9:::-88@@AAA1=>>>1<<VDDEEE399;;)//11	3 	3 	3 	~'B'H'H'J'JKKKKKr"   c                 2   | j         dS d}	 |                     | j         |t          j        d          }|                     d           dS # t
          $ r@}|j        \  }}|t          j        k    r|                     d           Y d}~dS Y d}~dS d}~ww xY wzqTest the standard Ex version (not Ex2)

        We assume that there is no Invalid-First-Site-Name site.
        NInvalid-First-Site-NameFr   r(   r*   r)   3Failed to give the correct error for incorrect site%Failed to detect an invalid site name	r   r+   r   r4   failr   argsr   WERR_NO_SUCH_DOMAINr   rG   r=   eenumestrs         r    %test_get_dc_over_winbind_invalid_sitez1GetDCNameEx.test_get_dc_over_winbind_invalid_site   s    
 #F(		C!334;K>B:B:U8= 4 ? ?N IIKLLLLL 	C 	C 	CJD$v111		ABBBBBBBBB 211111	C   =A 
B/BBc                 2   | j         dS d}	 |                     | j         |t          j        d          }|                     d           dS # t
          $ r@}|j        \  }}|t          j        k    r|                     d           Y d}~dS Y d}~dS d}~ww xY w)z`Test the Ex2 version.

        We assume that there is no Invalid-First-Site-Name site.
        NrK   TrL   rM   rN   rO   rS   s         r    )test_get_dc_over_winbind_invalid_site_ex2z5GetDCNameEx.test_get_dc_over_winbind_invalid_site_ex2   s    
 #F(		C!334;K>B:B:U8< 4 > >N IIKLLLLL 	C 	C 	CJD$v111		ABBBBBBBBB 211111	CrX   c                     | j         dS d}	 |                     | j         |t          j                  }n<# t          $ r/}|                     dt          |          z              Y d}~nd}~ww xY w|                     |j        du           |                     |j        	                    d                     |                     |j
        du           |                     |j
        	                    d                     |                     |j                                        | j                                                    |                     |j        du           |                     d|j                   dS )rC   N rE   (Unable to get empty string site result: r-   )r   r+   r   r4   r   rP   strr.   r/   r0   r1   r5   r2   r3   rF   r<   r   rG   r=   rT   s       r    *test_get_dc_over_winbind_empty_string_sitez6GetDCNameEx.test_get_dc_over_winbind_empty_string_site   s   
 #F	K!334;K>B:B:U 4 W WNN  	K 	K 	KII@3q66IJJJJJJJJ	K 	-T9:::-88@@AAA1=>>>1<<VDDEEE399;;)//11	3 	3 	3 	34?@@@B ;<<<<<s   '5 
A.%A))A.c                    | j         dS 	 |                     | j        t          j        d          }n<# t
          $ r/}|                     dt          |          z              Y d}~nd}~ww xY w|                     |du           | 	                    |j
                                        | j                                                    dS )z#Supply a NETBIOS trust domain name.NFr;    Failed to succeed over winbind: )r   r+   r   r   r4   r   rP   r^   r.   r5   r2   r3   )r   r=   rT   s      r     test_get_dc_over_winbind_netbiosz,GetDCNameEx.test_get_dc_over_winbind_netbios   s    #F	C!334;L:B:U8= 4 ? ?NN  	C 	C 	CII83q66ABBBBBBBB	C 	d2333399;;)//11	3 	3 	3 	3 	3s   '3 
A,%A''A,c           	         | j         dS d}	 |                     | j        |t          j        d          }n:# t
          $ r-}|                     d| j        d|d|           Y d}~nd}~ww xY w|                     |du           |                     |j	        
                                | j         
                                           |                     |
                                |j        
                                           dS )zSupply a NETBIOS trust domain name.

        Sporadically fails because NETBIOS queries do not return site name in
        winbind. The site check in NETLOGON will trigger and fail the request.

        Currently marked in flapping...
        NrD   FrL   zget_dc_name (domain=z,site=z) over winbind failed: )r   r+   r   r   r4   r   rP   r.   r5   r2   r3   rF   r_   s       r    *test_get_dc_over_winbind_with_site_netbiosz6GetDCNameEx.test_get_dc_over_winbind_with_site_netbios  s?    #F(	6!334;L>B:B:U8= 4 ? ?NN  	6 	6 	6III***DDD!!5 6 6 6 6 6 6 6 6	6 	d2333399;;)//11	3 	3 	3 	~'B'H'H'J'JKKKKKs   (6 
A- #A((A-c                    | j         dS t                      }	 |                     | j         |t          j                  }n<# t
          $ r/}|                     dt          |          z              Y d}~nd}~ww xY w|                     |j	        du           |                     |j	        
                    d                     |                     |j        du           |                     |j        
                    d                     |                     |j                                        | j                                                    dS )?Ensure that we do not reject requests supplied with a NULL GUIDNr   r'   r*   z'Unable to get NULL domain GUID result: r-   )r   r   r+   r   r4   r   rP   r^   r.   r/   r0   r1   r5   r2   r3   )r   	null_guidr=   rT   s       r    $test_get_dc_over_winbind_domain_guidz0GetDCNameEx.test_get_dc_over_winbind_domain_guid  s`    #FFF		J!334;K@I:B:U 4 W WNN  	J 	J 	JII?#a&&HIIIIIIII	J 	-T9:::-88@@AAA1=>>>1<<VDDEEE399;;)//11	3 	3 	3 	3 	3s   'A 
A:%A55A:c                    d}|                      | j        |t          j                  }|                     |j        du           |                     |j                            d                     |                     |j        du           |                     |j                            d                     |                     |j	        
                                | j        
                                           |                     |
                                |j        
                                           dS )rC   rD   rE   Nr-   )r+   r   r   r4   r.   r/   r0   r1   r5   r2   r3   rF   )r   rG   r8   s      r    test_get_dc_with_sitez!GetDCNameEx.test_get_dc_with_site5  s    )))48080K * M M 	t3444226::;;;+47888+66v>>???-3355))++	- 	- 	- 	x'<'B'B'D'DEEEEEr"   c                 2   | j         dS d}	 |                     | j         |t          j        d          }|                     d           dS # t
          $ r@}|j        \  }}|t          j        k    r|                     d           Y d}~dS Y d}~dS d}~ww xY wrJ   )	r   r+   r   r4   rP   r   rQ   r   rR   r   rG   r8   rT   rU   rV   s         r    test_get_dc_invalid_sitez$GetDCNameEx.test_get_dc_invalid_siteJ  s    
 :F(		C--TZ8<4<4O27 . 9 9H IIKLLLLL 	C 	C 	CJD$v111		ABBBBBBBBB 211111	CrX   c                     d}	 |                      | j        |t          j        d          }|                     d           dS # t
          $ r@}|j        \  }}|t          j        k    r|                     d           Y d}~dS Y d}~dS d}~ww xY w)z_Test the Ex2 version

        We assume that there is no Invalid-First-Site-Name site.
        rK   TrL   rM   rN   N)	r+   r   r   r4   rP   r   rQ   r   rR   rn   s         r    test_get_dc_invalid_site_ex2z(GetDCNameEx.test_get_dc_invalid_site_ex2^  s     )		C--TZ8<4<4O26 . 8 8H IIKLLLLL 	C 	C 	CJD$v111		ABBBBBBBBB 211111	Cs   =A 
B/BBc                    d}	 |                      | j        |t          j                  }n<# t          $ r/}|                     dt          |          z              Y d}~nd}~ww xY w|                     |j        du           |                     |j        	                    d                     |                     |j
        du           |                     |j
        	                    d                     |                     |j                                        | j                                                   |                     |j        du           |                     d|j                   dS )rC   r\   rE   r]   Nr-   )r+   r   r   r4   r   rP   r^   r.   r/   r0   r1   r5   r2   r3   rF   r<   r   rG   r8   rT   s       r    test_get_dc_empty_string_sitez)GetDCNameEx.test_get_dc_empty_string_sitep  s{    	K--TZ8<4<4O . Q QHH  	K 	K 	KII@3q66IJJJJJJJJ	K 	t3444226::;;;+47888+66v>>???-3355))++	- 	- 	- 	-T9:::B 566666s   ', 
A%%A  A%c                    	 |                      | j        t          j        d          }n<# t          $ r/}|                     dt          |          z              Y d}~nd}~ww xY w|                     |du           |                     |j	        
                                | j        
                                           dS )Supply a NETBIOS domain name.Fr;   rb   N)r+   r   r   r4   r   rP   r^   r.   r5   r2   r3   r   )r   r8   rT   s      r    test_get_dc_netbioszGetDCNameEx.test_get_dc_netbios  s    	C--T[4<4O27 . 9 9HH  	C 	C 	CII83q66ABBBBBBBB	C 	,----3355))++	- 	- 	- 	- 	-s   '* 
A#%AA#c                 
   d}	 |                      | j        |t          j        d          }n<# t          $ r/}|                     dt          |          z              Y d}~nd}~ww xY w|                     |du           |                     |j	        
                                | j        
                                           |                     |
                                |j        
                                           dS )rv   rD   FrL   rb   N)r+   r   r   r4   r   rP   r^   r.   r5   r2   r3   r   rF   rs   s       r    test_get_dc_with_site_netbiosz)GetDCNameEx.test_get_dc_with_site_netbios  s    )	C--T[8<4<4O27 . 9 9HH  	C 	C 	CII83q66ABBBBBBBB	C 	,----3355))++	- 	- 	- 	x'<'B'B'D'DEEEEEs   (- 
A&%A!!A&c                    t                      }|                     | j        |t          j                  }|                     |j        du           |                     |j                            d                     |                     |j        du           |                     |j                            d                     | 	                    |j
                                        | j                                                   dS )rg   rh   Nr-   )r   r+   r   r   r4   r.   r/   r0   r1   r5   r2   r3   )r   ri   r8   s      r    test_get_dc_with_domain_guidz(GetDCNameEx.test_get_dc_with_domain_guid  s     FF	))6?080K * M M 	t3444226::;;;+47888+66v>>???-3355))++	- 	- 	- 	- 	-r"   c                    |                      dt          j                  }|                     |j        du           |                     |j                            d                     |                     |j        du           |                     |j                            d                     |                     |j        	                                | j
        	                                           dS )z1Ensure that empty domain resolve to the DC domainr\   r@   Nr-   )r+   r   r4   r.   r/   r0   r1   r5   r2   r3   r   r7   s     r    $test_get_dc_with_empty_string_domainz0GetDCNameEx.test_get_dc_with_empty_string_domain  s    ))080K * M M 	t3444226::;;;+47888+66v>>???-3355))++	- 	- 	- 	- 	-r"   )NNNFr   )__name__
__module____qualname__r!   r+   r9   r>   rA   rH   rW   rZ   r`   rc   re   rj   rl   ro   rq   rt   rw   ry   r{   r}    r"   r    r
   r
      sj       	; 	; 	; :>;<A A A A(. . .:(4 (4 (4T3 3 3&L L L.C C C(C C C(= = =63 3 3 L L L63 3 3,F F F*C C C(C C C$7 7 72- - -F F F$- - - - - - - -r"   r
   )__doc__r   r   r   r   samba.testsr   samba.credentialsr   samba.dcerpcr   samba.dcerpc.miscr   r   TestCaser
   r   r"   r    <module>r      s   $        % % % % % % % %     				 ) ) ) ) ) ) ! ! ! ! ! ! " " " " " "e- e- e- e- e-%+& e- e- e- e- e-r"   