
    b2                     f    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dS )    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dS )GptTmplInfParserNzutf-16zutf-16lec                   p    e Zd ZeZd Zed             Zed             Zed             Z	ed             Z
dS )GptTmplInfParser.AbstractParamc                     g | _         d S N)
param_list)selfs    7/usr/lib/python3/dist-packages/samba/gp_parse/gp_inf.py__init__z'GptTmplInfParser.AbstractParam.__init__&   s     DOOO    c                     d S r    r   lines     r   parsez$GptTmplInfParser.AbstractParam.parse)       Dr   c                     d S r   r   r   headerfps      r   write_sectionz,GptTmplInfParser.AbstractParam.write_section-   r   r   c                     d S r   r   r   
xml_parents     r   	build_xmlz(GptTmplInfParser.AbstractParam.build_xml1   r   r   c                     d S 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dS )GptTmplInfParser.IniParamc                     |                     d          \  }}| j                            |                                |                                f           d S )N=splitr   appendstripr   r   keyvals       r   r   zGptTmplInfParser.IniParam.parse<   sS    zz#HCO""CIIKK$'IIKK$1 2 2 2 2 2r   c                     t          | j                  dk    rd S |                    d|z             | j        D ] \  }}|                    |d|d           !d S )Nr   [%s]
 = 
lenr   write)r   r   r   key_outval_outs        r   r   z'GptTmplInfParser.IniParam.write_sectionD   s    4?##))HH[6)***$(O 5 5 777+2774 5 5 5 55 5r   c                     | j         D ]C\  }}t          |d          }t          |d          }t          |d          }||_        ||_        Dd S )N	ParameterKeyValuer   r   text)r   r    key_inival_inichildr4   values          r   r!   z#GptTmplInfParser.IniParam.build_xmlL   s_    $(O % % ":{;; .."5'22"$

% %r   c                     |                     d          D ]V}|                    d          j        }|                    d          j        }|d}| j                            ||f           Wd S Nr@   rA   rB    findallfindrD   r   r1   )r   r$   paramr4   rH   s        r   r%   z"GptTmplInfParser.IniParam.from_xmlT   sv     55 5 5jj'',

7++0=E&&U|44445 5r   Nr&   r'   r(   r   r   r!   r%   r   r   r   IniParamr,   9   sP        	2 	2 	2	5 	5 	5	% 	% 	%	5 	5 	5 	5 	5r   rQ   c                   &    e Zd Zd Zd Zd Zd ZdS )GptTmplInfParser.RegParamc                 :    | j                             |           d S r   )r   r1   r   s     r   r   zGptTmplInfParser.RegParam.parse_   s    O""4(((((r   c                     t          | j                  dk    rd S |                    d|z             | j        D ]}|                    d|z             d S )Nr   r7   z%s
r:   r   r   r   rO   s       r   r   z'GptTmplInfParser.RegParam.write_sectiond   sh    4?##))HH[6)*** , ,U*++++, ,r   c                 h    | j         D ])}t          |d          }t          |d          }||_        *d S )Nr@   rB   rC   )r   r    rF   rG   rH   s        r   r!   z#GptTmplInfParser.RegParam.build_xmlk   sD    ? % %":{;;"5'22$

% %r   c                     |                     d          D ]:}|                    d          j        }|d}| j                            |           ;d S )Nr@   rB   rK   rL   )r   r$   rO   rH   s       r   r%   z"GptTmplInfParser.RegParam.from_xmlq   s^     55 . .

7++0=E&&u----. .r   NrP   r   r   r   RegParamrS   ]   sP        	) 	) 	)
	, 	, 	,	% 	% 	%	. 	. 	. 	. 	.r   rY   c                   &    e Zd Zd Zd Zd Zd ZdS )!GptTmplInfParser.PrivSIDListParamc                     |                     d          \  }}| j                            |                                d |                     d          D             f           d S )Nr.   c                 6    g | ]}|                                 S r   r2   .0xs     r   
<listcomp>z;GptTmplInfParser.PrivSIDListParam.parse.<locals>.<listcomp>        $G$G$G1QWWYY$G$G$Gr   ,r/   r3   s       r   r   z'GptTmplInfParser.PrivSIDListParam.parse{   si    zz#HCO""CIIKK$G$G		#$G$G$G$I J J J J Jr   c                     t          | j                  dk    rd S |                    d|z             | j        D ]5\  }}d                    |          }|                    |d|d           6d S )Nr   r7   rd   r8   r9   r;   r   r<   join)r   r   r   r=   r5   r>   s         r   r   z/GptTmplInfParser.PrivSIDListParam.write_section   s    4?##))HH[6)*** $ > >))C..777GGG<====> >r   c                     | j         D ]R\  }}t          |d          }t          |d          }||_        |D ]#}t          |d          }d|j        d<   ||_        $Sd S )Nr@   rA   rB   TRUEuser_idr   r   rD   attribr   r    rE   sid_listrG   r4   rF   rH   s           r   r!   z+GptTmplInfParser.PrivSIDListParam.build_xml   s    %)_ ) )!":{;; .."' ) )G&ug66E.4EL+!(EJJ)	) )r   c                    |                     d          D ]r}|                    d          j        }g }|                     d          D ]"}|j        }|d}|                    |           #| j                            ||f           sd S rJ   )rM   rN   rD   r1   r   )r   r$   rO   r4   rn   r5   rH   s          r   r%   z*GptTmplInfParser.PrivSIDListParam.from_xml   s     55 8 8jj'', ==11 + +CHE} "OOE****&&X77778 8r   NrP   r   r   r   PrivSIDListParamr[   y   sS        	J 	J 	J	> 	> 	>	) 	) 	)	8 	8 	8 	8 	8r   rp   c                   &    e Zd Zd Zd Zd Zd ZdS )!GptTmplInfParser.NameModeACLParamc                    g d}d}|dk    r|d d         dk    r:|dd          }|                     d          }|d |         ||<   ||dz   d          }nJ|d d         dk    r|dd          }|dz  }n,|                     d          }|d |         ||<   ||d          }|dk    | j                            |           d S )N)NNNr   rK      "rd   )rN   r   r1   )r   r   
parameterscurrent_argfindexs        r   r   z'GptTmplInfParser.NameModeACLParam.parse   s    +++JK"**8s??8D!YYs^^F.27F7mJ{+
,DD"1"X__8D1$KK "YYs^^F.27F7mJ{+=D "**& O"":.....r   c                     t          | j                  dk    rd S |                    d|z             | j        D ]'}|                    dt          |          z             (d S )Nr   r7   z"%s",%s,"%s"
)r;   r   r<   tuplerV   s       r   r   z/GptTmplInfParser.NameModeACLParam.write_section   so    4?##))HH[6)*** = =,uU||;<<<<= =r   c                     | j         D ]s}t          |d          }t          |d          }|d         |_        t          |d          }|d         |_        t          |d          }d|j        d<   |d         |_        td S )Nr@   rB   r   rt   ri   acl   rk   )r   r    name_mode_aclrG   rH   s        r   r!   z+GptTmplInfParser.NameModeACLParam.build_xml   s    !% . .":{;;"5'22*1-
"5'22*1-
"5'22&,U#*1-

. .r   c                     |                     d          D ];}d |                     d          D             }| j                            |           <d S )Nr@   c                 .    g | ]}|j         r|j         nd S )rK   )rD   r_   s     r   rb   z>GptTmplInfParser.NameModeACLParam.from_xml.<locals>.<listcomp>   s%     Z Z Za16!9r Z Z Zr   rB   )rM   r   r1   )r   r$   rO   r~   s       r   r%   z*GptTmplInfParser.NameModeACLParam.from_xml   s`     55 6 6 Z Z5==QXCYCY Z Z Z&&}55556 6r   NrP   r   r   r   NameModeACLParamrr      sP        	/ 	/ 	/2	= 	= 	=	. 	. 	.	6 	6 	6 	6 	6r   r   c                   &    e Zd Zd Zd Zd Zd ZdS )#GptTmplInfParser.MemberSIDListParamc                     |                     d          \  }}|                                }| j                            |                     d          d |                     d          D             f           d S )Nr.   __c                 6    g | ]}|                                 S r   r^   r_   s     r   rb   z=GptTmplInfParser.MemberSIDListParam.parse.<locals>.<listcomp>   rc   r   rd   )r0   r2   r   r1   r3   s       r   r   z)GptTmplInfParser.MemberSIDListParam.parse   sx    zz#HC))++CO""CIIdOO$G$G		#$G$G$G$I J J J J Jr   c                    t          | j                  dk    rd S |                    d|z             | j        D ]J\  }}d                    |          }d                    |          }|                    |d|d           Kd S )Nr   r7   r   rd   r8   r9   rf   )r   r   r   r4   r5   r=   r>   s          r   r   z1GptTmplInfParser.MemberSIDListParam.write_section   s    4?##))HH[6)*** O > >S**S//))C..777GGG<====> >r   c                     | j         D ]r\  }}t          |d          }t          |d          }|d         |_        |d         |j        d<   d|j        d<   |D ]#}t          |d          }d|j        d<   ||_        $sd S )	Nr@   rA   r   rt   member_typeri   rj   rB   rk   rm   s           r   r!   z-GptTmplInfParser.MemberSIDListParam.build_xml   s    %)_ 
) 
)!":{;; .."1:,3AJ
=)(.
9%' ) )G&ug66E.4EL+!(EJJ)
) 
)r   c                 4   |                     d          D ]}|                    d          }|j        d         }g }|                     d          D ]"}|j        }|d}|                    |           #| j                            |j        |g|f           d S )Nr@   rA   r   rB   rK   )rM   rN   rl   rD   r1   r   )r   r$   rO   r4   r   rn   r5   rH   s           r   r%   z,GptTmplInfParser.MemberSIDListParam.from_xml   s     55 L Ljj''!j7 ==11 + +CHE} "OOE****&&;(?'JKKKKL Lr   NrP   r   r   r   MemberSIDListParamr      sX        	J 	J 	J	> 	> 	>	) 	) 	)	L 	L 	L 	L 	Lr   r   c                   &    e Zd Zd Zd Zd Zd ZdS )GptTmplInfParser.UnicodeParamc                     d S r   r   r   s     r   r   z#GptTmplInfParser.UnicodeParam.parse	  r   r   c                 0    |                     d           d S )Nz[Unicode]
Unicode=yes
r<   r   s      r   r   z+GptTmplInfParser.UnicodeParam.write_section  s    HH455555r   c                     d S r   r   r   s     r   r!   z'GptTmplInfParser.UnicodeParam.build_xml  r   r   c                     d S r   r   r#   s     r   r%   z&GptTmplInfParser.UnicodeParam.from_xml  r   r   NrP   r   r   r   UnicodeParamr     sP        	 	 		6 	6 	6	 	 		 	 	 	 	r   r   c                   &    e Zd Zd Zd Zd Zd ZdS )GptTmplInfParser.VersionParamc                     d S r   r   r   s     r   r   z#GptTmplInfParser.VersionParam.parse  r   r   c                 4    d}|                     |           d S )Nz.[Version]
signature="$CHICAGO$"
Revision=1
r   )r   r   r   outs       r   r   z+GptTmplInfParser.VersionParam.write_section  s    ICHHSMMMMMr   c                     d S r   r   r   s     r   r!   z'GptTmplInfParser.VersionParam.build_xml!  r   r   c                     d S r   r   r#   s     r   r%   z&GptTmplInfParser.VersionParam.from_xml%  r   r   NrP   r   r   r   VersionParamr     sP        	 	 		 	 		 	 		 	 	 	 	r   r   c                    |                     | j                  }t          j        d|                                 fd|                                 fd|                                 fd|                                 fd|                                 fd|                                 fd|                                 fd|                                 fd	|                                 fd
|                                 fd| 	                                fd| 	                                fd| 	                                fd| 
                                fg          | _        d }d }|                                D ]Z}t          j        d|          }|r,|                    d          }|| j        v r| j        |         }E|                    |           [d S )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\[(.*)\]rt   )decodeencodingcollectionsOrderedDictr   r   rQ   rY   rp   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)  s   ??4=11#/**,,-**,,-t}}/1DMMOO,dmmoo.1T]]__-1 $"7"7"9"9:')>)>)@)@At44667t44667 $"9"9";";<1
  $  $"'')) 
	- 
	-DH[$//E #kk!nn$-//+/=+E( !&&t,,,,
	- 
	-r   c                     t          j        |d| j                  5 }|                    d           | j        D ]#}| j        |                             ||           $	 d d d            d S # 1 swxY w Y   d S )Nzwb+u   ﻿)codecsopenoutput_encodingr<   r   r   )r   filenamefss       r   write_binaryzGptTmplInfParser.write_binaryN  s    [5-/ / 	523GGI] 5 5a ..q!44445	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5s   AA++A/2A/c                 *   t          |d          5 }t          d          }| j        D ]<}t          |d          }||j        d<   | j        |                             |           =|                     ||           d d d            d S # 1 swxY w Y   d S )NwbGptTmplInfFileSectionname)r   r   r   r   rl   r!   write_pretty_xml)r   r   r   rootsec_infr$   s         r   	write_xmlzGptTmplInfParser.write_xmlW  s    (D!! 		+Q+,,D= : :$T955)0v&g&009999!!$***		+ 		+ 		+ 		+ 		+ 		+ 		+ 		+ 		+ 		+ 		+ 		+ 		+ 		+ 		+ 		+ 		+ 		+s   A*BBBc                 
   t          j        d|                                 fd|                                 fd|                                 fd|                                 fd|                                 fd|                                 fd|                                 fd|                                 fd	|                                 fd
|                                 fd|                                 fd|                                 fd|                                 fd|                                 fg          | _	        |
                    d          D ]-}| j	        |j        d                                      |           .d S )Nr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   rQ   rY   rp   r   r   r   rM   rl   r%   )r   r   r   s      r   load_xmlzGptTmplInfParser.load_xmlf  sc   #/**,,-**,,-t}}/1DMMOO,dmmoo.1T]]__-1 $"7"7"9"9:')>)>)@)@At44667t44667 $"9"9";";<1
  $ i(( 	8 	8AM!(6*+44Q7777	8 	8r   )r&   r'   r(   r   r   r   r*   rQ   rY   rp   r   r   r   r   r   r   r   r   r   r   r   r	   r	      s       HH O       ,"5 "5 "5 "5 "5= "5 "5 "5H. . . . .= . . .8'8 '8 '8 '8 '8= '8 '8 '8R36 36 36 36 36= 36 36 36j/L /L /L /L /L] /L /L /Lb    }        }   ""- "- "-J5 5 5
+ 
+ 
+8 8 8 8 8r   r	   )r   r   r   abcr   r   xml.etree.ElementTreer   r   samba.gp_parser   r	   r   r   r   <module>r      s   (      				 ' ' ' ' ' ' ' ' 5 5 5 5 5 5 5 5 # # # # # #\8 \8 \8 \8 \8x \8 \8 \8 \8 \8r   