
    b_Q                    :   d dl mZ d dlmZmZ d dlmZ d dlmZ d dl	Z	d dl	m
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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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'0                                a1e+2                    tb                    a3e.j4        a4 e5e/          dk     r$e%6                                  ej7        d           e/d          Z8e/d         a9tf          :                    ej;                    G d de          Z< G d de          Z= G d de          Z> G d de          Z? G d de          Z@ G d  d!e          ZA eeBe,"           dS )#    )dsdb)
ndr_unpackndr_pack)SamDB)system_sessionN)ERR_OPERATIONS_ERROR)credentials)dnsdnsp	dnsserver)	TXTRecord)record_from_stringdns_record_match)SubunitOptionsTestProgram)werrorWERRORError)DNSTestz*dns.py <server name> <server ip> [options]z	--timeoutinttimeoutz Specify timeout for DNS requests)typedesthelp      c                   Z     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 xZS )TestSimpleQueriesc                     t          t          |                                            t          | _        t
          | _        t          | _        t          | _        t          | _        d S N)	superr   setUpserver_nameserver	server_iplpcredsr   self	__class__s    1/usr/lib/python3/dist-packages/samba/tests/dns.pyr!   zTestSimpleQueries.setUpH   sG    &&,,...!"
    c                    |                      t          j                  }g }| j        d|                                 }|                     |t          j        t          j                  }t          d|j	                   |
                    |           |                     ||           |                     |t                    \  }}|                     |t          j                   |                     |t          j                   |                     |j        d           |                     |j        d         j        | j                   dS )1create a query packet containing one query record.asking for hostr   r   N)make_name_packetr
   DNS_OPCODE_QUERYr#   get_dns_domainmake_name_questionDNS_QTYPE_ADNS_QCLASS_INprintnameappendfinish_name_packetdns_transaction_udpr$   assert_dns_rcode_equalsDNS_RCODE_OKassert_dns_opcode_equalsassertEqualancountanswersrdatar(   p	questionsr9   qresponseresponse_packets          r*   test_one_a_queryz"TestSimpleQueries.test_one_a_queryQ   2   !!#"677	+++t':':'<'<'<=##D#/3;LMMmQV$$$9---$$QY$77 	$?$$Xs/?@@@%%h0DEEE)1---)!,2.	* 	* 	* 	* 	*r+   c                    |                      t          j                  }g }d|                                 z  }|                     |t          j        t          j                  }t          d|j                   |	                    |           | 
                    ||           |                     |t                    \  }}|                     |t          j                   |                     |t          j                   |                     |j        d           |                     |j        d         j        j                                        | j        d|                                                                            dS )z=create a query packet containing one query record for the SOA%sr/   r0   r   r   r.   N)r2   r
   r3   r4   r5   DNS_QTYPE_SOAr7   r8   r9   r:   r;   r<   r$   r=   r>   r?   r@   rA   rB   rC   mnameupperr#   rD   s          r*   test_one_SOA_queryz$TestSimpleQueries.test_one_SOA_queryd   sc   !!#"677	t**,,-##D#*;S=NOOmQV$$$9---$$QY$77 	$?$$Xs/?@@@%%h0DEEE)1---Q%+1133T%8%8%:%:%:;BBDD	F 	F 	F 	F 	Fr+   c                    |                      t          j                  }g }| j        d|                                 }|                     |t          j        t          j                  }t          d|j	                   |
                    |           |                     ||           |                     |t                    \  }}|                     |t          j                   |                     |t          j                   |                     |j        d           |                     |j        d         j        | j                   dS )z9create a query packet containing one query record via TCPr.   r/   r0   r   r   N)r2   r
   r3   r#   r4   r5   r6   r7   r8   r9   r:   r;   dns_transaction_tcpr$   r=   r>   r?   r@   rA   rB   rC   rD   s          r*   test_one_a_query_tcpz&TestSimpleQueries.test_one_a_query_tcpx   rK   r+   c                    |                      t          j                  }g }| j        d|                                 }|                     |t          j        t          j                  }t          d|j	                   |
                    |           |                     ||           |                     |t                    \  }}|                     |t          j                   |                     |t          j                   |                     |j        d           |                      t          j                  }g }d| j        d|                                 }|                     |t          j        t          j                  }t          d|j	                   |
                    |           |                     ||           |                     |t                    \  }}|                     |t          j                   |                     |t          j                   |                     |j        d           dS )z6create a query packet causing an empty RCODE_OK answerr.   r/   r0   r   zinvalid-N)r2   r
   r3   r#   r4   r5   DNS_QTYPE_MXr7   r8   r9   r:   r;   r<   r$   r=   r>   r?   r@   rA   DNS_RCODE_NXDOMAINrD   s          r*   test_one_mx_queryz#TestSimpleQueries.test_one_mx_query   s   !!#"677	+++t':':'<'<'<=##D#*:C<MNNmQV$$$9---$$QY$77 	$?$$Xs/?@@@%%h0DEEE)1---!!#"677		"&+++t/B/B/D/D/DE##D#*:C<MNNmQV$$$9---$$QY$77 	$?$$Xs/EFFF%%h0DEEE)1-----r+   c                    |                      t          j                  }g }| j        d|                                 }|                     |t          j        t          j                  }|                    |           dd|                                 }|                     |t          j        t          j                  }|                    |           | 	                    ||           	 | 
                    |t                    \  }}|                     |t          j                   dS # t          j        $ r Y dS w xY w)z2create a query packet containing two query recordsr.   	bogusnamer0   N)r2   r
   r3   r#   r4   r5   r6   r7   r:   r;   r<   r$   r=   DNS_RCODE_FORMERRsocketr   rD   s          r*   test_two_queriesz"TestSimpleQueries.test_two_queries   s8   !!#"677	+++t':':'<'<'<=##D#/3;LMM%++t':':'<'<'<=##D#/3;LMM9---		(((;; (X((33HIIIII~ 	 	 	
 DD	s   0?D1 1EEc                 2   |                      t          j                  }g }| j        d|                                 }|                     |t          j        t          j                  }t          d|j	                   |
                    |           |                     ||           |                     |t                    \  }}d}t          j        d          }||dz  }|                     |t          j                   |                     |t          j                   |                     |j        |           |                     |j        d         j        | j                   |(|                     |j        d         j        |           dS dS )zcreate a QTYPE_ALL queryr.   r/   r0   r   SERVER_IPV6Nr   )r2   r
   r3   r#   r4   r5   DNS_QTYPE_ALLr7   r8   r9   r:   r;   r<   r$   osgetenvr=   r>   r?   r@   rA   rB   rC   )	r(   rE   rF   r9   rG   rH   rI   num_answersdc_ipv6s	            r*   test_qtype_all_queryz&TestSimpleQueries.test_qtype_all_query   s   !!#"677	+++t':':'<'<'<=##D#*;S=NOOmQV$$$9---$$QY$77 	$? )M**1K$$Xs/?@@@%%h0DEEE);777)!,2.	* 	* 	*X-a06@@@@@ r+   c                    |                      t          j                  }g }| j        d|                                 }|                     |t          j        t          j                  }|                    |           | 	                    ||           	 | 
                    |t                    \  }}|                     |t          j                   dS # t          j        $ r Y dS w xY w)zcreate a QCLASS_NONE queryr.   r0   N)r2   r
   r3   r#   r4   r5   r`   DNS_QCLASS_NONEr:   r;   r<   r$   r=   DNS_RCODE_NOTIMPr\   r   rD   s          r*   test_qclass_none_queryz(TestSimpleQueries.test_qclass_none_query   s    !!#"677	+++t':':'<'<'<=##! ! 	9---		(((;; (X((33GHHHHH~ 	 	 	
 DD	s   ?C C+*C+c                 Z   |                      t          j                  }g }| j        d|                                 }|                     |t          j        t          j                  }|                    |           | 	                    ||           | 
                    |t                    \  }}|                     |t          j                   |                     |t          j                   |                     |j        d           |                     |j        d           dS )z!create a SOA query for a hostnamer.   r0   r   r   N)r2   r
   r3   r#   r4   r5   rN   r7   r:   r;   r<   r$   r=   r>   r?   r@   rA   nscountrD   s          r*   test_soa_hostname_queryz)TestSimpleQueries.test_soa_hostname_query   s   !!#"677	+++t':':'<'<'<=##D#*;S=NOO9---$$QY$77 	$?$$Xs/?@@@%%h0DEEE)1---)1-----r+   c                 L   |                      t          j                  }g }d|                                 z  }|                     |t          j        t          j                  }|                    |           |                     ||           | 	                    |t                    \  }}|                     |t          j                   |                     |t          j                   |                     |j        d           |                     |j        d           dS )z*create a SOA query for an unknown hostnamez	foobar.%sr0   r   r   N)r2   r
   r3   r4   r5   rN   r7   r:   r;   r<   r$   r=   rW   r?   r@   rA   rk   rD   s          r*   test_soa_unknown_hostname_queryz1TestSimpleQueries.test_soa_unknown_hostname_query
  s   !!#"677	d11334##D#*;S=NOO9---$$QY$77 	$?$$Xs/EFFF%%h0DEEE)1---)1-----r+   c                 f   |                      t          j                  }g }|                                 }|                     |t          j        t          j                  }|                    |           |                     ||           | 	                    |t                    \  }}|                     |t          j                   |                     |t          j                   |                     |j        d           |                     |j        d         j        j        d           dS )zcreate a SOA query for a domainr0   r   r   i  N)r2   r
   r3   r4   r5   rN   r7   r:   r;   r<   r$   r=   r>   r?   r@   rA   rB   rC   minimumrD   s          r*   test_soa_domain_queryz'TestSimpleQueries.test_soa_domain_query  s	   !!#"677	""$$##D#*;S=NOO9---$$QY$77 	$?$$Xs/?@@@%%h0DEEE)1---)!,2:DAAAAAr+   )__name__
__module____qualname__r!   rJ   rQ   rT   rX   r]   re   ri   rl   rn   rq   __classcell__r)   s   @r*   r   r   G   s            * * *&F F F(* * *&. . .@  2A A A6  0. . .&. . .&B B B B B B Br+   r   c                   T     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 xZS )TestDNSUpdatesc                     t          t          |                                            t          | _        t
          | _        t          | _        t          | _        t          | _        d S r   )	r    rx   r!   r"   r#   r$   r%   r&   r   r'   s    r*   r!   zTestDNSUpdates.setUp0  sF    nd##))+++!"
r+   c                    |                      t          j                  }g }| j        d|                                 }|                     |t          j        t          j                  }|                    |           |                                 }|                     |t          j        t          j                  }|                    |           | 	                    ||           	 | 
                    |t                    \  }}|                     |t          j                   dS # t          j        $ r Y dS w xY w)zcreate two update requestsr.   r0   N)r2   r
   DNS_OPCODE_UPDATEr#   r4   r5   r6   r7   r:   r;   r<   r$   r=   r[   r\   r   r(   rE   updatesr9   urH   rI   s          r*   test_two_updateszTestDNSUpdates.test_two_updates9  s(   !!#"788+++t':':'<'<'<=##D#/3;LMMq""$$##D#/3;LMMq7+++		(((;; (X((33HIIIII~ 	 	 	
 DD	s   +?D, ,D?>D?c                    |                      t          j                  }g }|                                 }|                     |t          j        t          j                  }|                    |           |                     ||           | 	                    |t                    \  }}|                     |t          j                   dS )z"create update with DNS_QCLASS_NONEr0   N)r2   r
   r{   r4   r5   r6   rg   r:   r;   r<   r$   r=   rh   r|   s          r*   test_update_wrong_qclassz'TestDNSUpdates.test_update_wrong_qclassR  s    !!#"788""$$##D#/3;NOOq7+++$$QY$77 	$?$$Xs/CDDDDDr+   c                    |                      t          j                  }g }|                                 }|                     |t          j        t          j                  }|                    |           |                     ||           g }t          j	                    }| j
        d|                                 |_        t          j        |_        t          j        |_        d|_        d|_        |                    |           t%          |          |_        ||_        	 |                     |t,                    \  }}|                     |t          j                   dS # t2          j        $ r Y dS w xY w)ztest update with a non-null TTLr.   r   r   r0   N)r2   r
   r{   r4   r5   rN   r7   r:   r;   res_recr#   r9   DNS_QTYPE_TXTrr_typerg   rr_classttllengthlenrA   rB   r<   r$   r=   r[   r\   r   	r(   rE   r}   r9   r~   prereqsrrH   rI   s	            r*   $test_update_prereq_with_non_null_ttlz3TestDNSUpdates.test_update_prereq_with_non_null_ttl`  sU   !!#"788""$$##D#*;S=NOOq7+++KMM KKK)<)<)>)>)>?%	(
qLL				(((;; (X((33HIIIII~ 	 	 	
 DD	s   %?E& &E98E9c                    |                      t          j                  }g }|                                 }|                     |t          j        t          j                  }|                    |           |                     ||           g }t          j	                    }| j
        d|                                 |_        t          j        |_        t          j        |_        d|_        d|_        |                    |           t%          |          |_        ||_        |                     |t,                    \  }}|                     |t          j                   dS )z"test update with a non-null lengthr.   r   r   r0   N)r2   r
   r{   r4   r5   rN   r7   r:   r;   r   r#   r9   r   r   DNS_QCLASS_ANYr   r   r   r   rA   rB   r<   r$   r=   DNS_RCODE_NXRRSETr   s	            r*   'test_update_prereq_with_non_null_lengthz6TestDNSUpdates.test_update_prereq_with_non_null_length  s,   !!#"788""$$##D#*;S=NOOq7+++KMM KKK)<)<)>)>)>?%	'
qLL		 $$QY$77 	$?$$Xs/DEEEEEr+   c                    |                      t          j                  }g }|                                 }|                     |t          j        t          j                  }|                    |           |                     ||           g }t          j	                    }d|                                 z  |_
        t          j        |_        t          j        |_        d|_        d|_        |                    |           t#          |          |_        ||_        |                     |t*                    \  }}|                     |t          j                   dS )z#test update with a nonexisting namezidontexist.%sr   r0   N)r2   r
   r{   r4   r5   rN   r7   r:   r;   r   r9   r   r   r   r   r   r   r   rA   rB   r<   r$   r=   r   r   s	            r*   #test_update_prereq_nonexisting_namez2TestDNSUpdates.test_update_prereq_nonexisting_name  s#   !!#"788""$$##D#*;S=NOOq7+++KMM 4#6#6#8#88%	'
qLL		 $$QY$77 	$?$$Xs/DEEEEEr+   c                     ddg}}|                      ||          }|                     |t                    \  }}|                     |t          j                   |                     ||           dS )test adding records workstextrec"This is a test"r0   N)make_txt_updater<   r$   r=   r
   r>   check_query_txtr(   prefixtxtrE   rH   rI   s         r*   test_update_add_txt_recordz)TestDNSUpdates.test_update_add_txt_record  sx    "4!5  --$$QY$77 	$?$$Xs/?@@@VS)))))r+   c                    d|                                  z  }|                     t          j                  }g }|                                  }|                     |t          j        t          j                  }|                    |           |                     ||           g }t          j	                    }||_
        t          j        |_        t          j        |_        d|_        d|_        |                     dg          }||_        |                    |           t%          |          |_        ||_        |                     |t,                    \  }}	|                     |t          j                   |                     t          j                  }g }
|                     |t          j        t          j                  }|
                    |           |                     ||
           |                     |t,                    \  }}	|                     |t          j                   |                     t          j                  }g }|                                  }|                     |t          j        t          j                  }|                    |           |                     ||           g }t          j	                    }||_
        t          j        |_        t          j        |_        d|_        d|_        |                     dg          }||_        |                    |           t%          |          |_        ||_        |                     |t,                    \  }}	|                     |t          j                   |                     t          j                  }g }
|                     |t          j        t          j                  }|
                    |           |                     ||
           |                     |t,                    \  }}	|                     |t          j                   dS )zTest if deleting records workszdeleterec.%s    r   r0   r   Nr4   r2   r
   r{   r5   rN   r7   r:   r;   r   r9   r   r   r   r   r   make_txt_recordrC   r   rk   nsrecsr<   r$   r=   r>   r3   rg   rW   r(   NAMErE   r}   r9   r~   r   rC   rH   rI   rF   rG   s               r*   test_delete_recordz!TestDNSUpdates.test_delete_record  s     3 3 5 55 !!#"788""$$##D#*;S=NOOq7+++KMM%	&
$$&8%9::qLL	 $$QY$77 	$?$$Xs/?@@@ !!#"677	##D#*;S=NOO9---$$QY$77 	$?$$Xs/?@@@ !!#"788""$$##D#*;S=NOOq7+++KMM%	(
$$&8%9::qLL	 $$QY$77 	$?$$Xs/?@@@ !!#"677	##D#*;S=NOO9---$$QY$77 	$?$$Xs/EFFFFFr+   c                    d|                                  z  }|                     t          j                  }g }|                                  }|                     |t          j        t          j                  }|                    |           |                     ||           g }t          j	                    }||_
        t          j        |_        t          j        |_        d|_        d|_        |                     dg          }||_        |                    |           t%          |          |_        ||_        |                     |t,                    \  }}	|                     |t          j                   |                     t          j                  }g }
|                     |t          j        t          j                  }|
                    |           |                     ||
           |                     |t,                    \  }}	|                     |t          j                   |                     t          j                  }g }|                                  }|                     |t          j        t          j                  }|                    |           |                     ||           g }t          j	                    }||_
        t          j        |_        t          j        |_        d|_        d|_        |                     dg          }||_        |                    |           t%          |          |_        ||_        |                     |t,                    \  }}	|                     |t          j                   |                     t          j                  }g }
|                     |t          j        t          j                  }|
                    |           |                     ||
           |                     |t,                    \  }}	|                     |t          j                   |                     t          j                  }g }|                                  }|                     |t          j        t          j                  }|                    |           |                     ||           g }t          j	                    }||_
        t          j        |_        t          j        |_        d|_        d|_        |                     dg          }||_        |                    |           t%          |          |_        ||_        |                     |t,                    \  }}	|                     |t          j                   |                     t          j                  }g }
|                     |t          j        t          j                  }|
                    |           |                     ||
           |                     |t,                    \  }}	|                     |t          j                   dS )z:Test if adding, deleting and then readding a records workszreaddrec.%sr   r   r   r0   r   Nr   r   s               r*   test_readd_recordz TestDNSUpdates.test_readd_record  sr    t22444 !!#"788""$$##D#*;S=NOOq7+++KMM%	&
$$&8%9::qLL	 $$QY$77 	$?$$Xs/?@@@ !!#"677	##D#*;S=NOO9---$$QY$77 	$?$$Xs/?@@@ !!#"788""$$##D#*;S=NOOq7+++KMM%	(
$$&8%9::qLL	 $$QY$77 	$?$$Xs/?@@@ !!#"677	##D#*;S=NOO9---$$QY$77 	$?$$Xs/EFFF !!#"788""$$##D#*;S=NOOq7+++KMM%	&
$$&8%9::qLL	 $$QY$77 	$?$$Xs/?@@@ !!#"677	##D#*;S=NOO9---$$QY$77 	$?$$Xs/?@@@@@r+   c                    |                      t          j                  }g }|                                 }|                     |t          j        t          j                  }|                    |           |                     ||           g }t          j	                    }d|                                 z  |_
        t          j        |_        t          j        |_        d|_        d|_        t          j                    }d|_        d|                                 z  |_        ||_        |                    |           t)          |          |_        ||_        |                     |t0                    \  }}|                     |t          j                   |                      t          j                  }g }	d|                                 z  }|                     |t          j        t          j                  }
|	                    |
           |                     ||	           |                     |t0                    \  }}|                     |t          j                   |                     |j        d           |j        d         }|                     |j        t          j                   |                     |j        j        d           |                     |j        j        d|                                 z             d	S )
ztest adding MX records worksrM   r   r   
   zmail.%sr0   r   r   N)r2   r
   r{   r4   r5   rN   r7   r:   r;   r   r9   rV   r   r   r   r   	mx_record
preferenceexchangerC   r   rk   r   r<   r$   r=   r>   r3   r@   rA   rB   )r(   rE   r}   r9   r~   r   rC   rH   rI   rF   rG   anss               r*   test_update_add_mx_recordz(TestDNSUpdates.test_update_add_mx_record  s   !!#"788""$$##D#*;S=NOOq7+++KMM++---$	&
"T%8%8%:%::qLL	 $$QY$77 	$?$$Xs/?@@@!!#"677	d))+++##D#*:C<MNN9---$$QY$77 	$?$$Xs/?@@@)1---q!c&6777-r222+Y9L9L9N9N-NOOOOOr+   )rr   rs   rt   r!   r   r   r   r   r   r   r   r   r   ru   rv   s   @r*   rx   rx   /  s              2E E E     DF F F6F F F6* * *PG PG PGdvA vA vAp-P -P -P -P -P -P -Pr+   rx   c                   f     e Zd 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 xZS )TestComplexQueriesc                    |                      t          j                  }|                                 }|                     |t          j        t          j                  }|                     ||g           t          j                    }||_	        ||_
        t          j        |_        d|_        d|_        ||_        d|_        |g|_        |                     |t$                    \  }}	|                     |t          j                   d S )Nr   r   r   r0   )r2   r
   r{   r4   r5   rN   r7   r;   r   r9   r   r   r   r   rC   rk   r   r<   r$   r=   r>   )
r(   keyvalueqtyperE   r9   r~   r   rH   rI   s
             r*   make_dns_updatez"TestComplexQueries.make_dns_update  s    !!#"788""$$##D#*;S=NOOA3'''KMM	&
	3$$QY$77 	$?$$Xs/?@@@@@r+   c                     t          t          |                                            t          | _        t
          | _        t          | _        t          | _        t          | _        d S r   )	r    r   r!   r"   r#   r$   r%   r&   r   r'   s    r*   r!   zTestComplexQueries.setUp  sI     $''--/// ""
r+   c                 
   	 d|                                  z  }| j        d|                                  }|                     ||t          j                   |                     t          j                  }g }d|                                  z  }|                     |t          j        t          j	                  }t          d|j                   |                    |           |                     ||           |                     || j                  \  }}|                     |t          j                   |                     |t          j                   |                     |j        d           |                     |j        d         j        t          j                   |                     |j        d         j        | j        d|                                             |                     |j        d         j        t          j                   |                     |j        d         j        | j                   |                     t          j                  }g }|                                  }|                     |t          j        t          j	                  }	|                    |	           |                     ||           g }t          j                    }
d|                                  z  |
_        t          j        |
_        t          j        |
_        d|
_        d|
_        | j        d|                                  |
_        |                    |
           t?          |          |_         ||_!        |                     || j                  \  }}|                     |t          j                   d	S # |                     t          j                  }g }|                                  }|                     |t          j        t          j	                  }	|                    |	           |                     ||           g }t          j                    }
d|                                  z  |
_        t          j        |
_        t          j        |
_        d|
_        d|
_        | j        d|                                  |
_        |                    |
           t?          |          |_         ||_!        |                     || j                  \  }}|                     |t          j                   w xY w)
r-   zcname_test.%sr.   r/   r0   r   r   r   r   N)"r4   r#   r   r
   DNS_QTYPE_CNAMEr2   r3   r5   r6   r7   r8   r9   r:   r;   r<   r$   r=   r>   r?   r@   rA   rB   r   rC   r{   rN   r   rg   r   r   r   r   rk   r   )r(   r9   rC   rE   rF   rG   rH   rI   r}   r~   r   s              r*   rJ   z#TestComplexQueries.test_one_a_query  s   :	E #T%8%8%:%::D#{{{D,?,?,A,A,ABE  uc.ABBB%%c&:;;AI #T%8%8%:%::D''(+(+(9; ;A -(((Q##Ay111(((@@ (X((33CDDD))(C4HIIIX-q111X-a08#:MNNNX-a06#{{{D,?,?,A,A,A9C D D DX-a08#/JJJX-a06"n. . .
 %%c&;<<AG&&((D''(+(9(+(9; ;A NN1##Aw///GA$t':':'<'<<AF+AI,AJAEAH!%d.A.A.C.C.CDAGNN1GAIAH (((@@ (X((33CDDDDD3 %%c&;<<AG&&((D''(+(9(+(9; ;A NN1##Aw///GA$t':':'<'<<AF+AI,AJAEAH!%d.A.A.C.C.CDAGNN1GAIAH (((@@ (X((33CDDDDs   I O F Uc                    d|                                  z  }d|                                  z  }d|                                  z  }|                     ||t          j                   |                     ||t          j                   |                     |t          t          j                   |                     t          j                  }g }|                     |t          j        t          j	                  }|
                    |           |                     ||           |                     |t                    \  }}|                     |t          j                   |                     |t          j                   |                     |j        d           |                     |j        d         j        t          j                   |                     |j        d         j        |           |                     |j        d         j        |           |                     |j        d         j        t          j                   |                     |j        d         j        |           |                     |j        d         j        |           |                     |j        d         j        t          j                   |                     |j        d         j        | j                   d S )	Ncnamechain0.%scnamechain1.%scnamechain2.%sr0      r   r   r   )r4   r   r
   r   r$   r6   r2   r3   r5   r7   r:   r;   r<   r=   r>   r?   r@   rA   rB   r   r9   rC   	r(   name0name1name2rE   rF   rG   rH   rI   s	            r*   test_cname_two_chainz'TestComplexQueries.test_cname_two_chain  s    4#6#6#8#88 4#6#6#8#88 4#6#6#8#88UE3+>???UE3+>???UIs???!!#"677	##E3?$'$57 79---$$QY$77 	$?$$Xs/?@@@%%h0DEEE)1---)!,4c6IJJJ)!,15999)!,2E:::)!,4c6IJJJ)!,15999)!,2E:::)!,4coFFF)!,2.	* 	* 	* 	* 	*r+   c                     d|                                  z  }	 |                     |dt          j                   |                     d           d S # t
          $ r Y d S w xY w)Nzcnamedotprefix0.%s z1Successfully added empty CNAME, which is invalid.)r4   r   r
   r   failAssertionError)r(   r   s     r*   test_invalid_empty_cnamez+TestComplexQueries.test_invalid_empty_cname:  sx    $t':':'<'<<	K  C,?@@@ IIIJJJJJ  	 	 	DD	s   !A 
AAc                 2   d|                                  z  }d|                                  z  }d|                                  z  }|                     ||t          j                   |                     ||t          j                   |                     |t          t          j                   |                     t          j                  }g }|                     |t          j	        t          j
                  }|                    |           |                     ||           |                     |t                    \  }}|                     |t          j                   |                     |t          j                   |                     |j        d           |                     |j        d         j        t          j                   |                     |j        d         j        |           |                     |j        d         j        |           |                     |j        d         j        t          j                   |                     |j        d         j        |           |                     |j        d         j        |           d S )Nr   r   r   r0   r   r   r   )r4   r   r
   r   r$   r6   r2   r3   r5   r   r7   r:   r;   r<   r=   r>   r?   r@   rA   rB   r   r9   rC   r   s	            r*   'test_cname_two_chain_not_matching_qtypez:TestComplexQueries.test_cname_two_chain_not_matching_qtypeC  s9    4#6#6#8#88 4#6#6#8#88 4#6#6#8#88UE3+>???UE3+>???UIs???!!#"677	##E3+<$'$57 79---$$QY$77 	$?$$Xs/?@@@%%h0DEEE 	)1---)!,4c6IJJJ)!,15999)!,2E:::)!,4c6IJJJ)!,15999)!,2E:::::r+   c                    d|                                  z   }d|                                  z   }d|                                  z   }|                     ||t          j                   |                     ||t          j                   |                     ||t          j                   |                     t
          j                  }g }|                     |t
          j        t
          j	                  }|
                    |           |                     ||           |                     || j                  \  }}d}	|                     t          |j                  |	           d S )Nzcnamelooptestrec.zcnamelooptestrec2.zcnamelooptestrec3.r0      )r4   r   r   DNS_TYPE_CNAMEr2   r
   r3   r5   r6   r7   r:   r;   r<   r$   r@   r   rB   )
r(   cname1cname2cname3rE   rF   rG   rH   rI   max_recursion_depths
             r*   test_cname_loopz"TestComplexQueries.test_cname_loopc  sQ   $t':':'<'<<%(;(;(=(==%(;(;(=(==VVT-@AAAVVT-@AAAVVT-@AAA!!#"677	##F$'O$'$57 7 	9--- $$QT^$<< 	$? !X-..0CDDDDDr+   c                 <   d                     ||                                           }d}|dz   }t          d|dz             D ]$} ||          }|                     |||           %|                     t
          j                  }g }	|                     ||t
          j                  }
|		                    |
           | 
                    ||	           |                     || j                  \  }}|                     t          |j                  |           d S )Nzlimittestrec{0}.{1}r      r   r0   )formatr4   ranger   r2   r
   r3   r5   r7   r:   r;   r<   r$   r@   r   rB   )r(   rtyperec_genr9   limitnum_recs_to_enteriiprE   rF   rG   rH   rI   s                r*   max_rec_testzTestComplexQueries.max_rec_test|  s-   $++E43F3F3H3HII!AIq+A-.. 	2 	2AB  r51111!!#"677	##D$)$'$57 7 	9--- $$QT^$<< 	$? 	X-..0ABBBBBr+   c                 N    d }|                      t          j        |           d S )Nc                 &    dt          |           z   S )N127.0.0.strr   s    r*   ip4_genz7TestComplexQueries.test_record_limit_A.<locals>.ip4_gen  s    A&&r+   r   r   )r   r
   r6   )r(   r   s     r*   test_record_limit_Az&TestComplexQueries.test_record_limit_A  s2    	' 	' 	'AAAAAr+   c                 N    d }|                      t          j        |           d S )Nc                 &    dt          |           z   S )NzAAAA:0:0:0:0:0:0:r   r   s    r*   ip6_genz:TestComplexQueries.test_record_limit_AAAA.<locals>.ip6_gen  s    &Q//r+   r   )r   r
   DNS_QTYPE_AAAA)r(   r   s     r*   test_record_limit_AAAAz)TestComplexQueries.test_record_limit_AAAA  s3    	0 	0 	0 2GDDDDDr+   c                 N    d }|                      t          j        |           d S )Nc                     t          j                    }d|_        d|_        d|_        dt          |           z   |_        |S )Nr   \   
srvtestrec)r
   
srv_recordpriorityweightportr   target)r   recs     r*   srv_genz9TestComplexQueries.test_record_limit_SRV.<locals>.srv_gen  s;    .""CCLCJCH%A.CJJr+   r   )r   r
   DNS_QTYPE_SRV)r(   r   s     r*   test_record_limit_SRVz(TestComplexQueries.test_record_limit_SRV  s5    	 	 	 	 17CCCCCr+   c                 >   d|                                  z   }d|                                  z   }d|                                  z   }d}d}|dz   }|                     ||t          j                   |                     ||t          j                   |dz
  }t	          d|dz             D ]5}|t          |          z   }	|                     ||	t          j                   6|                     t          j	                  }
g }| 
                    |t          j        t          j                  }|                    |           |                     |
|           |                     |
| j        	          \  }}|                     t#          |j                  |           d S )
Nzcnamelimittestrec.zcnamelimittestrec2.zcnamelimittestrec3.r   r   r   r   r   r0   )r4   r   r   r   r   r   r
   r6   r2   r3   r5   r7   r:   r;   r<   r$   r@   r   rB   )r(   r   r   r   	ip_prefixr   r   num_arecs_to_enterr   r   rE   rF   rG   rH   rI   s                  r*   test_cname_limitz#TestComplexQueries.test_cname_limit  s   %(;(;(=(==&)<)<)>)>>&)<)<)>)>>	!AIVVT-@AAAVVT-@AAA.2q,Q.// 	> 	>ASVV#B  S_====!!#"677	##F$'O$'$57 7 	9--- $$QT^$<< 	$? 	X-..0ABBBBBr+   c                 (   d|                                  z   }d|                                  z   }d|                                  z   }|                     ||t          j                   |                     ||t          j                   |                     t
          j                  }g }|                     |t
          j        t
          j	                  }|
                    |           |                     ||           |                     || j                  \  }}|                     t          |j                  d           |                     |j        d         j        |           |                     |j        d         j        |           d S )Nzcnameanytestrec.zcnameanytestrec2.zcnameanytestrec3.r0   r   r   )r4   r   r   r   r2   r
   r3   r5   r`   r7   r:   r;   r<   r$   r@   r   rB   r9   rC   )	r(   r   r   r   rE   rF   rG   rH   rI   s	            r*   test_cname_any_queryz'TestComplexQueries.test_cname_any_query  sr   #d&9&9&;&;;$t':':'<'<<$t':':'<'<<VVT-@AAAVVT-@AAA!!#"677	##F$'$5$'$57 7 	9--- $$QT^$<< 	$? 	X-..222)!,16:::)!,2F;;;;;r+   )rr   rs   rt   r   r!   rJ   r   r   r   r   r   r   r   r   r   r   ru   rv   s   @r*   r   r     s
       A A A(    =E =E =E~* * *BK K K; ; ;@E E E2C C C.B B B
E E E
D D DC C C<< < < < < < <r+   r   c                   *     e Zd Z fdZd Zd Z xZS )TestInvalidQueriesc                     t          t          |                                            t          | _        t
          | _        t          | _        t          | _        t          | _        d S r   )	r    r   r!   r"   r#   r$   r%   r&   r   r'   s    r*   r!   zTestInvalidQueries.setUp  sG     $''--///!"
r+   c                    d}	 t          j         t           j        t           j        d          }|                    | j        df           |                    dd           ||                                 n# ||                                 w w xY w|                     t          j	                  }g }| j
        d|                                 }|                     |t          j        t          j                  }t          d|j                   |                    |           |                     ||           |                     || j                  \  }}|                     |t          j                   |                     |t          j	                   |                     |j        d           |                     |j        d         j        | j                   dS )	zTsend 0 bytes follows by create a query packet
           containing one query recordNr   5   r+   r.   r/   r0   r   )r\   AF_INET
SOCK_DGRAMconnectr$   sendcloser2   r
   r3   r#   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   )r(   srE   rF   r9   rG   rH   rI   s           r*   rJ   z#TestInvalidQueries.test_one_a_query  s    	fnf.?CCAIIt~r*+++FF3NNN}			 }				  !!#"677	+++t':':'<'<'<=##D#/3;LMMmQV$$$9---$$QT^$<< 	$?$$Xs/?@@@%%h0DEEE)1---)!,2.	* 	* 	* 	* 	*s   AA7 7Bc                    |                      t          j                  }g }dd|                                 }|                     |t          j        t          j                  }t          d|j                   |	                    |           | 
                    ||           |xj        t          j        z  c_        d}	 t          j        |          }t          j        t          j        t          j        d          }|                    t&                     | j        }|                    |df           t-          j        dt1          |                    }||z  }|                    |d           |                    dd          }	|                     dt1          |	                     n# t          j        $ r Y nw xY w||                                 dS dS # ||                                 w w xY w)	zsend a reply instead of a queryfakefakefaker.   r/   Nr   r  z!Hi  )r2   r
   r3   r4   r5   r6   r7   r8   r9   r:   r;   	operationDNS_FLAG_REPLYndrr   r\   r  SOCK_STREAM
settimeoutr   r$   r  structpackr   r  recvr@   r  )
r(   rE   rF   r9   rG   r	  send_packetr1   
tcp_packetrecv_packets
             r*   test_one_a_replyz#TestInvalidQueries.test_one_a_reply  s    !!#"677	(..$*=*=*?*?*?@##D#/3;LMMmQV$$$9---	s))	,q//Kfnf.@!DDALL!!!>DIItRj!!!T3{+;+;<<J+%JFF:q!!!&&Q//KQK 0 01111~ 	 	 	
 D	 }					 }q}				 s+   C,F0 /G 0G?G GG G8)rr   rs   rt   r!   rJ   r  ru   rv   s   @r*   r   r     sV            * * *<" " " " " " "r+   r   c                        e Zd Z fdZ fdZd%dZd%dZd Zd Zd Z	d	 Z
d
 Zd Zd Zd%dZdddgf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" xZ#S )'	TestZonesc                 .   t          t          |                                            t          | _        t
          | _        t          | _        t          | _        t          | _        d| _	        t          j
        d| j        z  | j        | j                  | _        t          d| j        z   |                                 t                      | j                  | _        d| j	        z   dz   t!          | j                                                  z   | _        d S )Ntest.lanncacn_ip_tcp:%s[sign]ldap://urlr%   session_infor	   zDC=z#,CN=MicrosoftDNS,DC=DomainDNSZones,)r    r  r!   r"   r#   r$   r%   r&   r   zoner   rpc_connr   get_loadparmr   samdbr   get_default_basednzone_dnr'   s    r*   r!   zTestZones.setUp-  s    i$$&&&!"
	!+,C-1^-=,0GTZA A y4>9"//11(6(8(8'+z3 3 3
 ty(<=4:88::;;<r+   c                     t          t          |                                            	 |                     | j                   d S # t
          $ r&}|j        \  }}|t          j        k    r Y d }~d S d }~ww xY wr   )	r    r  tearDowndelete_zoner!  RuntimeErrorargsr   "WERR_DNS_ERROR_ZONE_DOES_NOT_EXIST)r(   enumstringr)   s       r*   r(  zTestZones.tearDownC  s    i'')))	TY''''' 	 	 	FMS&f??? @?????	s   A 
A6A11A6Fc                     t          j                    }||_        t          j        |_        t          |          |_        t           j        |_	        d|_
        d|_        t          j        |_        |S )Nr   )r   !DNS_RPC_ZONE_CREATE_INFO_LONGHORNpszZoneNamer   DNS_ZONE_TYPE_PRIMARY
dwZoneTyper   fAgingDNS_DP_DOMAIN_DEFAULT	dwDpFlagsfDsIntegratedfLoadExistingDNS_ZONE_UPDATE_UNSECUREfAllowUpdate)r(   r!  aging_enabledzone_creates       r*   make_zone_objzTestZones.make_zone_objM  s_    ACC"&!%!; // ) ?$%!$%!#'#@ r+   c           
         |                      ||          }	 t          j        }| j                            |d| j        d ddt          j        |           d S # t          $ r }|                     |           Y d }~d S d }~ww xY w)Nr   
ZoneCreate)	r>  r   DNS_CLIENT_VERSION_LONGHORNr"  DnssrvOperation2r$   DNSSRV_TYPEID_ZONE_CREATEr   r   )r(   r!  r<  r=  client_versionr-  s         r*   create_zonezTestZones.create_zoneX  s    ((}==	&BNM**>+,+/>+/+,+7+4+N+68 8 8 8 8  	 	 	IIaLLLLLLLLL	s   <A 
B  A;;B c                 v   |                                 D ]\  }}t          j                    }||_        ||_        t          j        }t          j        }	 | j                            |d| j	        | j
        dd||           k# t          $ r,}|                     t          |                     Y d }~d }~ww xY wd S )Nr   ResetDwordProperty)itemsr   DNS_RPC_NAME_AND_PARAMdwParampszNodeNamerA  DNSSRV_TYPEID_NAME_AND_PARAMr"  rB  r#   r!  r   r   r   )r(   kwargsr   val
name_paramrD  nap_typer-  s           r*   
set_paramszTestZones.set_paramsg  s     	" 	"HC"9;;J!$J%(J"&BN =H
"..~/0/3{/3y/0/C/7/9; ; ; ;  " " "		#a&&!!!!!!!!"!	" 	"s   +B  
B6
"B11B6c                 4   d                     || j                  }|                     |          }|D ]} ||           |d |D             d}| j                            t
          j                            | j        |t
          j                             d S )Nz
DC={0},{1}c                 ,    g | ]}t          |          S  )r   .0r   s     r*   
<listcomp>z1TestZones.ldap_modify_dnsrecs.<locals>.<listcomp>  s    .M.M.Mqx{{.M.M.Mr+   )dn	dnsRecord)	r   r&  ldap_get_dns_recordsr$  modifyldbMessage	from_dictFLAG_MOD_REPLACE)r(   r9   funcrX  dns_recsr   update_dicts          r*   ldap_modify_dnsrecszTestZones.ldap_modify_dnsrecs{  s      t|44,,T22 	 	CDIIII.M.MH.M.M.MNN
#+//
0;030DF F 	G 	G 	G 	G 	Gr+   c                 V   |                      || j                  }|                     || j                  \  }}|                     |t
          j                   |                     |          }fd|D             }|                     t          |          d           |d         S )Nr0   c                 4    g | ]}|j         j        k    |S rT  )datar   )rV  r   r   s     r*   rW  z/TestZones.dns_update_record.<locals>.<listcomp>  s'    555a16:#4#4#4#4#4r+   r   r   )
r   r!  r<   r$   r=   r
   r>   rZ  r@   r   )r(   r   r   rE   coderH   recss     `    r*   dns_update_recordzTestZones.dns_update_record  s      di8833ADN3KKx$$T3+;<<<((0055554555TA&&&Awr+   c                     |dz   |z   }t          j                    }d|_        t           j        |_        | j                            ||g           d S )Nr.   i  )r   DnssrvRpcRecorddwTimeStampDNS_TYPE_TOMBSTONEwTyper$  dns_replace)r(   r   r   r!  r9   tos         r*   dns_tombstonezTestZones.dns_tombstone  sO    |d"!##*
tbT*****r+   c                     d                     |          }| j                            | j        t          j        |dg          S )Nz"(&(objectClass=dnsNode)(name={0}))*basescope
expressionattrs)r   r$  searchr&  r\  SCOPE_SUBTREE)r(   r9   exprs      r*   ldap_get_recordszTestZones.ldap_get_records  sF     4::4@@z  dl#:K,0 ! ? ? 	?r+   c                 v    |                      |          }d |d                             d          D             S )Nc                 B    g | ]}t          t          j        |          S rT  )r   r   rk  rU  s     r*   rW  z2TestZones.ldap_get_dns_records.<locals>.<listcomp>  s5     6 6 6 4/33 6 6 6r+   r   rY  )r|  get)r(   r9   recordss      r*   rZ  zTestZones.ldap_get_dns_records  sF    ''--6 6 446 6 6 	6r+   c                    | j                             | j        t          j        dd                    | j                  z   dg          }|                     t          |          d           d |d         	                    d          D             }i dddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'fd(|D             S ))N(&(objectClass=dnsZone)(name={0}))dNSPropertyrt  r   c                 B    g | ]}t          t          j        |          S rT  r   r   DnsPropertyrU  s     r*   rW  z4TestZones.ldap_get_zone_settings.<locals>.<listcomp>  5     9 9 9 D,a00 9 9 9r+   r   EMPTYTYPEr   ALLOW_UPDATE   SECURE_TIME   NOREFRESH_INTERVAL   SCAVENGING_SERVERS   AGING_ENABLED_TIME    REFRESH_INTERVAL@   AGING_STATE   DELETED_FROM_HOSTNAME   MASTER_SERVERS   AUTO_NS_SERVERS   DCPROMO_CONVERT   SCAVENGING_SERVERS_DA   MASTER_SERVERS_DA   NS_SERVERS_DA   NODE_DBFLAGSc                 Z    i | ]'}|j                                                  |j        (S rT  )idlowerrf  )rV  rE   zone_prop_idss     r*   
<dictcomp>z4TestZones.ldap_get_zone_settings.<locals>.<dictcomp>  s0    CCCad#))++QVCCCr+   )
r$  ry  r&  r\  
SCOPE_BASEr   r!  r@   r   r  )r(   r  propsr  s      @r*   ldap_get_zone_settingsz TestZones.ldap_get_zone_settings  s   *##S^/H$1$8$8$C$C0D+8/ $ ; ; 	Wq)))9 9!!*..779 9 90w 0v0~0 }0 3	0
 30 30 10 }0 60 /0 00 00 60 20 0  !0" DCCCUCCCCr+   c           	          |                      | j        |           |                     ddt          t	          |                    t
          j                   d S )Nr<  r   NoRefreshIntervalRefreshIntervalAgingAllowUpdate)rE  r!  rQ  r   boolr   r:  )r(   enables     r*   	set_agingzTestZones.set_aging  sc    &999!()!$v,,//$($A 	 	C 	C 	C 	C 	Cr+   T	agingtesttest txtc                 .   |                      d           |                                 }|                     |d         d u           |                     |d                    |                     ddg          }|                     |j        d           d S )NTr  aging_stater  r  r   )r  r  
assertTrueri  assertNotEqualrl  )r(   r  r9   r   settingsr   s         r*   test_set_agingzTestZones.test_set_aging  s    d###..00/t;<<</000$$[:,??COQ/////r+   c                 .   |                      d           |                                 }|                     |d         d u           |                     |d                    |                     ddg          }|                     |j        d           d S )NFr  r  r  r  r   )r  r  r  assertFalseri  r  rl  )r(   r  r   s      r*   test_set_aging_disabledz!TestZones.test_set_aging_disabled  s    e$$$..00/t;<<<-0111$$[:,??COQ/////r+   c                    	 ddg}}                      d                                ||          }|s                     d           d		 fd}                     ||                                |          }                     t          |          d	           |d         }                     |j        |j        	z
                                  ||          }|r|n|}                     |j        |j                   d S )
Nr  r  Tr  r   )r  r   c                 d                         | j        dk               | xj        z  c_        d S )Nr   r  rl  )r   decr(   s    r*   mod_tsz+TestZones.test_aging_update.<locals>.mod_ts  s0    OOCOa/000OOs"OOOOr+   r   )r  ri  rQ  rc  rZ  r@   r   rl  )
r(   r  r9   r   
before_modr  	after_modafter_updateafter_should_equalr  s
   `        @r*   test_aging_updatezTestZones.test_aging_update  sA   *cd###++D#66
 	%OO!O$$$	# 	# 	# 	# 	# 	# 	  v...--d33	Y+++aL	.#/#5	7 	7 	7--dC88+1@ZZy+7%1	3 	3 	3 	3 	3r+   c                 2    |                      d           d S )NFr  )r  r(   s    r*   test_aging_update_disabledz$TestZones.test_aging_update_disabled  s    e,,,,,r+   c                     ddg}}                       j        d           d                     dt          j                                        ||          } fd}                     ||                                ||          } fd	}                     ||                                ||          }                     |j        |j        d
z  z
                                  |j        |j                   d S )Nr  r  Tr  r   r   r  c                 j                         | j        dk               | xj        dz  z  c_        d S Nr   r   r  r   intervalr(   s    r*   r  z,TestZones.test_aging_refresh.<locals>.mod_ts  s4    OOCOa/000OOx1},OOOOr+   c                 p                         | j        dk               | xj        dz  z   z  c_        d S r  r  r  s    r*   r  z,TestZones.test_aging_refresh.<locals>.mod_ts  s9    OOCOa/000OOx(a-77OOOOr+   r   )	rE  r!  rQ  r   r:  ri  rc  r@   rl  )r(   r9   r   r  r  update_during_norefreshupdate_during_refreshr  s   `      @r*   test_aging_refreshzTestZones.test_aging_refresh  sh   *c$777((0$($A 	 	C 	C 	C ++D#66
	- 	- 	- 	- 	- 	- 	  v..."&"8"8s"C"C	8 	8 	8 	8 	8 	8 	  v... $ 6 6tS A A0<#/(Q,>	@ 	@ 	@.:#/	1 	1 	1 	1 	1r+   c           	         ddg}}|                      d           t          j                    }t          |          |_        | j                            t          j        d| j        | j	        ||d            | 
                    |          }|                     t          |          d           |                     |d         j        d           d S )Nr  r  Tr  r   r   )r  r   DNS_RPC_RECORD_BUFr   r   r"  DnssrvUpdateRecord2rA  r$   r!  rZ  r@   r   rl  )r(   r9   r   rec_bufrh  s        r*   test_rpc_add_no_timestampz#TestZones.test_rpc_add_no_timestamp  s    *cd###.00nn))1NI	 	 	 ((..TA&&&a,a00000r+   c           	      Z   ddg}}dg}|                      d           t          j                    }t          |          |_        | j                            t          j        d| j        | j	        ||d            | 
                    ||          }|                     |j        d           d S )Nr  r  	test txt2Tr  r   )r  r   r  r   r   r"  r  rA  r$   r!  ri  r@   rl  )r(   r9   r   txt2r  rec2s         r*   !test_static_record_dynamic_updatez+TestZones.test_static_record_dynamic_update  s    *c}d###.00nn))1NI	 	 	 %%dD11)1-----r+   c           	         ddg}}dg}dg}|                      d           |                     ||           t          j                    }t	          |          |_        | j                            t          j        d| j	        | j
        ||d            |                     ||           |                     |          }d |D             }|                     |t          |                   j        d           |                     |t          |                   j        d           |                     |t          |                   j        d           d S )	Nr  r  r  	test txt3Tr  r   c                 B    i | ]}t          |j        j                   |S rT  r   rf  rU  s     r*   r  z?TestZones.test_dynamic_record_static_update.<locals>.<dictcomp>G  s$    111qAFJ111r+   )r  ri  r   r  r   r   r"  r  rA  r$   r!  rZ  r  r   rl  r@   )r(   r9   r   r  txt3r  rh  s          r*   !test_dynamic_record_static_updatez+TestZones.test_dynamic_record_static_update0  sC   *c}}d###tS))).00oo))1NI	 	 	 	tT***((..11D111DSN6:::c$ii4a888c$ii4a88888r+   c           	         |                                  }t          |                                |t                      | j                  | _        ddgc}ddg}}ddg}}dd	g}}d
dg}
}	|                     | j        d           d}|                     ||dt          j
                   |                     |           |                     |           |                     ||           |                     |           |                     ||           |                     ||          }fd}|                     ||           |                     ||           t          j                    }t          |          |_        | j                            t          j        d| j        | j        ||d            |                     |	|
           |                     |	|
| j                   |                     |           d}|                    t1          |j                  dz
            }	 | j                            | j        t8          j        |dg          }n># t8          j        $ r,}|                     tA          |                     Y d }~nd }~ww xY wd |D             }| !                    |tE          ||g                     d S )Nr  r  r  
agingtest2r  
agingtest3r  
agingtest4	test txt4
agingtest5	test txt5Tr  r   r   r  c                 L    | j         j        k    r| xj        dz  c_        d S d S )Nr   )rf  r   rl  )r   r   s    r*   r  z>TestZones.test_dns_tombstone_custom_match_rule.<locals>.mod_tsi  s.    x|s""1$ #"r+   r   '(dnsRecord:1.3.6.1.4.1.7165.4.5.3:={0})rs  rt  c                 R    h | ]$}t          |                    d                     %S )r9   )r   r  rU  s     r*   	<setcomp>zATestZones.test_dns_tombstone_custom_match_rule.<locals>.<setcomp>  s*    999QUU6]]++999r+   )#r#  r   	samdb_urlr   r&   r$  rE  r!  rQ  r   r:  ri  rc  r   r  r   r   r"  r  rA  r$   rq  rZ  r   r   rl  ry  r&  r\  rz  LdbErrorr   r   r@   set)r(   r%   r9   r   r  name3r  name4txt4name5txt5r  last_updater  r  r{  resr-  updated_namesr   s                      @r*   $test_dns_tombstone_custom_match_rulez.TestZones.test_dns_tombstone_custom_match_ruleL  s     r||~~"(6(8(8'+z3 3 3
  *	c"[Mt"[Mt"[Mt"[Mt$777((0$($A 	 	C 	C 	C
 	tS)))uc***ud+++uc***ud+++,,UD99	% 	% 	% 	% 	% 	  v...  /// .00oo))1NI	 	 	 	ud+++5$	222!!%(((8{{3{677!;<<	*##S=N/3C5 $ B BCC| 	 	 	IIc!ff	99S999T5M(:(:;;;;;s   0.I J."JJc                 v   |                                  }t          |                                |t                      | j                  | _        |                     | j        d           d}|                     ||dt          j
                   d}|                    d          }	 | j                            | j        t          j        |dg	          }n># t          j        $ r,}|                     t%          |                     Y d }~nd }~ww xY w|                     d
t)          |                     d S )Nr  Tr  r   r   r  r  rs  rt  r   )r#  r   r  r   r&   r$  rE  r!  rQ  r   r:  r   ry  r&  r\  rz  r  r   r   r@   r   )r(   r%   r  r{  r   r-  s         r*   /test_dns_tombstone_custom_match_rule_no_recordsz9TestZones.test_dns_tombstone_custom_match_rule_no_records  sF     r||~~"(6(8(8'+z3 3 3
 	$777((0$($A 	 	C 	C 	C
 9{{1~~	*##S=N/3C5 $ B BCC| 	 	 	IIc!ff	CHH%%%%%s   ).C D'"DDc                 b   |                      | j        d           t          t                                          t          t                      | j                  }d}|                    | j        t          j
        |dg          }|                     t          |          d           	 d}|                    | j        t          j
        |dg          }|                     t          |          d           |                     d	           nA# t          j        $ r/}|j        \  }}|                     |t                      Y d }~nd }~ww xY w	 d
}|                    | j        t          j
        |dg          }|                     t          |          d           |                     d	           nA# t          j        $ r/}|j        \  }}|                     |t                      Y d }~nd }~ww xY w	 d}|                    d          }|                    | j        t          j
        |dg          }|                     t          |          d           |                     d	           nA# t          j        $ r/}|j        \  }}|                     |t                      Y d }~nd }~ww xY w	 d}|                    | j        t          j
        |dg          }|                     t          |          d           |                     d	           nA# t          j        $ r/}|j        \  }}|                     |t                      Y d }~nd }~ww xY w	 t          d| j        z   |                                 | j                  }d}|                    | j        t          j
        |dg          }|                     t          |          d           |                     d	           d S # t          j        $ r0}|j        \  }}|                     |t                      Y d }~d S d }~ww xY w)NTr  r  z'(dnsProperty:1.3.6.1.4.1.7165.4.5.3:=1)rs  rt  r   z$(dnsRecord:1.3.6.1.4.1.7165.4.5.3:=)z%Exception: ldb.ldbError not generatedz%(dnsRecord:1.3.6.1.4.1.7165.4.5.3:=-)r  A11111111111111111111111111111111111111111111111111111111111111111z+(dnsRecord:1.3.6.1.4.1.7165.4.5.3:=expired)r  )r  r%   r	   z%(dnsRecord:1.3.6.1.4.1.7165.4.5.3:=2))rE  r!  r   r%   r  r   r&   ry  r&  r\  rz  r@   r   r   r  r+  r   r   r$   r#  )	r(   r$  r{  r   r-  r.  msg_dbs	            r*   )test_dns_tombstone_custom_match_rule_failz3TestZones.test_dns_tombstone_custom_match_rule_fail  so   $777",,..#1#3#3"&*. . . 9llC4E&*3%  9 9S1%%%	89D,,DL8I*.se  = =CSXXq)))II=>>>>| 	8 	8 	8JS#S"677777777	8
	8:D,,DL8I*.se  = =CSXXq)))II=>>>>| 	8 	8 	8vHS!S"677777777	8
		8<D;;x((D,,DL8I*.se  = =CSXXq)))II=>>>>| 	8 	8 	8vHS!S"677777777	8
	8@D,,DL8I*.se  = =CSXXq)))II=>>>>| 	8 	8 	8vHS!S"677777777	8
	89t~5++--#':/ / /B ;D))S5F'+C5  : :CSXXq)))II=>>>>>| 	8 	8 	8vHS!S"6777777777	8s}   ,A#D E%E		EA#F6 6G4%G//G48A8I1 1J/ %J**J/3A#L M&%MMBO/ /P.>%P))P.c           	      x                                      }t          |                                |t                       j                   _                              j        d           d                     dt          j
                   ddgc}dd	g}}d
dg}}ddg}}ddg}
}	                     |                                |                                ||                                |                                ||                                ||                                || j                                        |          }                     d|d                                         |d         d         d         d                                |	|
                                |	|
 j                                        |	|
                                |	          }                     d|d                                         |d         d         d         d                                ||           fd}fd}                     ||                                ||                                ||                                |	|                                t%          t'          t(          dd                                t)          j         j                                        |          }                     t/          |          d                                |d         j        t          j                                        |          }                     d|d                                         |d         d         d         d                                |          }                     t/          |          d                                |d         j        t          j                                        |d         j        j        |                                |          }                     t/          |          d           d |D             }                     |t9          |          t9          |          h                                |d         j        t          j                                        |d         j        t          j                                        |          }                     t/          |          d                                |d         j        t          j                                        |          }                     d|d                                         |d         d         d         d                                |	          }                     t/          |          d                                |d         j        t          j                                        |	          }                     d|d                                         |d         d         d         d           dD ]}|rdndfd}                     ||           t)          j         j                                        |          }|r$                     t/          |          d           x                     t/          |          d           d S )Nr  Tr  r   r  r  r  r  r  r  r  r  r  r  r  dNSTombstonedr   s   TRUEs   FALSEc                                          | j        dk               | j        j        k    r| xj        dz  z  c_        d S d S )Nr   r   )r  rl  rf  r   )r   r  r(   r   s    r*   r  z/TestZones.test_basic_scavenging.<locals>.mod_ts  sK    OOCOa/000x|s""8a</ #"r+   c                 .    | xj         dz  z  c_         d S )Nr   )rl  )r   r  s    r*   
mod_ts_allz3TestZones.test_basic_scavenging.<locals>.mod_ts_all  s    OOx!|+OOOOr+   _scavenge_dns_recordsr   c                 @    h | ]}t          |j        j                   S rT  r  rU  s     r*   r  z2TestZones.test_basic_scavenging.<locals>.<setcomp>.  s"    ...AAFJ...r+   )FTc                 ,    j         dz
  z   | _        d S )NiP  )rl  rf  )r   inclast_adds    r*   r  z/TestZones.test_basic_scavenging.<locals>.mod_tsD  s    $07:cAr+   )r#  r   r  r   r&   r$  rE  r!  rQ  r   r:  ri  rq  r|  assertInr@   rc  r  callablegetattrr   r  rZ  r   rn  rm  DNS_TYPE_TXTrf  r   _dns_delete_tombstones)r(   r%   r9   r   r  r  r  r  r  r  r  r  r  r  rh  txtsmake_it_workr  r  r  r   s   `                @@@@r*   test_basic_scavengingzTestZones.test_basic_scavenging  s     r||~~"(6(8(8'+z3 3 3
 	$777((0$($A 	 	C 	C 	C  *	c"[Mt"[Mt"[Mt"[MttS)))uc***ud+++uc***ud+++ 	ud+++5$	222''..owqz222O4Q7AAA 	ud+++5$	222ud+++''..owqz222O4Q7BBB))%66	0 	0 	0 	0 	0 	0 	0
	, 	, 	, 	, 	,  v...  ///  ///  
333/F!M!MNNOOO"4:...((..TA&&&a(?@@@''--owqz222O4Q7AAA((//TA&&&a(9:::a)4000((//TA&&&.....D		3t995666a(9:::a(9:::((//TA&&&a(?@@@''..owqz222O4Q7AAA((//TA&&&a(?@@@''..owqz222O4Q7AAA) 	/ 	/L$+""!CB B B B B B$$T6222'
333((..D /  TA....  TA....	/ 	/r+   c           	      
     fd}                       j                    | j        dz                                     j        dz               | j        dz              t          j        }t          j        }t          j        } j                            |d j        d d||          \  }} 	                     j                    	                     j        dz              g }d |j
        D             }|D ]1}	|	                     j                  r|                    |	           2                     t          |          d                                t          |           j        dz    j        h           d S )	Nc           
         	                      |           }t          j        }t          j        }j                            |dj        d dd||           nG# t          $ r:}|j        \  }}|t          j
        k    r                    |           Y d }~d S d }~ww xY w                    d                    |                      d S )Nr   r@  zZone {} should already exist)r>  r   rA  rC  r"  rB  r$   r   r+  r   "WERR_DNS_ERROR_ZONE_ALREADY_EXISTSr   r   )r!  r=  rD  zc_typer-  enumr  r(   s          r*   create_zone_expect_existszFTestZones.test_fully_qualified_zone.<locals>.create_zone_expect_existsP  s    "0066!*!F#=..~/0/3~/3/0/;/6/:< < < <    &a6DDDIIaLLL	
 II4;;DAABBBBBs   AA 
B!/BBr.   z2.2r   	EnumZonesc                 6    g | ]}t          |j                  S rT  )r   r2  )rV  zs     r*   rW  z7TestZones.test_fully_qualified_zone.<locals>.<listcomp>|  s"    ;;;Q]##;;;r+   r   )rE  r!  r   rA  DNS_ZONE_REQUEST_PRIMARYDNSSRV_TYPEID_DWORDr"  DnssrvComplexOperation2r$   r)  	ZoneArray
startswithr:   r@   r   r  )
r(   r#  rD  request_filtertidtypeidr   zones_we_just_madezonesr!  s
   `         r*   test_fully_qualified_zonez#TestZones.test_fully_qualified_zoneN  s   	C 	C 	C 	C 	C* 	###!!$)c/222 	T)***!!$)c/222">";+m;;N<=<@N<@<G<?<JL L 	###S)))  ;;S];;; 	0 	0Dty)) 0"))$////00!444/0049s?DI2NOOOOOr+   c           
      z    | j                             t          j        d| j        |ddt          j        d            d S )Nr   DeleteZoneFromDs)r"  rB  r   rA  r$   DNSSRV_TYPEID_NULL)r(   r!  s     r*   r)  zTestZones.delete_zone  sE    &&y'L'('+~'+'('9'0'C'+	- 	- 	- 	- 	-r+   c                    d}|                      t          j                  }g }|                     |t          j        t          j                  }|                    |           |                     ||           |                     |t                    \  }}| 
                    |t          j                   |                     |t          j                   |                     |j        d           |                     |           |                     |t                    \  }}| 
                    |t          j                   |                     |t          j                   |                     |j        d           |                     |j        d         j        t          j                   |                     |           |                     |t                    \  }}| 
                    |t          j                   |                     |t          j                   |                     |j        d           d S )Nr  r0   r   r   )r2   r
   r3   r5   rN   r7   r:   r;   r<   r$   r=   rW   r?   r@   rA   rE  r>   rB   r   r)  )r(   r!  rE   rF   rG   rH   rI   s          r*   test_soa_queryzTestZones.test_soa_query  s   !!#"677	##D#*;S=NOO9--- $$QY$77 	$? 	$$Xs/EFFF%%h0DEEE)1---$$QY$77 	$?$$Xs/?@@@%%h0DEEE)1---)!,4c6GHHH$$QY$77 	$?$$Xs/EFFF%%h0DEEE)1-----r+   c                 z   | j                             | j        t          j        dd                    | j                  z   dg          }|                     t          |          d           d |d         	                    d          D             }fd|D             }t          j                    }|_        d|_        d|_        |t          j        |          gz  }|d         j        }||d	}| j                             t          j                            | j         |t          j                             d S )
Nr  r  r  rt  r   c                 B    g | ]}t          t          j        |          S rT  r  rU  s     r*   rW  z9TestZones.set_dnsProperty_zero_length.<locals>.<listcomp>  r  r+   r   c                 N    g | ]!}|j         k    t          j        |          "S rT  )r  r  r   )rV  rE   dnsproperty_ids     r*   rW  z9TestZones.set_dnsProperty_zero_length.<locals>.<listcomp>  s-    NNNqt~7M7MS\!__7M7M7Mr+   )rX  dnsProperty)r$  ry  r&  r\  r  r   r!  r@   r   r  r   DnsProperty_shortr  
namelengthr9   r  r   rX  r[  r]  r^  r_  )r(   r;  r  r  	new_propszero_length_prX  rb  s    `      r*   set_dnsProperty_zero_lengthz%TestZones.set_dnsProperty_zero_length  sN   *##S^/H$1$8$8$C$C0D+8/ $ ; ; 	Wq)))9 9!!*..779 9 9NNNNeNNN	.00)#$ cl=1122	QZ]	::
#+//
0;030DF F 	G 	G 	G 	G 	Gr+   c                     |                      | j                   |                     t          j                   |                     ddg          }|                     |j        d           d S )Ndnspropertytestr  r   )rE  r!  rA  r   DSPROPERTY_ZONE_ALLOW_UPDATEri  r  rl  )r(   r   s     r*   )test_update_while_dnsProperty_zero_lengthz3TestZones.test_update_while_dnsProperty_zero_length  se    ###(()JKKK$$%6EECOQ/////r+   c           	         |                      | j                   |                     t          j                   t
          j        }t
          j        }t
          j        }| j	        
                    |d| j        d d||          \  }}d S )Nr   r%  )rE  r!  rA  r   rD  r   rA  r(  r)  r"  r*  r$   )r(   rD  r-  r.  r/  r   s         r*   -test_enum_zones_while_dnsProperty_zero_lengthz7TestZones.test_enum_zones_while_dnsProperty_zero_length  s~    ###(()JKKK">";+m;;N<=<@N<@<G<?<JL Lr+   c                     |                      | j                   |                     t          j                   |                     t          j                   d S N)r  )rE  r!  rA  r   rD  rQ  DNS_ZONE_UPDATE_SECUREr  s    r*   2test_rpc_zone_update_while_dnsProperty_zero_lengthz<TestZones.test_rpc_zone_update_while_dnsProperty_zero_length  sL    ###(()JKKKD$?@@@@@r+   c                     |                      | j                   |                     t          j                   |                     t          j                   d S rI  )rE  r!  rA  r   !DSPROPERTY_ZONE_MASTER_SERVERS_DArQ  rJ  r  s    r*   8test_rpc_zone_update_while_other_dnsProperty_zero_lengthzBTestZones.test_rpc_zone_update_while_other_dnsProperty_zero_length  sL    ###(()OPPPD$?@@@@@r+   )F)T)$rr   rs   rt   r!   r(  r>  rE  rQ  rc  ri  rq  r|  rZ  r  r  r  r  r  r  r  r  r  r  r  r  r
  r  r2  r)  r7  rA  rE  rG  rK  rN  ru   rv   s   @r*   r  r  ,  s^       < < < < <,    	 	 	 	   " " "(G G G  + + +? ? ?6 6 6
D D D:C C C C %){ 0 0 0 00 0 03 3 3 3,- - -1 1 141 1 1". . .$9 9 98<< << <<|& & &.G8 G8 G8Rb/ b/ b/H3P 3P 3Pj- - -. . .>G G G,0 0 0L L LA A A
A A A A A A Ar+   r  c                        e Zd Z fdZ f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 xZS )TestRPCRoundtripc                    t          t          |                                            t          | _        t
          | _        t          | _        t          | _        t          j        d| j        z  | j        | j                  | _	        d S )Nr  )
r    rP  r!   r"   r#   r$   r%   r&   r   r"  r'   s    r*   r!   zTestRPCRoundtrip.setUp  sk    %%++---!"
!+,C-1^-=,0G,0J8 8r+   c                 V    t          t          |                                            d S r   )r    rP  r(  r'   s    r*   r(  zTestRPCRoundtrip.tearDown  s&    %%..00000r+   NFc           	      "   |pd|                                  z   }t          ||          }t          j                    }||_        |}d }|rd }|}| j                            t          j        d| j        |                                  |||           d S )Nzrpctestrec.r   )	r4   r   r   r  r   r"  r  rA  r$   )	r(   fqnrf  rn  deleter   add_rec_bufadd_argdel_args	            r*   
rpc_updatezTestRPCRoundtrip.rpc_update  s    <md&9&9&;&;; --244 	"G!G))1N!!	 	 	 	 	r+   c                 N   d}|d|                                  }	 |                     ||t          j        d           nU# t          $ rH}|j        d         t          j        k    r#|                     d|j        d         z             Y d }~nd }~ww xY w	 |                     |t          j        |           nV# t          $ rI}|j        d         t          j	        k    r#|                     d|j        d         z             Y d }~d S d }~ww xY w|                     d	           d S )
Ncnametest2_unqual_rec_loopr.   T)rT  rf  rn  rU  r   zLRPC DNS gaven wrong error on pre-test cleanup for self referencing CNAME: %s)rT  rn  rf  zDRPC DNS gaven wrong error on insertion of self referencing CNAME: %sz3RPC DNS allowed insertion of self referencing CNAME)
r4   rY  r   r   r   r+  r   $WERR_DNS_ERROR_RECORD_DOES_NOT_EXISTr   WERR_DNS_ERROR_CNAME_LOOP)r(   cname	cname_fqnr-  s       r*   test_rpc_self_referencing_cnamez0TestRPCRoundtrip.test_rpc_self_referencing_cname  sn   ,$uud&9&9&;&;&;<		HOOI"&"5d  D D D D 	H 	H 	HvayFGGG		 ;=>VAYG H H H	H
	OOT-@yOQQQQ 	 	 	vayF<<<		 79:C D D DFFFFF		 			GHHHHHs/   #A 
B>BB"B: :
D>DDc                    ddg}}|d|                                  }t          t          j        d          }t	          j                    }||_        	 | j                            t          j	        d| j
        |                                  ||d            n9# t          $ r,}|                     t          |                     Y d }~nd }~ww xY w	 |                     ||           | j                            t          j	        d| j
        |                                  |d |           d S # | j                            t          j	        d| j
        |                                  |d |           w xY w)N
rpctextrecr   r.   z"\"This is a test\""r   r4   r   r   r  r   r  r   r"  r  rA  r$   r   r   r   r   r(   r   r   r9   r   rV  r-  s          r*   test_update_add_txt_rpc_to_dnsz/TestRPCRoundtrip.test_update_add_txt_rpc_to_dns  s   "%7$8 &&$"5"5"7"7"78 !24LMM244	M--5##%%     	 	 	IIc!ff	
	  ---M--5##%%    DM--5##%%   s&   AB 
C "CCD) )AE,c                    dg d}}|                      ||          }|                     |t                    \  }}|                     |t          j                   |                     ||           |                     t          | j	        | j        | 
                                |d| 
                                t          j        d                     dg d}}|                      ||          }|                     |t                    \  }}|                     |t          j                   |                     ||           |                     t          | j	        | j        | 
                                |d| 
                                t          j        d                     d	g d
}}|                      ||          }|                     |t                    \  }}|                     |t          j                   |                     ||           |                     t          | j	        | j        | 
                                |d| 
                                t          j        d                     dS )r   pad1textrecr   r   r   r0   r.   "\"This is a test\"" "" ""pad2textrecr   r   r   z	more text&"\"This is a test\"" "" "" "more text"pad3textrecr   r   r   "" "" "\"This is a test\""Nr   r<   r$   r=   r
   r>   r   assertIsNotNoner   r"  r4   r   r  r   s         r*   &test_update_add_null_padded_txt_recordz7TestRPCRoundtrip.test_update_add_null_padded_txt_record=  s   #%A%A%A  --$$QY$77 	$?$$Xs/?@@@VS)))T]!^!0022(.0C0C0E0E0EF!.;= =	> 	> 	> $%N%N%N  --$$QY$77 	$?$$Xs/?@@@VS)))##%%!664#6#6#8#8#89!:< <	= 	= 	= $%A%A%A  --$$QY$77 	$?$$Xs/?@@@VS)))##%%!664#6#6#8#8#89!.0 0	1 	1 	1 	1 	1r+   c                    dg d}}d|z   }|d|                                  }t          t          j        d          }t	          j                    }||_        	 | j                            t          j	        d| j
        |                                  ||d            n9# t          $ r,}|                     t          |                     Y d }~nd }~ww xY w	 |                     ||           | j                            t          j	        d| j
        |                                  |d |           nF# | j                            t          j	        d| j
        |                                  |d |           w xY wdg d}}d|z   }|d|                                  }t          t          j        d	          }t	          j                    }||_        	 | j                            t          j	        d| j
        |                                  ||d            n9# t          $ r,}|                     t          |                     Y d }~nd }~ww xY w	 |                     ||           | j                            t          j	        d| j
        |                                  |d |           nF# | j                            t          j	        d| j
        |                                  |d |           w xY wd
g d}}d|z   }|d|                                  }t          t          j        d          }t	          j                    }||_        	 | j                            t          j	        d| j
        |                                  ||d            n9# t          $ r,}|                     t          |                     Y d }~nd }~ww xY w	 |                     ||           | j                            t          j	        d| j
        |                                  |d |           d S # | j                            t          j	        d| j
        |                                  |d |           w xY w)Nrg  rh  rpcr.   ri  r   rj  rk  rl  rm  rn  ro  rc  rd  s          r*   "test_update_add_padding_rpc_to_dnsz3TestRPCRoundtrip.test_update_add_padding_rpc_to_dnsk  s   #%A%A%A &&$"5"5"7"7"78 !2!?A A244	M--5##%%     	 	 	IIc!ff	
	  ---M--5##%%   DM--5##%%    $%N%N%N &&$"5"5"7"7"78 !2!KM M244	M--5##%%     	 	 	IIc!ff	
	  ---M--5##%%   DM--5##%%    $%A%A%A &&$"5"5"7"7"78 !2!?A A244
	M--5##%%     	 	 	IIc!ff	
	  ---M--5##%%    DM--5##%%   sr   AB 
C&"CCD. .AE1AH 
I"I  I	J! !AK$ AN 
N8"N33N8<P AQc                 ^   ddg}}|                      ||          }|                     |t                    \  }}|                     |t          j                   |                     |dg           |                     t          | j	        | j        | 
                                |d| 
                                t          j        d                     dddg}}|                      ||          }|                     |t                    \  }}|                     |t          j                   |                     |ddg           |                     t          | j	        | j        | 
                                |d| 
                                t          j        d                     d	S )
r   nulltextrecz	NULL BYTEr0   NULLr.   z"NULL"nulltextrec2z"NULL" "NULL"Nrp  r   s         r*   $test_update_add_null_char_txt_recordz5TestRPCRoundtrip.test_update_add_null_char_txt_record  s   #n%5  --$$QY$77 	$?$$Xs/?@@@VfX...-dmT^.2.A.A.C.C9?ATATAVAVAV.W.2.?K K 	L 	L 	L
 %~~&F  --$$QY$77 	$?$$Xs/?@@@Vff%5666-dmT^.2.A.A.C.C9?ATATAVAVAV.W.2.?R R 	S 	S 	S 	S 	Sr+   c                    d}|d|                                  }t          t          j        d          }t	          j                    }||_        	 | j                            t          j	        d| j
        |                                  ||d            n9# t          $ r,}|                     t          |                     Y d }~nd }~ww xY w	 |                     |dg           | j                            t          j	        d| j
        |                                  |d |           d S # | j                            t          j	        d| j
        |                                  |d |           w xY w)Nrpcnulltextrecr.   z"NULL BYTE"r   rx  rc  )r(   r   r9   r   rV  r-  s         r*   $test_update_add_null_char_rpc_to_dnsz5TestRPCRoundtrip.test_update_add_null_char_rpc_to_dns  s   ! &&$"5"5"7"7"78 !24DEE244	M--5##%%     	 	 	IIc!ff	
	  &222M--5##%%    DM--5##%%   s&   AB 
C	"CC	D' 'AE*c                    ddg}}|                      ||          }|                     |t                    \  }}|                     |t          j                   |                     ||           |                     t          | j	        | j        | 
                                |d| 
                                t          j        d                     dS )r   
hextextrec
   HIGHÿBYTEr0   r.      "HIGHÿBYTE"Nrp  r   s         r*   #test_update_add_hex_char_txt_recordz4TestRPCRoundtrip.test_update_add_hex_char_txt_record  s    "^$4  --$$QY$77 	$?$$Xs/?@@@VS)))-dmT^.2.A.A.C.C9?ATATAVAVAV.W.2.?AQS S 	T 	T 	T 	T 	Tr+   c                    ddg}}d|z   }|d|                                  }t          t          j        d          }t	          j                    }||_        	 | j                            t          j	        d| j
        |                                  ||d            n9# t          $ r,}|                     t          |                     Y d }~nd }~ww xY w	 |                     ||           | j                            t          j	        d| j
        |                                  |d |           d S # | j                            t          j	        d| j
        |                                  |d |           w xY w)Nr  r  rt  r.   r  r   rc  rd  s          r*   test_update_add_hex_rpc_to_dnsz/TestRPCRoundtrip.test_update_add_hex_rpc_to_dns  s   "^$4 &&$"5"5"7"7"78 !24DEE244	M--5##%%     	 	 	IIc!ff	
	  ---M--5##%%    DM--5##%%   &   AB 
C%"CCD. .AE1c                    ddg}}|                      ||          }|                     |t                    \  }}|                     |t          j                   |                     ||           |                     t          | j	        | j        | 
                                |d| 
                                t          j        d                     dS )r   slashtextrecTh\=is=is a testr0   r.   "Th\\=is=is a test"Nrp  r   s         r*    test_update_add_slash_txt_recordz1TestRPCRoundtrip.test_update_add_slash_txt_record5  s    $':&;  --$$QY$77 	$?$$Xs/?@@@VS)))-dmT^.2.A.A.C.C9?ATATAVAVAV.W.2.?AXZ Z 	[ 	[ 	[ 	[ 	[r+   c                    ddg}}d|z   }|d|                                  }t          t          j        d          }t	          j                    }||_        	 | j                            t          j	        d| j
        |                                  ||d            n9# t          $ r,}|                     t          |                     Y d }~nd }~ww xY w	 |                     ||           | j                            t          j	        d| j
        |                                  |d |           d S # | j                            t          j	        d| j
        |                                  |d |           w xY w)Nr  r  rt  r.   r  r   rc  rd  s          r*    test_update_add_slash_rpc_to_dnsz1TestRPCRoundtrip.test_update_add_slash_rpc_to_dnsE  s   $':&; &&$"5"5"7"7"78 !24KLL244	M--5##%%     	 	 	IIc!ff		  --- M--5##%%    DM--5##%%   r  c                    dddg}}|                      ||          }|                     |t                    \  }}|                     |t          j                   |                     ||           |                     t          | j	        | j        | 
                                |d| 
                                t          j        d                     dS )!test adding two txt records workstextrec2r   "and this is a test, too"r0   r.   2"\"This is a test\"" "\"and this is a test, too\""Nrp  r   s         r*   test_update_add_two_txt_recordsz0TestRPCRoundtrip.test_update_add_two_txt_recordsg  s     #5#>#@  --$$QY$77 	$?$$Xs/?@@@VS)))-dmT^.2.A.A.C.C9?ATATAVAVAV.W.2.? BQR R 	S 	S 	S 	S 	Sr+   c                    dddg}}d|z   }|d|                                  }t          t          j        d          }t	          j                    }||_        	 | j                            t          j	        d| j
        |                                  ||d            n9# t          $ r,}|                     t          |                     Y d }~nd }~ww xY w	 |                     ||           | j                            t          j	        d| j
        |                                  |d |           d S # | j                            t          j	        d| j
        |                                  |d |           w xY w)Nr  r   r  rt  r.   r  r   rc  rd  s          r*   test_update_add_two_rpc_to_dnsz/TestRPCRoundtrip.test_update_add_two_rpc_to_dnsv  s    #5#>#@ &&$"5"5"7"7"78 !2"DE E  244	M--5##%%     	 	 	IIc!ff	
	  ---M--5##%%    DM--5##%%   s&   AB 
C&"CCD/ /AE2c                    dg }}|                      ||          }|                     |t                    \  }}|                     |t          j                   |                     ||           |                     t          | j	        | j        | 
                                |d| 
                                t          j        d                     dS )r  emptytextrecr0   r.   r   Nrp  r   s         r*   !test_update_add_empty_txt_recordsz2TestRPCRoundtrip.test_update_add_empty_txt_records  s    $b  --$$QY$77 	$?$$Xs/?@@@VS)))-dmT^.2.A.A.C.C9?ATATAVAVAV.W.2.?E E 	F 	F 	F 	F 	Fr+   c                    dg }}|d|                                  }t          t          j        d          }t	          j                    }||_        	 | j                            t          j	        d| j
        |                                  ||d            n9# t          $ r,}|                     t          |                     Y d }~nd }~ww xY w	 |                     ||           | j                            t          j	        d| j
        |                                  |d |           d S # | j                            t          j	        d| j
        |                                  |d |           w xY w)Nrpcemptytextrecr.   r   r   rc  rd  s          r*    test_update_add_empty_rpc_to_dnsz1TestRPCRoundtrip.test_update_add_empty_rpc_to_dns  s   ' &&$"5"5"7"7"78 !2B77244
	M--5##%%     	 	 	IIc!ff	
	  ---M--5##%%    DM--5##%%   s&   AB 
C"CCD( (AE+)NNNF)rr   rs   rt   r!   r(  rY  r`  re  rr  ru  rz  r}  r  r  r  r  r  r  r  r  ru   rv   s   @r*   rP  rP    sS       
8 
8 
8 
8 
81 1 1 1 1   ,I I I,  B,1 ,1 ,1\a a aHS S S0  @T T T  B[ [ [      DS S S" " "HF F F      r+   rP  )moduleopts)Csambar   	samba.ndrr   r   samba.samdbr   
samba.authr   r\  r   ra   sysr  r\   r  r	   samba.dcerpcr
   r   r   samba.dnsserverr   r   r   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_argsr  r+  r#  r%   get_credentialsr&   r   r   print_usageexitr"   r$   set_krb_forwardableNO_KRB_FORWARDABLEr   rx   r   r   r  rP  rr   rT  r+   r*   <module>r     s  $       * * * * * * * *       % % % % % % 



 $ $ $ $ $ $ 				 



               - - - - - - - - - - % % % % % % @ @ @ @ @ @ @ @ > > > > > > > > % % % % % % % % ( ( ( ( ( (        
	K	L	L G ((	   	 " " "   +E	9  ; ; ; &7%f--    ! ! !nV$$    $ $ $  
d  $$
,3t99q==
CHQKKK1gG	   +8 9 9 9eB eB eB eB eB eB eB eBPIP IP IP IP IPW IP IP IPXa< a< a< a< a< a< a< a<H	J J J J J J J JZr
A r
A r
A r
A r
A r
A r
A r
Ahe e e e ew e e eP 8+ . . . . . .r+   