
    Id'                     f    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y)	    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y)GPPolParserNREG_NONEREG_SZ	REG_DWORDREG_DWORD_BIG_ENDIAN	REG_QWORDREG_EXPAND_SZREG_MULTI_SZ
REG_BINARYc                 B    | j                   j                  |      }|y|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#    mm$; 
    c                 B    t        t        j                  |      | _        y )N)r   r   filepol_file)r   contentss     r   parsezGPPolParser.parse6   s    "499h7r   c                 `   t        j                         | _        |j                  d   | j                  j                  _        t        |j                  d         | j                  j                  _        t        |j                  d         | j                  _        g }|j                  d      D ]  }t        j                         }t        |j                  d         }||_        |j                  d      j                  |_        |j                  d      j                  }|d}||_        t         j"                  |k(  rQ|j                  d	      D cg c]  }|j                   }}d
j%                  |      dz   j'                  d      |_        nt         j*                  |k(  rnt         j,                  |k(  st         j.                  |k(  r'|j                  d	      j                  }	|	d}	|	|_        nt         j0                  |k(  s&t         j2                  |k(  st         j4                  |k(  r*t        |j                  d	      j                        |_        n3t7        j8                  |j                  d	      j                        |_        |j;                  |        || j                  _        y c c}w )N	signatureversionnum_entriesEntrytypeKey	ValueName Value z  zutf-16le)r   r   r    attribheaderr$   intr%   r&   findallentryr(   findtextkeyname	valuenamer   r   joinencodedatar   r   r   r   r   r   base64	b64decodeappendentries)
r   rootr=   er2   
entry_type
value_namexvalues
string_vals
             r   load_xmlzGPPolParser.load_xml9   s    		)-[)A&'*4;;y+A'B$$'M(B$C!g&  	"AJJLEQXXf-.J#EJFF5M..EM,11J!
(EO   J.*+))G*<=Q!&&==%ll62[@HHT
--:-+++$$
2VVG_11
%!#J'
..J.++z9..J. !5!56
#--affWo.B.BC
NN5!A 	"D !(' >s   J+c                    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                        |j
                  d<   t        |d	      }|j                  |_        t        |d
      }|j                  |_        t         j"                  |j                  k(  rU|j$                  j'                  d      j)                  d      j+                  d      }|D ]  }	t        |d      }
|	|
_         t         j,                  |j                  k(  st         j.                  |j                  k(  stt         j0                  |j                  k(  sWt         j2                  |j                  k(  s:t         j4                  |j                  k(  st         j6                  |j                  k(  r(t        |d      }
t        |j$                        |
_        t        |d      }
t9        j:                  |j$                        j'                  d      |
_         | j=                  ||       d d d        y # 1 sw Y   y xY w)NwbPolFiler&   r$   r%   r'   r(   	type_namer)   r*   zutf-16r-   r,   utf8)openr   strr    r&   r.   r/   r$   r%   r=   r   r(   r   r5   r4   r6   r   r   r9   decoderstripsplitr   r   r   r   r   r   r:   	b64encodewrite_pretty_xml)r   filenamefr>   r2   childkeyr6   multimvalues              r   	write_xmlzGPPolParser.write_xmle   s5   (D! %	+Q9%D),T]]-F-F)GDKK&'+}}';';'E'EDKK$%()=)=)E)E%FDKK	".. M"41'*5::V$,0,=,=ejj,I[) . ==&uk:	!&	$$

2!JJ--h7>>wGMMgVE" ' *5' :%&
' mmuzz1kkUZZ/nn

2//5::=nn

2((EJJ6&ug6E!$UZZEJ 'ug6E!'!1!1%**!=!D!DV!LEJ7M@ !!$*K%	+ %	+ %	+s   K!K77L c                     t        |d      5 }t        | j                        }|j                  |       d d d        y # 1 sw Y   y xY w)NrG   )rK   r   r    write)r   rR   rS   binary_datas       r   write_binaryzGPPolParser.write_binary   s=    (D! 	!Q"4==1KGGK 	! 	! 	!s	   '=A)__name__
__module____qualname__r    r   r   r   r   r   r   r   r   r   r   r   r"   rE   rY   r]    r   r   r   r   "   sz    H 	zX!!#9O>	H8)(X&+V!r   r   )r:   xml.etree.ElementTreer   r   samba.dcerpcr   r   	samba.ndrr   r   samba.gp_parser	   r   ra   r   r   <module>rf      s'   (  5   * #q!( q!r   