3 7&j+ @ sX d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZG dd de Z dS ) )OrderedDictNc @ sl e Zd ZdZdddddddZd d Zdd ZdddZdd Zdd Z dd Z dd Zdd Zdd Z dS )rndczRNDC protocol client library )md5Zsha1Zsha224Zsha256Zsha384Zsha512c C sb || _ |j }|jdr$|dd }|| _tt|| _tj|| _ t jdd| _d| _ | j dS )zCreates 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 )hostlower startswithalgogetattrhashlibhlalgobase64 b64decodesecretrandomZrandintsernonce_rndc__connect_login)selfr r r r /usr/lib/python3.6/rndc.py__init__$ s z rndc.__init__c C s t | j|dd S )zCall 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_authBasciiz>BIr z#Cannot serialize element of type %s) bytearrayitemsstructpacklenencoder strbytesr _rndc__serialize_dictNotImplementedError)r dataignore_authrvkvZsdr r r Z__serialize_dict; s" " zrndc.__serialize_dictc O s, | j d7 _ ttj }t||}t }t |d<