HEX
Server: LiteSpeed
System: Linux shams.tasjeel.ae 5.14.0-611.5.1.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Tue Nov 11 08:09:09 EST 2025 x86_64
User: infowars (1469)
PHP: 8.2.29
Disabled: NONE
Upload Files
File: //usr/lib/python3.9/site-packages/ipapython/__pycache__/ipachangeconf.cpython-39.pyc
a

}�fvN�@sVddlZddlZddlZddlZddlZejr2eZe�e	�Z
dd�ZGdd�d�ZdS)�NcCs�d}z(t�|tjtjB|�}t�|tj�Wn\ty�}zD|dkrfzt�|�WntydYn0t	|j
|j��WYd}~n
d}~00t�|d�S)N���zr+)
�os�open�O_RDWR�O_CREAT�fcntl�lockfZLOCK_EX�OSError�close�IOError�errno�strerror�fdopen)�filenameZperms�fd�e�r�;/usr/lib/python3.9/site-packages/ipapython/ipachangeconf.py�
openLocked"s$rc@seZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zd?d d!�Zd"d#�Zd@d%d&�ZdAd'd(�Zd)d*�Zd+d,�Zd-d.�Zd/d0�Zd1d2�ZdBd4d5�Zed6d7��Zed8d9��Zed:d;��Zed<d=��Z d>S)C�
IPAChangeConfcCsX||_d|_d|_|jd|_d|_|jd|_d|_|jd|_d|_d|_	d|_
dS)	N)�rr)z = �=r)�#)�
)�[�])�{�}T)�progname�indent�assign�dassign�comment�dcomment�eol�deol�
sectnamdel�
subsectdel�case_insensitive_sections��self�namerrr�__init__9szIPAChangeConf.__init__cCs
||_dS�N)rr)rrr�setProgNameFszIPAChangeConf.setProgNamecCs6t|�tur||_nt|�tur*|f|_ntd��dS)Nz Indent must be a list of strings)�type�tupler�str�
ValueError)r*rrrr�	setIndentIs

zIPAChangeConf.setIndentcCs,t|�tur||_n|f|_|jd|_dS�Nr)r/r0r r!)r*r rrr�setOptionAssignmentQsz!IPAChangeConf.setOptionAssignmentcCs,t|�tur||_n|f|_|jd|_dSr4)r/r0r"r#)r*r"rrr�setCommentPrefixXszIPAChangeConf.setCommentPrefixcCs,t|�tur||_n|f|_|jd|_dSr4)r/r0r$r%)r*r$rrr�
setEndLine_szIPAChangeConf.setEndLinecCs
||_dSr-)r&�r*Zdelimsrrr�setSectionNameDelimitersfsz&IPAChangeConf.setSectionNameDelimiterscCs
||_dSr-)r'r8rrr�setSubSectionDelimitersisz%IPAChangeConf.setSubSectionDelimiterscCs6|jD]*}|���|�r|��t|�d�SqdS)NF)r"�lstrip�
startswith�len)r*�line�vrrr�matchCommentls
zIPAChangeConf.matchCommentcCs|��dkrdSdS)NrTF)�strip�r*r>rrr�
matchEmptyrszIPAChangeConf.matchEmptycCs�d�|�����}|jr |��n|}t|j�dkr6dS|�|jd�sJdS|�|jd�s^dS|t|jd�t|jd��S)Nr�Fr�)	�joinrA�splitr(�lowerr=r&r<�endswith)r*r>Zclrrr�matchSectionwszIPAChangeConf.matchSectioncCsR|�|�rdS|�|jd�}t|�dkr,dS|d��|jdkrN|d��SdS)NFrErDr)r@rGr!r=rAr')r*r>�partsrrr�matchSubSection�s
zIPAChangeConf.matchSubSectioncCs(|�|�rdS|��|jdkr$dSdS)NFrET)r@rAr'rBrrr�matchSubSectionEnd�s

z IPAChangeConf.matchSubSectionEndcCs0t|j�dkr|S|�|jd||jd|j�S)NrDrrE)r=r&�
_dump_liner%)r*�sectionrrr�getSectionLine�s�zIPAChangeConf.getSectionLinecGsd�dd�|D��S)Nrcss|]}t|�VqdSr-)�unicode)�.0�xrrr�	<genexpr>��z+IPAChangeConf._dump_line.<locals>.<genexpr>)rF)r*�argsrrrrN�szIPAChangeConf._dump_linerc
Cs�g}|t|j�kr t|j�d}|D�]z}|ddkrv|�|�|jd|d|jd��|�|�|d|d��q$|ddkr�|�|�|j||d|j|jd��|�|�|d|d��|�|�|j||jd��q$|ddk�rN|�d	|j�}||j	v�r(t
d
|d�t|j	��f��|�|�|j||d||d��q$|ddk�rv|�|�|j
|d��q$|dd
k�r�|�d�q$td|d��q$|�d�|j�|�S)NrEr/rOrr+�value�
subsection�option�delimz&Unknown delim "%s" must be one of "%s"� r"�emptyr�Unknown type: [%s])r=r�appendrNr&�dumpr!r'�getr r2rF�listr#�SyntaxErrorr%)r*�options�level�output�orZrrrr_�sZ
������

zIPAChangeConf.dumpcCs�|�|�rddd�S|�|�}|r2dd|��d�St�}|�|jd�}t|�dkr�|jdd�D](}|�|d�}t|�dkr`||d<q�q`d|vr�td��|�	|d	�
�d
|d��d��|S)Nr\�r+r/r"�r+r/rWrErDrZz!Syntax Error: Unknown line formatrrY)rCr@�rstrip�dictrGr!r=r rb�updaterA)r*r>rWrfrK�drrr�	parseLine�s,


�
�zIPAChangeConf.parseLineFcCsjd}|D]X}|d|kr0|d|kr0||fS|rX|ddksL|ddkrX|dfS|d7}q|dfS)Nrr/r+rOrXrEr)r*�optsr/r+Zexclude_sections�numrfrrr�findOpts�s
�
zIPAChangeConf.findOptsc	Cs�g}|t|j�kr t|j�d}|D�]�}|ddkr�|�|d|d�}|�|j|jd|d|jd�}|�dd|d��|D]}|�|�q�q$|dd	k�r |�|d|d�}|�|j||d|j|jd�}|�dd|d��|�	|�|�|j||jd�}|�dd|d��q$|dd
k�rz|�
d|j�}||jv�rf|�|j||d||d�}|�dd|d��q$|ddk�r�|�|�q$|ddk�r�|�ddd
d��q$td|d��q$|S)NrEr/rOrWrr+r"rhrXrYrZr\rr])
r=r�commentOptsrNr#r&r^r!r'�extendr`r rb)	r*Zinoptsrdrnrf�no�val�nrZrrrrq�sv
����
���
�zIPAChangeConf.commentOptscCsZg}|D�]J}|ddks&|ddkr�|�||d|d�\}}|sP|�|�q|ddkr�|�|d|d�}|�|d|d|d��q|dd	kr�|�|d�}|D]}	|�|	�q�q|dd
kr�qtd|d��|dd	ks�|ddkr�|�|�q|dd
k�rD|�|d
|dd�\}}|�s6|�|�q|dd	k�sR|dd
k�r�|ddu�r~|d|du�r~|�|�q|dd	kr|�|j|d|j|d�}
|�d	d	|
d��q|ddk�r�|�|�q|ddk�r4|�d	d	|�d|dd�d��|�d	d	|�|d|j|d�d��|�|�qtd|d��td|d��q|S)Nr/rOrXr+�action�setrWrhr"�removezUnknown action: [%s]r\rYT�addifnotsetr[z modified by IPAr])rpr^�mergeOldrqrbrNr#r!)r*�oldopts�newoptsrnrfZ_numrs�mo�co�crWrrrrz3s�


�

�
��

��
��
zIPAChangeConf.mergeOldcCs(d}|D�]}|ddks&|ddkr�|�||d|d�\}}|s\|ddkr|�|�q|ddkr~|�|d|d�q|d	}q|dd
kr�|�||d|dd�\}}|s�|ddks�|ddkr|�|�q|d	}q|dd
ks�|ddk�r|�||�|d	7}qtd|d��qdS)Nrr/rOrXr+rvrwrWrErYTryr"r\r])rpr^�mergeNew�insertrb)r*rnr|Zclinersrorfrrrr�{s4


zIPAChangeConf.mergeNewcCs|�||�}|�||�|S)a�
        Uses a two pass strategy:
        First we create a new opts tree from oldopts removing/commenting
          the options as indicated by the contents of newopts
        Second we fill in the new opts tree with options as indicated
          in the newopts tree (this is becaus eentire (sub)sections may
          in the newopts tree (this is becaus entire (sub)sections may
          exist in the newopts that do not exist in oldopts)
        )rzr�)r*r{r|rnrrr�merge�s
zIPAChangeConf.mergecCs@g}g}d}g}d}|}|}|D]�}	|�|	�}
|
r^|durL|�|d|d��g}|}|}|
}q |�|	�}
|
r�|dur|td��g}|}|
}q |�|	�}
|
r�|dur�td��|�|d|d��d}|}q z|�|�|	��Wq t�y}z&tdj||j|	��d���WYd}~q d}~00q t	|�dk�r<|�|d|d��|S)	NrOrhz(nested subsections are not supported yetz)Unmatched end subsection terminator foundrXz!{error} in file {fname}: [{line}])�error�fnamer>r)
rJr^rLrbrMrm�formatr+rir=)r*�frnZsectoptsrOZsubsectoptsrXZcuroptsZ
fatheroptsr>rWrrrr�parse�sf
�

�� �zIPAChangeConf.parsecCs�d}d}z�t�||d�t|d�}|�|�}|�||�}|�|�}|�d�|�d�|�|�Wz|rr|�	�Wq�t
y�Yq�0n&z|r�|�	�Wnt
y�Yn00t�d|�t�|�dS)a
        Write settings to configuration file
        :param file: path to the file
        :param options: set of dictionaries in the form:
             {'name': 'foo', 'value': 'bar', 'action': 'set/comment'}
        :param section: section name like 'global'
        rN�.ipabkp�rzUpdating configuration file %sT)
�shutil�copy2rr�r�r_�seek�truncate�writer
r�logger�debug)r*�filer|rer�r{rcrrr�
changeConf�s0




�
zIPAChangeConf.changeConfr�cCs�d}d}z�zt�||d�Wn.tyL}z|jdkr8WYd}~n
d}~00t||�}|�d�|�d�|�|�}|�|�Wz|r�|�	�Wq�ty�Yq�0n&z|r�|�	�Wnty�Yn00t
�d|�t
�|�dS)a,"
        Write settings to a new file, backup the old
        :param file: path to the file
        :param options: a set of dictionaries in the form:
             {'name': 'foo', 'value': 'bar', 'action': 'set/comment'}
        :param file_perms: number defining the new file's permissions
        rNr�rDrzWriting configuration file %sT)r�r�rrrr�r�r_r�r
r�r�)r*r�rcZ
file_permsrer��errrrr�newConfs4




�
zIPAChangeConf.newConfcCs|dd|d�S)NrYrw�r+r/rvrWr)r+rWrrr�	setOption6s
�zIPAChangeConf.setOptioncCs|dddd�S)NrYrxr�r)r+rrr�rmOption=s
�zIPAChangeConf.rmOptioncCs|dd|d�S)NrOrwr�r)r+rcrrr�
setSectionDs
�zIPAChangeConf.setSectioncCs
ddd�S)Nr\rgrrrrr�	emptyLineKs�zIPAChangeConf.emptyLineN)r)F)r)r�)!�__name__�
__module__�__qualname__r,r.r3r5r6r7r9r:r@rCrJrLrMrPrNr_rmrprqrzr�r�r�r�r��staticmethodr�r�r�r�rrrrr8sB

	
.

9H"@%
%


r)
rZloggingrr�ZsixZPY3r1rQZ	getLoggerr�r�rrrrrr�<module>s