a \·ädDaã @sÈddlmZmZddlZddlZddlZzddlZddlZej Z WnJe yŒZ z2ej  d¡ej  de ¡e d¡WYdZ [ n dZ [ 00dZdZdd „ZGd d „d ƒZGd d „d ƒZddd„ZdS)é)Úprint_functionÚdivisionNz1AgentX: can't find Python AgentX Packet library. z%s ééé<cCsttur| ¡St|ƒSdS©N)ÚstrÚbytesÚnext)Ú generator©r ú0/usr/lib64/python3.9/site-packages/ntp/agentx.pyÚgen_nextsrc@sheZdZddd„Zdd„Zdd „Zd d „Zd d „Zddd„Zddd„Z ddd„Z ddd„Z ddd„Z dS)Ú MIBControlNr rcCsHi|_|dur||_d|_g|_g|_g|_||_||_||_||_dS©NF) ÚoidTreeÚinSetPÚ setVarbindsÚ setHandlersÚ setUndoDataÚmibRootÚ rangeSubidÚ upperBoundÚcontext)ÚselfrrrrZ mibContextr r r Ú__init__ szMIBControl.__init__cCs|jSr)r©rr r r Ú mib_rootOID/szMIBControl.mib_rootOIDcCs|jSr)rrr r r Úmib_rangeSubid2szMIBControl.mib_rangeSubidcCs|jSr)rrr r r Úmib_upperBound5szMIBControl.mib_upperBoundcCs|jSr)rrr r r Ú mib_context8szMIBControl.mib_contextcCs¸t|tjƒrt|jƒ}|j}|}tj |d¡\}}|d}||  ¡vrVddddœ||<|sŠ|||d<|||d<|dur†|||d<dS||ddur¦i||d<||d}q dS)Nrr)ÚreaderÚwriterÚsubidsr!r"r#) Ú isinstanceÚaxÚOIDÚtupler#rÚntpÚutilZ slicedataÚkeys)rÚoidr!r"ZdynamicZ currentLevelZ remainingOIDZnoder r r ÚaddNode;s&   ÿ     zMIBControl.addNodeFc CsŽt|j|jƒ}zVt|ƒ\}}}|r,||k}n |j|jk}|rb|durb|rV||||fWS|||fWSWqty†|r|YdSYdSYq0qdS)N)NNNN)NNN)Ú walkMIBTreerrrr#Ú StopIteration) rZnextPÚ searchoidÚreturnGeneratorÚgenr+r!r"Zoidhitr r r Ú getOID_coreSs    zMIBControl.getOID_corecCs| d||¡S)zGet the requested OIDF©r2©rr/r0r r r ÚgetOIDlszMIBControl.getOIDcCs| d||¡S)z Get the next lexicographical OIDTr3r4r r r Ú getNextOIDpszMIBControl.getNextOIDcCs,g}t|j|jƒ}zŠt|ƒ\}}}|dur0Wqnj|j|jjkrb|jjr\| |||f¡Wq¶qšWqn8||jkrš|j  ¡s†||jkr†gWS| |||f¡Wq¶Wqt y²gYS0q|r¾|SzLt|ƒ\}}}|durÜWq¾n,|j  ¡sø||jkrøWq(n| |||f¡Wq¾t y$Yq(Yq¾0q¾|S)z9Get a list of every (optionally the first) OID in a rangeN) r-rrrr#ÚstartZincludeÚappendÚendZisNullr.)rZoidrangeZ firstOnlyÚoidsr1r+r!r"r r r ÚgetOIDsInRangets<   zMIBControl.getOIDsInRange)Nr rNN)NNN)F)F)F)F) Ú__name__Ú __module__Ú __qualname__rrrrr r,r2r5r6r;r r r r rsÿ     rc@sÀeZdZdeddfdd„Zdd„Zdd „Zd d „Zd-d d„Zdd„Z dd„Z edfdd„Z dd„Z d.dd„Z dd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„Zd)d*„Zd+d,„ZdS)/Ú PacketControlgü©ñÒMbP?Ni'cs¢‡‡fdd„|_||_||_i|_d|_||_d|_g|_||_d|_ d|_ d|_ d|_ t j|jt j|jt j|jt j|jt j|jt j|jt j|jt j|ji|_dS)Ncstj ˆ|ˆ|¡Sr)r(r)Zdolog)ZtxtZdbg©ÚdebugÚlogfpr r Ú£óz(PacketControl.__init__..rDrF)ÚlogÚsocketÚspinGapÚ packetLogÚ loopCallbackÚdatabaseÚ receivedDataÚreceivedPacketsÚtimeoutÚ sessionIDÚhighestTransactionIDÚ lastReceptionÚstillConnectedr%ZPDU_GETÚ handle_GetPDUZ PDU_GET_NEXTÚhandle_GetNextPDUZ PDU_GET_BULKÚhandle_GetBulkPDUZ PDU_TEST_SETÚhandle_TestSetPDUZPDU_COMMIT_SETÚhandle_CommitSetPDUZ PDU_UNDO_SETÚhandle_UndoSetPDUZPDU_CLEANUP_SETÚhandle_CleanupSetPDUÚ PDU_RESPONSEÚhandle_ResponsePDUÚ pduHandlers)rZsockZdbaserGrMrBrAr r@r r¡s,ùzPacketControl.__init__cCsR|jdurdS|rD|jrL| ¡|jdur4| |¡t |j¡qn| ¡|jS)NTF)rQÚ_dolooprIÚtimeÚsleeprG)rZ runforeverr r r Úmainloop¾s   zPacketControl.mainloopc CsÈ| ¡|jr”|j d¡}|j|jkrb| d|d¡t d|j|j|jdtj d¡}|  |d¡q|j }||j vr‚|j ||ƒq| d|d¡q|  ¡|jdurÄt ¡}||jtkrÄ| ¡dS)Nrz-Received packet with incorrect session ID: %séTFz(Dropping packet type %i, not implementedé)Ú packetEaterrLÚpoprNrEr%Ú ResponsePDUÚ transactionIDÚpacketIDZRSPERR_NOT_OPENÚ sendPacketZpduTyper[ÚcheckResponsesrPr]ÚpingTimeÚsendPing)rÚpacketÚrespZptypeÚ currentTimer r r r\Ës2  þ þ   ÿ zPacketControl._doloopc Csœ| dd¡t dddd|jdd¡}| |d¡| |d¡}|j|_t d|jd d |jd |j  ¡|j  ¡|j  ¡|j  ¡¡ }| |d¡| |¡d|_ dS) NzInitializing new session...r`Térr zNTPsec SNMP subagentFr)rEr%ZOpenPDUrMrgÚwaitForResponserNZ RegisterPDUrJrrrr rQ)rZopenpktZresponseÚregisterr r r ÚinitNewSessionæs  ÿ  ü  zPacketControl.initNewSessionFcCs|| ¡|jrj|j d¡}|jtjkr(q|j|jko>|j|jk}|sT|oR|j|jk}|r|  dd¡|Sqt   |j ¡qdS)zBWait for a response to a specific packet, dropping everything elserzReceived waited for responseéN) rbrLrcÚ __class__r%rdrerfrNrEr]r^rG)rZopktZ ignoreSIDrkZhaveitr r r roøs    ÿ zPacketControl.waitForResponsecCsRt ¡}t|j ¡ƒD]6}|j|\}}}||kr|durD|d|ƒ|j|=qdS)z0Check for expected responses that have timed outN)r]ÚlistrHr*)rrmÚkeyZ expirationÚ originalPktÚcallbackr r r rh s zPacketControl.checkResponsesc CsÚ| ¡t|jƒ}|dkrdSzZt |j¡\}}}|s.callback©rw)rOr%ZPingPDUrNrg)rÚtidrrwr rr rj:s   zPacketControl.sendPingcsFˆjd}|ˆ_t dˆj|d||¡}‡‡fdd„‰ˆ |dˆ¡dS)NrƒTrcs|durˆj|dˆddS)NTr…)rg)rr„©Ú resendNotifyrr r rˆNsz.PacketControl.sendNotify..resendNotify)rOr%Z NotifyPDUrNrg)rÚvarbindsrr†rr r‡r Ú sendNotifyGs  zPacketControl.sendNotifyc Cs:t |dd|d|d|dd||¡}| |d¡dS)NÚflagsZ bigEndianZ session_idZtransaction_idZ packet_idrF)r%rdrg)rZ errorHeaderZ errorTypeZ errorIndexÚerrr r r r~SsüzPacketControl.sendErrorResponsecCsvd}t |jgggd¡d}|s"qd|d}| d¡}|rd| dt|ƒd¡||7}t ¡|_qqdq|j|7_dS)z@Reads all currently available data from the socket, non-blockingrDrizReceived data: %srƒN)ÚselectrFZrecvrEr|r]rPrK)rÚdataÚtmpÚnewdatar r r rz[s  zPacketControl.pollSocketc Cs®g}|jD]r}|j}|j |¡\}}}||ks6|durL| t tj|¡¡q ||ƒ}|durr| t tj|¡¡q | |¡q t  d|j |j |j dtj d|¡} | | d¡dS©NTrF)Ú oidrangesr7rJr5r8r%ÚVarbindZVALUE_NO_SUCH_OBJECTZ VALUE_NULLrdrNrerfÚ ERR_NOERRORrg) rrkÚbindsÚoidrÚtargetr+r!Ú_Úvbindrlr r r rRps  ÿzPacketControl.handle_GetPDUc Cs¬g}|jD]p}|j |d¡}|s:| t tj|j¡¡q q|d\}}}||ƒ}|durlt ||j d¡}qq| |¡q qq t  d|j |j |j dtjd|¡} | | d¡dSr‘)r’rJr;r8r%r“ÚVALUE_END_OF_MIB_VIEWr7Z SearchRanger9rdrNrerfr”rg) rrkr•r–r:r+r!r˜r™rlr r r rSˆs&  ÿ ÿzPacketControl.handle_GetNextPDUc Csþg}|jd|j…}|j|jd…}|D]J}|j |d¡}|sV| t tj|j¡¡q(|d\}}} | ||ƒ¡q(|D]T}|j |¡}|s¤| t tj|j¡¡qx|d|j …D]\}}} | ||ƒ¡q²qxt  d|j |j |j dtjd|¡} | | d¡dSr‘)r’ZnonRepsrJr;r8r%r“ršr7ZmaxRepsrdrNrerfr”rg) rrkr•ZnonrepsZrepeatsr–r:r+r!r˜rlr r r rT¡s& ÿzPacketControl.handle_GetBulkPDUc Csd|jjrd|j_g|j_g|j_g|j_d}tt|jƒƒD]’}|j|}|j |j ¡\}}}|durpt j }qÎn|dur‚t j }qÎ||ƒ}|d|ƒ}|t j kr¢qÎ|jj |¡|jj |¡|jj |¡q:|t j kr6t  d|j|j|jd||¡} | | d¡t|ƒD] } |jj| d|jj| ƒq d|j_n*t  d|j|j|jdt j d¡} | | d¡dS)NTÚtestrFÚclear)rJrrrrÚranger{r‰r5r+r%Z ERR_NO_ACCESSZERR_NOT_WRITABLEr”r8rdrNrerfrg) rrkÚerrorZ bindIndexZvarbindr+r!r"ÚundoDatarlÚir r r rU¹sH     ÿ    ÿ  ÿzPacketControl.handle_TestSetPDUc Cs |jjs|jj}|jj}tt|ƒƒD]$}||d||ƒ}|tjkr$qJq$|tjkrrt d|j |j |j d||¡}nt d|j |j |j dtjd¡}|  |d¡dS)NZcommitTrF) rJrrrrr{r%r”rdrNrerfrg)rrkr‰Úhandlersr ržrlr r r rVçs   ÿ ÿz!PacketControl.handle_CommitSetPDUc Cs¦|jj}|jj}|jj}tt|ƒƒD]*}||d||||ƒ}|tjkr$qPq$|tjkrxt d|j |j |j d||¡}nt d|j |j |j dtjd¡}|  |d¡dS)NZundoTrF) rJrrrrr{r%r”rdrNrerfrg)rrkr‰r¡rŸr ržrlr r r rWøs   ÿ ÿzPacketControl.handle_UndoSetPDUcCs@|jj}|jj}tt|ƒƒD]}||d||ƒqd|j_dS)NZcleanF)rJrrrr{r)rrkr‰r¡r r r r rXs z"PacketControl.handle_CleanupSetPDUcCsJ|j|j|jf}||jvrF|j|\}}}|j|=|durF|||ƒndSr)rNrerfrH)rrkr‚rMrvrwr r r rZs  z PacketControl.handle_ResponsePDU)F)N)r<r=r>ÚdefaultTimeoutrr_r\rqrorhrbrgrjrŠr~rzrRrSrTrUrVrWrXrZr r r r r? s0ÿ    ÿ  .r?r c csBg}g}|}t| ¡ƒ}| ¡d}|t|ƒkr\|rX| ¡\}}}}| ¡|d7}q$ndS||}t |t|ƒ|f¡}||| d¡|| d¡fV|| d¡} | dur4|  ||||f¡|  |¡t | t ƒrà| }n2| ƒ}|ikr| ¡\}}}}| ¡|d7}q$t| ¡ƒ}| ¡d}||}q$|d7}q$dS)Nrrr!r"r#) rtr*Úsortr{rcr%r&r'Úgetr8r$Údict) ZtreeZrootpathZ nodeStackZoidStackÚcurrentZ currentKeysZkeyIDrur+Zsubsr r r r-sD        r-)r )Z __future__rrrr]ÚsysZntp.utilr(Zntp.agentx_packetZ agentx_packetr%Ú ImportErrorr€ÚstderrÚwriteÚexitr¢rirrr?r-r r r r Ús, ÿ ~