HEX
Server: LiteSpeed
System: Linux s1049.use1.mysecurecloudhost.com 4.18.0-477.27.2.lve.el8.x86_64 #1 SMP Wed Oct 11 12:32:56 UTC 2023 x86_64
User: xedaptot (3356)
PHP: 8.3.31
Disabled: NONE
Upload Files
File: //lib/python3.6/site-packages/ipapython/__pycache__/ipachangeconf.cpython-36.opt-1.pyc
3

�d[evN�@sVddlZddlZddlZddlZddlZejr2eZeje	�Z
dd�ZGdd�d�ZdS)�NcCs�d}y(tj|tjtjB|�}tj|tj�Wn\tk
r�}z@|dkrjytj|�Wntk
rhYnXt	|j
|j��WYdd}~XnXtj|d�S)N�zr+���r)
�os�open�O_RDWR�O_CREAT�fcntl�lockfZLOCK_EX�OSError�close�IOError�errno�strerror�fdopen)�filenameZperms�fd�e�r�#/usr/lib/python3.6/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�� = �=r�#�
�[�]�{�}T)rrr)rr)r)r)rr)rr)�progname�indent�assign�dassign�comment�dcomment�eol�deol�
sectnamdel�
subsectdel�case_insensitive_sections)�self�namerrr�__init__9szIPAChangeConf.__init__cCs
||_dS)N)r )r+r,rrr�setProgNameFszIPAChangeConf.setProgNamecCs6t|�tkr||_nt|�tkr*|f|_ntd��dS)Nz Indent must be a list of strings)�type�tupler!�str�
ValueError)r+r!rrr�	setIndentIs

zIPAChangeConf.setIndentcCs,t|�tkr||_n|f|_|jd|_dS)Nr)r/r0r"r#)r+r"rrr�setOptionAssignmentQsz!IPAChangeConf.setOptionAssignmentcCs,t|�tkr||_n|f|_|jd|_dS)Nr)r/r0r$r%)r+r$rrr�setCommentPrefixXszIPAChangeConf.setCommentPrefixcCs,t|�tkr||_n|f|_|jd|_dS)Nr)r/r0r&r')r+r&rrr�
setEndLine_szIPAChangeConf.setEndLinecCs
||_dS)N)r()r+�delimsrrr�setSectionNameDelimitersfsz&IPAChangeConf.setSectionNameDelimiterscCs
||_dS)N)r))r+r7rrr�setSubSectionDelimitersisz%IPAChangeConf.setSubSectionDelimiterscCs6x0|jD]&}|j�j|�r|j�t|�d�SqWdS)NF)r$�lstrip�
startswith�len)r+�line�vrrr�matchCommentlszIPAChangeConf.matchCommentcCs|j�dkrdSdS)NrTF)�strip)r+r=rrr�
matchEmptyrszIPAChangeConf.matchEmptycCs�dj|j�j��}|jr |j�n|}t|j�dkr6dS|j|jd�sJdS|j|jd�s^dS|t|jd�t|jd��S)Nr�Frr)	�joinr@�splitr*�lowerr<r(r;�endswith)r+r=Zclrrr�matchSectionwszIPAChangeConf.matchSectioncCsR|j|�rdS|j|jd�}t|�dkr,dS|dj�|jdkrN|dj�SdS)NFrrBr)r?rDr#r<r@r))r+r=�partsrrr�matchSubSection�s
zIPAChangeConf.matchSubSectioncCs(|j|�rdS|j�|jdkr$dSdS)NFrT)r?r@r))r+r=rrr�matchSubSectionEnd�s

z IPAChangeConf.matchSubSectionEndcCs0t|j�dkr|S|j|jd||jd|j�S)NrBrr)r<r(�
_dump_liner')r+�sectionrrr�getSectionLine�szIPAChangeConf.getSectionLinecGsdjdd�|D��S)Nrcss|]}t|�VqdS)N)�unicode)�.0�xrrr�	<genexpr>�sz+IPAChangeConf._dump_line.<locals>.<genexpr>)rC)r+�argsrrrrK�szIPAChangeConf._dump_linercCs�g}|t|j�kr t|j�d}�x�|D�]z}|ddkrz|j|j|jd|d|jd��|j|j|d|d��q(|ddkr�|j|j|j||d|j|jd��|j|j|d|d��|j|j|j||jd��q(|ddk�rR|jd	|j�}||j	k�r,t
d
|djt|j	��f��|j|j|j||d||d��q(|ddk�rz|j|j|j
|d��q(|dd
k�r�|jd�q(td|d��q(W|jd�|jj|�S)Nrr/rLrr,�value�
subsection�option�delimz&Unknown delim "%s" must be one of "%s"� r$�emptyrzUnknown type: [%s])r<r!�appendrKr(�dumpr#r)�getr"r2rC�listr%�SyntaxErrorr')r+�options�level�output�orVrrrrZ�sN

zIPAChangeConf.dumpcCs�|j|�rddd�S|j|�}|r2dd|j�d�St�}|j|jd�}t|�dkr�x8|jdd�D]&}|j|d�}t|�dkrb||d<PqbWd|kr�td��|j	|d	j
�d
|dj�d��|S)NrX)r,r/r$)r,r/rSrrBrVz!Syntax Error: Unknown line formatrrU)rAr?�rstrip�dictrDr#r<r"r]�updater@)r+r=rSrarH�drrr�	parseLine�s(


zIPAChangeConf.parseLineFcCsfd}xX|D]P}|d|kr.|d|kr.||fS|rR|ddksJ|ddkrR|dfS|d7}q
W|dfS)Nrr/r,rLrTrr)r+�optsr/r,Zexclude_sections�numrarrr�findOpts�s
zIPAChangeConf.findOptsc	Cs�g}|t|j�kr t|j�d}�x�|D�]�}|ddkr�|j|d|d�}|j|j|jd|d|jd�}|jdd|d��x|D]}|j|�q�Wq(|dd	k�r(|j|d|d�}|j|j||d|j|jd�}|jdd|d��|j	|�|j|j||jd�}|jdd|d��q(|dd
k�r�|j
d|j�}||jk�rn|j|j||d||d�}|jdd|d��q(|ddk�r�|j|�q(|ddk�r�|jddd
d��q(td|d��q(W|S)Nrr/rLrSrr,r$)r,r/rSrTrUrVrXrzUnknown type: [%s])
r<r!�commentOptsrKr%r(rYr#r)�extendr[r"r])	r+Zinoptsr_rgra�no�val�nrVrrrrj�sf








zIPAChangeConf.commentOptsc	Csfg}�xZ|D�]P}|ddks*|ddkr�|j||d|d�\}}|sT|j|�q|ddkr�|j|d|d�}|j|d|d|d��q|dd	kr�|j|d�}x|D]}	|j|	�q�Wq|dd
kr�qtd|d��|dd	ks�|ddk�r|j|�q|dd
k�rN|j|d
|dd�\}}|�s@|j|�q|dd	k�s\|dd
k�r�|ddk	�r�|d|dk	�r�|j|�q|dd	kr|j|j|d|j|d�}
|jd	d	|
d��q|ddk�r�|j|�q|ddk�r>|jd	d	|jd|dd�d��|jd	d	|j|d|j|d�d��|j|�qtd|d��td|d��qW|S)Nr/rLrTr,�action�setrS)r,r/rSr$�removezUnknown action: [%s]rXrUT�addifnotsetrWz modified by IPAzUnknown type: [%s])rirY�mergeOldrjr]rKr%r#)r+�oldopts�newoptsrgraZ_numrl�mo�co�crSrrrrs3sz











zIPAChangeConf.mergeOldcCs0d}�x$|D�]}|ddks*|ddkr�|j||d|d�\}}|s`|ddkr|j|�q|ddkr�|j|d|d�q|d	}q|dd
kr�|j||d|dd�\}}|s�|ddks�|ddkr|j|�q|d	}q|dd
k�s|ddk�r|j||�|d	7}qtd|d��qWdS)Nrr/rLrTr,rorprSrrUTrrr$rXzUnknown type: [%s])rirY�mergeNew�insertr])r+rgruZclinerlrhrarrrry{s4

zIPAChangeConf.mergeNewcCs|j||�}|j||�|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)
        )rsry)r+rtrurgrrr�merge�s
zIPAChangeConf.mergecCsDg}g}d}g}d}|}|}�x|D]�}	|j|	�}
|
rb|dk	rP|j|d|d��g}|}|}|
}q$|j|	�}
|
r�|dk	r�td��g}|}|
}q$|j|	�}
|
r�|dkr�td��|j|d|d��d}|}q$y|j|j|	��Wq$tk
�r}z tdj||j|	j�d���WYdd}~Xq$Xq$Wt	|�dk�r@|j|d|d��|S)	NrL)r,r/rSz(nested subsections are not supported yetz)Unmatched end subsection terminator foundrTz!{error} in file {fname}: [{line}])�errorZfnamer=r)
rGrYrIr]rJrf�formatr,rbr<)r+�frgZsectoptsrLZsubsectoptsrTZcuroptsZ
fatheroptsr=rSrrrr�parse�s^




*
zIPAChangeConf.parsecCs�d}d}z\tj||d�t|d�}|j|�}|j||�}|j|�}|jd�|jd�|j|�Wdy|rt|j	�Wnt
k
r�YnXXtjd|�tj|�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'
        rNz.ipabkpi�rzUpdating configuration file %sT)
�shutil�copy2rrr{rZ�seek�truncate�writerr�logger�debug)r+�filerur`r~rtr^rrr�
changeConf�s&





zIPAChangeConf.changeConf�c Cs�d}d}zxytj||d�Wn,tk
rJ}z|jdkr:WYdd}~XnXt||�}|jd�|jd�|j|�}|j|�Wdy|r�|j	�Wntk
r�YnXXt
jd|�t
j|�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
        rNz.ipabkprBrzWriting configuration file %sT)r�r�rr
rr�r�rZr�rr�r�)r+r�r^Z
file_permsr`r~�errrrr�newConfs*





zIPAChangeConf.newConfcCs|dd|d�S)NrUrp)r,r/rorSr)r,rSrrr�	setOption6szIPAChangeConf.setOptioncCs|dddd�S)NrUrq)r,r/rorSr)r,rrr�rmOption=szIPAChangeConf.rmOptioncCs|dd|d�S)NrLrp)r,r/rorSr)r,r^rrr�
setSectionDszIPAChangeConf.setSectioncCs
ddd�S)NrX)r,r/rrrrr�	emptyLineKszIPAChangeConf.emptyLineN)r)F)r)r�)!�__name__�
__module__�__qualname__r-r.r3r4r5r6r8r9r?rArGrIrJrMrKrZrfrirjrsryr{rr�r��staticmethodr�r�r�r�rrrrr8s:

	
.

9H"@%
%r)
rZloggingrr�ZsixZPY3r1rNZ	getLoggerr�r�rrrrrr�<module>s