o
    j                     @   sh  d dl mZ d dl mZ d dlZd dl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 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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
e 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 d0d1 d1e#Z'G d2d3 d3e&Z(G d4d5 d5e'Z)G d6d7 d7e"Z*G d8d9 d9e"Z+G d:d; d;eZ,e, Z-G d<d= d=e*Z.G d>d? d?e.Z/G d@dA dAe.Z0G dBdC dCe"Z1e1Z2G dDdE dEeZ3dS )F    )division)print_functionN)packunpack_fromcalcsize)with_metaclassPY3)logger)Enumc                   @   s   e Zd ZdZdZdZdZdZdZdZ	dZ
dZd)ddZdd	 Zd
d Zdd Zdd Zd*ddZedd Zd+ddZd+ddZdd Zedd Zd*ddZd*dd Zd*d!d"Zd*d#d$Zd%d& Zd*d'd(ZdS ),NDRzb
    This will be the base class for all DCERPC NDR Types and represents a NDR Primitive Type
        NFc                 C   s
  t |  || _i | _|du r*| jdkr| j| _| jdkr!| j| _t| dr*| j	| _
| j| j | j D ]D\}}| |rF|| jd| j|< q3|dkrPd| j|< q3t|ddkrrzt|dd	 | j|< W q3   d | j|< Y q3g | j|< q3|d ur| | d S d S )
NTr   align64isNDR64:    =      )object__init___isNDR64fieldscommonHdr64	commonHdrstructure64	structurehasattrr   alignreferentisNDRlenspliteval
fromStringselfdatar   	fieldNamefieldTypeOrClassr   r   /root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/minikerberos/protocol/external/ndr.pyr   0   s0   




zNDR.__init__c                 C   sP  t |tr;t| jd}t | j| tr|| j|< d S d| j| jv r7t | j| jd tr9|| j| jd< d S d S d S t |tr| j| jj|jjkrR|| j|< d S t | j| d tr| j| d jj|jjkrr|| j| d< d S t	d| j| d jj  d S t	d| j| jj  d S t | j| tr|| j| d< d S || j|< d S )Nr   Dataz0Can't setitem with class specified, should be %s)

isinstanceNDRPOINTERNULLr   r   
NDRPOINTERr   	__class____name__LOGerrorr'   keyvaluer   r   r+   __setitem__O   s(   

 zNDR.__setitem__c                 C   s8   t | j| trd| j| jv r| j| d S | j| S Nr,   )r-   r   r   r'   r5   r   r   r+   __getitem__h   s   
zNDR.__getitem__c                 C   s   |   S N)getDatar'   r   r   r+   __str__n   s   zNDR.__str__c                 C   s   t |  S r;   )r"   r<   r=   r   r   r+   __len__q   s   zNDR.__len__r   c                 C   s   t || S r;   )r"   )r'   r(   offsetr   r   r+   
getDataLenu      zNDR.getDataLenc                 C       t | r| }t|trdS dS NTF)inspectisclass
issubclassr   fieldmyClassr   r   r+   r!   x   
   

z	NDR.isNDRc                 C   s,  |d u r| j j}d| }td|  | j| j | j D ]x}|d }|| jv rt| j| trE| j| j	d||f |d d td|  qt| j| t
rtd|  t| j| D ]&\}}t|trw|j	d	||f |d d td
|  qZtd|||f  qZtd|  qtd||| | f  qd S )N z
%sr   z%s%s:{r   indentz%s}z%s[z%s%s:z%s,z%s%s: {%r},%s]z
%s%s: {%r})r0   r1   printr   r   r    r   r-   r   dumpRawlist	enumerate)r'   msgrN   indrI   inumjr   r   r+   rQ      s*   
 
zNDR.dumpRawc                 C   s   |d u r| j j}d| }|dkrtd| dd | j| j | j D ]/\}}|| jv rPt| j| trF| j| j	d||d f |d df q!td	| |  dd q!d S )
NrL    %sendz
%s%-31sr   r   rM    %r)
r0   r1   rP   r   r   r    r   r-   r   dump)r'   rT   rN   rU   r)   	fieldTyper   r   r+   r^      s   
(zNDR.dumpc                 C      | j S r;   )r   r=   r   r   r+   getAlignment      zNDR.getAlignmentc                 C   sX   t | trzt| dd }W n	   d}Y nd}|dkr(|||  | }|S d}|S )Nr   r   )r-   strr   r#   )r_   soFar	alignmentpadr   r   r+   calculatePad   s   
zNDR.calculatePadc                 C   s   d}| j | j D ]J\}}z'| ||}|dkr!||7 }|d| 7 }| |||}||7 }|t|7 }W q tyR } ztt| td||| j	f   d }~ww |S )Nr   r      #Error packing field '%s | %s' in %s
r   r   rg   r   r"   	Exceptionr2   r3   rc   r0   )r'   rd   r(   r)   r*   rf   reser   r   r+   r<      s"   
zNDR.getDatac                 C   s   |}| j | j D ]<\}}z|| ||7 }|| ||||7 }W q tyD } ztt| td|||||d  f   d }~ww || S N$Error unpacking field '%s | %s | %r'   )r   r   rg   unpackrk   r2   r3   rc   )r'   r(   r@   offset0r)   r*   rm   r   r   r+   r%      s   
 zNDR.fromStringc                 C   s   t | j| tr| j| |S | j| }|d d dkrdS |d}t|dkrOz
| ||d |W S    t|d i | j| j|< | ||d | Y S |d u rWtd|d d dkrjt	|d	rh| S |S t||S )
Nr   _r   r   r   r   zTrying to pack Noner   r<   )
r-   r   r   r<   r#   r"   r   r$   rk   r   )r'   r)   r*   rd   r(   twor   r   r+   r      s&   



zNDR.packc                 C   s   t | j| tr| j| ||S |d}t|dkr&| ||d ||S |dkrKt |tr8| j| ||S | ||}||||  | j|< |S t|||d | j|< t	|S )Nr   r   r   r   )
r-   r   r   r%   r#   r"   rq   rA   r   r   )r'   r)   r*   r(   r@   rt   dataLenr   r   r+   rq     s   

z
NDR.unpackc                 C   s\   t |tdu rt|S |d}t|dkr| |d |S |d d dkr*t|S t|S )NFr   r   r   r   r   )r-   rc   r"   r#   calcPackSizer   )r'   r*   r(   rt   r   r   r+   rv   "  s   
zNDR.calcPackSizec                 C   s   t |tdu rt|| S |d}t|dkr!| |d ||S |d}t|dkr2t|| S |d d dkr@t|| S t|S )NFr   r   r   *r   r   )r-   rc   r"   r#   calcUnPackSizer   r'   r*   r(   r@   rt   r   r   r+   rx   2  s   

zNDR.calcUnPackSizeNFr   Nr   )r1   
__module____qualname____doc__r    r   r   r   r   r   itemr   r   r7   r:   r>   r?   rA   staticmethodr!   rQ   r^   ra   rg   r<   r%   r   rq   rv   rx   r   r   r   r+   r   #   s:    









r   c                   @      e Zd ZdZdZdS )NDRSMALLr   ))r,   zb=0Nr1   r}   r~   r   r   r   r   r   r+   r   H      r   c                   @   r   )	NDRUSMALLr   ))r,   zB=0Nr   r   r   r   r+   r   N  r   r   c                   @   s   e Zd ZdddZdS )
NDRBOOLEANNr   c                 C   sH   |d u r| j j}|dkrt|dd | d dkrtd d S td d S )NrY   rL   r[   r,   r   z TRUEz FALSEr0   r1   rP   r'   rT   rN   r   r   r+   r^   U  s   zNDRBOOLEAN.dumpr|   )r1   r}   r~   r^   r   r   r   r+   r   T  s    r   c                   @   r   )NDRCHARr   ))r,   cNr   r   r   r   r+   r   `  r   r   c                   @   r   )NDRSHORTr   ))r,   z<h=0Nr   r   r   r   r+   r   f  r   r   c                   @   r   )	NDRUSHORTr   ))r,   z<H=0Nr   r   r   r   r+   r   l  r   r   c                   @   r   )NDRLONGr   ))r,   z<l=0Nr   r   r   r   r+   r   r  r   r   c                   @   r   )NDRULONGr   )r,   <L=0Nr   r   r   r   r+   r   x  r   r   c                   @   r   )NDRHYPER   ))r,   z<q=0Nr   r   r   r   r+   r   ~  r   r   c                   @   r   )	NDRUHYPERr   )r,   <Q=0Nr   r   r   r   r+   r     r   r   c                   @   r   )NDRFLOATr   ))r,   z<f=0Nr   r   r   r   r+   r     r   r   c                   @   r   )NDRDOUBLEFLOATr   ))r,   z<d=0Nr   r   r   r   r+   r     r   r   c                   @   s   e Zd Zdd ZdS )EnumTypec                 C   s   | j | jS r;   )	enumItemsr6   )r'   attrr   r   r+   __getattr__  rB   zEnumType.__getattr__N)r1   r}   r~   r   r   r   r   r+   r     s    r   c                   @   s>   e Zd ZdZdZdZdZG dd deZdd Z	dddZ
d	S )NDRENUMr   r   ))r,   z<H))r,   <Lc                   @      e Zd ZdS )zNDRENUM.enumItemsNr1   r}   r~   r   r   r   r+   r         r   c                 C   s&   t |tr|j| d< d S t| ||S r8   )r-   r
   r6   r   r7   r4   r   r   r+   r7     s   
zNDRENUM.__setitem__Nr   c                 C   sF   |d u r| j j}|dkrt|dd td| | jd j dd d S )NrY   rL   r[   z %sr,   )r0   r1   rP   r   r   namer   r   r   r+   r^     s
   "zNDRENUM.dumpr|   )r1   r}   r~   r   r   r   r   r
   r   r7   r^   r   r   r   r+   r     s    r   c                   @   sp   e Zd Zedd Zedd ZdddZddd	Zd
d Zdd Z	dddZ
dddZdddZdddZdS )NDRCONSTRUCTEDTYPEc                 C   rC   rD   )rE   rF   rG   r/   rH   r   r   r+   	isPointer  rK   zNDRCONSTRUCTEDTYPE.isPointerc                 C   rC   rD   )rE   rF   rG   NDRUNIONrH   r   r   r+   isUnion  rK   zNDRCONSTRUCTEDTYPE.isUnionr   c                 C   sf   d}| j | j D ](\}}t| j| tr0|| j| t|| 7 }|| j| t|| 7 }q|S )Nr   )r   r   r-   r   r   getDataReferentsr"   getDataReferent)r'   rd   r(   r)   r*   r   r   r+   r     s   z#NDRCONSTRUCTEDTYPE.getDataReferentsc                 C   s  d}|}t | ddu rdS d| jv r| d dkrdS | jD ]\}}zt| j| ts2t| j| trn| jr:d}d}nd}d	}|||  | }|dkrS||7 }d
| }	nd}	||7 }| j| |}|	t|| 	| | }n| 
||}
|
dkr||
7 }|d|
 7 }|| |||7 }t| j| tr|| j| |t| 7 }|| j| |t| 7 }|t| }W q ty } ztt| td||| jf   d }~ww |S )Nr   r    F
ReferentIDr   r   <Qr   r         ri   )r   r   r    r-   NDRUniConformantArrayNDRUniConformantVaryingArrayr   r<   r   getArrayMaximumSizerg   r   r   r"   r   rk   r2   r3   rc   r0   )r'   rd   r(   soFar0r)   r*   arrayItemSizearrayPackStrpad0arrayPaddingrf   rm   r   r   r+   r     sN   
 
z"NDRCONSTRUCTEDTYPE.getDataReferentc                 C   st   t |tdu rt|S |d}t|dkr3d}|D ]}| | jr%d}n| j}|| ||7 }q|S t| ||S )NFrw   r   r   r   )r-   rc   r"   r#   r!   r   rv   r   )r'   r*   r(   rt   answereachr   r   r   r+   rv     s   
zNDRCONSTRUCTEDTYPE.calcPackSizec                 C   sF   | j | j d d ur| j | j d dkr| j | j d S | j |  S )NMaximumCountr   )r   getArraySize)r'   r)   r   r   r+   r   !  s   (z&NDRCONSTRUCTEDTYPE.getArrayMaximumSizec           	      C   s   | j rd}d}nd}d}|||  | }||7 }t| j| tr)t|||d }n/t| j| trNt|||d }|| j| jd< t||||d  d }n
t|||| d }||| fS )Nr   r   r   r   r   r   r   )r   r-   r   r   r   r   )	r'   r)   r(   r@   r   arrayUnPackStrrf   	arraySizemaximumCountr   r   r+   r   '  s   zNDRCONSTRUCTEDTYPE.getArraySizec                 C   s^   |}| j | j D ]"\}}t| j| tr*|| j| ||7 }|| j| ||7 }q|| S r;   )r   r   r-   r   r   fromStringReferentsfromStringReferent)r'   r(   r@   rr   r)   r*   r   r   r+   r   C  s   z&NDRCONSTRUCTEDTYPE.fromStringReferentsc           
      C   s^  t | ddur	dS |}d| jv r| d dkrdS | jD ]\}}zgt| j| ts0t| j| trO| |||\}}||7 }| j| | | j| ||}n|| 	||7 }| 
||||}t| j| tr|| j| ||| 7 }|| j| ||| 7 }||7 }W q ty }	 ztt|	 td|||||d  f   d }	~	ww || S )Nr    Tr   r   ro   rp   )r   r   r    r-   r   r   r   setArraySizer%   rg   rq   r   r   r   rk   r2   r3   rc   
r'   r(   r@   rr   r)   r*   r   advanceStreamsizerm   r   r   r+   r   K  s4   
  z%NDRCONSTRUCTEDTYPE.fromStringReferentc                 C   sL   t |tdu rt|| S |d}t|dkrt|| S t| |||S )NFrw   r   )r-   rc   r"   r#   r   rx   ry   r   r   r+   rx   q  s   
z!NDRCONSTRUCTEDTYPE.calcUnPackSizeNr{   )r1   r}   r~   r   r   r   r   r   rv   r   r   r   r   rx   r   r   r   r+   r     s    



;


&r   c                   @   s^   e Zd ZdddZdd Zdd Zd	d
 Zdd ZdddZdddZ	dddZ
dddZdS )NDRArrayNr   c                 C   s   |d u r| j j}d| }|dkrt|dd t| d tr_td|  |d7 }t| jd D ]"\}}t|trH|jd| |d d	f td
 q.td||f  q.td|d d  dd d S td| d  dd d S )NrL   rY   r[   r,   z
%s[z    rZ   r   rM   ,z%s %r,rO   r]   )	r0   r1   rP   r-   rR   rS   r   r   r^   )r'   rT   rN   rU   rW   rX   r   r   r+   r^   }  s   

zNDRArray.dumpc                 C   s
   || _ d S r;   r   )r'   r   r   r   r+   r     s   
zNDRArray.setArraySizec                 C   r`   r;   r   r=   r   r   r+   r     rb   zNDRArray.getArraySizec                 C   sF   t | dr| jd ur| | jr| jd D ]}|| qt| |S )Nr   r,   )r   r   r!   r   changeTransferSyntaxr   )r'   	newSyntaxr   r   r   r+   r     s
   zNDRArray.changeTransferSyntaxc                 C   sP   d}t | dr&| jd ur&| | jr|   }n| | jd}||kr&|}|S )Nr   r   r   )r   r   r!   ra   rv   )r'   r   tmpAlignr   r   r+   ra     s   zNDRArray.getAlignmentc           	      C   s   d}|}| j D ]Q\}}z.| |du r'| ||}|dkr'||7 }|d| 7 }| |||}||7 }|t| }W q tyX } ztt| td||| j	f   d }~ww |S )Nr   Fr      ri   )
r   r!   rg   r   r"   rk   r2   r3   rc   r0   	r'   rd   r(   r   r)   r*   rf   rl   rm   r   r   r+   r<     s&   zNDRArray.getDatac           
      C   s  | d}t|dkrd}| | jr"d}| j}|| jd| jd< n
| j}d }|| jd< | j| D ]>}| | jt|| }	|	dkrH|d|	 7 }|d u rd|d	kr\tr\t|t	r\t
|g}|t||7 }q1||t|| 7 }q1|d ur| j| D ]}t|tr||t|| 7 }||t|| 7 }qy| jd= t| tst| tr| t| j|  |S t| j| | j|d
 < |S t| |||S )Nrw   r   r   r   r   _tmpItemr      r   r   )r#   r"   r!   r   r   r   rg   r   r-   intbytesr   r<   r   r   r   r   r   r   )
r'   r)   r*   rd   rt   r   r   	dataClassr   rf   r   r   r+   r     s@   



zNDRArray.packc                 C   s   |}| j | j D ]E\}}z| |du r|| ||7 }| ||||}||7 }W q tyM } ztt| td|||||d  f   d }~ww || S )NFro   rp   )	r   r   r!   rg   rq   rk   r2   r3   rc   )r'   r(   r@   rr   r)   r*   r   rm   r   r   r+   r%     s    zNDRArray.fromStringc                 C   s  | d}g }d}|}t|dkrt| tr|  }	nt| tr'| |d  }	n| |d  }	| | jrBd}
| j}|| jd| j	d< n
| j}
d }|
| j	d< d}|	r|t|| k r| 
| j|| }|dkri||7 }|d u r|t|
 }|t|
||| d  n|| jd}|||| }|| ||| 7 }|	d8 }	|}|	r|t|| k sX|d urt| trg }|D ]}|||| }||7 }|||| }||7 }|| q|}~| j	d= || j	|< || | S t| ||||S )Nrw   r   r   r   r   r   r   )r#   r"   r-   r   r   r   r!   r   r   r   rg   r   appendr   r%   r   r   r   rq   )r'   r)   r*   r(   r@   rt   r   
soFarItemsrr   numItemsr   dataClassOrCodensofarrf   itemnr   answer2r   r   r+   rq     s\   






zNDRArray.unpackr|   r{   )r1   r}   r~   r^   r   r   r   ra   r<   r   r%   rq   r   r   r   r+   r   |  s    
	


+r   c                   @   s   e Zd ZdZdS )NDRUniFixedArray)r,   r   N)r1   r}   r~   r   r   r   r   r+   r   @  s    r   c                   @   s*   e Zd ZdZdZdZd	ddZdd ZdS )
r   r   ))r,   z*MaximumCountNFc                 C      t | || d| jd< d S Nr   r   r   r   r   r'   r(   r   r   r   r+   r   R     zNDRUniConformantArray.__init__c                 C      d | j d< t| ||S )Nr   r   r   r7   r4   r   r   r+   r7   W     
z!NDRUniConformantArray.__setitem__rz   )r1   r}   r~   r   r   r   r   r7   r   r   r   r+   r   F  s    
r   c                   @   s    e Zd ZdZdZdZdd ZdS )NDRUniVaryingArrayr   )Offsetr   ActualCountz<L=len(Data)r,   z*ActualCount)r   r   r   z<Q=len(Data)r   c                 C   r   )Nr   r   r4   r   r   r+   r7   j  r   zNDRUniVaryingArray.__setitem__N)r1   r}   r~   r   r   r   r7   r   r   r   r+   r   ]  s
    r   c                   @   s8   e Zd ZdZdZdZdZdddZd	d
 ZdddZ	dS )r   r   )r   r   )r   r   )r   NFc                 C   r   r   r   r   r   r   r+   r     r   z%NDRUniConformantVaryingArray.__init__c                 C   s"   d | j d< d | j d< t| ||S )Nr   r   r   r4   r   r   r+   r7     s   

z(NDRUniConformantVaryingArray.__setitem__r   c           	      C   s   d}|}| j | j D ]J\}}z'| ||}|dkr#||7 }|d| 7 }| |||}||7 }|t| }W q
 tyT } ztt| td||| j	f   d }~ww |S )Nr   r      ri   rj   r   r   r   r+   r<     s$   z$NDRUniConformantVaryingArray.getDatarz   r{   )
r1   r}   r~   r   r   r   r   r   r7   r<   r   r   r   r+   r   o  s    
r   c                   @   s    e Zd ZdddZdddZdS )NDRVaryingStringr   c                 C   s^   | d dd  dkr)t rt| d tdu r| d d | d< nd| d d | d< t| |S )Nr,       Fr   )r   r-   rR   joinr   r<   )r'   rd   r   r   r+   r<     s
   zNDRVaryingString.getDatac                 C   s&   t | ||}| d d d | d< |S )Nr,   r   )r   r%   )r'   r(   r@   retr   r   r+   r%     s   zNDRVaryingString.fromStringNr{   )r1   r}   r~   r<   r%   r   r   r   r+   r     s    
r   c                   @   r   )NDRConformantVaryingStringNr   r   r   r   r+   r     r   r   c                   @   s(   e Zd Zd	ddZd	ddZdd ZdS )
	NDRSTRUCTr   c                 C   s  d}d}|}| j | j d d }t| j| ts t| j| trH| jr(d}d}nd}d}|||  | }|dkrA||7 }d| }nd}||7 }nd}|  }	|	dkrh|	||	  |	 }
|
dkrh||
7 }|d	|
 7 }| j | j D ]\}}zbt| j| tst| j| tr| j| |}t| t	r|d | }||d  }|| t
|| | | }n|t
|| | | }d}d}n| 
|||}||7 }|t| t| | }W qn ty } ztt| td
||| jf   d }~ww |S )Nr   r   r   r   r   r   r         ri   )r   r   r-   r   r   r   r   ra   r<   r/   r   r   r"   rk   r2   r3   rc   r0   )r'   rd   r(   r   r   lastItemr   r   r   re   rf   r)   r*   rl   pointerDatarm   r   r   r+   r<     sX    

 
zNDRSTRUCT.getDatac                 C   s  |}| j | j d d }t| tr9| j}|  }|dkr&||||  | 7 }| j D ]\}}|| ||||7 }q)n| j | j }t| j| tsOt| j| tr| j	rWd}	d}
nd}	d}
||	||	  |	 7 }t| j| tr~t
|
||d }| j| | nt
|
||d }|| j| jd< ||	7 }|  }|dkr||||  | 7 }|D ]4\}}z|| ||||7 }W q ty } ztt| td|||||d	  f   d }~ww || S )
Nr   r   r   r   r   r   r   ro   rp   )r   r   r-   r/   ra   rq   r   r   r   r   r   r   rk   r2   r3   rc   )r'   r(   r@   rr   r   structureFieldsre   r)   r*   r   r   r   r   rm   r   r   r+   r%   "  sJ   
  zNDRSTRUCT.fromStringc                 C   s\   d}| j | j | j D ] \}}t| j| tr| j|  }n| |d}||kr+|}q|S )Nr   r   )r   r   r    r-   r   r   ra   rv   )r'   r   r)   r*   r   r   r   r+   ra   q  s   zNDRSTRUCT.getAlignmentNr{   )r1   r}   r~   r<   r%   ra   r   r   r   r+   r     s    

gOr   c                   @   sR   e Zd ZdeffZdeffZi ZdddZdd Z	dd	d
Z
dddZdd ZdS )r   tagNFc                 C   sF  || _ || _i | _|du r(| jdkr| j| _| jdkr| j| _t| dr(| j| _	| j| j | j
 D ]d\}}| |rd| |rJ|| j|d| j|< q1| |rZ|| j|d| j|< q1|| jd| j|< q1|dkrnd | j|< q1t|ddkrzt|dd	 | j|< W q1   d | j|< Y q1d
| j|< q1|d ur| | d S d S NTr   r   r   topLevelr   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)   r*   r   r   r+   r     s8   





zNDRUNION.__init__c                 C   s   |dkrVd| _ || jv r&| j| f| _ | jd | j| jd || jd d< d S d| jv rP| jd d u r6d| _ n| jd f| _ | jd | j| jd d| jd d< d S td| t| ||S )Nr   r   r   r,   default  Unknown tag %d for union!)	r   unionr   r   r   r   rk   r   r7   r4   r   r   r+   r7     s   

zNDRUNION.__setitem__r   c                 C   s  d}|}|   }|dkr|||  | }nd}|dkr%||7 }|d| 7 }| jD ]J\}}z'| ||}|dkrA||7 }|d| 7 }| |||}||7 }|t| }W q( tyr }	 ztt|	 td||| j	f   d }	~	ww | j
ryd}
n
t| drd}
nd	}
|
||
  |
 }|dkr|d
| 7 }||7 }| jdkr|S | jD ]J\}}z'| ||}|dkr||7 }|d| 7 }| |||}||7 }|t| }W q ty }	 ztt|	 td||| j	f   d }	~	ww |S )Nr   r         ri   r   notAlignr   r      r      )ra   r   rg   r   r"   rk   r2   r3   rc   r0   r   r   r   )r'   rd   r(   r   re   rf   r)   r*   rl   rm   r   r   r   r+   r<     sf   


zNDRUNION.getDatac                 C   sX  |}|   }|dkr|||  | }nd}|dkr||7 }t|| dkr| jd d jd d dd }t|||d }|| jv rU| j| f| _| jd | j| j	d n/d| jv r~| jd d u red| _n| jd f| _| jd | j| j	d d| j
d	 d
< ntd| | jD ]<\}}	z|| |	|7 }|| ||	||7 }W q ty }
 ztt|
 td||	|||d  f   d }
~
ww | jrd}n
t| drd}nd}||||  | 7 }| jdkr|| S | jD ]=\}}	z|| |	|7 }|| ||	||7 }W q ty' }
 ztt|
 td||	|||d  f   d }
~
ww || S )Nr   r   r   r   r   r   r   r   r   r,   r   ro   rp   r   r   )ra   r"   r   r   r#   r   r   r   r   r   r   rk   rg   rq   r2   r3   rc   r   )r'   r(   r@   rr   re   rf   tagtyper   r)   r*   rm   r   r   r   r+   r%     sb   "

 


 zNDRUNION.fromStringc                 C   s   d}| j r| j| j }n| j}|D ] \}}t| j| tr%| j|  }n| |d}||kr1|}q| j rM| j	 D ]\}}|| j d }||krL|}q:|S )Nr   r   r   )
r   r   r   r-   r   r   ra   rv   r   values)r'   r   r   r)   r*   r   r   r   r+   ra   e  s$   zNDRUNION.getAlignmentNFFr{   )r1   r}   r~   r   r   r   r   r   r   r7   r<   r%   ra   r   r   r   r+   r     s    
#

CFr   c                   @   s&   e Zd ZdZdZdZdZd	ddZdS )
r.   r   r   r   r   Nr   c                 C   s8   |d u r| j j}|dkrtd| dd tddd d S )NrY   rZ   rL   r[    NULLr   r   r   r   r+   r^     s
   zNDRPOINTERNULL.dumpr|   )r1   r}   r~   r   r   r   r   r^   r   r   r   r+   r.     s    r.   c                   @   s`   e Zd ZdZdZdZdZdZddd	Zd
d Z	dd Z
dddZdddZdddZdd ZdS )r/   r   r   ))r   z<L=0xff))r   z<Q=0xffr   NFc                 C   sR   t j| d |d |du r| j| _d| _|d u r"tdd| jd< d S | | d S )Nr   Tr   r   r   r   )r   r   r    r   randomrandintr   r%   r'   r(   r   r   r   r   r+   r     s   zNDRPOINTER.__init__c                 C   s.   || j v du r| j d ||S t| ||S )NFr,   )r   r7   r   r4   r   r   r+   r7     s   zNDRPOINTER.__setitem__c                 C   sR   || j v r!t| j | trd| j | j v r| j | d S | j | S | j d |S r8   )r   r-   r   r:   r9   r   r   r+   r:     s   

zNDRPOINTER.__getitem__r   c                 C   s   d}|  | jd d |}|dkr||7 }d| }| jd dkr9t| jdkr,d| d< n| jdu r5|d S |d	 S |t| | S )
Nr   r   r      r   r,   Ts           s       )rg   r   r   r"   r    r   r   r<   )r'   rd   r(   rf   r   r   r+   r<     s   

zNDRPOINTER.getDatac                 C   s   |  | jd d |}||7 }| jdu rd}nd}t|||d dkr9d| d< d| jd< | jdu r5|d	 S |d
 S t| ||}|| S )Nr   r   Tr   r   r   r   r,   r   r   )rg   r   r   r   r   r   r%   )r'   r(   r@   rf   	unpackStrretValr   r   r+   r%     s   


zNDRPOINTER.fromStringc                 C   s   |d u r| j j}|dkrtd| dd t| jd tr(| jd jd|d d S | d dkr6td	dd d S td
| d  dd d S )NrY   rZ   rL   r[   r,   rM   r   r   r  r]   )r0   r1   rP   r-   r   r   r^   r   r   r   r+   r^     s   zNDRPOINTER.dumpc                 C   s   | j du rdS dS )NTr   r   )r   r=   r   r   r+   ra     s   
zNDRPOINTER.getAlignmentr  r{   r|   )r1   r}   r~   r   r   r   r   r    r   r7   r:   r<   r%   r^   ra   r   r   r   r+   r/     s    




r/   c                   @   s   e Zd ZdeffZdS )PNDRUniConformantVaryingArrayr,   N)r1   r}   r~   r   r    r   r   r   r+   r  	  s    r  c                   @   s    e Zd ZdeffZdddZdS )PNDRUniConformantArrayr,   NFc                 C   s   t | ||| d S r;   )r/   r   r	  r   r   r+   r     s   zPNDRUniConformantArray.__init__r  )r1   r}   r~   r   r    r   r   r   r   r+   r    s    r  c                   @   sL   e Zd ZdZdZdZdZdZdZdddZ	ddd	Z
dd
dZdddZdS )NDRCALLr   r   NFc                 C   s@  || _ i | _|du r%| jdkr| j| _| jdkr| j| _t| dr%| j| _| j| j | j	 D ]d\}}| 
|ra| |rG|| j dd| j|< q.| |rW|| j dd| j|< q.|| j d| j|< q.|dkrkd | j|< q.t|ddkrzt|dd	 | j|< W q.   d | j|< Y q.d
| j|< q.|d ur| | d S d S r   )r   r   r   r   r   r   r   r   r   r    r!   r   r   r"   r#   r$   r%   r&   r   r   r+   r     s6   





zNDRCALL.__init__r   c                 C   s   t | || td d S )Nz

)r   r^   rP   r   r   r   r+   r^   @  s   zNDRCALL.dumpc           
      C   s  d}|}| j | j D ]\}}z| ||}|dkr#||7 }|d| 7 }t| j| ts3t| j| tr| jr?d|d  d }nd|d  d }| |||| }| 	|}| jrnd|d  d }|d| td| | 7 }nd|d  d }|d| td| | 7 }n	|| |||7 }|t
| }t| j| tr|| j| |7 }|t
| }|| j| |7 }|t
| }W q
 ty }	 ztt|	 td	||| jf   d }	~	ww |S )
Nr   r   r   r   r      r   r   ri   )r   r   rg   r-   r   r   r   r   r   r   r"   r   r   r   rk   r2   r3   rc   r0   )
r'   rd   r(   r   r)   r*   rf   rl   r   rm   r   r   r+   r<   D  sH   
zNDRCALL.getDatac           
      C   s  |}| j | j D ]}\}}zUt| j| tst| j| tr2| |||\}}| j| | ||7 }| ||||}t| j| t	r\|| j| 
||| 7 }|| j| ||| 7 }||7 }W q ty }	 ztt|	 td|||||d  f   d }	~	ww || S rn   )r   r   r-   r   r   r   r   r   rq   r   r   r   rk   r2   r3   rc   r   r   r   r+   r%   t  s*    zNDRCALL.fromStringrz   r|   r{   )r1   r}   r~   r    r   r   r   r   r   r   r^   r<   r%   r   r   r   r+   r    s    

!
0r  c                   @   r   )UNKNOWNDATAr   r   Nr   r   r   r   r+   r    r   r  )4
__future__r   r   r  rE   structr   r   r   sixr   r   minikerberosr	   r2   #minikerberos.protocol.external.enumr
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   typer   r   r   r   r   r   r   r   r   r   r   r   r.   NULLr/   r  r  r  NDRTLSTRUCTr  r   r   r   r+   <module>   s^     '! B E2 [ osz