a
    œcl_‹2  ã                   @   sX   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„ de
ƒZdS )é    N)ÚABCMetaÚabstractmethod)ÚElementÚ
SubElement)ÚGPParserc                   @   s¶   e Zd ZdZdZdZG dd„ dƒZG dd„ deƒZG dd	„ d	eƒZG d
d„ deƒZ	G dd„ deƒZ
G dd„ deƒZG dd„ deƒZG dd„ deƒZdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚGptTmplInfParserNzutf-16zutf-16lec                   @   sH   e Zd ZeZdd„ Zedd„ ƒZedd„ ƒZedd„ ƒZ	ed	d
„ ƒZ
dS )zGptTmplInfParser.AbstractParamc                 C   s
   g | _ d S ©N)Ú
param_list)Úself© r   ú7/usr/lib/python3/dist-packages/samba/gp_parse/gp_inf.pyÚ__init__&   s    z'GptTmplInfParser.AbstractParam.__init__c                 C   s   d S r   r   ©r
   Úliner   r   r   Úparse)   s    z$GptTmplInfParser.AbstractParam.parsec                 C   s   d S r   r   ©r
   ÚheaderÚfpr   r   r   Úwrite_section-   s    z,GptTmplInfParser.AbstractParam.write_sectionc                 C   s   d S r   r   ©r
   Ú
xml_parentr   r   r   Ú	build_xml1   s    z(GptTmplInfParser.AbstractParam.build_xmlc                 C   s   d S r   r   ©r
   Úsectionr   r   r   Úfrom_xml5   s    z'GptTmplInfParser.AbstractParam.from_xmlN)Ú__name__Ú
__module__Ú__qualname__r   Z__metaclass__r   r   r   r   r   r   r   r   r   r   ÚAbstractParam#   s   


r   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
zGptTmplInfParser.IniParamc                 C   s*   |  d¡\}}| j | ¡ | ¡ f¡ d S )Nú=©Úsplitr	   ÚappendÚstrip©r
   r   ÚkeyÚvalr   r   r   r   <   s    ÿzGptTmplInfParser.IniParam.parsec                 C   sF   t | jƒdkrd S | d| ¡ | jD ]\}}| d||f ¡ q&d S )Nr   ú[%s]
ú	%s = %s
©Úlenr	   Úwrite)r
   r   r   Úkey_outÚval_outr   r   r   r   D   s    ÿz'GptTmplInfParser.IniParam.write_sectionc                 C   s>   | j D ]2\}}t|dƒ}t|dƒ}t|dƒ}||_||_qd S )NÚ	ParameterÚKeyÚValue©r	   r   Útext)r
   r   Úkey_iniÚval_iniÚchildr%   Úvaluer   r   r   r   L   s    


z#GptTmplInfParser.IniParam.build_xmlc                 C   sH   |  d¡D ]8}| d¡j}| d¡j}|d u r2d}| j ||f¡ q
d S ©Nr.   r/   r0   Ú ©ÚfindallÚfindr2   r	   r"   )r
   r   Úparamr%   r6   r   r   r   r   T   s    z"GptTmplInfParser.IniParam.from_xmlN©r   r   r   r   r   r   r   r   r   r   r   ÚIniParam9   s   r>   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
zGptTmplInfParser.RegParamc                 C   s   | j  |¡ d S r   )r	   r"   r   r   r   r   r   _   s    zGptTmplInfParser.RegParam.parsec                 C   s>   t | jƒdkrd S | d| ¡ | jD ]}| d| ¡ q&d S )Nr   r'   z%s
r)   ©r
   r   r   r<   r   r   r   r   d   s
    
z'GptTmplInfParser.RegParam.write_sectionc                 C   s*   | j D ]}t|dƒ}t|dƒ}||_qd S )Nr.   r0   r1   )r
   r   r4   r5   r6   r   r   r   r   k   s    


z#GptTmplInfParser.RegParam.build_xmlc                 C   s8   |  d¡D ](}| d¡j}|d u r&d}| j |¡ q
d S )Nr.   r0   r8   r9   )r
   r   r<   r6   r   r   r   r   q   s
    z"GptTmplInfParser.RegParam.from_xmlNr=   r   r   r   r   ÚRegParam]   s   r@   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
z!GptTmplInfParser.PrivSIDListParamc                 C   s6   |  d¡\}}| j | ¡ dd„ |  d¡D ƒf¡ d S )Nr   c                 S   s   g | ]}|  ¡ ‘qS r   ©r#   ©Ú.0Úxr   r   r   Ú
<listcomp>   ó    z;GptTmplInfParser.PrivSIDListParam.parse.<locals>.<listcomp>ú,r    r$   r   r   r   r   {   s    ÿz'GptTmplInfParser.PrivSIDListParam.parsec                 C   sP   t | jƒdkrd S | d| ¡ | jD ]$\}}d |¡}| d||f ¡ q&d S )Nr   r'   rG   r(   ©r*   r	   r+   Újoin)r
   r   r   r,   r&   r-   r   r   r   r   ‚   s    
z/GptTmplInfParser.PrivSIDListParam.write_sectionc                 C   sR   | j D ]F\}}t|dƒ}t|dƒ}||_|D ]}t|dƒ}d|jd< ||_q,qd S )Nr.   r/   r0   ÚTRUEÚuser_id©r	   r   r2   Úattrib©r
   r   r3   Úsid_listr5   r%   r4   r6   r   r   r   r   Š   s    



z+GptTmplInfParser.PrivSIDListParam.build_xmlc                 C   s`   |  d¡D ]P}| d¡j}g }|  d¡D ] }|j}|d u r>d}| |¡ q(| j ||f¡ q
d S r7   )r:   r;   r2   r"   r	   )r
   r   r<   r%   rO   r&   r6   r   r   r   r   ”   s    z*GptTmplInfParser.PrivSIDListParam.from_xmlNr=   r   r   r   r   ÚPrivSIDListParamy   s   
rP   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
z!GptTmplInfParser.NameModeACLParamc                 C   sº   g d¢}d}|dkrª|d d… dkr\|dd … }|  d¡}|d |… ||< ||d d … }q|d d… dkr‚|dd … }|d7 }q|  d¡}|d |… ||< ||d … }q| j |¡ d S )N)NNNr   r8   é   ú"rG   )r;   r	   r"   )r
   r   Ú
parametersZcurrent_argZfindexr   r   r   r   ¤   s    


z'GptTmplInfParser.NameModeACLParam.parsec                 C   sB   t | jƒdkrd S | d| ¡ | jD ]}| dt|ƒ ¡ q&d S )Nr   r'   z"%s",%s,"%s"
)r*   r	   r+   Útupler?   r   r   r   r   ½   s
    
z/GptTmplInfParser.NameModeACLParam.write_sectionc                 C   s`   | j D ]T}t|dƒ}t|dƒ}|d |_t|dƒ}|d |_t|dƒ}d|jd< |d |_qd S )Nr.   r0   r   rQ   rJ   Zaclé   rL   )r
   r   Úname_mode_aclr5   r6   r   r   r   r   Ä   s    







z+GptTmplInfParser.NameModeACLParam.build_xmlc                 C   s4   |  d¡D ]$}dd„ |  d¡D ƒ}| j |¡ q
d S )Nr.   c                 S   s   g | ]}|j r|j nd ‘qS )r8   )r2   rB   r   r   r   rE   Ô   rF   z>GptTmplInfParser.NameModeACLParam.from_xml.<locals>.<listcomp>r0   )r:   r	   r"   )r
   r   r<   rV   r   r   r   r   Ò   s    z*GptTmplInfParser.NameModeACLParam.from_xmlNr=   r   r   r   r   ÚNameModeACLParam¢   s   rW   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
z#GptTmplInfParser.MemberSIDListParamc                 C   s@   |  d¡\}}| ¡ }| j |  d¡dd„ |  d¡D ƒf¡ d S )Nr   Ú__c                 S   s   g | ]}|  ¡ ‘qS r   rA   rB   r   r   r   rE   ß   rF   z=GptTmplInfParser.MemberSIDListParam.parse.<locals>.<listcomp>rG   )r!   r#   r	   r"   r$   r   r   r   r   Ù   s
    ÿz)GptTmplInfParser.MemberSIDListParam.parsec                 C   sZ   t | jƒdkrd S | d| ¡ | jD ].\}}d |¡}d |¡}| d||f ¡ q&d S )Nr   r'   rX   rG   r(   rH   )r
   r   r   r%   r&   r,   r-   r   r   r   r   â   s    

z1GptTmplInfParser.MemberSIDListParam.write_sectionc                 C   sn   | j D ]b\}}t|dƒ}t|dƒ}|d |_|d |jd< d|jd< |D ]}t|dƒ}d|jd< ||_qHqd S )	Nr.   r/   r   rQ   Úmember_typerJ   rK   r0   rL   rN   r   r   r   r   ì   s    





z-GptTmplInfParser.MemberSIDListParam.build_xmlc                 C   sn   |  d¡D ]^}| d¡}|jd }g }|  d¡D ] }|j}|d u rFd}| |¡ q0| j |j|g|f¡ q
d S )Nr.   r/   rY   r0   r8   )r:   r;   rM   r2   r"   r	   )r
   r   r<   r%   rY   rO   r&   r6   r   r   r   r   ù   s    

z,GptTmplInfParser.MemberSIDListParam.from_xmlNr=   r   r   r   r   ÚMemberSIDListParam×   s   	
rZ   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
zGptTmplInfParser.UnicodeParamc                 C   s   d S r   r   r   r   r   r   r   	  s    z#GptTmplInfParser.UnicodeParam.parsec                 C   s   |  d¡ d S )Nz[Unicode]
Unicode=yes
©r+   r   r   r   r   r     s    z+GptTmplInfParser.UnicodeParam.write_sectionc                 C   s   d S r   r   r   r   r   r   r     s    z'GptTmplInfParser.UnicodeParam.build_xmlc                 C   s   d S r   r   r   r   r   r   r     s    z&GptTmplInfParser.UnicodeParam.from_xmlNr=   r   r   r   r   ÚUnicodeParam  s   r\   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
zGptTmplInfParser.VersionParamc                 C   s   d S r   r   r   r   r   r   r     s    z#GptTmplInfParser.VersionParam.parsec                 C   s   d}|  |¡ d S )Nz.[Version]
signature="$CHICAGO$"
Revision=1
r[   )r
   r   r   Úoutr   r   r   r     s    z+GptTmplInfParser.VersionParam.write_sectionc                 C   s   d S r   r   r   r   r   r   r   !  s    z'GptTmplInfParser.VersionParam.build_xmlc                 C   s   d S r   r   r   r   r   r   r   %  s    z&GptTmplInfParser.VersionParam.from_xmlNr=   r   r   r   r   ÚVersionParam  s   r^   c                 C   sø   |  | j¡}t 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 ]>}t d|¡}|rè| d¡}|| jv rè| j| }q´| |¡ q´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\[(.*)\]rQ   )ÚdecodeÚencodingÚcollectionsÚOrderedDictr\   r^   r>   r@   rP   rW   rZ   ÚsectionsÚ
splitlinesÚreÚmatchÚgroupr   )r
   ÚcontentsZinf_fileZcurrent_param_parserZcurrent_header_namer   rt   Zheader_namer   r   r   r   )  s6    













ñ


zGptTmplInfParser.parsec                 C   s\   t  |d| j¡8}| d¡ | jD ]}| j|  ||¡ q"W d   ƒ n1 sN0    Y  d S )Nzwb+u   ï»¿)ÚcodecsÚopenÚoutput_encodingr+   rq   r   )r
   ÚfilenameÚfÚsr   r   r   Úwrite_binaryN  s    ÿ

zGptTmplInfParser.write_binaryc                 C   sr   t |dƒT}tdƒ}| jD ](}t|dƒ}||jd< | j|  |¡ q|  ||¡ W d   ƒ n1 sd0    Y  d S )NÚwbZGptTmplInfFileÚSectionÚname)rx   r   rq   r   rM   r   Zwrite_pretty_xml)r
   rz   r{   ÚrootZsec_infr   r   r   r   Ú	write_xmlW  s    


zGptTmplInfParser.write_xmlc                 C   sÂ   t  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   |¡ q¢d S )Nr_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   r   r€   )ro   rp   r\   r^   r>   r@   rP   rW   rZ   rq   r:   rM   r   )r
   r   r|   r   r   r   Úload_xmlf  s$    













ñzGptTmplInfParser.load_xml)r   r   r   rq   rn   ry   r   r>   r@   rP   rW   rZ   r\   r^   r   r}   r‚   rƒ   r   r   r   r   r      s   $)51%	r   )rw   ro   rs   Úabcr   r   Zxml.etree.ElementTreer   r   Zsamba.gp_parser   r   r   r   r   r   Ú<module>   s   