a {)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 || _ | ¡ }| d¡r$|dd… }|| _tt|ƒ| _t |¡| _ t dd¡| _d| _ | ¡ 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.9/site-packages/isc/rndc.pyÚ__init__$ s z rndc.__init__c C s t | j|dd ƒ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 ƒ }| ¡ D ]ô\}}|r$|dkr$q|t dt|ƒ¡| d¡ 7 }t|ƒtkrp|t ddt|ƒ¡| d¡ 7 }qt|ƒtkr˜|t ddt|ƒ¡| 7 }qt|ƒt krÀ|t ddt|ƒ¡| 7 }qt|ƒt krò| |¡}|t ddt|ƒ¡| 7 }qtdt|ƒ ƒ‚q|S )NÚ_authÚBÚasciiz>BIé é 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ÚvÚsdr r r Z__serialize_dict; s$ " ÿzrndc.__serialize_dictc O s0 | j d7 _ tt ¡ ƒ}t|i |¤Ž}tƒ }tƒ |d<