o
    B]                     @   s  d dl mZ d dlmZmZmZ d dlmZmZm	Z	 d dl
mZmZ d dlmZ d dlmZ d dlmZmZmZ d dlmZ d d	lmZ d d
lmZ d dlmZ ejZejZejZejjZ ej!jZ"ej#j$Z%ej#j&Z'ej#j(Z)ej#j*Z+e	j,jZ-	 ej.jZ/ej0jZ1ej2jZ3ej4jZ5ej6jZ7ej8jZ9ej:jZ;ej<jZ=d Z>dZ?dZ@ejje ej!je! ej#j$e#ej#j$ej#j&e#ej#j&ej#j(e#ej#j(ej#j*e#ej#j*e	j,je	, iZAej.je. ej0je0 ej2je2 ej4je4 ej6je6 ej8je8 ej:je: ej<je< iZBdd ZC		daddZDdd ZEdd ZFe-de=ddde>e>df	ddZG		dbddZHdd ZIdcddZJd d! ZKd"d# ZLddedfd$d%ZMd&d' ZNd(d) ZOd*d+ ZPd,d- ZQeOZReQZSd.d/ ZTd0d1 ZUd2d3 ZVd4d5 ZWd6d7 ZXd8d9 ZYd:d; ZZd<d= Z[d>d? Z\d@dA Z]dBdC Z^dDdE Z_dFdG Z`dHdHdHefdIdJZadHdHdHefdKdLZbefdMdNZcefdOdPZdefdQdRZeefdSdTZfefdUdVZgefdWdXZh	dddYdZZi		dad[d\Zj	ddd]d^Zkd_d` ZldS )e    )null)udpudp6unix)hmacmd5hmacshanoauth)desnopriv)aes)hmacsha2)des3aes192aes256)rfc1902)rfc1905)error)debug      c                 C   s:   | j jj}|dd\}|dd\}||}|||fS )N__SNMP-FRAMEWORK-MIBsnmpEngineIDzSNMP-COMMUNITY-MIBsnmpCommunityEntrymsgAndPduDspmibInstrumController
mibBuilderimportSymbolsgetInstIdFromIndices)
snmpEnginecommunityIndexr   r   r   tblIdx r"   6/usr/lib/python3/dist-packages/pysnmp/entity/config.py__cookV1SystemInfoH   
   


r$   Nc           
      C   s$  t | |\}}}	|d u r|	j}n|	j|}|d u rt}|d ur"|p#|}| jj|jd | dff | jj|jd | |f|jd | |f|jd | |f|jd | |f|jd | |f|jd | |f|jd	 | d
f|jd | dff tj	tj
@ ot	d||||||f  d S  d S )N   destroyr   r                  ZnonVolatilecreateAndGozaddV1System: added new table entry communityIndex "%s" communityName "%s" securityName "%s" contextEngineId "%s" contextName "%s" transportTag "%s")r$   syntaxcloner   r   r   	writeVarsnamer   loggerflagSM)
r   r    ZcommunityNamecontextEngineIdcontextNametransportTagsecurityNamer   r!   r   r"   r"   r#   addV1SystemQ   s<   r@   c                 C   sT   t | |\}}}| jj|jd | dff tjtj@ o'td|f  d S  d S )Nr&   r(   z7delV1System: deleted table entry by communityIndex "%s")r$   r   r   r8   r9   r   r:   r;   )r   r    r   r!   r   r"   r"   r#   delV1Systemw   s   rA   c           	      C   st   | j jj}|dd\}|d u r|j}n|j|}|dd\}|||}|dd\}||}|||||fS )Nr   r   zSNMP-USER-BASED-SM-MIBusmUserEntryPYSNMP-USM-MIBpysnmpUsmSecretEntry)r   r   r   r   r6   r7   r   )	r   r?   securityEngineIdr   r   rB   tblIdx1rD   tblIdx2r"   r"   r#   __cookV3UserInfo   s   

rH   c                 C   s  | j jj}|d u r|}|d u r|
}t| ||\}}}}}|dd\}|dd\}| j j|jd | dff | j j|jd | |f|jd | |f|jd	 | |jf|jd
 | |f|jd | |f|jd | dff |tvr}t	d|f |t
vrt	d|f |dd\}|j|}|ot|}| }}|tk rt| |pt}|tk rt| ||}|j|	}	|ot|}| }}|	tk rt
| ||pt}|	tk rt
| |||}| j j|jd | |ff | j j|jd | |ff |tk r| j j|jd | |ff |	tk r,| j j|jd	 | |ff | j j|jd	 | dff | j j|jd	 | dff |tk rf| j j|jd | |f|jd | |ff |	tk r| j j|jd | |f|jd | |ff tjtj@ otd|||||o| |o| |o| |o| |o| |o| || f  d S  d S )NrC   pysnmpUsmKeyEntryz
SNMPv2-SMIzeroDotZero   r(   r*   r+   r-   r/   r&   r5   zUnknown auth protocol %szUnknown privacy protocol %sz__PYSNMP-USM-MIBpysnmpUsmKeyTyper)   zaddV3User: added new table entries userName "%s" securityName "%s" authProtocol %s privProtocol %s localAuthKey "%s" localPrivKey "%s" masterAuthKey "%s" masterPrivKey "%s" authKey "%s" privKey "%s" by index securityName "%s" securityEngineId "%s")r   r   r   rH   r   r8   r9   authServicesr   PySnmpErrorprivServicesr6   r7   r   OctetStringusmKeyTypeMasterZhashPassphraser   usmKeyTypeLocalizedZlocalizeKeyr   r:   r;   prettyPrint)r   userNameZauthProtocolZauthKeyZprivProtocolZprivKeyrE   r?   ZauthKeyTypeZprivKeyTyper<   r   rB   rF   rD   rG   rI   rJ   rM   ZmasterAuthKeyZlocalAuthKeyZmasterPrivKeyZlocalPrivKeyr"   r"   r#   	addV3User   s   

	



rV   c           
      C   sB  |d u r|}t | ||\}}}}}| jj|jd | dff | jj|jd | dff tjtj@ o?td|| f  |jd d f|jd d f|jd d ff }}	|r| jj	|}|d d 
tjrkd S |d d d t|	d d  |	d d krd S |d	 d |krt| |d d |d d  |	}|sXd S d S )
NrK   r(   r-   zMdelV3User: deleted table entries by index userName "%s" securityEngineId "%s"r)   r*   r   r   r   )rH   r   r   r8   r9   r   r:   r;   rT   ZreadNextVarsZisSameTypeWithr   ZendOfMibViewlen	delV3User)
r   rU   rE   r<   rB   rF   rD   rG   ZvarBindsZinitialVarBindsr"   r"   r#   rX   &  sF   

	,rX   c                 C   *   | j jj}|dd\}||}||fS )NSNMP-TARGET-MIBsnmpTargetParamsEntryr   )r   r9   r   r[   r!   r"   r"   r#   __cookTargetParamsInfoS  s   

r\   r,   c              	   C   s   |dkrd}n|dv rd}n|dkrd}nt d| t| |\}}| jj|jd | dff | jj|jd	 | |f|jd
 | |f|jd | |f|jd | |f|jd | |f|jd | dff d S )Nr   r   )r   r   r   r,   zUnknown MP model %sr3   r(   r)   r*   r+   r-   r/   r5   )r   rO   r\   r   r   r8   r9   )r   r9   r?   securityLevelZmpModelsecurityModelr[   r!   r"   r"   r#   addTargetParams\  s(   r_   c                 C   0   t | |\}}| jj|jd | dff d S )Nr3   r(   )r\   r   r   r8   r9   )r   r9   r[   r!   r"   r"   r#   delTargetParamsu  s   ra   c                 C   s:   | j jj}|dd\}|dd\}||}|||fS )NrZ   snmpTargetAddrEntryzPYSNMP-SOURCE-MIBsnmpSourceAddrEntryr   )r   addrNamer   rb   rc   r!   r"   r"   r#   __cookTargetAddrInfo|  r%   re   c	                 C   sX  | j jj}	t| |\}
}}|d tt tkr-|	dd\}||}|d u r(d}||}n|d tt tkrL|	dd\}||}|d u rHd}||}| j j|
j	d | dff | j j|
j	d	 | |f|
j	d
 | |f|
j	d | |f|
j	d | |f|
j	d | |f|
j	d | |f|
j	d | |f|j	d	 | |f|
j	d | dff	 d S )Nz	SNMPv2-TMSnmpUDPAddress)z0.0.0.0r   zTRANSPORT-ADDRESS-MIBTransportAddressIPv6)z::r   	   r(   r)   r*   r+   r-   r/   r1   r3   r5   )
r   r   r   re   rW   snmpUDPDomainr   snmpUDP6Domainr8   r9   )r   rd   transportDomainZtransportAddressparamsZtimeoutZ
retryCountZtagListZsourceAddressr   rb   rc   r!   rf   rg   r"   r"   r#   addTargetAddr  s>   

rn   c                 C   s2   t | |\}}}| jj|jd | dff d S Nrh   r(   )re   r   r   r8   r9   )r   rd   rb   rc   r!   r"   r"   r#   delTargetAddr  s   rp   c                 C   sz   | j r|| j std|| j f n| |  | jdd | j || | d}|d ur;| j|d d d S d S )Nz1Transport %r is not compatible with dispatcher %rr   automaticTransportDispatcherrr   r   )	transportDispatcherZisCompatibleWithDispatcherr   rO   ZregisterTransportDispatcherZprotoTransportDispatchersetUserContextZregisterTransportgetUserContextr   rl   Z	transportrr   r"   r"   r#   addTransport  s&   
rw   c                 C   s0   | j sd S z| j |W S  tjy   Y d S w N)rs   getTransportr   rO   )r   rl   r"   r"   r#   ry     s   ry   c                 C   sj   | j sd S t| |}| j | | d}|d ur3|d8 }| j|d |s3| j   |   | | |S )Nrr   r   rq   )rs   ry   ZunregisterTransportru   rt   ZcloseDispatcherZunregisterTransportDispatcherZdelUserContextrv   r"   r"   r#   delTransport  s"   


rz   c                 C   rY   )NSNMP-VIEW-BASED-ACM-MIBvacmContextEntryr   )r   r=   r   r|   r!   r"   r"   r#   __cookVacmContextInfo  s   

r}   c                 C   s^   t | |\}}| jj|jd | dff | jj|jd | |f|jd | dff d S )Nr*   r(   r)   r5   r}   r   r   r8   r9   r   r=   r|   r!   r"   r"   r#   
addContext  s   r   c                 C   r`   )Nr*   r(   r~   r   r"   r"   r#   
delContext  s   r   c                 C   ,   | j jj}|dd\}|||}||fS )Nr{   vacmSecurityToGroupEntryr   )r   r^   r?   r   r   r!   r"   r"   r#   __cookVacmGroupInfo  s   
r   c                 C   s   t | ||\}}| jj|jd | dff | jj|jd | |f|jd | |f|jd | |f|jd | dff d S )Nr/   r(   r)   r*   r+   r5   r   r   r   r8   r9   )r   	groupNamer^   r?   r   r!   r"   r"   r#   addVacmGroup  s   
r   c                 C   2   t | ||\}}| jj|jd | dff d S )Nr/   r(   r   )r   r^   r?   r   r!   r"   r"   r#   delVacmGroup  s   r   c                 C   s0   | j jj}|dd\}|||||}||fS )Nr{   vacmAccessEntryr   )r   r   r=   r^   r]   r   r   r!   r"   r"   r#   __cookVacmAccessInfo(  s   
r   c	                 C   s   t | ||||\}	}
| jj|	jd |
 dff | jj|	jd |
 |f|	jd |
 |f|	jd |
 |f|	jd |
 |f|	jd |
 |f|	jd |
 |f|	jd	 |
 |f|	jd |
 d
ff d S )Nrh   r(   r)   r*   r+   r-   r/   r1   r3   r5   r   r   r   r8   r9   )r   r   contextPrefixr^   r]   ZcontextMatchreadView	writeView
notifyViewr   r!   r"   r"   r#   addVacmAccess2  s$   r   c                 C   s6   t | ||||\}}| jj|jd | dff d S ro   r   )r   r   r   r^   r]   r   r!   r"   r"   r#   delVacmAccessG  s   
r   c                 C   r   )Nr{   vacmViewTreeFamilyEntryr   )r   viewNamesubTreer   r   r!   r"   r"   r#   __cookVacmViewInfoQ  s   
r   c                 C   s
  t | ||\}}td t|v rt|}t|tjrEt|}t|t|k r7|dt|t|  7 }tjd	dd |D }| j
j|jd | dff | j
j|jd | |f|jd | |f|jd	 | |f|jd
 | |f|jd | dff d S )N.r)    c                 s   s    | ]}t |V  qd S rx   )str).0xr"   r"   r#   	<genexpr>i  s    zaddVacmView.<locals>.<genexpr>r1   r(   r*   r+   r-   r5   )r   r   rQ   ZasOctetsZObjectIdentifier
isinstancetuplerW   ZfromBinaryStringjoinr   r   r8   r9   )r   r   ZviewTyper   ZsubTreeMaskr   r!   r"   r"   r#   addVacmView[  s.   
r   c                 C   r   )Nr1   r(   )r   r   r   r8   r9   )r   r   r   r   r!   r"   r"   r#   delVacmViewx  s   r   c                 C   sJ   | j jj}dt||f }|dd\}||}||d| d| d| fS )Nzv-%s-%dzSNMP-FRAMEWORK-MIBSnmpSecurityLevelrwn)r   r   r   hashr   )r   r^   r?   r]   r   r   r   r"   r"   r#   __cookVacmUserInfo  s   
r   r"   c              
   C   s   t | |||\}}}	}
}t| | t| ||| t| ||||d|	|
|	 |r.t| |	d|t |r8t| |
d|t |rDt| |d|t d S d S )Nexactincluded)r   r   r   r   r   r   r   r^   r?   r]   ZreadSubTreeZwriteSubTreeZnotifySubTreer=   r   r   r   r   r"   r"   r#   addVacmUser  s"   



r   c                 C   sv   t | |||\}}}	}
}t| | t| || t| |||| |r't| |	| |r/t| |
| |r9t| || d S d S rx   )r   r   r   r   r   r   r"   r"   r#   delVacmUser  s*   

r   c                 C      t | |||||d d S Nr=   r   r   r^   r?   r]   r   r=   r"   r"   r#   	addRoUser     

r   c                 C   r   r   r   r   r"   r"   r#   	delRoUser  r   r   c              	   C      t | ||||||d d S r   r   r   r"   r"   r#   	addRwUser     

r   c              	   C   r   r   r   r   r"   r"   r#   	delRwUser  r   r   c              
   C      t | |||dd||d d S Nr"   r   r   r   r"   r"   r#   addTrapUser     

r   c              
   C   r   r   r   r   r"   r"   r#   delTrapUser  r   r   c                 C   s   | j jj}|dd\}||}|dd\}||}dt| }	|r3|dd\}
|
|	|}nd  }
}|||||	|
|fS )NzSNMP-NOTIFICATION-MIBsnmpNotifyEntrysnmpNotifyFilterProfileEntryz	%s-filtersnmpNotifyFilterEntry)r   r   r   r   r   r   )r   notificationName
paramsNamefilterSubtreer   r   rF   r   rG   profileNamer   tblIdx3r"   r"   r#   __cookNotificationTargetInfo  s(   


r   c                 C   s<  t | |||\}}	}
}}}}| jj|jd |	 dff | jj|jd |	 |f|jd |	 |f|jd |	 dff | jj|
jd | dff | jj|
jd | |f|
jd | dff |sfd S | jj|jd | dff | jj|jd | |f|jd | |f|jd | |f|jd | dff d S )Nr/   r(   r*   r+   r5   r)   r   r   r   r8   r9   )r   r   r   r>   Z
notifyTyper   Z
filterMaskZ
filterTyper   rF   r   rG   r   r   r   r"   r"   r#   addNotificationTarget  sF   
r   c                 C   s   t | |||\}}}}}}	}
| jj|jd | dff | jj|jd | dff |	s0d S | jj|	jd |
 dff d S )Nr/   r(   r+   r   )r   r   r   r   r   rF   r   rG   r   r   r   r"   r"   r#   delNotificationTarget  s"   r   c              
   C   s   t | d t| ddd t| ddddddd d	 t| dddddddd	 t| dddd	dddd	 t| dd
dd t| dd
dd t| dd
dd t| dd
dd t| dd
dd t| dd
dd d S )Nr   initialr,   ZnoAuthNoPrivr   Z
restrictedZ
authNoPrivZinternetZauthPrivr   )r   r,   r2   r   )r   r,   r2   r   r   r   r   )r   r,   r2   r   r   r      )	r   r,   r2   r   r2   r,   
   r   r   )	r   r,   r2   r   r2   r,   r   r   r   )	r   r,   r2   r   r2   r,      r   r   )r   r   r   r   )r   r"   r"   r#   setInitialVacmParameters6  s:   
r   )NNNN)NNr+   rx   )mZpyasn1.compat.octetsr   Zpysnmp.carrier.asyncore.dgramr   r   r   Z pysnmp.proto.secmod.rfc3414.authr   r   r   Z pysnmp.proto.secmod.rfc3414.privr	   r
   Z pysnmp.proto.secmod.rfc3826.privr   Z pysnmp.proto.secmod.rfc7860.authr   Zpysnmp.proto.secmod.eso.privr   r   r   Zpysnmp.protor   r   Zpysnmpr   r   rj   rk   ZsnmpLocalDomainZHmacMd5Z	serviceIDZusmHMACMD5AuthProtocolZHmacShaZusmHMACSHAAuthProtocolZHmacSha2Zsha224ServiceIDZusmHMAC128SHA224AuthProtocolZsha256ServiceIDZusmHMAC192SHA256AuthProtocolZsha384ServiceIDZusmHMAC256SHA384AuthProtocolZsha512ServiceIDZusmHMAC384SHA512AuthProtocolZNoAuthZusmNoAuthProtocolZDesZusmDESPrivProtocolZDes3Zusm3DESEDEPrivProtocolZAesZusmAesCfb128ProtocolZAesBlumenthal192ZusmAesBlumenthalCfb192ProtocolZAesBlumenthal256ZusmAesBlumenthalCfb256ProtocolZAes192ZusmAesCfb192ProtocolZAes256ZusmAesCfb256ProtocolZNoPrivZusmNoPrivProtocolZusmKeyTypePassphraserR   rS   rN   rP   r$   r@   rA   rH   rV   rX   r\   r_   ra   re   rn   rp   rw   ry   rz   ZaddSocketTransportZdelSocketTransportr}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r"   r"   r"   r#   <module>   s   	


&
 
-
	

%	
	











	

(
