a
    kÄ#dC  ã                   @   sà   d dl mZmZmZmZmZmZmZmZ d dl	m
Z
mZ d dlZG dd„ de
ƒZG dd„ de
ƒZG dd	„ d	e
ƒZG d
d„ de
ƒZG dd„ de
ƒZG dd„ de
ƒZG dd„ de
ƒZG dd„ de
ƒZeeed d� eeedd� dS )é    )Ú	XIntFieldÚIntFieldÚIntEnumFieldÚStrLenFieldÚFieldListFieldÚConditionalFieldÚPacketFieldÚFieldLenField)ÚPacketÚbind_layersNc                   @   sN   e Zd ZdZeddƒedddd„ d�ed	dd
d„ d�gZddd„Zdd„ ZdS )ÚObject_NamezObject NameÚlengthr   Ú_nameÚ c                 C   s   | j S ©N©r   ©Úpkt© r   úK/var/www/html/gsl.tools/lib/python3.9/site-packages/scapy/contrib/oncrpc.pyÚ<lambda>   ó    zObject_Name.<lambda>©Zlength_fromÚfillc                 C   s   d| j  d S )Né   r   r   r   r   r   r      r   Nc                 C   sB   |d u rt |ƒ}|d u r,ddt |ƒ d  }|| _|| _|| _d S )Nó    r   )Úlenr   r   r   )ÚselfÚnamer   r   r   r   r   Úset   s    zObject_Name.setc                 C   s   d|fS ©Nr   r   ©r   Úsr   r   r   Úextract_padding    s    zObject_Name.extract_padding)NN)	Ú__name__Ú
__module__Ú__qualname__r   r   r   Úfields_descr   r#   r   r   r   r   r      s   ý
	r   c                   @   s$   e Zd ZdZeddƒgZdd„ ZdS )Ú	RM_Headerz	RM HeaderÚrmNc                 C   s2   | j du r$dt| jƒ }t d|¡}t | ||¡S )z;Override of post_build to set the rm header == len(payload)Nl        ú!I)r)   r   ÚpayloadÚstructÚpackr
   Ú
post_build)r   r   ÚpayZnew_rmr   r   r   r.   *   s    
zRM_Header.post_build)r$   r%   r&   r   r   r'   r.   r   r   r   r   r(   $   s   ÿr(   c                   @   s,   e Zd Zd ZeddƒedddddœƒgZdS )ÚRPCÚxidr   ÚmtypeÚCALLZREPLY©r   é   N)r$   r%   r&   r   r   r   r'   r   r   r   r   r0   2   s   þr0   c                   @   s`   e Zd ZdZeddƒedeƒ eƒeddƒeddƒeddƒedg ed	d
ƒdd„ d�gZ	dd„ Z
d
S )Ú	Auth_Unixz	AUTH UnixZstampr   ÚmnameÚuidÚgidÚnum_auxgidsZauxgidsr   Nc                 C   s   | j S r   )r:   r   r   r   r   r   D   r   zAuth_Unix.<lambda>)Z
count_fromc                 C   s   d|fS r    r   r!   r   r   r   r#   H   s    zAuth_Unix.extract_padding)r$   r%   r&   r   r   r   r   r   r   r'   r#   r   r   r   r   r6   :   s   þúr6   c                   @   sH   e Zd ZdZeddƒeddƒeddƒeddƒedeƒ eƒgZdd	„ Zd
S )ÚAuth_RPCSEC_GSSzAuth RPCSEC_GSSZgss_versionr   Zgss_procedureZgss_seq_numZgss_serviceZgss_contextc                 C   s   d|fS r    r   r!   r   r   r   r#   V   s    zAuth_RPCSEC_GSS.extract_paddingN)	r$   r%   r&   r   r   r   r   r'   r#   r   r   r   r   r;   L   s   ûr;   c                   @   s8   e Zd ZdZedddd�edddd„ d	�gZd
d„ ZdS )ÚVerifier_RPCSEC_GSSzVerifier RPCSEC_GSSr   NÚdata)Z	length_ofr   c                 C   s   | j S r   )r   r   r   r   r   r   ^   r   zVerifier_RPCSEC_GSS.<lambda>r   c                 C   s   d|fS r    r   r!   r   r   r   r#   a   s    z#Verifier_RPCSEC_GSS.extract_padding)r$   r%   r&   r   r	   r   r'   r#   r   r   r   r   r<   Z   s
   þr<   c                   @   sÚ   e Zd ZdZeddƒeddƒeddƒedd	ƒed
dddddœƒeddƒeedeƒ eƒdd„ ƒeede	ƒ e	ƒdd„ ƒedd	ddddœƒeeddƒdd„ ƒeedeƒ eƒdd„ ƒeede
ƒ e
ƒdd„ ƒgZdd„ Zd d!„ ZdS )"ÚRPC_CallzRPC CallÚversioné   Úprogrami£† Zpversioné   Z	procedurer   Úaflavorr5   Ú	AUTH_NULLÚ	AUTH_UNIXZ
RPCSEC_GSS)r   r5   é   ÚalengthNÚa_unixc                 C   s
   | j dkS ©Nr5   ©rC   r   r   r   r   r   t   r   zRPC_Call.<lambda>Úa_rpcsec_gssc                 C   s
   | j dkS ©NrF   rJ   r   r   r   r   r   x   r   ÚvflavorÚvlengthc                 C   s
   | j dkS rL   ©rM   r   r   r   r   r   €   r   Úv_unixc                 C   s
   | j dkS rI   rO   r   r   r   r   r   „   r   Zv_rpcsec_gssc                 C   s
   | j dkS rL   rO   r   r   r   r   r   Œ   r   c                 K   s�   |du rdS d|v r,| j j |d ¡ |d= | ¡ D ]"\}}t| j |ƒr4t| j ||ƒ q4| jdkrfdnt| j ƒ| _| j	dkr€dnt| j
ƒ| _dS ©z1Used to easily set the fields in an a_unix packetNr7   r   )rH   r7   r   ÚitemsÚhasattrÚsetattrrC   r   rG   rM   rP   rN   ©r   ÚkwargsÚargÚvalr   r   r   Úset_auth�   s    zRPC_Call.set_authc                 C   sÔ   | j dkr"| jdkr"t | ||¡S | j dkrˆ| jdu rˆ| j dkrLt| jƒ}n
t| jƒ}|dd… t 	d|¡ |dd…  }t | ||¡S | jdkrÆ| j
du rÆ|dd… t 	dt| jƒ¡ |dd…  }t | ||¡S )	z.Override of post_build to handle length fieldsr   NrF   é   r*   é   é   é    )rC   rM   r
   r.   rG   r   rK   rH   r,   r-   rN   rP   )r   r   r/   Zpack_lenr   r   r   r.       s&    



ÿ
þ
ÿ
þzRPC_Call.post_build)r$   r%   r&   r   r   r   r   r   r6   r;   r<   r'   rY   r.   r   r   r   r   r>   e   sR   
þþþ
þþþýúâ(r>   c                   @   sZ   e Zd ZdZeddƒedddddœƒeedeƒ eƒd	d
„ ƒeddƒeddƒgZ	dd„ Z
dS )Ú	RPC_ReplyzRPC ResponseZ
reply_statr   ÚflavorrD   rE   r4   rH   c                 C   s
   | j dkS rI   )r_   r   r   r   r   r   ¾   r   zRPC_Reply.<lambda>r   Zaccept_statc                 K   sv   |du rdS d|v r,| j j |d ¡ |d= | ¡ D ]"\}}t| j |ƒr4t| j ||ƒ q4| jdkrfdnt| j ƒ| _dS rQ   )	rH   r7   r   rR   rS   rT   r_   r   r   rU   r   r   r   rY   Ä   s    zRPC_Reply.set_authN)r$   r%   r&   r   r   r   r   r   r6   r'   rY   r   r   r   r   r^   ·   s   þør^   )r2   r5   )Zscapy.fieldsr   r   r   r   r   r   r   r	   Zscapy.packetr
   r   r,   r   r(   r0   r6   r;   r<   r>   r^   r   r   r   r   Ú<module>	   s   (R