
    Id2                     ^    d dl Z d dlZd dlZd dlmZmZ d dlmZmZ d dl	m
Z
  G d de
      Zy)    N)ABCMetaabstractmethod)Element
SubElement)GPParserc                       e Zd ZdZdZdZ G d d      Z G d de      Z G d d	e      Z G d
 de      Z	 G d de      Z
 G d de      Z G d de      Z G d de      Zd Zd Zd Zd Zy)GptTmplInfParserNzutf-16zutf-16lec                   V    e Zd ZeZd Zed        Zed        Zed        Z	ed        Z
y)GptTmplInfParser.AbstractParamc                     g | _         y N)
param_list)selfs    7/usr/lib/python3/dist-packages/samba/gp_parse/gp_inf.py__init__z'GptTmplInfParser.AbstractParam.__init__&   s	     DO    c                      y r    r   lines     r   parsez$GptTmplInfParser.AbstractParam.parse)       r   c                      y r   r   r   headerfps      r   write_sectionz,GptTmplInfParser.AbstractParam.write_section-   r   r   c                      y r   r   r   
xml_parents     r   	build_xmlz(GptTmplInfParser.AbstractParam.build_xml1   r   r   c                      y r   r   r   sections     r   from_xmlz'GptTmplInfParser.AbstractParam.from_xml5   r   r   N)__name__
__module____qualname__r   __metaclass__r   r   r   r   r!   r%   r   r   r   AbstractParamr   #   s\    	! 
	 
	 
	 
	 
	 
	 
	 
	r   r*   c                   $    e Zd Zd Zd Zd Zd Zy)GptTmplInfParser.IniParamc                     |j                  d      \  }}| j                  j                  |j                         |j                         f       y )N=splitr   appendstrip)r   r   keyvals       r   r   zGptTmplInfParser.IniParam.parse<   s;    zz#HCOO""CIIK$'IIK$1 2r   c                     t        | j                        dk(  ry |j                  d|z         | j                  D ]  \  }}|j                  |d|d        y )Nr   [%s]
 = 
lenr   write)r   r   r   key_outval_outs        r   r   z'GptTmplInfParser.IniParam.write_sectionD   sU    4??#)HH[6)*$(OO 5 7+24 55r   c                     | j                   D ]7  \  }}t        |d      }t        |d      }t        |d      }||_        ||_        9 y )N	ParameterKeyValuer   r   text)r   r    key_inival_inichildr3   values          r   r!   z#GptTmplInfParser.IniParam.build_xmlL   sL    $(OO % ":{; ."5'2"$
%r   c                     |j                  d      D ]Y  }|j                  d      j                  }|j                  d      j                  }|d}| j                  j	                  ||f       [ y Nr?   r@   rA    findallfindrC   r   r1   )r   r$   paramr3   rG   s        r   r%   z"GptTmplInfParser.IniParam.from_xmlT   sb     5 5jj',,

7+00=E&&U|45r   Nr&   r'   r(   r   r   r!   r%   r   r   r   IniParamr,   9   s    	2	5	%	5r   rP   c                   $    e Zd Zd Zd Zd Zd Zy)GptTmplInfParser.RegParamc                 :    | j                   j                  |       y r   )r   r1   r   s     r   r   zGptTmplInfParser.RegParam.parse_   s    OO""4(r   c                     t        | j                        dk(  ry |j                  d|z         | j                  D ]  }|j                  d|z          y )Nr   r6   z%s
r9   r   r   r   rN   s       r   r   z'GptTmplInfParser.RegParam.write_sectiond   sK    4??#)HH[6)* ,U*+,r   c                 d    | j                   D ]!  }t        |d      }t        |d      }||_        # y )Nr?   rA   rB   )r   r    rE   rF   rG   s        r   r!   z#GptTmplInfParser.RegParam.build_xmlk   s4    ?? %":{;"5'2$
%r   c                     |j                  d      D ]<  }|j                  d      j                  }|d}| j                  j	                  |       > y Nr?   rA   rJ   rK   )r   r$   rN   rG   s       r   r%   z"GptTmplInfParser.RegParam.from_xmlq   sJ     5 .

7+00=E&&u-.r   NrO   r   r   r   RegParamrR   ]   s    	)
	,	%	.r   rY   c                   $    e Zd Zd Zd Zd Zd Zy)!GptTmplInfParser.PrivSIDListParamc                     |j                  d      \  }}| j                  j                  |j                         |j                  d      D cg c]  }|j                          c}f       y c c}w )Nr.   ,r/   r   r   r3   r4   xs        r   r   z'GptTmplInfParser.PrivSIDListParam.parse{   sS    zz#HCOO""CIIK8;		#$G1QWWY$G$I J$Gs   A,
c                     t        | j                        dk(  ry |j                  d|z         | j                  D ]-  \  }}dj                  |      }|j                  |d|d       / y )Nr   r6   r]   r7   r8   r:   r   r;   join)r   r   r   r<   r4   r=   s         r   r   z/GptTmplInfParser.PrivSIDListParam.write_section   s\    4??#)HH[6)* $ >))C.7G<=>r   c                     | j                   D ]M  \  }}t        |d      }t        |d      }||_        |D ]$  }t        |d      }d|j                  d<   ||_        & O y )Nr?   r@   rA   TRUEuser_idr   r   rC   attribr   r    rD   sid_listrF   r3   rE   rG   s           r   r!   z+GptTmplInfParser.PrivSIDListParam.build_xml   si    %)__ )!":{; ."' )G&ug6E.4ELL+!(EJ)	)r   c                    |j                  d      D ]s  }|j                  d      j                  }g }|j                  d      D ]#  }|j                  }|d}|j                  |       % | j                  j                  ||f       u y rI   )rL   rM   rC   r1   r   )r   r$   rN   r3   ri   r4   rG   s          r   r%   z*GptTmplInfParser.PrivSIDListParam.from_xml   s     5 8jj',, ==1 +CHHE} "OOE*+ &&X78r   NrO   r   r   r   PrivSIDListParamr[   y   s    	J	>	)	8r   rk   c                   $    e Zd Zd Zd Zd Zd Zy)!GptTmplInfParser.NameModeACLParamc                    g d}d}|dk7  rf|d d dk(  r'|dd  }|j                  d      }|d | ||<   ||dz   d  }n1|d d dk(  r|dd  }|dz  }n|j                  d      }|d | ||<   ||d  }|dk7  rf| j                  j                  |       y )N)NNNr   rJ      "r]   )rM   r   r1   )r   r   
parameterscurrent_argfindexs        r   r   z'GptTmplInfParser.NameModeACLParam.parse   s    +JK"*8s?8D!YYs^F.27FmJ{+
,D"1X_8D1$K "YYs^F.27FmJ{+=D "*& OO"":.r   c                     t        | j                        dk(  ry |j                  d|z         | j                  D ]  }|j                  dt        |      z         ! y )Nr   r6   z"%s",%s,"%s"
)r:   r   r;   tuplerU   s       r   r   z/GptTmplInfParser.NameModeACLParam.write_section   sP    4??#)HH[6)* =,uU|;<=r   c                     | j                   D ]_  }t        |d      }t        |d      }|d   |_        t        |d      }|d   |_        t        |d      }d|j                  d<   |d   |_        a y )Nr?   rA   r   ro   rd   acl   rf   )r   r    name_mode_aclrF   rG   s        r   r!   z+GptTmplInfParser.NameModeACLParam.build_xml   sw    !% .":{;"5'2*1-
"5'2*1-
"5'2&,U#*1-
.r   c                     |j                  d      D ]S  }|j                  d      D cg c]  }|j                  r|j                  nd }}| j                  j                  |       U y c c}w rX   )rL   rC   r   r1   )r   r$   rN   r_   ry   s        r   r%   z*GptTmplInfParser.NameModeACLParam.from_xml   s[     5 6CH==QXCY Za166r!9 Z Z&&}56 Zs   !A)NrO   r   r   r   NameModeACLParamrm      s    	/2	=	.	6r   r{   c                   $    e Zd Zd Zd Zd Zd Zy)#GptTmplInfParser.MemberSIDListParamc                    |j                  d      \  }}|j                         }| j                  j                  |j                  d      |j                  d      D cg c]  }|j                          c}f       y c c}w )Nr.   __r]   )r0   r2   r   r1   r^   s        r   r   z)GptTmplInfParser.MemberSIDListParam.parse   s`    zz#HC))+COO""CIIdO8;		#$G1QWWY$G$I J$Gs   A=
c                     t        | j                        dk(  ry |j                  d|z         | j                  D ]>  \  }}dj                  |      }dj                  |      }|j                  |d|d       @ y )Nr   r6   r   r]   r7   r8   ra   )r   r   r   r3   r4   r<   r=   s          r   r   z1GptTmplInfParser.MemberSIDListParam.write_section   si    4??#)HH[6)* OO >S**S/))C.7G<=>r   c                    | j                   D ]q  \  }}t        |d      }t        |d      }|d   |_        |d   |j                  d<   d|j                  d<   |D ]$  }t        |d      }d|j                  d<   ||_        & s y )	Nr?   r@   r   ro   member_typerd   re   rA   rf   rh   s           r   r!   z-GptTmplInfParser.MemberSIDListParam.build_xml   s    %)__ 
)!":{; ."1:,3AJ

=)(.

9%' )G&ug6E.4ELL+!(EJ)
)r   c                 4   |j                  d      D ]  }|j                  d      }|j                  d   }g }|j                  d      D ]#  }|j                  }|d}|j	                  |       % | j
                  j	                  |j                  |g|f        y )Nr?   r@   r   rA   rJ   )rL   rM   rg   rC   r1   r   )r   r$   rN   r3   r   ri   r4   rG   s           r   r%   z,GptTmplInfParser.MemberSIDListParam.from_xml   s     5 Ljj'!jj7 ==1 +CHHE} "OOE*+ &&;(?'JKLr   NrO   r   r   r   MemberSIDListParamr}      s    	J	>	)	Lr   r   c                   $    e Zd Zd Zd Zd Zd Zy)GptTmplInfParser.UnicodeParamc                      y r   r   r   s     r   r   z#GptTmplInfParser.UnicodeParam.parse	  r   r   c                 &    |j                  d       y )Nz[Unicode]
Unicode=yes
r;   r   s      r   r   z+GptTmplInfParser.UnicodeParam.write_section  s    HH45r   c                      y r   r   r   s     r   r!   z'GptTmplInfParser.UnicodeParam.build_xml  r   r   c                      y r   r   r#   s     r   r%   z&GptTmplInfParser.UnicodeParam.from_xml  r   r   NrO   r   r   r   UnicodeParamr     s    		6		r   r   c                   $    e Zd Zd Zd Zd Zd Zy)GptTmplInfParser.VersionParamc                      y r   r   r   s     r   r   z#GptTmplInfParser.VersionParam.parse  r   r   c                 *    d}|j                  |       y )Nz.[Version]
signature="$CHICAGO$"
Revision=1
r   )r   r   r   outs       r   r   z+GptTmplInfParser.VersionParam.write_section  s    ICHHSMr   c                      y r   r   r   s     r   r!   z'GptTmplInfParser.VersionParam.build_xml!  r   r   c                      y r   r   r#   s     r   r%   z&GptTmplInfParser.VersionParam.from_xml%  r   r   NrO   r   r   r   VersionParamr     s    				r   r   c                 ,   |j                  | j                        }t        j                  d| j	                         fd| j                         fd| j                         fd| j                         fd| j                         fd| j                         fd| j                         fd| j                         fd	| j                         fd
| j                         fd| j                         fd| j                         fd| j                         fd| j                         fg      | _        d }d }|j                         D ]Z  }t        j                  d|      }|r/|j                  d      }|| j                  v r| j                  |   }J|j!                  |       \ y )NUnicodeVersionSystem AccessKerberos Policy
System LogSecurity LogApplication LogEvent AuditRegistry ValuesPrivilege RightsService General SettingRegistry KeysFile SecurityGroup Membershipz\[(.*)\]ro   )decodeencodingcollectionsOrderedDictr   r   rP   rY   rk   r{   r   sections
splitlinesrematchgroupr   )r   contentsinf_filecurrent_param_parsercurrent_header_namer   r   header_names           r   r   zGptTmplInfParser.parse)  sx   ??4==1#//**,-**,-t}}/1DMMO,dmmo.1T]]_-1 $"7"7"9:')>)>)@At4467t4467 $"9"9";<1
 $  $"'') 
	-DHH[$/E#kk!n$--/+/==+E( !&&t,
	-r   c                     t        j                  |d| j                        5 }|j                  d       | j                  D ]!  }| j                  |   j                  ||       # 	 d d d        y # 1 sw Y   y xY w)Nzwb+u   ﻿)codecsopenoutput_encodingr;   r   r   )r   filenamefss       r   write_binaryzGptTmplInfParser.write_binaryN  sk    [[5--/ 	523GGI]] 5a ..q!45	5 	5 	5s   AA..A7c                    t        |d      5 }t        d      }| j                  D ];  }t        |d      }||j                  d<   | j                  |   j                  |       = | j                  ||       d d d        y # 1 sw Y   y xY w)NwbGptTmplInfFileSectionname)r   r   r   r   rg   r!   write_pretty_xml)r   r   r   rootsec_infr$   s         r   	write_xmlzGptTmplInfParser.write_xmlW  s    (D! 		+Q+,D== :$T95)0v&g&009	: !!$*		+ 		+ 		+s   A(A>>Bc                    t        j                  d| j                         fd| j                         fd| j	                         fd| j	                         fd| j	                         fd| j	                         fd| j	                         fd| j	                         fd	| j                         fd
| j                         fd| j                         fd| j                         fd| j                         fd| j                         fg      | _	        |j                  d      D ]-  }| j                  |j                  d      j                  |       / y )Nr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   rP   rY   rk   r{   r   r   rL   rg   r%   )r   r   r   s      r   load_xmlzGptTmplInfParser.load_xmlf  s,   #//**,-**,-t}}/1DMMO,dmmo.1T]]_-1 $"7"7"9:')>)>)@At4467t4467 $"9"9";<1
 $ i( 	8AMM!((6*+44Q7	8r   )r&   r'   r(   r   r   r   r*   rP   rY   rk   r{   r   r   r   r   r   r   r   r   r   r   r	   r	      s    HH O ,"5= "5H.= .8'8= '8R36= 36j/L] /Lb}  } ""-J5
+8r   r	   )r   r   r   abcr   r   xml.etree.ElementTreer   r   samba.gp_parser   r	   r   r   r   <module>r      s'   (   	 ' 5 #\8x \8r   