ó
_‰ÍVc           @   s™  d  d l  Z  d  d l Z d  d l Z d  d l Z d  d l Z d  d l j Z d  d l m Z m	 Z	 d  d l
 m Z d  d l m Z m Z m Z d  d l m Z m Z m Z d  d l m Z m Z d  d l j Z d  d l Z e j d ƒ Z e j e ƒ Z e j e ƒ e j  d d	 d
 d d d d ƒe j! e ƒ Z" e j e" ƒ e e ƒ Z# e j e# ƒ e j$ ƒ  \ Z% Z& e j' ƒ  a( e" j) t( ƒ a* e% j+ a+ e, e& ƒ d k  r»e j- ƒ  e j. d ƒ n  e& d Z/ e& d a0 t* j1 e j2 ƒ d „  Z3 d e f d „  ƒ  YZ4 d e4 f d „  ƒ  YZ5 d e4 f d „  ƒ  YZ6 d e4 f d „  ƒ  YZ7 d e4 f d „  ƒ  YZ8 d e4 f d „  ƒ  YZ9 d e4 f d  „  ƒ  YZ: e d! e; d" e# ƒ d S(#   iÿÿÿÿN(   t   credentialst   param(   t   TestCase(   t   dnst   dnspt	   dnsserver(   t	   TXTRecordt   dns_record_matcht   data_to_dns_record(   t   SubunitOptionst   TestPrograms*   dns.py <server name> <server ip> [options]s	   --timeoutt   typet   intt   destt   timeoutt   helps    Specify timeout for DNS requestsi   i   i    c         C   s=   t  j ƒ  } t j ƒ  } t |  ƒ | _ |  | _ | | _ | S(   N(   R   t
   txt_recordR   t   string_listt   lent   countt   strt   txt(   t   recordst	   rdata_txtt   s_list(    (    s3   /usr/lib/python2.7/dist-packages/samba/tests/dns.pyt   make_txt_record>   s    		t   DNSTestc           B   s‰   e  Z d  „  Z d „  Z d „  Z d „  Z d d „ Z d „  Z d „  Z	 d „  Z
 e e e d „ Z e e e d	 „ Z d
 „  Z d „  Z RS(   c         C   s;   t  t |  ƒ j ƒ  t |  _ t |  _ t |  _ t |  _ d  S(   N(   t   superR   t   setUpt   server_namet   servert	   server_ipt   lpt   creds(   t   self(    (    s3   /usr/lib/python2.7/dist-packages/samba/tests/dns.pyR   H   s
    			c         C   s/   d d d d d d d d d	 d
 d g } | | S(   s   Return a readable error codet   OKt   FORMERRt   SERVFAILt   NXDOMAINt   NOTIMPt   REFUSEDt   YXDOMAINt   YXRRSETt   NXRRSETt   NOTAUTHt   NOTZONE(    (   R"   t   errcodet   string_codes(    (    s3   /usr/lib/python2.7/dist-packages/samba/tests/dns.pyt   errstrP   s    	c         C   s@   | j  d @} |  j | | d |  j | ƒ |  j | ƒ f ƒ d S(   s$   Helper function to check return codei   s   Expected RCODE %s, got %sN(   t	   operationt   assertEqualsR0   (   R"   t   packett   rcodet	   p_errcode(    (    s3   /usr/lib/python2.7/dist-packages/samba/tests/dns.pyt   assert_dns_rcode_equalsc   s    c         C   s.   | j  d @} |  j | | d | | f ƒ d S(   s   Helper function to check opcodei x  s   Expected OPCODE %s, got %sN(   R1   R2   (   R"   R3   t   opcodet   p_opcode(    (    s3   /usr/lib/python2.7/dist-packages/samba/tests/dns.pyt   assert_dns_opcode_equalsi   s    c         C   sF   t  j ƒ  } | d k r0 t j d d ƒ | _ n  | | _ g  | _ | S(   s!   Helper creating a dns.name_packeti    iÿÿ  N(   R   t   name_packett   Nonet   randomt   randintt   idR1   t	   questions(   R"   R7   t   qidt   p(    (    s3   /usr/lib/python2.7/dist-packages/samba/tests/dns.pyt   make_name_packeto   s    		c         C   s   t  | ƒ | _ | | _ d S(   s$   Helper to finalize a dns.name_packetN(   R   t   qdcountR?   (   R"   R3   R?   (    (    s3   /usr/lib/python2.7/dist-packages/samba/tests/dns.pyt   finish_name_packetx   s    c         C   s+   t  j ƒ  } | | _ | | _ | | _ | S(   s#   Helper creating a dns.name_question(   R   t   name_questiont   namet   question_typet   question_class(   R"   RF   t   qtypet   qclasst   q(    (    s3   /usr/lib/python2.7/dist-packages/samba/tests/dns.pyt   make_name_question}   s
    			c         C   s   |  j  j ƒ  j ƒ  S(   s   Helper to get dns domain(   R!   t	   get_realmt   lower(   R"   (    (    s3   /usr/lib/python2.7/dist-packages/samba/tests/dns.pyt   get_dns_domain…   s    c         C   sØ   d } z± t j | ƒ } | r/ |  j | ƒ GHn  t j t j t j d ƒ } | j | ƒ | j | d f ƒ | j	 | d ƒ | j
 d d ƒ } | r£ |  j | ƒ GHn  t j t j | ƒ SWd | d k	 rÓ | j ƒ  n  Xd S(   s#   send a DNS query and read the replyi    i5   i   N(   R;   t   ndrt   ndr_packt   hexdumpt   sockett   AF_INETt
   SOCK_DGRAMt
   settimeoutt   connectt   sendt   recvt
   ndr_unpackR   R:   t   close(   R"   R3   t   hostt   dumpR   t   st   send_packett   recv_packet(    (    s3   /usr/lib/python2.7/dist-packages/samba/tests/dns.pyt   dns_transaction_udp‰   s    c   	      C   sþ   d } z× t j | ƒ } | r/ |  j | ƒ GHn  t j t j t j d ƒ } | j | ƒ | j | d f ƒ t	 j
 d t | ƒ ƒ } | | 7} | j | d ƒ | j d d ƒ } | rÅ |  j | ƒ GHn  t j t j | d ƒ SWd | d k	 rù | j ƒ  n  Xd S(   s#   send a DNS query and read the replyi    i5   s   !Hiÿÿ  i   Ni  (   R;   RP   RQ   RR   RS   RT   t   SOCK_STREAMRV   RW   t   structt   packR   RX   RY   RZ   R   R:   R[   (	   R"   R3   R\   R]   R   R^   R_   t
   tcp_packetR`   (    (    s3   /usr/lib/python2.7/dist-packages/samba/tests/dns.pyt   dns_transaction_tcp   s"    
c   	      C   sï   |  j  t j ƒ } g  } |  j ƒ  } |  j | t j t j ƒ } | j | ƒ |  j | | ƒ g  } t j	 ƒ  } d | |  j ƒ  f | _
 t j | _ t j | _ d | _ d | _ t | ƒ } | | _ | j | ƒ t | ƒ | _ | | _ | S(   Ns   %s.%si„  iÿÿ  (   RB   R   t   DNS_OPCODE_UPDATERO   RL   t   DNS_QTYPE_SOAt   DNS_QCLASS_INt   appendRD   t   res_recRF   t   DNS_QTYPE_TXTt   rr_typet   rr_classt   ttlt   lengthR   t   rdataR   t   nscountt   nsrecs(	   R"   t   prefixt	   txt_arrayRA   t   updatesRF   t   ut   rRq   (    (    s3   /usr/lib/python2.7/dist-packages/samba/tests/dns.pyt   make_txt_update³   s&    				c         C   s¿   d | |  j  ƒ  f } |  j t j ƒ } g  } |  j | t j t j ƒ } | j | ƒ |  j | | ƒ |  j	 | ƒ } |  j
 | t j ƒ |  j | j d ƒ |  j | j d j j j | ƒ d  S(   Ns   %s.%si   i    (   RO   RB   R   t   DNS_OPCODE_QUERYRL   Rl   Ri   Rj   RD   Ra   R6   t   DNS_RCODE_OKR2   t   ancountt   answersRq   R   R   (   R"   Rt   Ru   RF   RA   R?   RK   t   response(    (    s3   /usr/lib/python2.7/dist-packages/samba/tests/dns.pyt   check_query_txtË   s    N(   t   __name__t
   __module__R   R0   R6   R9   R;   RB   RD   RL   RO   R   t   FalseR   Ra   Rf   Ry   R   (    (    (    s3   /usr/lib/python2.7/dist-packages/samba/tests/dns.pyR   F   s   									t   TestSimpleQueriesc           B   sG   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   sÞ   |  j  t j ƒ } g  } d |  j |  j ƒ  f } |  j | t j t j ƒ } d G| j GH| j	 | ƒ |  j
 | | ƒ |  j | ƒ } |  j | t j ƒ |  j | t j ƒ |  j | j d ƒ |  j | j d j |  j ƒ d S(   s1   create a query packet containing one query records   %s.%ss   asking for i   i    N(   RB   R   Rz   R   RO   RL   t   DNS_QTYPE_ARi   RF   Rj   RD   Ra   R6   R{   R9   R2   R|   R}   Rq   R   (   R"   RA   R?   RF   RK   R~   (    (    s3   /usr/lib/python2.7/dist-packages/samba/tests/dns.pyt   test_one_a_queryÛ   s    c         C   sÞ   |  j  t j ƒ } g  } d |  j |  j ƒ  f } |  j | t j t j ƒ } d G| j GH| j	 | ƒ |  j
 | | ƒ |  j | ƒ } |  j | t j ƒ |  j | t j ƒ |  j | j d ƒ |  j | j d j |  j ƒ d S(   s9   create a query packet containing one query record via TCPs   %s.%ss   asking for i   i    N(   RB   R   Rz   R   RO   RL   R„   Ri   RF   Rj   RD   Rf   R6   R{   R9   R2   R|   R}   Rq   R   (   R"   RA   R?   RF   RK   R~   (    (    s3   /usr/lib/python2.7/dist-packages/samba/tests/dns.pyt   test_one_a_query_tcpí   s    c         C   s~  |  j  t j ƒ } g  } d |  j |  j ƒ  f } |  j | t j t j ƒ } d G| j GH| j	 | ƒ |  j
 | | ƒ |  j | ƒ } |  j | t j ƒ |  j | t j ƒ |  j | j d ƒ |  j  t j ƒ } g  } d |  j |  j ƒ  f } |  j | t j t j ƒ } d G| j GH| j	 | ƒ |  j
 | | ƒ |  j | ƒ } |  j | t j ƒ |  j | t j ƒ |  j | j d ƒ d S(   s6   create a query packet causing an empty RCODE_OK answers   %s.%ss   asking for i    s   invalid-%s.%sN(   RB   R   Rz   R   RO   RL   t   DNS_QTYPE_MXRi   RF   Rj   RD   Ra   R6   R{   R9   R2   R|   t   DNS_RCODE_NXDOMAIN(   R"   RA   R?   RF   RK   R~   (    (    s3   /usr/lib/python2.7/dist-packages/samba/tests/dns.pyt   test_one_mx_queryÿ   s,    c         C   sè   |  j  t j ƒ } g  } d |  j |  j ƒ  f } |  j | t j t j ƒ } | j | ƒ d d |  j ƒ  f } |  j | t j t j ƒ } | j | ƒ |  j	 | | ƒ y& |  j
 | ƒ } |  j | t j ƒ Wn t j k
 rã n Xd S(   s2   create a query packet containing two query recordss   %s.%st	   bogusnameN(   RB   R   Rz   R   RO   RL   R„   Ri   Rj   RD   Ra   R6   t   DNS_RCODE_FORMERRRS   R   (   R"   RA   R?   RF   RK   R~   (    (    s3   /usr/lib/python2.7/dist-packages/samba/tests/dns.pyt   test_two_queries  s    c         C   s5  |  j  t j ƒ } g  } d |  j |  j ƒ  f } |  j | t j t j ƒ } d G| j GH| j	 | ƒ |  j
 | | ƒ |  j | ƒ } d } t j d ƒ } | d k	 r² | d 7} n  |  j | t j ƒ |  j | t j ƒ |  j | j | ƒ |  j | j d j |  j ƒ | d k	 r1|  j | j d j | ƒ n  d S(   s   create a QTYPE_ALL querys   %s.%ss   asking for i   t   SERVER_IPV6i    N(   RB   R   Rz   R   RO   RL   t   DNS_QTYPE_ALLRi   RF   Rj   RD   Ra   t   ost   getenvR;   R6   R{   R9   R2   R|   R}   Rq   R   (   R"   RA   R?   RF   RK   R~   t   num_answerst   dc_ipv6(    (    s3   /usr/lib/python2.7/dist-packages/samba/tests/dns.pyt   test_qtype_all_query5  s&    
c         C   sª   |  j  t j ƒ } g  } d |  j |  j ƒ  f } |  j | t j t j ƒ } | j | ƒ |  j	 | | ƒ y& |  j
 | ƒ } |  j | t j ƒ Wn t j k
 r¥ n Xd S(   s   create a QCLASS_NONE querys   %s.%sN(   RB   R   Rz   R   RO   RL   RŽ   t   DNS_QCLASS_NONERj   RD   Ra   R6   t   DNS_RCODE_NOTIMPRS   R   (   R"   RA   R?   RF   RK   R~   (    (    s3   /usr/lib/python2.7/dist-packages/samba/tests/dns.pyt   test_qclass_none_queryO  s    c         C   sÅ   |  j  t j ƒ } g  } |  j ƒ  } |  j | t j t j ƒ } | j | ƒ |  j | | ƒ |  j	 | ƒ } |  j
 | t j ƒ |  j | t j ƒ |  j | j d ƒ |  j | j d j j d ƒ d S(   s   create a SOA query for a domaini   i    i  N(   RB   R   Rz   RO   RL   Rh   Ri   Rj   RD   Ra   R6   R{   R9   R2   R|   R}   Rq   t   minimum(   R"   RA   R?   RF   RK   R~   (    (    s3   /usr/lib/python2.7/dist-packages/samba/tests/dns.pyt   test_soa_domain_queryu  s    (	   R€   R   R…   R†   R‰   RŒ   R“   R–   R˜   (    (    (    s3   /usr/lib/python2.7/dist-packages/samba/tests/dns.pyRƒ   Ù   s   						&t   TestDNSUpdatesc           B   sY   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 RS(	   c         C   sÞ   |  j  t j ƒ } g  } d |  j |  j ƒ  f } |  j | t j t j ƒ } | j | ƒ |  j ƒ  } |  j | t j t j ƒ } | j | ƒ |  j	 | | ƒ y& |  j
 | ƒ } |  j | t j ƒ Wn t j k
 rÙ n Xd S(   s   create two update requestss   %s.%sN(   RB   R   Rg   R   RO   RL   R„   Ri   Rj   RD   Ra   R6   R‹   RS   R   (   R"   RA   Rv   RF   Rw   R~   (    (    s3   /usr/lib/python2.7/dist-packages/samba/tests/dns.pyt   test_two_updatesˆ  s    c         C   s‚   |  j  t j ƒ } g  } |  j ƒ  } |  j | t j t j ƒ } | j | ƒ |  j | | ƒ |  j	 | ƒ } |  j
 | t j ƒ d S(   s"   create update with DNS_QCLASS_NONEN(   RB   R   Rg   RO   RL   R„   R”   Rj   RD   Ra   R6   R•   (   R"   RA   Rv   RF   Rw   R~   (    (    s3   /usr/lib/python2.7/dist-packages/samba/tests/dns.pyt   test_update_wrong_qclass   s    c         C   s  |  j  t j ƒ } g  } |  j ƒ  } |  j | t j t j ƒ } | j | ƒ |  j | | ƒ g  } t j	 ƒ  } d |  j
 |  j ƒ  f | _ t j | _ t j | _ d | _ d | _ | j | ƒ t | ƒ | _ | | _ y& |  j | ƒ } |  j | t j ƒ Wn t j k
 rn Xd S(   s   test update with a non-null TTLs   %s.%si   i    N(   RB   R   Rg   RO   RL   Rh   Ri   Rj   RD   Rk   R   RF   Rl   Rm   R”   Rn   Ro   Rp   R   R|   R}   Ra   R6   R‹   RS   R   (   R"   RA   Rv   RF   Rw   t   prereqsRx   R~   (    (    s3   /usr/lib/python2.7/dist-packages/samba/tests/dns.pyt$   test_update_prereq_with_non_null_ttl­  s*    			c         C   sÿ   |  j  t j ƒ } g  } |  j ƒ  } |  j | t j t j ƒ } | j | ƒ |  j | | ƒ g  } t j	 ƒ  } d |  j
 |  j ƒ  f | _ t j | _ t j | _ d | _ d | _ | j | ƒ t | ƒ | _ | | _ |  j | ƒ } |  j | t j ƒ d S(   s"   test update with a non-null lengths   %s.%si    i   N(   RB   R   Rg   RO   RL   Rh   Ri   Rj   RD   Rk   R   RF   Rl   Rm   t   DNS_QCLASS_ANYRn   Ro   Rp   R   R|   R}   Ra   R6   t   DNS_RCODE_NXRRSET(   R"   RA   Rv   RF   Rw   Rœ   Rx   R~   (    (    s3   /usr/lib/python2.7/dist-packages/samba/tests/dns.pyt'   test_update_prereq_with_non_null_lengthÎ  s$    			c         C   sö   |  j  t j ƒ } g  } |  j ƒ  } |  j | t j t j ƒ } | j | ƒ |  j | | ƒ g  } t j	 ƒ  } d |  j ƒ  | _
 t j | _ t j | _ d | _ d | _ | j | ƒ t | ƒ | _ | | _ |  j | ƒ } |  j | t j ƒ d S(   s#   test update with a nonexisting names   idontexist.%si    N(   RB   R   Rg   RO   RL   Rh   Ri   Rj   RD   Rk   RF   Rl   Rm   Rž   Rn   Ro   Rp   R   R|   R}   Ra   R6   RŸ   (   R"   RA   Rv   RF   Rw   Rœ   Rx   R~   (    (    s3   /usr/lib/python2.7/dist-packages/samba/tests/dns.pyt#   test_update_prereq_nonexisting_nameè  s$    			c         C   sX   d d g } } |  j  | | ƒ } |  j | ƒ } |  j | t j ƒ |  j | | ƒ d S(   s   test adding records workst   textrecs   "This is a test"N(   Ry   Ra   R6   R   R{   R   (   R"   Rt   R   RA   R~   (    (    s3   /usr/lib/python2.7/dist-packages/samba/tests/dns.pyt   test_update_add_txt_record  s
    c         C   sø  d |  j  ƒ  } |  j t j ƒ } g  } |  j  ƒ  } |  j | t j t j ƒ } | j | ƒ |  j | | ƒ g  } t j	 ƒ  } | | _
 t j | _ t j | _ d | _ d | _ t d g ƒ } | | _ | j | ƒ t | ƒ | _ | | _ |  j | ƒ } |  j | t j ƒ |  j t j ƒ } g  }	 |  j | t j t j ƒ }
 |	 j |
 ƒ |  j | |	 ƒ |  j | ƒ } |  j | t j ƒ |  j t j ƒ } g  } |  j  ƒ  } |  j | t j t j ƒ } | j | ƒ |  j | | ƒ g  } t j	 ƒ  } | | _
 t j | _ t j | _ d | _ d | _ t d g ƒ } | | _ | j | ƒ t | ƒ | _ | | _ |  j | ƒ } |  j | t j ƒ |  j t j ƒ } g  }	 |  j | t j t j ƒ }
 |	 j |
 ƒ |  j | |	 ƒ |  j | ƒ } |  j | t j ƒ d S(   s   Test if deleting records workss   deleterec.%si„  iÿÿ  s   "This is a test"i    N(   RO   RB   R   Rg   RL   Rh   Ri   Rj   RD   Rk   RF   Rl   Rm   Rn   Ro   Rp   R   Rq   R   Rr   Rs   Ra   R6   R{   Rz   R”   Rˆ   (   R"   t   NAMERA   Rv   RF   Rw   Rx   Rq   R~   R?   RK   (    (    s3   /usr/lib/python2.7/dist-packages/samba/tests/dns.pyt   test_delete_record
  sn    										c         C   sj  d |  j  ƒ  } |  j t j ƒ } g  } |  j  ƒ  } |  j | t j t j ƒ } | j | ƒ |  j | | ƒ g  } t j	 ƒ  } | | _
 t j | _ t j | _ d | _ d | _ t d g ƒ } | | _ | j | ƒ t | ƒ | _ | | _ |  j | ƒ } |  j | t j ƒ |  j t j ƒ } g  }	 |  j | t j t j ƒ }
 |	 j |
 ƒ |  j | |	 ƒ |  j | ƒ } |  j | t j ƒ |  j t j ƒ } g  } |  j  ƒ  } |  j | t j t j ƒ } | j | ƒ |  j | | ƒ g  } t j	 ƒ  } | | _
 t j | _ t j | _ d | _ d | _ t d g ƒ } | | _ | j | ƒ t | ƒ | _ | | _ |  j | ƒ } |  j | t j ƒ |  j t j ƒ } g  }	 |  j | t j t j ƒ }
 |	 j |
 ƒ |  j | |	 ƒ |  j | ƒ } |  j | t j ƒ |  j t j ƒ } g  } |  j  ƒ  } |  j | t j t j ƒ } | j | ƒ |  j | | ƒ g  } t j	 ƒ  } | | _
 t j | _ t j | _ d | _ d | _ t d g ƒ } | | _ | j | ƒ t | ƒ | _ | | _ |  j | ƒ } |  j | t j ƒ |  j t j ƒ } g  }	 |  j | t j t j ƒ }
 |	 j |
 ƒ |  j | |	 ƒ |  j | ƒ } |  j | t j ƒ d S(   s:   Test if adding, deleting and then readding a records workss   readdrec.%si„  iÿÿ  s   "This is a test"i    N(   RO   RB   R   Rg   RL   Rh   Ri   Rj   RD   Rk   RF   Rl   Rm   Rn   Ro   Rp   R   Rq   R   Rr   Rs   Ra   R6   R{   Rz   R”   Rˆ   (   R"   R¤   RA   Rv   RF   Rw   Rx   Rq   R~   R?   RK   (    (    s3   /usr/lib/python2.7/dist-packages/samba/tests/dns.pyt   test_readd_recordX  s¤    															c         C   s  |  j  t j ƒ } g  } |  j ƒ  } |  j | t j t j ƒ } | j | ƒ |  j | | ƒ g  } t j	 ƒ  } d |  j ƒ  | _
 t j | _ t j | _ d | _ d | _ t j ƒ  } d | _ d |  j ƒ  | _ | | _ | j | ƒ t | ƒ | _ | | _ |  j | ƒ } |  j | t j ƒ |  j  t j ƒ } g  } d |  j ƒ  } |  j | t j t j ƒ }	 | j |	 ƒ |  j | | ƒ |  j | ƒ } |  j | t j ƒ |  j | j d ƒ | j d }
 |  j |
 j t j ƒ |  j |
 j j d ƒ |  j |
 j j d |  j ƒ  ƒ d S(	   s   test adding MX records workss   %si„  iÿÿ  i
   s   mail.%si   i    N(   RB   R   Rg   RO   RL   Rh   Ri   Rj   RD   Rk   RF   R‡   Rm   Rn   Ro   Rp   t	   mx_recordt
   preferencet   exchangeRq   R   Rr   Rs   Ra   R6   R{   Rz   t   assertEqualR|   R}   (   R"   RA   Rv   RF   Rw   Rx   Rq   R~   R?   RK   t   ans(    (    s3   /usr/lib/python2.7/dist-packages/samba/tests/dns.pyt   test_update_add_mx_recordÊ  sF    					(   R€   R   Rš   R›   R   R    R¡   R£   R¥   R¦   R¬   (    (    (    s3   /usr/lib/python2.7/dist-packages/samba/tests/dns.pyR™   †  s   			!				N	rt   TestComplexQueriesc           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C   s%  t  t |  ƒ j ƒ  |  j t j ƒ } g  } |  j ƒ  } |  j | t j t j	 ƒ } | j
 | ƒ |  j | | ƒ g  } t j ƒ  } d |  j ƒ  | _ t j | _ t j	 | _ d | _ d | _ d |  j |  j ƒ  f | _ | j
 | ƒ t | ƒ | _ | | _ |  j | ƒ } |  j | t j ƒ d  S(   Ns   cname_test.%si„  iÿÿ  s   %s.%s(   R   R­   R   RB   R   Rg   RO   RL   Rh   Ri   Rj   RD   Rk   RF   t   DNS_QTYPE_CNAMERm   Rn   Ro   Rp   R   Rq   R   Rr   Rs   Ra   R6   R{   (   R"   RA   Rv   RF   Rw   Rx   R~   (    (    s3   /usr/lib/python2.7/dist-packages/samba/tests/dns.pyR   ú  s(    			c         C   s%  t  t |  ƒ j ƒ  |  j t j ƒ } g  } |  j ƒ  } |  j | t j t j	 ƒ } | j
 | ƒ |  j | | ƒ g  } t j ƒ  } d |  j ƒ  | _ t j | _ t j | _ d | _ d | _ d |  j |  j ƒ  f | _ | j
 | ƒ t | ƒ | _ | | _ |  j | ƒ } |  j | t j ƒ d  S(   Ns   cname_test.%si    iÿÿ  s   %s.%s(   R   R­   t   tearDownRB   R   Rg   RO   RL   Rh   Ri   Rj   RD   Rk   RF   R®   Rm   R”   Rn   Ro   Rp   R   Rq   R   Rr   Rs   Ra   R6   R{   (   R"   RA   Rv   RF   Rw   Rx   R~   (    (    s3   /usr/lib/python2.7/dist-packages/samba/tests/dns.pyR¯     s(    			c         C   s<  |  j  t j ƒ } g  } d |  j ƒ  } |  j | t j t j ƒ } d G| j GH| j | ƒ |  j	 | | ƒ |  j
 | ƒ } |  j | t j ƒ |  j | t j ƒ |  j | j d ƒ |  j | j d j t j ƒ |  j | j d j d |  j |  j ƒ  f ƒ |  j | j d j t j ƒ |  j | j d j |  j ƒ d S(   s1   create a query packet containing one query records   cname_test.%ss   asking for i   i    s   %s.%si   N(   RB   R   Rz   RO   RL   R„   Ri   RF   Rj   RD   Ra   R6   R{   R9   R2   R|   R}   Rm   R®   Rq   R   R   (   R"   RA   R?   RF   RK   R~   (    (    s3   /usr/lib/python2.7/dist-packages/samba/tests/dns.pyR…   .  s"    (   R€   R   R   R¯   R…   (    (    (    s3   /usr/lib/python2.7/dist-packages/samba/tests/dns.pyR­   ø  s   		t   TestInvalidQueriesc           B   s   e  Z d  „  Z d „  Z RS(   c         C   sF  d } zE t j t j t j d ƒ } | j |  j d f ƒ | j d d ƒ Wd | d k	 rg | j ƒ  n  X|  j t	 j
 ƒ } g  } d |  j |  j ƒ  f } |  j | t	 j t	 j ƒ } d G| j GH| j | ƒ |  j | | ƒ |  j | ƒ } |  j | t	 j ƒ |  j | t	 j
 ƒ |  j | j d ƒ |  j | j d j |  j ƒ d S(   sI   send 0 bytes follows by create a query packet containing one query recordi    i5   t    Ns   %s.%ss   asking for i   (   R;   RS   RT   RU   RW   R   RX   R[   RB   R   Rz   R   RO   RL   R„   Ri   RF   Rj   RD   Ra   R6   R{   R9   R2   R|   R}   Rq   (   R"   R^   RA   R?   RF   RK   R~   (    (    s3   /usr/lib/python2.7/dist-packages/samba/tests/dns.pyR…   F  s(    c   
      C   sw  |  j  t j ƒ } g  } d d |  j ƒ  f } |  j | t j t j ƒ } d G| j GH| j | ƒ |  j	 | | ƒ | j
 t j O_
 d	 } zÌ y± t j | ƒ } t j t j t j d ƒ } | j t ƒ |  j } | j | d f ƒ t j d t | ƒ ƒ } | | 7} | j | d ƒ | j d
 d ƒ }	 |  j d t |	 ƒ ƒ Wn t j k
 rTn XWd	 | d	 k	 rr| j ƒ  n  Xd	 S(   s   send a reply instead of a querys   %s.%st   fakefakefakes   asking for i    i5   s   !Hiÿÿ  i   Ni  (   RB   R   Rz   RO   RL   R„   Ri   RF   Rj   RD   R1   t   DNS_FLAG_REPLYR;   RP   RQ   RS   RT   Rb   RV   R   R   RW   Rc   Rd   R   RX   RY   R2   R[   (
   R"   RA   R?   RF   RK   R^   R_   R\   Re   R`   (    (    s3   /usr/lib/python2.7/dist-packages/samba/tests/dns.pyt   test_one_a_replyb  s2     	
(   R€   R   R…   R´   (    (    (    s3   /usr/lib/python2.7/dist-packages/samba/tests/dns.pyR°   D  s   	t	   TestZonesc           B   s5   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   sE   t  t |  ƒ j ƒ  d |  _ t j d |  j |  j |  j ƒ |  _ d  S(   Ns   test.lans   ncacn_ip_tcp:%s[sign](	   R   Rµ   R   t   zoneR   R   R    R!   t   rpc_conn(   R"   (    (    s3   /usr/lib/python2.7/dist-packages/samba/tests/dns.pyR   ‡  s    	c         C   sY   t  t |  ƒ j ƒ  y |  j |  j ƒ Wn+ t k
 rT \ } } | d k rU ‚  qU n Xd  S(   Ni%  (   R   Rµ   R¯   t   delete_zoneR¶   t   RuntimeError(   R"   t   numt   string(    (    s3   /usr/lib/python2.7/dist-packages/samba/tests/dns.pyR¯     s    c      	   C   st   t  j ƒ  } | | _ t j | _ t j | _ d | _ t  j	 | _
 |  j j t  j d |  j d  d d t  j | ƒ d  S(   Ni    t
   ZoneCreate(   R   t!   DNS_RPC_ZONE_CREATE_INFO_LONGHORNt   pszZoneNameR   t   DNS_ZONE_TYPE_PRIMARYt
   dwZoneTypet   DNS_ZONE_UPDATE_SECUREt   fAllowUpdatet   fAgingt   DNS_DP_DOMAIN_DEFAULTt	   dwDpFlagsR·   t   DnssrvOperation2t   DNS_CLIENT_VERSION_LONGHORNR   R;   t   DNSSRV_TYPEID_ZONE_CREATE(   R"   R¶   t   zone_create(    (    s3   /usr/lib/python2.7/dist-packages/samba/tests/dns.pyt   create_zone•  s    		c      	   C   s2   |  j  j t j d |  j | d d t j d  ƒ d  S(   Ni    t   DeleteZoneFromDs(   R·   RÆ   R   RÇ   R   t   DNSSRV_TYPEID_NULLR;   (   R"   R¶   (    (    s3   /usr/lib/python2.7/dist-packages/samba/tests/dns.pyR¸   ¥  s    c         C   si  d } |  j  t j ƒ } g  } |  j | t j t j ƒ } | j | ƒ |  j | | ƒ |  j | ƒ } |  j	 | t j
 ƒ |  j | t j ƒ |  j | j d ƒ |  j | ƒ |  j | ƒ } |  j	 | t j ƒ |  j | t j ƒ |  j | j d ƒ |  j | j d j t j ƒ |  j | ƒ |  j | ƒ } |  j	 | t j
 ƒ |  j | t j ƒ |  j | j d ƒ d  S(   Ns   test.lani    i   (   RB   R   Rz   RL   Rh   Ri   Rj   RD   Ra   R6   Rˆ   R9   R2   R|   RÊ   R{   R}   Rm   R¸   (   R"   R¶   RA   R?   RK   R~   (    (    s3   /usr/lib/python2.7/dist-packages/samba/tests/dns.pyt   test_soa_query¯  s*    (   R€   R   R   R¯   RÊ   R¸   RÍ   (    (    (    s3   /usr/lib/python2.7/dist-packages/samba/tests/dns.pyRµ   †  s
   				
t   TestRPCRoundtripc           B   s   e  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 RS(   c         C   s<   t  t |  ƒ j ƒ  t j d |  j |  j |  j ƒ |  _ d  S(   Ns   ncacn_ip_tcp:%s[sign](   R   RÎ   R   R   R   R    R!   R·   (   R"   (    (    s3   /usr/lib/python2.7/dist-packages/samba/tests/dns.pyR   Ì  s    c         C   s   t  t |  ƒ j ƒ  d  S(   N(   R   RÎ   R¯   (   R"   (    (    s3   /usr/lib/python2.7/dist-packages/samba/tests/dns.pyR¯   Ñ  s    c         C   sÅ   d d g } } d | |  j  ƒ  f } t t j d ƒ } t j ƒ  } | | _ zB |  j j t j	 d |  j
 |  j  ƒ  | | d  ƒ |  j | | ƒ Wd  |  j j t j	 d |  j
 |  j  ƒ  | d  | ƒ Xd  S(   Nt
   rpctextrecs   "This is a test"s   %s.%ss   "\"This is a test\""i    (   RO   R   R   t   DNS_TYPE_TXTR   t   DNS_RPC_RECORD_BUFt   recR·   t   DnssrvUpdateRecord2RÇ   R   R;   R   (   R"   Rt   R   RF   RÒ   t   add_rec_buf(    (    s3   /usr/lib/python2.7/dist-packages/samba/tests/dns.pyt   test_update_add_txt_rpc_to_dnsÔ  s    	c         C   sØ  d d d d g } } |  j  | | ƒ } |  j | ƒ } |  j | t j ƒ |  j | | ƒ |  j t |  j |  j	 |  j
 ƒ  d | |  j
 ƒ  f t j d ƒ ƒ d d d d d g } } |  j  | | ƒ } |  j | ƒ } |  j | t j ƒ |  j | | ƒ |  j t |  j |  j	 |  j
 ƒ  d | |  j
 ƒ  f t j d ƒ ƒ d	 d d d g } } |  j  | | ƒ } |  j | ƒ } |  j | t j ƒ |  j | | ƒ |  j t |  j |  j	 |  j
 ƒ  d | |  j
 ƒ  f t j d
 ƒ ƒ d S(   s   test adding records workst   pad1textrecs   "This is a test"R±   s   %s.%ss   "\"This is a test\"" "" ""t   pad2textrecs	   more texts&   "\"This is a test\"" "" "" "more text"t   pad3textrecs   "" "" "\"This is a test\""N(   Ry   Ra   R6   R   R{   R   t   assertIsNotNoneR   R·   R   RO   R   RÐ   (   R"   Rt   R   RA   R~   (    (    s3   /usr/lib/python2.7/dist-packages/samba/tests/dns.pyt&   test_update_add_null_padded_txt_recordç  s6    			c         C   sz  d d d d g } } d | } d | |  j  ƒ  f } t t j d ƒ } t j ƒ  } | | _ zB |  j j t j	 d |  j
 |  j  ƒ  | | d  ƒ |  j | | ƒ Wd  |  j j t j	 d |  j
 |  j  ƒ  | d  | ƒ Xd d d d d	 g } } d | } d | |  j  ƒ  f } t t j d
 ƒ } t j ƒ  } | | _ zB |  j j t j	 d |  j
 |  j  ƒ  | | d  ƒ |  j | | ƒ Wd  |  j j t j	 d |  j
 |  j  ƒ  | d  | ƒ Xd d d d g } } d | } d | |  j  ƒ  f } t t j d ƒ } t j ƒ  } | | _ zB |  j j t j	 d |  j
 |  j  ƒ  | | d  ƒ |  j | | ƒ Wd  |  j j t j	 d |  j
 |  j  ƒ  | d  | ƒ Xd  S(   NRÖ   s   "This is a test"R±   t   rpcs   %s.%ss   "\"This is a test\"" "" ""i    R×   s	   more texts&   "\"This is a test\"" "" "" "more text"RØ   s   "" "" "\"This is a test\""(   RO   R   R   RÐ   R   RÑ   RÒ   R·   RÓ   RÇ   R   R;   R   (   R"   Rt   R   RF   RÒ   RÔ   (    (    s3   /usr/lib/python2.7/dist-packages/samba/tests/dns.pyt"   test_update_add_padding_rpc_to_dns  sT    
	
	
	c         C   s:  d d g } } |  j  | | ƒ } |  j | ƒ } |  j | t j ƒ |  j | d g ƒ |  j t |  j |  j	 |  j
 ƒ  d | |  j
 ƒ  f t j d ƒ ƒ d d d g } } |  j  | | ƒ } |  j | ƒ } |  j | t j ƒ |  j | d d g ƒ |  j t |  j |  j	 |  j
 ƒ  d | |  j
 ƒ  f t j d ƒ ƒ d S(	   s   test adding records workst   nulltextrect	   NULL BYTEt   NULLs   %s.%ss   "NULL"t   nulltextrec2s   "NULL" "NULL"N(   Ry   Ra   R6   R   R{   R   RÙ   R   R·   R   RO   R   RÐ   (   R"   Rt   R   RA   R~   (    (    s3   /usr/lib/python2.7/dist-packages/samba/tests/dns.pyt$   test_update_add_null_char_txt_record?  s$    		c         C   sÒ   d d g } } d | } d | |  j  ƒ  f } t t j d ƒ } t j ƒ  } | | _ zE |  j j t j	 d |  j
 |  j  ƒ  | | d  ƒ |  j | d g ƒ Wd  |  j j t j	 d |  j
 |  j  ƒ  | d  | ƒ Xd  S(   NRÝ   RÞ   RÛ   s   %s.%ss   "NULL"i    Rß   (   RO   R   R   RÐ   R   RÑ   RÒ   R·   RÓ   RÇ   R   R;   R   (   R"   Rt   R   RF   RÒ   RÔ   (    (    s3   /usr/lib/python2.7/dist-packages/samba/tests/dns.pyt$   test_update_add_null_char_rpc_to_dnsU  s    
	c         C   s™   d d g } } |  j  | | ƒ } |  j | ƒ } |  j | t j ƒ |  j | | ƒ |  j t |  j |  j	 |  j
 ƒ  d | |  j
 ƒ  f t j d ƒ ƒ d S(   s   test adding records workst
   hextextrecs	   HIGHÿBYTEs   %s.%ss   "HIGHÿBYTE"N(   Ry   Ra   R6   R   R{   R   RÙ   R   R·   R   RO   R   RÐ   (   R"   Rt   R   RA   R~   (    (    s3   /usr/lib/python2.7/dist-packages/samba/tests/dns.pyt#   test_update_add_hex_char_txt_recordh  s    	c         C   sÏ   d d g } } d | } d | |  j  ƒ  f } t t j d ƒ } t j ƒ  } | | _ zB |  j j t j	 d |  j
 |  j  ƒ  | | d  ƒ |  j | | ƒ Wd  |  j j t j	 d |  j
 |  j  ƒ  | d  | ƒ Xd  S(   NRã   s	   HIGHÿBYTERÛ   s   %s.%ss   "HIGHÿBYTE"i    (   RO   R   R   RÐ   R   RÑ   RÒ   R·   RÓ   RÇ   R   R;   R   (   R"   Rt   R   RF   RÒ   RÔ   (    (    s3   /usr/lib/python2.7/dist-packages/samba/tests/dns.pyt   test_update_add_hex_rpc_to_dnst  s    
	c         C   s™   d d g } } |  j  | | ƒ } |  j | ƒ } |  j | t j ƒ |  j | | ƒ |  j t |  j |  j	 |  j
 ƒ  d | |  j
 ƒ  f t j d ƒ ƒ d S(   s   test adding records workst   slashtextrecs   Th\=is=is a tests   %s.%ss   "Th\\=is=is a test"N(   Ry   Ra   R6   R   R{   R   RÙ   R   R·   R   RO   R   RÐ   (   R"   Rt   R   RA   R~   (    (    s3   /usr/lib/python2.7/dist-packages/samba/tests/dns.pyt    test_update_add_slash_txt_record‡  s    	c         C   sÏ   d d g } } d | } d | |  j  ƒ  f } t t j d ƒ } t j ƒ  } | | _ zB |  j j t j	 d |  j
 |  j  ƒ  | | d  ƒ |  j | | ƒ Wd  |  j j t j	 d |  j
 |  j  ƒ  | d  | ƒ Xd  S(   NRæ   s   Th\=is=is a testRÛ   s   %s.%ss   "Th\\=is=is a test"i    (   RO   R   R   RÐ   R   RÑ   RÒ   R·   RÓ   RÇ   R   R;   R   (   R"   Rt   R   RF   RÒ   RÔ   (    (    s3   /usr/lib/python2.7/dist-packages/samba/tests/dns.pyt    test_update_add_slash_rpc_to_dns–  s    
	c      	   C   s    d d d g } } |  j  | | ƒ } |  j | ƒ } |  j | t j ƒ |  j | | ƒ |  j t |  j |  j	 |  j
 ƒ  d | |  j
 ƒ  f t j d d ƒ ƒ d S(   s!   test adding two txt records workst   textrec2s   "This is a test"s   "and this is a test, too"s   %s.%ss   "\"This is a test\""s    "\"and this is a test, too\""N(   Ry   Ra   R6   R   R{   R   RÙ   R   R·   R   RO   R   RÐ   (   R"   Rt   R   RA   R~   (    (    s3   /usr/lib/python2.7/dist-packages/samba/tests/dns.pyt   test_update_add_two_txt_records©  s    		c         C   sÖ   d d d g } } d | } d | |  j  ƒ  f } t t j d d ƒ } t j ƒ  } | | _ zB |  j j t j	 d |  j
 |  j  ƒ  | | d  ƒ |  j | | ƒ Wd  |  j j t j	 d |  j
 |  j  ƒ  | d  | ƒ Xd  S(	   NRé   s   "This is a test"s   "and this is a test, too"RÛ   s   %s.%ss   "\"This is a test\""s    "\"and this is a test, too\""i    (   RO   R   R   RÐ   R   RÑ   RÒ   R·   RÓ   RÇ   R   R;   R   (   R"   Rt   R   RF   RÒ   RÔ   (    (    s3   /usr/lib/python2.7/dist-packages/samba/tests/dns.pyt   test_update_add_two_rpc_to_dns·  s"    
	
	c         C   s–   d g  } } |  j  | | ƒ } |  j | ƒ } |  j | t j ƒ |  j | | ƒ |  j t |  j |  j	 |  j
 ƒ  d | |  j
 ƒ  f t j d ƒ ƒ d S(   s!   test adding two txt records workst   emptytextrecs   %s.%sR±   N(   Ry   Ra   R6   R   R{   R   RÙ   R   R·   R   RO   R   RÐ   (   R"   Rt   R   RA   R~   (    (    s3   /usr/lib/python2.7/dist-packages/samba/tests/dns.pyt!   test_update_add_empty_txt_recordsÍ  s    	c         C   sÂ   d g  } } d | |  j  ƒ  f } t t j d ƒ } t j ƒ  } | | _ zB |  j j t j	 d |  j
 |  j  ƒ  | | d  ƒ |  j | | ƒ Wd  |  j j t j	 d |  j
 |  j  ƒ  | d  | ƒ Xd  S(   Nt   rpcemptytextrecs   %s.%sR±   i    (   RO   R   R   RÐ   R   RÑ   RÒ   R·   RÓ   RÇ   R   R;   R   (   R"   Rt   R   RF   RÒ   RÔ   (    (    s3   /usr/lib/python2.7/dist-packages/samba/tests/dns.pyt    test_update_add_empty_rpc_to_dnsÙ  s    	(   R€   R   R   R¯   RÕ   RÚ   RÜ   Rá   Râ   Rä   Rå   Rç   Rè   Rê   Rë   Rí   Rï   (    (    (    s3   /usr/lib/python2.7/dist-packages/samba/tests/dns.pyRÎ   Ë  s   				 	8									t   modulet   opts(<   R   t   sysRc   R<   RS   t	   samba.ndrRP   t   sambaR    R   t   samba.testsR   t   samba.dcerpcR   R   R   t   samba.netcmd.dnsR   R   R   t   samba.tests.subunitrunR	   R
   t   samba.getoptt   getoptt   optionst   optparset   OptionParsert   parsert   SambaOptionst	   sambaoptst   add_option_groupt
   add_optiont   CredentialsOptionst   credoptst   subunitoptst
   parse_argsRñ   t   argst   get_loadparmR    t   get_credentialsR!   R   R   t   print_usaget   exitR   R   t   set_krb_forwardablet   NO_KRB_FORWARDABLER   R   Rƒ   R™   R­   R°   Rµ   RÎ   R€   (    (    (    s3   /usr/lib/python2.7/dist-packages/samba/tests/dns.pyt   <module>   sT   	


	“­ÿ sLBEÿ "