
    b3                     N   d dl Z d dlmZ d dlmZmZ d dlmZ d dlm	Z	m
Z
 d dlmZmZ d dlmZ d dlmZ d dlZ ej        d          Z ej        e          Ze                    e           e                    d	d
dd            ej        e          Ze                    e            e	e          Ze                    e           e                                \  ZZe                                a e!                    t@                    a"ej#        a# e$e          dk     r$e%                                  e j&        d           ed          Z'ed         a(tD          )                    ej*                   dZ+dZ,dZ-dZ.dZ/dZ0dZ1dZ2 G d de          Z3 e
e4e           dS )    N)credentials)dns	dnsserver)record_from_string)SubunitOptionsTestProgram)werrorWERRORError)DNSTestz3dns_wildcard.py <server name> <server ip> [options]z	--timeoutinttimeoutz Specify timeout for DNS requests)typedesthelp      z1.1.1.1z*.wildcardtestz1.1.1.2zexact.wildcardtestz1.1.1.3z*.level2.wildcardtestz1.1.1.4zexact.level2.wildcardtestc                   f     e Z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 )TestWildCardQueriesc                    t          t          |                                            t          | _        t
          | _        t          | _        t          | _        t          | _        t          j
        t          d|                                 t          ft          j
        t          d|                                 t          ft          j
        t           d|                                 t"          ft          j
        t$          d|                                 t&          fg| _        |                                 }| j        D ]\  }}}|                     ||||           d S )N.)superr   setUpserver_nameserver	server_iplpcredsr   r   DNS_QTYPE_AWILDCARDget_dns_domainWILDCARD_IPEXACTEXACT_IPLEVEL2_WILDCARDLEVEL2_WILDCARD_IPLEVEL2_EXACTLEVEL2_EXACT_IPdns_recordsdns_connect
add_record)selfctypnamedata	__class__s        :/usr/lib/python3/dist-packages/samba/tests/dns_wildcard.pyr   zTestWildCardQueries.setUpN   sP   !4((..000!"
 !_(0$2E2E2G2G2GH(* !_(-t/B/B/D/D/DE%' !_!0!%!4!4!6!6!68 0	1
 !_!-!%!4!4!6!6!68 -	./" !%!1 	0 	0S$OOAsD$////	0 	0    c                 z    |                                  }| j        D ]\  }}}|                     ||||           d S )N)r)   r(   delete_record)r+   r,   r-   r.   r/   s        r1   tearDownzTestWildCardQueries.tearDownm   sS    !%!1 	3 	3S$q#tT2222	3 	3r2   c                 V    d| j         z  }t          j        || j        | j                  S )Nzncacn_ip_tcp:%s[sign])r   r   r   r   )r+   binding_strs     r1   r)   zTestWildCardQueries.dns_connectr   s'    ->";DDDr2   c           	      >   t          ||          }t          j                    }||_        	 |                    t          j        d| j        |                                 |d |           d S # t          $ r(}|j	        d         t          j        k    r|Y d }~d S d }~ww xY wNr   )r   r   DNS_RPC_RECORD_BUFrecDnssrvUpdateRecord2DNS_CLIENT_VERSION_LONGHORNr   r    r
   argsr	   "WERR_DNS_ERROR_NAME_DOES_NOT_EXIST)r+   dns_connr-   r.   r/   r;   del_rec_bufes           r1   r4   z!TestWildCardQueries.delete_recordv   s     d++244	(()N)*)-)-)<)<)>)>)-)-)46 6 6 6 6  	 	 	vayFEEE FEEEEE	s   <A* *
B4BBc           	          t          ||          }t          j                    }||_        	 |                    t          j        d| j        |                                 ||d            d S # t          $ r}|d }~ww xY wr9   )	r   r   r:   r;   r<   r=   r   r    r
   )r+   r@   r-   r.   r/   r;   add_rec_bufrB   s           r1   r*   zTestWildCardQueries.add_record   s     d++244		(()N)*)-)-)<)<)>)>)-)4)-/ / / / /  	 	 	G	s   <A* *
A;4A66A;c                    |                      t          j                  }g }d|                                 z  }|                     |t          j        t          j                  }|                    |           |                     ||           | 	                    || j
                  \  }}|                     |t          j                   |                     |t          j                   |                     |j        d           |                     |j        d         j        t          j                   |                     |j        d         j        t&                     dS )z2Query an A record, should match the wildcard entryzmiss.wildcardtest.%shostr   r   Nmake_name_packetr   DNS_OPCODE_QUERYr    make_name_questionr   DNS_QCLASS_INappendfinish_name_packetdns_transaction_udpr   assert_dns_rcode_equalsDNS_RCODE_OKassert_dns_opcode_equalsassertEqualancountanswersrr_typerdatar!   r+   p	questionsr.   qresponseresponse_packets          r1   test_one_a_query_match_wildcardz3TestWildCardQueries.test_one_a_query_match_wildcard   s;    !!#"677	 &(;(;(=(==##D$'O$'$57 7 	9---$$QT^$<< 	$?$$Xs/?@@@%%h0DEEE)1---)!,4coFFF)!,2K@@@@@r2   c                    |                      t          j                  }g }d|                                 z  }|                     |t          j        t          j                  }|                    |           |                     ||           | 	                    || j
                  \  }}|                     |t          j                   |                     |t          j                   |                     |j        d           |                     |j        d         j        t          j                   |                     |j        d         j        t&                     dS )z~ Query an A record, should match the wild card entry
            have two labels to the left of the wild card target.
        zlabel2.label1.wildcardtest.%srF   r   r   NrH   rX   s          r1   (test_one_a_query_match_wildcard_2_labelsz<TestWildCardQueries.test_one_a_query_match_wildcard_2_labels   s;   
 !!#"677	 /1D1D1F1FF##D$'O$'$57 7 	9---$$QT^$<< 	$?$$Xs/?@@@%%h0DEEE)1---)!,4coFFF)!,2K@@@@@r2   c                    |                      t          j                  }g }t          d|                                 }|                     |t          j        t          j                  }|                    |           | 	                    ||           | 
                    || j                  \  }}|                     |t          j                   |                     |t          j                   |                     |j        d           |                     |j        d         j        t          j                   |                     |j        d         j        t(                     dS )zQuery the wildcard entryr   rF   r   r   N)rI   r   rJ   r   r    rK   r   rL   rM   rN   rO   r   rP   rQ   rR   rS   rT   rU   rV   rW   r!   rX   s          r1   test_one_a_query_wildcard_entryz3TestWildCardQueries.test_one_a_query_wildcard_entry   sB    !!#"677	 #((D$7$7$9$9$9:##D$'O$'$57 7 	9---$$QT^$<< 	$?$$Xs/?@@@%%h0DEEE)1---)!,4coFFF)!,2K@@@@@r2   c                    |                      t          j                  }g }t          d|                                 }|                     |t          j        t          j                  }|                    |           | 	                    ||           | 
                    || j                  \  }}|                     |t          j                   |                     |t          j                   |                     |j        d           |                     |j        d         j        t          j                   |                     |j        d         j        t(                     dS z\Query an entry that matches the wild card but has an exact match as
         well.
         r   rF   r   r   N)rI   r   rJ   r"   r    rK   r   rL   rM   rN   rO   r   rP   rQ   rR   rS   rT   rU   rV   rW   r#   rX   s          r1   test_one_a_query_exact_matchz0TestWildCardQueries.test_one_a_query_exact_match   sB    !!#"677	  %%!4!4!6!6!67##D$'O$'$57 7 	9---$$QT^$<< 	$?$$Xs/?@@@%%h0DEEE)1---)!,4coFFF)!,2H=====r2   c                    |                      t          j                  }g }d|                                 z  }|                     |t          j        t          j                  }|                    |           |                     ||           | 	                    || j
                  \  }}|                     |t          j                   |                     |t          j                   |                     |j        d           |                     |j        d         j        t          j                   |                     |j        d         j        t&                     dS )z:Query an A record, should match the level 2 wildcard entryzmiss.level2.wildcardtest.%srF   r   r   NrI   r   rJ   r    rK   r   rL   rM   rN   rO   r   rP   rQ   rR   rS   rT   rU   rV   rW   r%   rX   s          r1   "test_one_a_query_match_wildcard_l2z6TestWildCardQueries.test_one_a_query_match_wildcard_l2   s<    !!#"677	 -t/B/B/D/DD##D$'O$'$57 7 	9---$$QT^$<< 	$?$$Xs/?@@@%%h0DEEE)1---)!,4coFFF)!,24FGGGGGr2   c                    |                      t          j                  }g }d|                                 z  }|                     |t          j        t          j                  }|                    |           |                     ||           | 	                    || j
                  \  }}|                     |t          j                   |                     |t          j                   |                     |j        d           |                     |j        d         j        t          j                   |                     |j        d         j        t&                     dS )zQuery an A record, should match the level 2 wild card entry
           have two labels to the left of the wild card target
        z$label1.label2.level2.wildcardtest.%srF   r   r   Nrg   rX   s          r1   +test_one_a_query_match_wildcard_l2_2_labelsz?TestWildCardQueries.test_one_a_query_match_wildcard_l2_2_labels
  s<   
 !!#"677	 68K8K8M8MM##D$'O$'$57 7 	9---$$QT^$<< 	$?$$Xs/?@@@%%h0DEEE)1---)!,4coFFF)!,24FGGGGGr2   c                    |                      t          j                  }g }t          d|                                 }|                     |t          j        t          j                  }|                    |           | 	                    ||           | 
                    || j                  \  }}|                     |t          j                   |                     |t          j                   |                     |j        d           |                     |j        d         j        t          j                   |                     |j        d         j        t(                     dS rd   )rI   r   rJ   r&   r    rK   r   rL   rM   rN   rO   r   rP   rQ   rR   rS   rT   rU   rV   rW   r'   rX   s          r1   test_one_a_query_exact_match_l2z3TestWildCardQueries.test_one_a_query_exact_match_l2"  sB    !!#"677	 ',,(;(;(=(=(=>##D$'O$'$57 7 	9---$$QT^$<< 	$?$$Xs/?@@@%%h0DEEE)1---)!,4coFFF)!,2ODDDDDr2   c                    |                      t          j                  }g }t          d|                                 }|                     |t          j        t          j                  }|                    |           | 	                    ||           | 
                    || j                  \  }}|                     |t          j                   |                     |t          j                   |                     |j        d           |                     |j        d         j        t          j                   |                     |j        d         j        t(                     dS )z Query the level 2 wildcard entryr   rF   r   r   N)rI   r   rJ   r$   r    rK   r   rL   rM   rN   rO   r   rP   rQ   rR   rS   rT   rU   rV   rW   r%   rX   s          r1   "test_one_a_query_wildcard_entry_l2z6TestWildCardQueries.test_one_a_query_wildcard_entry_l29  sC    !!#"677	 *//4+>+>+@+@+@A##D$'O$'$57 7 	9---$$QT^$<< 	$?$$Xs/?@@@%%h0DEEE)1---)!,4coFFF)!,24FGGGGGr2   )__name__
__module____qualname__r   r5   r)   r4   r*   r^   r`   rb   re   rh   rj   rl   rn   __classcell__)r0   s   @r1   r   r   L   s       0 0 0 0 0>3 3 3
E E E  &   A A A,A A A0A A A,> > >.H H H,H H H0E E E.H H H H H H Hr2   r   )moduleopts)5syssambar   samba.dcerpcr   r   samba.dnsserverr   samba.tests.subunitrunr   r   r	   r
   samba.tests.dns_baser   samba.getoptgetoptoptionsoptparseOptionParserparserSambaOptions	sambaoptsadd_option_group
add_optionCredentialsOptionscredoptssubunitopts
parse_argsrt   r>   get_loadparmr   get_credentialsr   r   lenprint_usageexitr   r   set_krb_forwardableNO_KRB_FORWARDABLEr!   r   r#   r"   r%   r$   r'   r&   r   ro    r2   r1   <module>r      su  $ 


       ' ' ' ' ' ' ' ' . . . . . . > > > > > > > > % % % % % % % % ( ( ( ( ( (       		9
; 
; G ((	   	 " " "   +E	9  ; ; ; &7%f--    ! ! !nV$$    $ $ $  
d  $$
,3t99q==
CHQKKK1gG	   +8 9 9 9%) ,0AH AH AH AH AH' AH AH AHH 8+ . . . . . .r2   