3 •7&j+ ã @ 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<