
    b'                     n    d dl 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	 d dl
mZ  G d de          ZdS )	    N)Element
SubElement)preg)misc)ndr_pack
ndr_unpack)GPParserc                       e Zd ZdZej        dej        dej        dej        dej	        dej
        dej        dej        d	iZd
 Zd Zd Zd Zd ZdS )GPPolParserNREG_NONEREG_SZ	REG_DWORDREG_DWORD_BIG_ENDIAN	REG_QWORDREG_EXPAND_SZREG_MULTI_SZ
REG_BINARYc                 B    | j                             |          }|dS |S )NREG_UNKNOWN)reg_typeget)selfvalrets      7/usr/lib/python3/dist-packages/samba/gp_parse/gp_pol.pymap_reg_typezGPPolParser.map_reg_type0   s&    m$$; =
    c                 D    t          t          j        |          | _        d S )N)r   r   filepol_file)r   contentss     r   parsezGPPolParser.parse6   s    "49h77r   c                    t          j                    | _        |j        d         | j        j        _        t          |j        d                   | j        j        _        t          |j        d                   | j        _        g }|	                    d          D ]}t          j
                    }t          |j        d                   }||_        |                    d          j        |_        |                    d          j        }|d}||_        t           j        |k    rPd	 |	                    d
          D             }d                    |          dz                       d          |_        nt           j        |k    rnt           j        |k    st           j        |k    r&|                    d
          j        }|d}||_        nt           j        |k    s t           j        |k    st           j        |k    r-t          |                    d
          j                  |_        n1t7          j        |                    d
          j                  |_        |                    |           || j        _        d S )N	signatureversionnum_entriesEntrytypeKey	ValueName c                     g | ]	}|j         
S  )text).0xs     r   
<listcomp>z(GPPolParser.load_xml.<locals>.<listcomp>O   s    ===Q!&===r   Value z  zutf-16le)r   r   r    attribheaderr$   intr%   r&   findallentryr(   findr.   keyname	valuenamer   r   joinencodedatar   r   r   r   r   r   base64	b64decodeappendentries)	r   rootrB   er8   
entry_type
value_namevalues
string_vals	            r   load_xmlzGPPolParser.load_xml9   s
   	)-[)A&'*4;y+A'B'B$$'M(B$C$C!g&&  	"  	"AJLLEQXf-..J#EJFF5MM.EM,,1J!
(EO  J..==!))G*<*<===%ll622[@HHTT

-:--+++$
22VVG__1
%!#J'

.J..+z99.J.. !566

#-affWoo.BCC
NN5!!!! 'r   c                 H   t          |d          5 }t          d          }t          | j        j                  |j        d<   | j        j        j        |j        d<   t          | j        j        j                  |j        d<   | j        j	        D ]}t          |d          }t          |j                  |j        d<   |                     |j                  |j        d<   t          |d	          }|j        |_        t          |d
          }|j        |_        t           j        |j        k    r]|j                            d                              d                              d          }|D ]}	t          |d          }
|	|
_        t           j        |j        k    sit           j        |j        k    sTt           j        |j        k    s?t           j        |j        k    s*t           j        |j        k    st           j        |j        k    r+t          |d          }
t          |j                  |
_        t          |d          }
t9          j        |j                                      d          |
_        |                     ||           d d d            d S # 1 swxY w Y   d S )NwbPolFiler&   r$   r%   r'   r(   	type_namer)   r*   zutf-16r3   r2   utf8)openr   strr    r&   r4   r5   r$   r%   rB   r   r(   r   r:   r.   r;   r   r   r>   decoderstripsplitr   r   r   r   r   r   r?   	b64encodewrite_pretty_xml)r   filenamefrC   r8   childkeyr;   multimvalues              r   	write_xmlzGPPolParser.write_xmle   s   (D!! %	+Q9%%D),T]-F)G)GDK&'+}';'EDK$%()=)E%F%FDK	". M M"411'*5:V$,0,=,=ej,I,I[) .. =&uk::	!&	$
22!J--h77>>wGGMMgVVE" ' ' *5' : :%&

' muz11kUZ//n
22/5:==n
22(EJ66&ug66E!$UZEJJ 'ug66E!'!1%*!=!=!D!DV!L!LEJJ
 !!$***K%	+ %	+ %	+ %	+ %	+ %	+ %	+ %	+ %	+ %	+ %	+ %	+ %	+ %	+ %	+ %	+ %	+ %	+s   I9JJJc                     t          |d          5 }t          | j                  }|                    |           d d d            d S # 1 swxY w Y   d S )NrK   )rO   r   r    write)r   rV   rW   binary_datas       r   write_binaryzGPPolParser.write_binary   s    (D!! 	!Q"4=11KGGK   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!s   *AAA)__name__
__module____qualname__r    r   r   r   r   r   r   r   r   r   r   r   r"   rI   r]   ra   r-   r   r   r   r   "   s        H 	zX!#9O>	H  8 8 8)( )( )(X&+ &+ &+V! ! ! ! !r   r   )r?   xml.etree.ElementTreer   r   samba.dcerpcr   r   	samba.ndrr   r   samba.gp_parser	   r   r-   r   r   <module>ri      s   (  5 5 5 5 5 5 5 5             * * * * * * * * # # # # # #q! q! q! q! q!( q! q! q! q! q!r   