%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /lib/python3.9/site-packages/cockpit/channels/__pycache__/
Upload File :
Create Path :
Current File : //lib/python3.9/site-packages/cockpit/channels/__pycache__/filesystem.cpython-39.pyc

a

��h�c�@s�ddlZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
mZddlmZmZmZddlmZmZddlmZddlmZddlmZmZmZm Z dd	l!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,e�-e.�Z/e�0�e1d
�dd��Z2ej3e4d
�dd�Z5ddd�dd�Z6e1dd�dd�Z7Gdd�de�Z8Gdd�de �Z9Gdd�d�Z:Gdd�de�Z;Gd d!�d!ee�Z<Gd"d#�d#ej=�Z>Gd$d%�d%ee�Z?dS)&�N)�Path)�Callable�	Generator�Iterable)�Handle�	PathWatch)�Event)�Listener�)�AsyncChannel�Channel�ChannelError�GeneratorChannel)�JsonDict�JsonDocument�	JsonError�
JsonObject�get_bool�get_int�
get_object�get_str�get_str_or_int�get_strv�json_merge_and_filter_patch��returncCs0t�dtd���tj�}|r,t|�d�d�p.dS)Nz^Umask:\s*0([0-7]*)$z/proc/self/status���?)�re�searchr�	read_text�M�int�group)�match�r&�?/usr/lib/python3.9/site-packages/cockpit/channels/filesystem.py�my_umask8sr()�bufrc
Cs.d|j�d|j�d|jd�d|j�d|j��
S)Nz1:�-�o)�st_ino�st_mtime�st_mode�st_uid�st_gid�r)r&r&r'�
tag_from_stat>sr2zint | str | Path�
str | None)�pathrcCs<ztt�|��WSty$YdSty6YdS0dS)Nr*)r2�os�stat�FileNotFoundError�OSError)r4r&r&r'�
tag_from_pathBsr9��fdrcCs*ztt�|��WSty$YdS0dS�N)r2r5�fstatr8)r;r&r&r'�tag_from_fdKsr>c@s2eZdZdZeddd�dd�Zddd�d	d
�ZdS)�
FsListChannelZfslist1zos.DirEntry[str]N)�event�entryrcCsD|��rd}n |��rd}n|��r*d}nd}|j||j|d�dS)N�link�file�	directoryZspecial)r@r4�type)�
is_symlink�is_file�is_dir�	send_json�name)�selfr@rA�moder&r&r'�
send_entryWszFsListChannel.send_entryr��optionsrc
Cst|d�}|�dd�}|r&tddd��zt�|�}Wn�tyj}ztdt|�d�|�WYd}~nrd}~0ty�}ztdt|�d�|�WYd}~n>d}~0ty�}ztd	t|�d�|�WYd}~n
d}~00|�	�|D]}|�
d
|�q�|�s|��|��dS)Nr4�watchTz
not-supportedz)watching is not implemented, use fswatch1��message�	not-found�
access-denied�internal-errorZpresent)
r�getr
r5�scandirr7�str�PermissionErrorr8�readyrM�done�close)rKrOr4rPZscan_dir�errorrAr&r&r'�do_opencs$
&&(zFsListChannel.do_open)�__name__�
__module__�__qualname__�payloadrXrMr^r&r&r&r'r?Tsr?c@s*eZdZdZeeedefd�dd�ZdS)�
FsReadChannelZfsread1NrNc
cs~t|d�}t|dd�}t�d|�z�t|d���}t�|���}|dkrX|j|krXt	d��|j
rzt�|j�rz|j
|jd�n|�
�|�tj�}|d	kr�q�t�d
t|��|j
s�|�dd	�jdd
���}|Vq�Wd�n1s�0Ydt|�iWSt�yddiYSt�yB}zt	d�|�WYd}~n@d}~0t�yx}zt	dt|�d�|�WYd}~n
d}~00dS)Nr4�
max_read_sizeizOpening file "%s" for reading�rb���z	too-large)Z	size_hint�z  ...sending %d bytes��ignore��errors�tagr*rTrUrQ)rr�logger�debug�openr5r6�fileno�st_sizer
Z	is_binary�S_ISREGr.rZ�read1rZ
BLOCK_SIZE�len�replace�decode�encoder2r7rYr8rX)rKrOr4rdZfilepr)�data�excr&r&r'�
do_yield_datas2
&zFsReadChannel.do_yield_data)r_r`rarbrr�bytesrzr&r&r&r'rc|srcc@sJeZdZUdZded<dZded<hd�ZdZded<edd�dd	�Z	dS)
�FSReplaceAttrsN�
int | None�uid�gid>rL�userr$rL)�valuercCs0|��|j}|r2tddd�|���t|�d�d�t|dd�|_t|dd�}t|dd�}|durt|durttddd	��|dur�|dur�tdd
d	��t|t	�r�zt
�|�j|_
Wq�ty�tdd|��d	�d�Yq�0n||_
t|t	��r&zt�|�j|_Wn(t�y"tdd
|��d	�d�Yn0n||_dS)Nzprotocol-errorz%"attrs" contains unsupported key(s): �,)rR�unsupported_attrsrLr�r$z3"group" attribute is empty while "user" is providedrQz3"user" attribute is empty while "group" is providedrSzuid not found for zgid not found for )�keys�supported_attrsr
�join�listrrLr�
isinstancerX�pwd�getpwnam�pw_uidr~�KeyError�grp�getgrnam�gr_gidr)rKr�r�r�r$r&r&r'�__init__�s6��
zFSReplaceAttrs.__init__)
r_r`rar~�__annotations__rr�rLrr�r&r&r&r'r|�s

r|c@sNeZdZdZdZeded�dd�Zedddd	dd
�dd�Zeed
�dd�Z	dS)�FsReplaceChannelZ
fsreplace1��attrsr3)r4rlrcCsT|dur|t|�krtd��t�t��t�|�Wd�n1sF0YdS)N�change-conflictr*)r9r
�
contextlib�suppressr7r5�unlink)rKr4rlr&r&r'�delete�s
(zFsReplaceChannel.delete�bytes | Noner}zFSReplaceAttrs | None)r4rlrx�sizer�rc
�s�tj�|�\}}tj|d|�d�d�\}}	ddddd��fdd�
}
ddd	dd
��fdd�
}�z|dur�t�d
||�|r�|�tj|d|�IdH|�	�d}|dur�|�tj
||�IdH|t|�7}|��IdH}q�|du�r||k�rt�d||�|�tj
||�IdH|�tj|�IdH|du�rN||�|
|�t�|	|�d}	n�|dk�rv||�|
|�t�|	|�n�t�|tj�}
z�t�|
�}|t|�k�r�td��||t�|j��|
||�z,t�|
d�}t�|d|�t�d||�Wn2t�y }zt�d|�WYd}~n
d}~00Wt�|
�nt�|
�0t�|	|�d}	Wt�|�|	du�r�t�|	�n t�|�|	du�r�t�|	�0t|�S)N�.r*)�dir�prefixr#zos.stat_result | None)r;r)rcsN�dur0�jdur0�jdur0t�|�j�j�n|durJt�||j|j�dSr<)r~rr5�fchownr/r0)r;r)r�r&r'�chown_if_required�sz8FsReplaceChannel.set_contents.<locals>.chown_if_requiredr})r;rLrcs>�dur�jdur�j}n|dur.dt�@}t�||�dS)Ni�)rLr(r5�fchmod)r;rLr�r&r'�apply_file_mode�s
z6FsReplaceChannel.set_contents.<locals>.apply_file_modezfallocate(%s.tmp, %d)rzftruncate(%s.tmp, %d)r�zsecurity.selinuxz SELinux context '%s' set on '%s'zAError getting or setting SELinux context from original file: '%s')N)N)r5r4�split�tempfileZmkstemprmrnZ	in_thread�posix_fallocaterZ�writert�read�	ftruncate�	fdatasync�renamerBro�O_RDONLYr6r2r
�S_IMODEr.�getxattr�setxattrr8�	exceptionr\r�r9)rKr4rlrxr�r��dirname�basenamer;Ztmpnamer�r�ZwrittenZpath_fdr)Zselinux_contextryr&r�r'�set_contents�sf



$

�

zFsReplaceChannel.set_contentsrNc
�s�t|dtd�}t|d�}t|dd�}t|dd�}zx|durT|�||d||�IdH}nD|��|��IdH}|dur�|�||�}n|�|||d|�IdH}|��d|iWSt	y�}zt
d�|�WYd}~n�d}~0t�y}zt
d�|�WYd}~n�d}~0t�y2}zt
d�|�WYd}~nvd}~0t
�yh}zt
dt|�d	�|�WYd}~n@d}~0t�y�}zt
d
t|�d	�|�WYd}~n
d}~00dS)Nr�r4r�rlrgrSr�rTrQrU)rr|rrr�rZr�r�r[r7r
�FileExistsErrorrY�IsADirectoryErrorrXr8)rKrOr�r4r�rlrxryr&r&r'�run,s0

&zFsReplaceChannel.runN)
r_r`rarbZcapabilitiesrXr�r�rr�r&r&r&r'r��s�Ur�c@s~eZdZUdZdZded<dZdZee	dd�dd	��Z
e	ed
dd�dd
�Zdddd�dd�Z
edd�dd�Zdd�dd�ZdS)�FsWatchChannelZfswatch1Nr3�_tagFztuple[str, str | None])�maskrcCsltjp
tj|vr&dtj|vr dndfStj|vsDtj|vsDtj|vrHdStj|vrVdStj|vrddSdSdS)N�createdrDrC)�deletedN)zattribute-changedN)z	done-hintN)ZchangedN)	�InotifyEvent�CREATE�MOVED_TOZISDIR�
MOVED_FROM�DELETEZDELETE_SELFZATTRIBZCLOSE_WRITE)r�r&r&r'�mask_to_event_and_type^s

z%FsWatchChannel.mask_to_event_and_typer�)r��_cookierJrcCs�t�d|j||�|�|�\}}|rTtj�|j|���}t|�}|j	||||d�n4t|j�}||j
krldS||_
|j	||j|j
|d�dS)Nz%do_inotify_event(%s): mask %X name %s)r@r4rlrE)rmrn�_pathr�r5r4r�rvr9rIr�)rKr�r�rJr@�type_r4rlr&r&r'�do_inotify_eventks

zFsWatchChannel.do_inotify_eventr}�r;�errrcCsNt�d|jt|�|�|r"t|�nd|_|jrJ|j|r:dnd|j|jd�dS)Nz&do_identity_changed(%s): fd %s, err %sr*r�r�)r@r4rl)rmrnr�rXr>r��_activerI�rKr;r�r&r&r'�do_identity_changed{sz"FsWatchChannel.do_identity_changedrNcCs8t|d�|_d|_d|_t|j|�|_d|_|��dS)Nr4FT)rr�r�r�r�_watchrZ)rKrOr&r&r'r^�szFsWatchChannel.do_openrcCs&|jdur|j��d|_|��dSr<)r�r\�rKr&r&r'�do_close�s

zFsWatchChannel.do_close)r_r`rarbr�r�r�r��staticmethodr�r�r#r�r�rr^r�r&r&r&r'r�Ss

r�c@seZdZdZdZdS)�FollowFTN)r_r`ra�NO�YESr&r&r&r'r��sr�c@sleZdZUdZeed<ded<eed<eed<eed<eed<eed	<d
Zeed<dZ	d
ed<dZ
ded<dZded<ded<ee
edd�dd��Zdd�eedd�dd�Zdd�dedd�dd�Zdd �d!d"�Zeed#�d$d%�Zedd#�d&d'�Zedd(�d)d*�Zeed+�d,d-�Zedd+�d.d/�Zeed0dd1�d2d3�Zd
d4dd5�d6d7�Zdd �d8d9�Zedd:�d;d<�ZdS)=�
FsInfoChannelZfsinfor4zset[str]r��fnmatch�targets�followrP�
current_value��effective_fnmatchNz
Handle | Noner;zset[str] | None�pendingzPathWatch | None�
path_watchz*Callable[[int, str, Follow], JsonDocument]�getattrsz1Callable[[int, str, Follow], JsonDocument | None])r�rcs�t��tdd�dd���t��tdd�dd���dd	�ttttd
d�dd
��tjdtjdtjdtj	dtj
dtjdtjdi��fdd�t
dd�dd�dd�dd�dd��fdd��fdd�d�	�t�fdd �|D���tttd!d"���fd#d$�}|S)%Nz	str | int)r~rcSs*zt�|�jWSty$|YS0dSr<)r��getpwuid�pw_namer�)r~r&r&r'�get_user�sz-FsInfoChannel.make_getattrs.<locals>.get_user)rrcSs*zt�|�jWSty$|YS0dSr<)r��getgrgid�gr_namer�)rr&r&r'�	get_group�sz.FsInfoChannel.make_getattrs.<locals>.get_groupF��follow_symlinkszbool | None)�dir_fdrJrLr�rcSsNz4|rtj||||d�WStjd|��|dd�WSWntyHYdS0dS)N)r�r��/proc/self/fd/Tr�)r5�accessr8)r�rJrLr�r&r&r'�
get_access�sz/FsInfoChannel.make_getattrs.<locals>.get_accessZregr�Zlnk�chrZblkZfifoZsockcs��t�|j��Sr<)rVr6�S_IFMTr.r1)�
stat_typesr&r'�<lambda>�rgz-FsInfoChannel.make_getattrs.<locals>.<lambda>cSst�|j�Sr<)r6r�r.r1r&r&r'r��rgcSs|jSr<)rqr1r&r&r'r��rgcSs|jSr<�r/r1r&r&r'r��rgcSs|jSr<�r0r1r&r&r'r��rgcSs|jSr<)r-r1r&r&r'r��rgcs
�|j�Sr<r�r1)r�r&r'r��rgcs
�|j�Sr<r�r1)r�r&r'r��rg)	rErlrLr�r~r�mtimer�r$c3s"|]}|��|dd��fVqdS)cSsdSr<r&)�_r&r&r'r��rgz7FsInfoChannel.make_getattrs.<locals>.<genexpr>.<lambda>N)rV)�.0�key)�available_stat_gettersr&r'�	<genexpr>�rgz.FsInfoChannel.make_getattrs.<locals>.<genexpr>zJsonDict | None)r;rJr�rcsz$|rtj||j|d�nt�|��Wn2ty8YdStyVdd��D�YS0�fdd��D�}d|vr�t��j�tjkr�t	�
t��"tj||d�|d<Wd�n1s�0Ydtjfdtj
fd	tjffD]&\}}||vr܈||||jd
�||<q�|S)N)r�r�cSsi|]\}}|d�qSr<r&)r�rJ�funcr&r&r'�
<dictcomp>�rgzBFsInfoChannel.make_getattrs.<locals>.get_attrs.<locals>.<dictcomp>csi|]\}}||���qSr&r&)r�r�r�r1r&r'r��rg�target)r�zr-okzw-okzx-okr�)r5r6r�r=r7r8r�r.�S_IFLNKr�r��readlink�R_OK�W_OK�X_OK)r;rJr��result�attrr�)r��stat_gettersr1r'�	get_attrs�s$0$z.FsInfoChannel.make_getattrs.<locals>.get_attrs)�	functools�	lru_cacher#rX�boolr6�S_IFREG�S_IFDIRr��S_IFCHR�S_IFBLK�S_IFIFO�S_IFSOCKr2�tupler�)r�r�r&)r�r�r�r�r�r�r'�
make_getattrs�s*
�


�zFsInfoChannel.make_getattrsF��reset)�updatesrrcCst|rVt|j�t|�@rD|jt�|j�dd�ddi|_|jdd�n|�t�|j��t|j|�|rp|�|�dS)NT)�partialr
)�setr�rI�dict�fromkeys�updater)rKrrr&r&r'�send_update�s
zFsInfoChannel.send_updatecs��jdusJ��fdd�|D�}|�di�}t|t�s:J��jrH||d<�jr�i|d<}dd�|��D�D]F}t|t�rl|dkrl|d	ks�d
|vs���|�sl��	�j|t
j�||<ql�jd|i|d�dS)
Ncs i|]}|���j|tj��qSr&)r�r;r�r�)r�rJr�r&r'r��rgz0FsInfoChannel.process_update.<locals>.<dictcomp>r��entriesr�cSs h|]}t|t�r|�d��qS)r�)r�rrV�r��er&r&r'�	<setcomp>rgz/FsInfoChannel.process_update.<locals>.<setcomp>r�z..�/�infor
)
r;�popr�rr�r��valuesrX�interestingr�r�r�r)rKrrrrr�rJr&r�r'�process_update�szFsInfoChannel.process_updatercCs*|jdusJ�|jr |�|j�d|_dSr<)r�rr�r&r&r'�process_pending_updatessz%FsInfoChannel.process_pending_updates)rJrcCs|dkrdSt�||j�SdS)Nr�T)r�r��rKrJr&r&r'rszFsInfoChannel.interestingcCsB|�|�sdS|jdur2t���d|j�t�|_|j�|�dS)Ng�������?)rr��asyncioZget_running_loopZ
call_laterrr�addrr&r&r'�schedule_update!s

zFsInfoChannel.schedule_update)r�rcCsd|tjkrd}n*|tjtjfvr&d}n|tjkr6d}nd}|jd|t�|�tj|d�idd�dS)	NrSrTz
not-directoryrUr])�problemrR�errnoTr
)	r#�ENOENT�EPERMZEACCES�ENOTDIRrr5�strerror�	errorcode)rKr�r"r&r&r'�report_error+s

��zFsInfoChannel.report_errorr:cCsF|jr|j�d�sdSt�|�}t�|j�tjkrB|�	t
j�dSdS)NrFT)rPr4�endswithr5r=r6r�r.rr)r#r&)rKr;r)r&r&r'�flag_onlydir_error9s
z FsInfoChannel.flag_onlydir_errorcs~��|�rdS|�_dh}�jr^z$|�t�d�j�����j�_Wnty\d�_Yn0�j�fdd�|D�dd�dS)Nr�r�csh|]}��|�r|�qSr&)rrr�r&r'rVrgz5FsInfoChannel.report_initial_state.<locals>.<setcomp>Tr
)	r+r;r�rr5�listdirr�r8r)rKr;rr&r�r'�report_initial_stateGs
z"FsInfoChannel.report_initial_stater�)r��cookie�rawnamercCsXt�d|||�|pdjdd�}|�|�|rT|tjtjBtjBtjBBrT|�d�dS)Nzdo_inotify_event(%r, %r, %r)rg�surrogateescaperjr�)	rmrnrvr!r�r�r�r�r�)rKr�r.r/rJr&r&r'r�Xs
��zFsInfoChannel.do_inotify_eventr}r�cCsPt�d||�|jdur"|j��|durB|dus6J�|�|�n
|�|�dS)Nzdo_identity_changed(%r, %r))rmrnr��clearr-r)r�r&r&r'r�cs

z!FsInfoChannel.do_identity_changedcCs$|jdusJ�|j��|��dSr<)r�r\r�r&r&r'r�ps
zFsInfoChannel.do_closerNc
Csht|d�|_tj�|j�s$t|d��tt|d��}|�|ddh�|_t|dd|vrXdnd�|_	d|v|_
t|d	d
d�|_t|dd
d�|_
|j
r�|js�t|d��|j
r�|js�t|d��i|_|��|j
�sVz&t�|j|jr�tjn
tjtjB�}Wn>t�y0}z$|j�sJ�|�|j�WYd}~nd}~00|�|�|��|��|��nt|j|�|_dS)Nr4z"path" must be an absolute pathr�r�rr��*r�r�T)�defaultrPFz>"watch: true" and "follow: false" are (currently) incompatiblezB`targets: "stat"` and `follow: false` are (currently) incompatible)rr4r5�isabsrrrr	r�r�r�rr�rPr�rZrro�O_PATH�
O_NOFOLLOWr8r#r)r-r\r[rr�)rKrOr�r;ryr&r&r'r^vs4



&"

zFsInfoChannel.do_open)r_r`rarbrXr�rrr�r;r�r�r�rr	rrrrr!r#r)rr+r-r�r�r�r�rr^r&r&r&r'r��s6
?

r�)@rr��enumr#r�r�r�Zloggingr5r�rr6r��pathlibr�typingrrrZcockpit._vendor.systemd_ctypesrrZ&cockpit._vendor.systemd_ctypes.inotifyrr�Z(cockpit._vendor.systemd_ctypes.pathwatchr	ZPathWatchListenerZchannelrrr
rZjsonutilrrrrrrrrrrrZ	getLoggerr_rmrr#r(�stat_resultrXr2r9r>r?rcr|r�r��Enumr�r�r&r&r&r'�<module>sB4
		(((?

Zerion Mini Shell 1.0