Edit File: rndc.cpython-36.pyc
3 9Pe+������������������@���sX���d�dl�mZ�d�dlZd�dlZd�dlZd�dlZd�dlZd�dlZd�dlZG�dd��de �Z dS�)�����)�OrderedDictNc���������������@���sl���e�Zd�ZdZddddddd�Zd d ��Zdd��Zddd�Zdd��Zdd��Z dd��Z dd��Zdd��Zdd��Z dS�)�rndczRNDC protocol client library������������������������)�md5Zsha1Zsha224Zsha256Zsha384Zsha512c�������������C���sb���||�_�|j��}|jd�r$|dd��}||�_tt|�|�_tj|�|�_ t jdd�|�_d|�_ |�j���dS�)z�Creates a persistent connection to RNDC and logs in host - (ip, port) tuple algo - HMAC algorithm: one of md5, sha1, sha224, sha256, sha384, sha512 (with optional prefix 'hmac-') secret - HMAC secret, base64 encodedzhmac-����Nr�����������i���)�host�lower� startswith�algo�getattr�hashlib�hlalgo�base64� b64decode�secret�randomZrandint�ser�nonce�_rndc__connect_login)�selfr���r���r�����r����/usr/lib/python3.6/rndc.py�__init__$���s���� z rndc.__init__c�������������C���s���t�|�j|d�d��S�)z�Call a RNDC command, all parsing is done on the server side cmd - a complete string with a command (eg 'reload zone example.com') )�type�_data)�dict�_rndc__command)r����cmdr���r���r����call5���s����z rndc.callFc�������������C���s��t���}�x�|j��D�]�\}}|r(|dkr(q|tjdt|��|jd��7�}t|�tkrt|tjddt|��|jd��7�}qt|�tkr�|tjddt|��|�7�}qt|�t�kr�|tjddt|��|�7�}qt|�t kr�|�j |�}|tjddt|��|�7�}qtdt|����qW�|S�)N�_auth�B�asciiz>BIr�������z#Cannot serialize element of type %s)� bytearray�items�struct�pack�len�encoder ����str�bytesr����_rndc__serialize_dict�NotImplementedError)r����data�ignore_auth�rv�k�vZsdr���r���r���Z__serialize_dict;���s"����" zrndc.__serialize_dictc������� ������O���s,��|��j�d7��_�ttj���}t||�}t��}t��|d<�t��|d<�t|�j��|d�d<�t|�|d�d<�t|d��|d�d<�|�jd�k r�|�j|d�d<�||d <�|�j|d d�}tj|�j ||�j �j��}tj |�}|�jdkr�tjd |�|d�d<�n"ttjd|�j|�j�|��|d�d<�|�j|�}tjdt|�d�d�|�}|S�)Nr���r&����_ctrlZ_serZ_tim�<���Z_exp�_noncer!���T)r5���r ���Z22s�hmd5ZB88s�hshaz>II����)r����int�timer���r0���r���r2����hmac�newr���r����digestr���Z b64encoder���r,���r-���r*����_rndc__algosr.���) r����args�kwargsZnowr4����d�msg�hash�bhashr���r���r���Z__prep_messageO���s,���� zrndc.__prep_messagec�������������C���s����|�j�d�k r |d�d�|�j�kr dS�|�jdkr8|d�d�}n|d�d�dd���}t|�tkrb|jd �}|d dt|�d���7�}tj|�}|�j|dd �}t j |�j||�j�j ��}||kS�)Nr9���r;���Fr ���r&���r<���r=���r���r(����=r>���T)r5���)r���r���r ���r1����decoder.���r���r���r2���rA���rB���r���r���rC���)r���rH���rJ���Zremote_hashZmy_msgZmy_hashr���r���r���Z__verify_msgj���s���� zrndc.__verify_msgc������� ������O���s����|�j�||�}|�jj|�}|t|�kr,td��|�jjd�}t|�dkrLtd��tjd|�\}}|dkrptd|���|d8�}|�jj|tj �}t|�|kr�td��t |�tkr�t|�}|�j |�}|�j|�s�td ��|S�) NzCannot send the message����zCan't read response headerz>IIr���zWrong message version %dr>���zCan't read response datazAuthentication failure)�_rndc__prep_message�socket�sendr.����IOErrorZrecvr,����unpackr3���ZMSG_WAITALLr ���r0���r*����_rndc__parse_message�_rndc__verify_msg) r���rE���rF���rH���Zsent�headerZlength�versionr4���r���r���r���Z __commandy���s(���� zrndc.__commandc�������������C���s2���t�j|�j�|�_�d�|�_|�jdd�}|d�d�|�_d�S�)NZnull)r ���r9���r;���)rO���Zcreate_connectionr���r���r#���)r���rH���r���r���r���Z__connect_login����s����zrndc.__connect_loginc�������������C���s����d}||�}|d7�}||||���j�d�}||7�}||�}|d7�}tjd|||d����d�}|d7�}||||���}||7�}||d���}|dkr�|||fS�|dkr�t��} x(t|�dkr�|�j|�\} }}|| | <�q�W�|| |fS�td|���d�S�)Nr���r���r(���z>Ir>���r)���zUnknown element type %d)rL���r,���rR���r���r.����_rndc__parse_elementr3���)r����input�posZlabellen�labelr ���Zdatalenr4����restrG���Zilabel�valuer���r���r���Z__parse_element����s*���� zrndc.__parse_elementc�������������C���s8���t���}d�}x(t|�dkr2|�j|�\}}}|||<�qW�|S�)Nr���)r���r.���rW���)r���rX���r6���ZhdatarZ���r\���r���r���r���Z__parse_message����s����zrndc.__parse_messageN)F)�__name__� __module__�__qualname__�__doc__rD���r���r%���r2���rN���rT���r#���r���rW���rS���r���r���r���r���r������s ��� r���)�collectionsr���r@���r,���r���rA���r���r���rO����objectr���r���r���r���r����<module>���s���