a
    ¡Öa’3  ã                   @   sf  d dl Z d dlmZ d dlmZmZ d dlmZ d dlm	Z	m
Z
 d dlmZmZ d dlmZ d dlmZ d dlZe d¡Ze e¡Ze e¡ ejd	d
ddd e e¡Ze e¡ e	eƒZe e¡ e ¡ \ZZe ¡ a e !t ¡a"ej#a#e$eƒdk r
e %¡  e  &d¡ ed  Z'ed a(t" )ej*¡ dZ+dZ,dZ-dZ.dZ/dZ0dZ1dZ2G dd„ deƒZ3e
e4ed dS )é    N)Úcredentials)ÚdnsÚ	dnsserver)Údata_to_dns_record)ÚSubunitOptionsÚTestProgram)ÚwerrorÚWERRORError)ÚDNSTestz3dns_wildcard.py <server name> <server ip> [options]z	--timeoutÚintÚtimeoutz Specify timeout for DNS requests)ÚtypeÚdestÚhelpé   é   z1.1.1.1z*.wildcardtestz1.1.1.2zexact.wildcardtestz1.1.1.3z*.level2.wildcardtestz1.1.1.4zexact.level2.wildcardtestc                       s|   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Z‡  ZS )ÚTestWildCardQueriesc                    s¸   t t| ƒ ¡  t| _t| _t| _t| _t| _t	j
dt|  ¡ f tft	j
dt|  ¡ f tft	j
dt|  ¡ f tft	j
dt|  ¡ f tfg| _|  ¡ }| jD ]\}}}|  ||||¡ q˜d S )Nú%s.%s)Úsuperr   ÚsetUpÚserver_nameÚserverÚ	server_ipÚlpÚcredsr   r   ÚDNS_QTYPE_AÚWILDCARDÚget_dns_domainÚWILDCARD_IPÚEXACTÚEXACT_IPÚLEVEL2_WILDCARDÚLEVEL2_WILDCARD_IPÚLEVEL2_EXACTÚLEVEL2_EXACT_IPÚdns_recordsÚdns_connectÚ
add_record©ÚselfÚcÚtypÚnameÚdata©Ú	__class__© ú:/usr/lib/python3/dist-packages/samba/tests/dns_wildcard.pyr   N   s@    þþþüþüõzTestWildCardQueries.setUpc                 C   s.   |   ¡ }| jD ]\}}}|  ||||¡ qd S )N)r&   r%   Údelete_recordr(   r0   r0   r1   ÚtearDownm   s    zTestWildCardQueries.tearDownc                 C   s   d| j  }t || j| j¡S )Nzncacn_ip_tcp:%s[sign])r   r   r   r   )r)   Zbinding_strr0   r0   r1   r&   r   s    
zTestWildCardQueries.dns_connectc              
   C   sx   t ||ƒ}t ¡ }||_z"| tjd| j|  ¡ |d |¡ W n8 tyr } z |j	d t
jkr^|‚W Y d }~n
d }~0 0 d S ©Nr   )r   r   ÚDNS_RPC_RECORD_BUFÚrecÚDnssrvUpdateRecord2ÚDNS_CLIENT_VERSION_LONGHORNr   r   r	   Úargsr   Z"WERR_DNS_ERROR_NAME_DOES_NOT_EXIST)r)   Údns_connr+   r,   r-   r6   Zdel_rec_bufÚer0   r0   r1   r2   v   s    
úz!TestWildCardQueries.delete_recordc              
   C   sh   t ||ƒ}t ¡ }||_z"| tjd| j|  ¡ ||d ¡ W n( tyb } z|‚W Y d }~n
d }~0 0 d S r4   )	r   r   r5   r6   r7   r8   r   r   r	   )r)   r:   r+   r,   r-   r6   Zadd_rec_bufr;   r0   r0   r1   r'   ‰   s    
úzTestWildCardQueries.add_recordc                 C   s°   |   tj¡}g }d|  ¡  }|  |tjtj¡}| |¡ |  ||¡ | j	|| j
d\}}|  |tj¡ |  |tj¡ |  |jd¡ |  |jd jtj¡ |  |jd jt¡ dS )z2Query an A record, should match the wildcard entryzmiss.wildcardtest.%s©Zhostr   r   N©Úmake_name_packetr   ÚDNS_OPCODE_QUERYr   Úmake_name_questionr   ÚDNS_QCLASS_INÚappendÚfinish_name_packetÚdns_transaction_udpr   Úassert_dns_rcode_equalsÚDNS_RCODE_OKÚassert_dns_opcode_equalsÚassertEqualÚancountÚanswersÚrr_typeÚrdatar   ©r)   ÚpZ	questionsr,   ÚqZresponseZresponse_packetr0   r0   r1   Útest_one_a_query_match_wildcard™   s     þ
ÿz3TestWildCardQueries.test_one_a_query_match_wildcardc                 C   s°   |   tj¡}g }d|  ¡  }|  |tjtj¡}| |¡ |  ||¡ | j	|| j
d\}}|  |tj¡ |  |tj¡ |  |jd¡ |  |jd jtj¡ |  |jd jt¡ dS )z~ Query an A record, should match the wild card entry
            have two labels to the left of the wild card target.
        zlabel2.label1.wildcardtest.%sr<   r   r   Nr=   rM   r0   r0   r1   Ú(test_one_a_query_match_wildcard_2_labels¯   s     þ
ÿz<TestWildCardQueries.test_one_a_query_match_wildcard_2_labelsc                 C   s´   |   tj¡}g }dt|  ¡ f }|  |tjtj¡}| |¡ |  	||¡ | j
|| jd\}}|  |tj¡ |  |tj¡ |  |jd¡ |  |jd jtj¡ |  |jd jt¡ dS )zQuery the wildcard entryr   r<   r   r   N)r>   r   r?   r   r   r@   r   rA   rB   rC   rD   r   rE   rF   rG   rH   rI   rJ   rK   rL   r   rM   r0   r0   r1   Útest_one_a_query_wildcard_entryÇ   s     þ
ÿz3TestWildCardQueries.test_one_a_query_wildcard_entryc                 C   s´   |   tj¡}g }dt|  ¡ f }|  |tjtj¡}| |¡ |  	||¡ | j
|| jd\}}|  |tj¡ |  |tj¡ |  |jd¡ |  |jd jtj¡ |  |jd jt¡ dS ©z\Query an entry that matches the wild card but has an exact match as
         well.
         r   r<   r   r   N)r>   r   r?   r   r   r@   r   rA   rB   rC   rD   r   rE   rF   rG   rH   rI   rJ   rK   rL   r    rM   r0   r0   r1   Útest_one_a_query_exact_matchÝ   s     þ
ÿz0TestWildCardQueries.test_one_a_query_exact_matchc                 C   s°   |   tj¡}g }d|  ¡  }|  |tjtj¡}| |¡ |  ||¡ | j	|| j
d\}}|  |tj¡ |  |tj¡ |  |jd¡ |  |jd jtj¡ |  |jd jt¡ dS )z:Query an A record, should match the level 2 wildcard entryzmiss.level2.wildcardtest.%sr<   r   r   N©r>   r   r?   r   r@   r   rA   rB   rC   rD   r   rE   rF   rG   rH   rI   rJ   rK   rL   r"   rM   r0   r0   r1   Ú"test_one_a_query_match_wildcard_l2ô   s     þ
ÿz6TestWildCardQueries.test_one_a_query_match_wildcard_l2c                 C   s°   |   tj¡}g }d|  ¡  }|  |tjtj¡}| |¡ |  ||¡ | j	|| j
d\}}|  |tj¡ |  |tj¡ |  |jd¡ |  |jd jtj¡ |  |jd jt¡ dS )zƒQuery an A record, should match the level 2 wild card entry
           have two labels to the left of the wild card target
        z$label1.label2.level2.wildcardtest.%sr<   r   r   NrU   rM   r0   r0   r1   Ú+test_one_a_query_match_wildcard_l2_2_labels
  s     þ
ÿz?TestWildCardQueries.test_one_a_query_match_wildcard_l2_2_labelsc                 C   s´   |   tj¡}g }dt|  ¡ f }|  |tjtj¡}| |¡ |  	||¡ | j
|| jd\}}|  |tj¡ |  |tj¡ |  |jd¡ |  |jd jtj¡ |  |jd jt¡ dS rS   )r>   r   r?   r#   r   r@   r   rA   rB   rC   rD   r   rE   rF   rG   rH   rI   rJ   rK   rL   r$   rM   r0   r0   r1   Útest_one_a_query_exact_match_l2"  s     þ
ÿz3TestWildCardQueries.test_one_a_query_exact_match_l2c                 C   s´   |   tj¡}g }dt|  ¡ f }|  |tjtj¡}| |¡ |  	||¡ | j
|| jd\}}|  |tj¡ |  |tj¡ |  |jd¡ |  |jd jtj¡ |  |jd jt¡ dS )z Query the level 2 wildcard entryr   r<   r   r   N)r>   r   r?   r!   r   r@   r   rA   rB   rC   rD   r   rE   rF   rG   rH   rI   rJ   rK   rL   r"   rM   r0   r0   r1   Ú"test_one_a_query_wildcard_entry_l29  s     þ
ÿz6TestWildCardQueries.test_one_a_query_wildcard_entry_l2)Ú__name__Ú
__module__Ú__qualname__r   r3   r&   r2   r'   rP   rQ   rR   rT   rV   rW   rX   rY   Ú__classcell__r0   r0   r.   r1   r   L   s   r   )ÚmoduleÚopts)5ÚsysZsambar   Zsamba.dcerpcr   r   Zsamba.netcmd.dnsr   Zsamba.tests.subunitrunr   r   r   r	   Zsamba.tests.dns_baser
   Zsamba.getoptZgetoptZoptionsZoptparseZOptionParserÚparserZSambaOptionsZ	sambaoptsZadd_option_groupZ
add_optionZCredentialsOptionsZcredoptsZsubunitoptsÚ
parse_argsr_   r9   Zget_loadparmr   Zget_credentialsr   r   ÚlenZprint_usageÚexitr   r   Zset_krb_forwardableZNO_KRB_FORWARDABLEr   r   r    r   r"   r!   r$   r#   r   rZ   r0   r0   r0   r1   Ú<module>   sT   ÿ


ÿ




  