
    by                     h   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	 d dl
m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j        Z ee          dk     r$e                                  e j        d           ed          Zed         Z G d de          Z e	ee           dS )    N)dns)SubunitOptionsTestProgram)DNSTKeyTestz/dns_tkey.py <server name> <server ip> [options]z	--timeoutinttimeoutz Specify timeout for DNS requests)typedesthelp      c                   B     e Zd Z fdZd Zd Zd Zd Zd Zd Z	 xZ
S )TestDNSUpdatesc                     t           | _        t          | _        t          t          |                                            d S )N)server_nameserver	server_ipsuperr   setUp)self	__class__s    6/usr/lib/python3/dist-packages/samba/tests/dns_tkey.pyr   zTestDNSUpdates.setUp5   s3    !"nd##))+++++    c                 .    |                                   dS )ztest DNS TKEY handshakeN)
tkey_trans)r   s    r   	test_tkeyzTestDNSUpdates.test_tkey:   s     	r   c                    |                                  }|                     || j                  \  }}|                     |t          j                   |                     | j                  }|                     |t          j	                   dS )z#test DNS update without TSIG recordN)
make_update_requestdns_transaction_udpr   assert_dns_rcode_equalsr   DNS_RCODE_REFUSEDsearch_record
newrecnameassert_rcode_equalsDNS_RCODE_NXDOMAIN)r   presponse
response_prcodes        r   test_update_wo_tsigz"TestDNSUpdates.test_update_wo_tsig?   s~     $$&&!%!9!9!T^!L!L:$$Xs/DEEE""4?33  (>?????r   c                    |                                   |                                 }|                     |d           |                     || j                  \  }}|                     |t          j                   |j        d         j	        }| 
                    |j        t          j                   | 
                    |j        d           |                     | j                  }|                     |t          j                   dS )z5test DNS update with a TSIG record with a bad keynamebadkeyr   N)r   r   sign_packetr   r   r    r   DNS_RCODE_NOTAUTH
additionalrdataassertEqualerrorDNS_RCODE_BADKEYmac_sizer"   r#   r$   r%   r   r&   r'   r(   tsig_recordr)   s         r   test_update_tsig_bad_keynamez+TestDNSUpdates.test_update_tsig_bad_keynameI   s     	$$&&H%%%!%!9!9!T^!L!L:$$Xs/DEEE)!,2*C,@AAA-q111""4?33  (>?????r   c                     |                                   |                                 }|                     || j                   |                     || j                  \  }}|                     |t          j                   |j	        d         j
        }|                     |j        t          j                   |                     |j        d           |                     | j                  }|                     |t          j                   dS )z1test DNS update with a TSIG record with a bad MACr   N)r   r   bad_sign_packetkey_namer   r   r    r   r.   r/   r0   r1   r2   DNS_RCODE_BADSIGr4   r"   r#   r$   r%   r5   s         r   test_update_tsig_bad_macz'TestDNSUpdates.test_update_tsig_bad_macY   s     	$$&&Q...!%!9!9!T^!L!L:$$Xs/DEEE)!,2*C,@AAA-q111""4?33  (>?????r   c                 *   |                                   |                                 }|                     || j                  }|                     || j                  \  }}|                     |t          j                   | 	                    |||           | 
                    | j                  }|                     |t          j                   |                     d          }|                     || j                  }|                     || j                  \  }}|                     |t          j                   | 	                    |||           | 
                    | j                  }|                     |t          j                   dS )z(test DNS update with correct TSIG recordTdeleteN)r   r   r-   r:   r   r   r    r   DNS_RCODE_OKverify_packetr"   r#   r$   r%   )r   r&   macr'   r(   r)   s         r   test_update_tsigzTestDNSUpdates.test_update_tsigi   sk    	$$&&q$-00!%!9!9!T^!L!L:$$Xs/?@@@8Z555 ""4?33  (8999 $$D$11q$-00!%!9!9!T^!L!L:$$Xs/?@@@8Z555 ""4?33  (>?????r   c                    d| j         z   }t          j        }d}|                     t          j                  }|                     |                                 t          j        t          j                  }g }|                    |           | 	                    ||           g }t          j
                    }||_        t          j        |_        t          j        |_        d|_        d|_        |                    |           t          j
                    }||_        t          j        |_        t          j        |_        d|_        d|_        |                    |           t          j
                    }||_        t          j        |_        ||_        ||_        d|_        d|_        |                    |           t)          |          |_        ||_        g }	t          j
                    }||_        t          j        |_        t          j        |_        d|_        d|_        |	                    |           t)          |	          |_        |	|_        |                     || j                  \  }
}|                     |
t          j                   |                                  |                      || j!                  }|                     || j                  \  }
}|                     |
t          j"                   | #                    |
||           | $                    |          }| %                    |t          j"                   | &                    d          }|                      || j!                  }|                     || j                  \  }
}|                     |
t          j"                   | #                    |
||           | $                    | j                   }| %                    |t          j'                   dS )	zAtest DNS update with correct TSIG record (follow Windows pattern)wini  r   i  z
10.1.45.64Tr>   N)(r#   r   DNS_QCLASS_INmake_name_packetDNS_OPCODE_UPDATEmake_name_questionget_dns_domainDNS_QTYPE_SOAappendfinish_name_packetres_recnameDNS_QTYPE_Arr_typeDNS_QCLASS_ANYrr_classttllengthDNS_QTYPE_AAAAr0   lennscountnsrecsDNS_QTYPE_CNAMEDNS_QCLASS_NONEancountanswersr   r   r    r!   r   r-   r:   r@   rA   r"   r$   r   r%   )r   r#   rS   rT   r&   q	questionsupdatesrprereqsr'   r(   rB   r)   s                 r   test_update_tsig_windowsz'TestDNSUpdates.test_update_tsig_windows   sh    T_,
$!!#"788##D$7$7$9$9$'$5$'$57 7 	9---KMMO	'
qKMM&	'
qKMMO	
qLL	KMM'	(
qLL		!%!9!9!T^!L!L:$$Xs/DEEEq$-00!%!9!9!T^!L!L:$$Xs/?@@@8Z555 "":..  (8999 $$D$11q$-00!%!9!9!T^!L!L:$$Xs/?@@@8Z555 ""4?33  (>?????r   )__name__
__module____qualname__r   r   r*   r7   r<   rC   rc   __classcell__)r   s   @r   r   r   4   s        , , , , ,
  
@ @ @@ @ @ @ @ @ @ @ @4J@ J@ J@ J@ J@ J@ J@r   r   )moduleopts) sysoptparsesamba.getoptgetoptoptionssamba.dcerpcr   samba.tests.subunitrunr   r   samba.tests.dns_baser   OptionParserparserSambaOptions	sambaoptsadd_option_group
add_optionCredentialsOptionscredoptssubunitopts
parse_argsri   argsr   rW   print_usageexitr   r   r   rd    r   r   <module>r      s  & 


              > > > > > > > > , , , , , ,		P	Q	Q G ((	   	 " " "   +E	9  ; ; ; &7%f--    ! ! !nV$$    $ $ $  
d
,3t99q==
CHQKKK1gG	Y@ Y@ Y@ Y@ Y@[ Y@ Y@ Y@x 8+ . . . . . .r   