
    g                     f    S SK r S SKJrJr  S SKJr  S SKJr  S SKJrJ	r	  S SK
Jr   " S S\5      rg)	    N)Element
SubElement)preg)misc)ndr_pack
ndr_unpack)GPParserc                       \ rS rSrSr\R                  S\R                  S\R                  S\R                  S\R                  S\R                  S\R                  S	\R                  S
0rS rS rS rS rS rSrg)GPPolParser"   NREG_NONEREG_SZ	REG_DWORDREG_DWORD_BIG_ENDIAN	REG_QWORDREG_EXPAND_SZREG_MULTI_SZ
REG_BINARYc                 D    U R                   R                  U5      nUc  gU$ )NREG_UNKNOWN)reg_typeget)selfvalrets      7/usr/lib/python3/dist-packages/samba/gp_parse/gp_pol.pymap_reg_typeGPPolParser.map_reg_type0   s#    mm$; 
    c                 B    [        [        R                  U5      U l        g )N)r   r   filepol_file)r   contentss     r   parseGPPolParser.parse6   s    "499h7r   c                    [         R                  " 5       U l        UR                  S   U R                  R                  l        [        UR                  S   5      U R                  R                  l        [        UR                  S   5      U R                  l        / nUR                  S5       GH  n[         R                  " 5       n[        UR                  S   5      nXTl        UR                  S5      R                  Ul        UR                  S5      R                  nUc  SnXdl        [         R"                  U:X  a_  UR                  S	5       Vs/ s H  owR                  PM     nnUS /:X  a  S
n	OS
R%                  U5      S-   n	U	R'                  S5      Ul        O[         R*                  U:X  a  O[         R,                  U:X  d  [         R.                  U:X  a'  UR                  S	5      R                  n
U
c  Sn
Xl        O[         R0                  U:X  d(  [         R2                  U:X  d  [         R4                  U:X  a*  [        UR                  S	5      R                  5      Ul        O4[6        R8                  " UR                  S	5      R                  5      Ul        UR;                  U5        GM     X R                  l        g s  snf )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@   er5   
entry_type
value_namexvaluesr<   
string_vals              r   load_xmlGPPolParser.load_xml9   s   		)-[)A&'*4;;y+A'B$$'M(B$C!g&AJJLEQXXf-.J#JFF5M..EM,11J!
(O   J.*+))G*<=*<Q&&*<=dV#"D"<</+=D![[4
--:-+++$$
2VVG_11
%!#J'
..J.++z9..J. !5!56
#--affWo.B.BC
NN5!I 'L !(/ >s   Kc                 (   [        US5       n[        S5      n[        U R                  R                  5      UR
                  S'   U R                  R                  R                  UR
                  S'   [        U R                  R                  R                  5      UR
                  S'   U R                  R                   GH&  n[        US5      n[        UR                  5      UR
                  S'   U R                  UR                  5      UR
                  S'   [        US	5      nUR                  Ul        [        US
5      nUR                  Ul        [         R"                  UR                  :X  aW  UR$                  R'                  S5      R)                  S5      R+                  S5      nU H  n	[        US5      n
Xl        M     GM	  [         R,                  UR                  :X  d  [         R.                  UR                  :X  dx  [         R0                  UR                  :X  dZ  [         R2                  UR                  :X  d<  [         R4                  UR                  :X  d  [         R6                  UR                  :X  a)  [        US5      n
[        UR$                  5      U
l        GM  [        US5      n
[8        R:                  " UR$                  5      R'                  S5      U
l        GM)     U R=                  X25        S S S 5        g ! , (       d  f       g = f)NwbPolFiler)   r'   r(   r*   r+   	type_namer,   r-   zutf-16r0   r/   utf8)openr   strr"   r)   r1   r2   r'   r(   r@   r   r+   r   r8   r7   r9   r   r   r<   decoderstripsplitr   r   r   r   r   r   r=   	b64encodewrite_pretty_xml)r   filenamefrA   r5   childkeyr9   multimvalues              r   	write_xmlGPPolParser.write_xmli   s   (D!Q9%D),T]]-F-F)GDKK&'+}}';';'E'EDKK$%()=)=)E)E%FDKK	".."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 /@ !!$*K "!!s   K-L
Lc                     [        US5       n[        U R                  5      nUR                  U5        S S S 5        g ! , (       d  f       g = f)NrK   )rO   r   r"   write)r   rV   rW   binary_datas       r   write_binaryGPPolParser.write_binary   s4    (D!Q"4==1KGGK  "!!s	   '=
A)r"   )__name__
__module____qualname____firstlineno__r"   r   r   r   r   r   r   r   r   r   r   r   r$   rH   r]   rb   __static_attributes__ r   r   r   r   "   sz    H 	zX!!#9O>	H8-(`&+V!r   r   )r=   xml.etree.ElementTreer   r   samba.dcerpcr   r   	samba.ndrr   r   samba.gp_parser	   r   ri   r   r   <module>rn      s'   (  5   * #u!( u!r   