a
    ¡ÖaÀ  ã                   @   s²   d dl mZ d dlZdd„ Ze d¡Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
edkr®d dlZzejd ZW n4 ey    edejd   ejd e d¡ Y n0 ee
eƒƒ dS )é    )Úprint_functionNc                 C   sb   |}|   ¡ }|dd… dkr:|dkr,|dks0J ‚|| }q|dkrR|}|dkrXqZq|}qZq||fS )z+Read a line from an LDIF file, unfolding itNé   ú Ú Ú
)Úreadline)ÚfÚbufferÚlineÚl© r   ú=/usr/lib/python3/dist-packages/samba/ms_display_specifiers.pyÚ__read_folded_line   s    
r   z^([A-Za-z][A-Za-z0-9-]*):c                 c   s®   d}g }t | |ƒ\}}|dd… dkr(q|dks|dkr:qt |¡}|rp|dd… dkrd|dd… }| |¡ qtd| dtjd	 t d¡ qt|ƒrž|V  |dkrqªqdS )
z(Read an LDIF entry, only unfolding linesr   Nr   ú#r   éÿÿÿÿzInvalid line: %sr   )ÚendÚfile)	r   Úattr_type_reÚmatchÚappendÚprintÚsysÚstderrÚexitÚlen)r   r	   Úentryr   Úmr   r   r   Ú__read_raw_entries?   s$    
r   c                 C   s.   |   d¡dkr&|  dd¡} |  dd¡S | S dS )z"Fix a string DN to use ${CONFIGDN}z%<Configuration NC Distinguished Name>r   z
 r   z${CONFIGDN}N)ÚfindÚreplace)Zdnr   r   r   Úfix_dnb   s    r    c                 C   sZ   g }| D ]F}|d dkr4|  d|d |d f ¡ q|  d|d |d f ¡ qd |¡S )zWrite out entry as LDIFé   r   z%s: %sr   z%s:: %sr   )r   Újoin)r   Úoutr   r   r   r   Ú__write_ldif_onel   s    r$   c                 C   sÞ   g }| D ]Ì}g }|  d¡dkr6| dd¡}| d¡ n| dd¡}| d¡ |d  ¡ }|dkrbq|dkrlq|d	krvq|d
kr€q|dkrŠq|dkr”q|dkrº|d  ¡  ¡  ¡ }|dkrºqt|d ƒ|d< | |¡ q|} | S )z?Perform required transformations to the Microsoft-provided LDIFz::r   z:: r   z: r   Z
changetypeZdistinguishednameZinstancetypeÚnameZcnZobjectcategoryZshowinadvancedviewonlyZTRUE)r   Úsplitr   ÚlowerÚupperÚlstripÚrstripr    )r   Z
temp_entryr   ÚtÚkeyÚvaluer   r   r   Ú__transform_entryz   s:    
r.   c                 C   sL   g }ddl m} || ddd}t|ƒD ]}| tt|ƒƒ¡ q&d |¡d S )z0Read and transform Microsoft-provided LDIF file.r   )ÚopenÚrzlatin-1)Úencodingz

)Úior/   r   r   r$   r.   r"   )Úfilenamer#   r/   r   r   r   r   r   Úread_ms_ldif®   s    r4   Ú__main__r   z*Usage: %s display-specifiers-ldif-file.txt)r   )Z
__future__r   Úrer   Úcompiler   r   r    r$   r.   r4   Ú__name__r   ÚargvZdisplay_specifiers_fileÚ
IndexErrorr   r   r   r   r   r   r   Ú<module>   s    #
#
4