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: //lib64/python3.9/site-packages/borg/__pycache__/fuse.cpython-39.opt-1.pyc
a

HZ�h_��@s�ddlZddlZddlZddlZddlZddlZddlZddlZddlZddl	m
Z
ddlmZddl
mZmZer�ddlZdd�ZndZdd�Zdd	lmZe�Zdd
lmZddlmZddlmZmZdd
lmZddlmZmZm Z m!Z!m"Z"m#Z#ddlm$Z$ddl%m&Z&ddl'm(Z(ddl)m*Z*m+Z+ddl,m-Z-ddl.m/Z/dd�Z0dZ1Gdd�d�Z2Gdd�d�Z3Gdd�dej4e3�Z5dS)�N)�defaultdict)�SIGINT�)�llfuse�has_pyfuse3cst����fdd��}|S)Nc�s�|i|��S�N�)�args�kwargs��fnr�//usr/lib64/python3.9/site-packages/borg/fuse.py�wrapperszasync_wrapper.<locals>.wrapper)�	functools�wraps)rrrrr
�
async_wrappersrcCs|Srrrrrr
rs)�
create_logger)�blake2b_128)�Archiver)�Archive�get_item_uid_gid)�FuseVersionsIndex)�	daemonize�daemonizing�hardlinkable�signal_handler�format_file_size�Error)�msgpack)�Item)�LRUCache)�uid2user�	gid2group)�	is_darwin)�RemoteRepositorycCs:tr*zt�tj�WnYdS0dSntjdd�SdS)Nr)�workers)r�trio�runr�mainrrrr
�	fuse_main/sr)�c@s8eZdZdZdZe�d�Zdd�Zdd�Z	dd
d�Z
dS)
�	ItemCachez�
    This is the "meat" of the file system's metadata storage.

    This class generates inode numbers that efficiently index items in archives,
    and retrieves items from these inode numbers.
    i z=cIIcCsJ||_t�|_d|_d|_tjdd�|_tddd�d�|_	d|_
d|_dS)	Nri@Bzborg-tmp)�prefix�
cSsdSrr��_rrr
�<lambda>s�z$ItemCache.__init__.<locals>.<lambda>�ZcapacityZdispose)�decrypted_repository�	bytearray�meta�write_offset�offset�tempfileZ
TemporaryFile�fdr �chunks�indirect_items�direct_items)�selfr3rrr
�__init__UszItemCache.__init__c
Cs(||j}|dkrtd��|j|td�kr�|j�|j|�\}}}||}t|j||d��}|j�|�}|s�t	|j
�|g��\}	}||j|<t|�|d�}
t
��}|�|
�tt	|�d�S|j|td�k�rt�|j|d|d�d	�}|j�|tj�tt	t
j|jd
d��d�Std��dS)
Nrz3ItemCache.get() called with an invalid inode number�I� �Z
internal_dict�Sr�	�littlei)Z	read_sizezInvalid entry type in self.meta)r7�
ValueErrorr5�ord�indirect_entry_struct�unpack_from�bytesr:�get�nextr3�get_many�
memoryviewr�Unpacker�feedr�int�
from_bytesr9�seek�io�SEEK_SET)
r=�inoder7r/Zchunk_id_relative_offset�chunk_offsetZchunk_id_offset�chunk_id�chunk�csize�data�unpackerZ	fd_offsetrrr
rJ{s(


z
ItemCache.getNFc	cs0t��}d}d}d}d}|j}	|j}
|jj}t||j�|��D�]�\}\}
}|	dt	|
�krp|
t
|j�|_}
||
|	|	d�<|	}|	d7}	||7}t	|�}|�|�z|�
�}d}Wntjy�d}Yn0||}|r�t	|�|n
|��|}|||||�7}||7}|�rq>t|d�}|�r2||��rB|�sHd|v�rHd}q�|}t	|�}|||k}d}|	dt	|
�k�r�|
t
|j�|_}
|�r�|j�dtj�}|j�|�d	|�d
d�|
|	|	d�<|jd7_n.|||}||
|	d
|	||�|jd7_|	|j}|	d7}	||fVq�q>|	|_dS)Nrr1r@FTrA�partrCrB�rDrr?)rrNr6r5rG�	pack_into�zipr3rL�lenrI�GROW_META_BYrO�unpackZ	OutOfData�tellrr9rRrS�SEEK_END�write�to_bytesr<r;r7)r=Zarchive_item_ids�filter�consider_part_filesr[Z
stream_offsetZchunk_beginZlast_chunk_lengthZmsgpacked_bytesr6r5Zpack_indirect_into�keyrYrZZcurrent_id_offset�itemZneed_more_data�start�lengthZcurrent_itemZcurrent_item_lengthZcurrent_spans_chunks�posZitem_offsetrUrrr
�iter_archive_items�sd 


 
zItemCache.iter_archive_items)NF)�__name__�
__module__�__qualname__�__doc__ra�struct�StructrGr>rJrnrrrr
r+Bs

&r+c@sjeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
d�Z	gfdd�Z
gfdd�Zdd�Zdd�Z
dS)�FuseBackendzJVirtual filesystem based on archive(s) to provide information to fuse
    cCs�||_||_|j|_||_||_i|_ttdd�d�|_d|_	i|_
tt�|_
t��|_t��|_d|_i|_t|�|_d|_d|_d|_d|_d|_dS)NcSsdSrrr.rrr
r0�r1z&FuseBackend.__init__.<locals>.<lambda>r2rF)�repository_uncached�_args�numeric_ids�	_manifestri�_itemsr �FILES�_inode_cache�inode_count�parentr�dict�contents�os�getuid�default_uid�getgid�default_gid�default_dir�pending_archivesr+�cache�allow_damaged_files�versions�
uid_forced�
gid_forced�umask)r=ri�manifest�
repositoryr	r3rrr
r>�s(



zFuseBackend.__init__cCs�|jdd�|jjjr6|jr$td��|�|jjj�npt�|_|j	j
�|j�D]V}|jrf|�|j�qN|jdt
|j��d�d�}||jdt�|j�<|j|j|<qNdS)Nr)r~z_for versions view, do not specify a single archive, but always give the repository as location.�e��A)r~�mtime)�_create_dirrw�location�archiver�r�_process_archiver�versions_indexryZarchivesZlist_considering�namerP�tsZ	timestampr�r��fsencoder�)r=r�Z
archive_inoderrr
�_create_filesystems
zFuseBackend._create_filesystemcCsV|j�|�}|dur|Sz|j|WStyP|j�|�}||j|<|YS0dSr)r|rJrz�KeyErrorr�)r=rUrjrrr
�get_item$s
zFuseBackend.get_itemcCs.|j�|d�}|dur*|�|t�|�g�dSr)r��popr�r�r�)r=rU�archive_namerrr
�check_pending_archive1sz!FuseBackend.check_pending_archivecCs|jd7_|jS)Nr)r}�r=rrr
�_allocate_inode7szFuseBackend._allocate_inodeNcCsN|��}|dur4t|j��d�|j|<||j|_n|j|j|<||j|<|S)zCreate directory
        NrA)r�rr�Zas_dictrzr�r~)r=r~r��inorrr
r�;s
zFuseBackend._create_dircCs.||�d�}d}|D]}|j||}q|S)N�/r)�splitr�)r=�pathr,�segmentsrU�segmentrrr
�
find_inodeGs
zFuseBackend.find_inodecs�i|_t��}t|j|j|j||jjd�}|jj	}t
�|jj|jj
�}|��pR|��r\ind���fdd�}t
�|||�}|jj|jj||jjd�D]�\}	}
|r�tj�|
j�tj�|d��|
_t�|
j�}t�|
j�}|�rz|�||�}
Wnt�yYn0|
|j|
<q�||�d�}d}|dd�D]}|� ||�}�q0|�!|d|
||||	�|�q�t��|}t"�#d	||j$�dS)
z9Build FUSE inode hierarchy from archive metadata
        )rhNcsB�r>|s>t|j�r>|�dd�r>d|vr>|�d�df�|�d�<dS)NZhardlink_masterT�sourcer:r�)r�moderJ)rjZmatched��hardlink_mastersZpartial_extractrr
�peek_and_store_hardlink_mastersZs
��zEFuseBackend._process_archive.<locals>.peek_and_store_hardlink_masters)rgrhr�r���z9fuse: _process_archive completed in %.1f s for archive %s)%�
file_versions�time�perf_counterrrvriryrwrh�strip_componentsrZ
build_matcher�patterns�paths�emptyZbuild_filterr�rn�metadata�itemsr��sep�joinr�r�r��stat�S_ISDIRr�r�r�rz�_process_inner�
_process_leaf�logger�debugr�)r=r�r,Zt0r�r�Zmatcherr�rg�
item_inoderjr��is_dirrUr�r~r�Zdurationrr�r
r�NsD�� 
�zFuseBackend._process_archivec	s�|j}	|`|pi}�fdd�}
ddd�}d|v�r0t|j��r0tj�|j�tj�|d��}|�|jd|f�\}
}|�r�t�	|�}�j
r��j|}|||dd�}z��||�}Wn"t
y�t�d	|	|�YdS0��|�}|�d
d�d|_|�j|<n2|
du�r4|
|_|}|�j|<|�r4d|	f||j<n|}�j
�r�|�s���||�}t�	|	�}|
||�}|du�r�|||�}|�j|<|�j|<|�r�|�j||<dS)
Ncsbd|vr^t|�}�j�|d�\}}td�dd�|jD���}||krZ|d7}||f�j|<|SdS)Nr:)rNr1css|]\}}}|VqdSrr)�.0rWr/rrr
�	<genexpr>�r1zBFuseBackend._process_leaf.<locals>.file_version.<locals>.<genexpr>r)rr�rJr�r:)rjr�Zfile_idZcurrent_versionZprevious_idZcontents_idr�rr
�file_versionsz/FuseBackend._process_leaf.<locals>.file_versionFcSsJ|r |�dd�}|d|d7}tj�|�\}}t�d|�}|||S)Nr�rr�z.%05d)�rsplitr�r��splitextr�)r��version�add_dirZ
path_fname�extZversion_encrrr
�make_versioned_name�sz6FuseBackend._process_leaf.<locals>.make_versioned_namer�T)r�z#Skipping broken hard link: %s -> %s�nlinkr)F)r�rr�r�r�r�r�r�rJr�r�r�r�r�r��warningr�r�rzr:r�r~r�)r=r�rjr~r,r�r�r�Zstripped_componentsr�r�r�r�r:Zlink_targetr�rUZenc_pathrr�r
r�zsL












zFuseBackend._process_leafcCs6|j|}||vr||}n|�|�}|r2|||<|Sr)r�r�)r=r��parent_inode�dirrUrrr
r��s


zFuseBackend._process_inner)N)rorprqrrr>r�r�r�r�r�r�r�r�r�rrrr
ru�s

,Fruc@s�eZdZdZdd�Zdd�Zd!dd�Zed"d
d��Zd#dd
�Z	ed$dd��Z
ed%dd��Zed&dd��Zed'dd��Z
ed(dd��Zed)dd��Zedd��Zer�dd�Zndd�Zed*dd ��Zd	S)+�FuseOperationsz(Export archive as a FUSE filesystem
    cCsttj�|�t�||||||�||_ttj�dt�	�p:d��}t
�d|�t|dd�d�|_
ttdd�d�|_dS)NZBORG_MOUNT_DATA_CACHE_ENTRIESrz$mount data cache capacity: %d chunkscSsdSrrr.rrr
r0�r1z)FuseOperations.__init__.<locals>.<lambda>r2cSsdSrrr.rrr
r0�r1)r�
Operationsr>rur3rPr��environrJ�	cpu_countr�r�r �
data_cacher{�	_last_pos)r=rir�r�r	r3Zdata_cache_capacityrrr
r>�szFuseOperations.__init__cCs�t�d|jt|j�tt�|j�t|j�t�|j���t�dt|j��t�d|j	j
|j	j|j	j
|j	jtt�|j	j��tt
�|j	j���j��t�dt|j���|jjttdd�|j��D����|j��dS)Nz$fuse: %d synth inodes, %d edges (%s)zfuse: %d pending archivesz]fuse: ItemCache %d entries (%d direct, %d indirect), meta-array size %s, direct items size %sz#fuse: data cache: %d/%d entries, %scss|]\}}t|�VqdSr)r`)r�rirXrrr
r��r1z2FuseOperations.sig_info_handler.<locals>.<genexpr>)r�r�r}r`r~r�sys�	getsizeofr�r�r<r;r5r�r�r9�fileno�st_sizer�r�Z	_capacity�sumr3Zlog_instrumentation)r=Zsig_no�stackrrr
�sig_info_handler�s$���zFuseOperations.sig_info_handlerFc	Csbddd�}gd�}|r&|�|�d��tr`||dddt�}|pNtj�|��d�}|�d	|���||d
ddt�}|r�||d
ddt�||dddt�|_	||dddt�|_
||dddt�|_||dddt�|_
||dddtdd�|_|jdur�|jn|j}|j
du�r
|j
n|j}	t|�}
t|	�}d|j@}t|tt��d�|
|||	d�|_|��t�|||�|�s�t|jt��r�t�nDt��,\}
}t�d�|j� |
|�Wd�n1�s�0Yd}z�t!d|j"��Dt!d|j"��t#�}Wd�n1�s0YWd�n1�s"0Y|du�pB|t$k�oB|}Wt�%|�nt�%|�0dS)z6Mount filesystem on *mountpoint* with *mount_options*.rc
	Ss�t|�D]�\}}||kr*|�|�|S|�|d�r|�|�|�dd�d}|tur�|��}	|	dvrpdS|	dvr~dStd|��|tur�zt||d�WSty�td|�d�Yn0z||�WSty�td|�d�Yq0q|S)	N�=r)�yZyes�true�1T)�n�noZfalse�0Fzunsupported value in option: %s)�base)�	enumerater��
startswithr��bool�lowerrErP)
�optionsriZpresentZnot_presentZwanted_type�int_base�idx�option�value�vrrr
�
pop_option�s0

z(FuseOperations.mount.<locals>.pop_option)z
fsname=borgfs�ro�default_permissions�,�volname�z	 (borgfs)zvolname=�ignore_permissionsTFr�r�r��uidN�gidr�r])r�i�Ar�)r�r��user�groupr�r�z<fuse: mount local repo, going to background: migrating lock.�SIGUSR1ZSIGINFO)r)&�extendr�r#�strr�r��basename�appendr�r�r�rPr�r�r�r�r�r!r"rr�r�r�r�init�
isinstancervr$rrr�r�Zmigrate_lockrr�r)r�close)r=Z
mountpointZ
mount_optionsZ
foregroundr�r�r�r�Zdir_uidZdir_gidZdir_userZ	dir_groupZdir_modeZold_idZnew_idZumount�signalrrr
�mount�sP
!�
.
�FzFuseOperations.mountNcCsBt��}d|_d|_d|_d|_d|_d|_d|_d|_	d|_
|S)N�r�)rZStatvfsData�f_bsize�f_frsize�f_blocks�f_bfree�f_bavail�f_files�f_ffree�f_favail�	f_namemax)r=�ctxZstat_rrr
�statfsCszFuseOperations.statfscCs�|�|�}t��}||_d|_d|_d|_|j|j@|_	|�
dd�|_t||j
|j|j|j|jd�\|_|_|�
dd�|_|��|_d|_|j|jd|j|_|j|_}|�
d|�|_|�
d	|�|_|�
d
|�|_|S)Nri,r�r)ZnumericZuid_defaultZgid_defaultr�r�ZrdevrZatime�ctimeZ	birthtime)r�rZEntryAttributes�st_inoZ
generationZ
entry_timeoutZattr_timeoutr�r��st_moderJ�st_nlinkrrxr�r�r�r��st_uid�st_gid�st_rdevZget_sizer��
st_blksize�	st_blocksr��st_mtime_ns�st_atime_ns�st_ctime_nsZst_birthtime_ns)r=rUrrj�entryZmtime_nsrrr
�_getattrQs*
�
zFuseOperations._getattrcCs|j||d�S)N)r)r�r=rUrrrr
�getattrhszFuseOperations.getattrcCs|�|�}|�di���S)N�xattrs)r�rJ�keys�r=rUrrjrrr
�	listxattrls
zFuseOperations.listxattrcCsF|�|�}z|�di�|pdWSty@t�tj�d�Yn0dS)Nr r1)r�rJr�r�	FUSEErrorZENOATTR)r=rUr�rrjrrr
�getxattrqs

zFuseOperations.getxattrcCsV|�|�|dkr|}n4|dkr,|j|}n |j|�|�}|sLt�tj��|�|�S)N�.�..)	r�r~r�rJrr$�errno�ENOENTr)r=r�r�rrUrrr
�lookupys
zFuseOperations.lookupcCsB|js.|�|�}d|vr.t�d�t�tj��tr>tj	|d�S|S)NZchunks_healthyzzFile has damaged (all-zero) chunks. Try running borg check --repair. Mount with allow_damaged_files to read damaged files.)�fh)
r�r�r�r�rr$r(ZEIOrZFileInfo)r=rU�flagsrrjrrr
�open�s

zFuseOperations.opencCs|�|�|Sr)r�rrrr
�opendir�s
zFuseOperations.opendircCsRg}|�|�}|j�|d�\}}||kr0d\}}||8}|j}t|t|��D]�}	||	\}
}}||kr�||8}||7}|d7}qLt|||�}
|
|jvr�|j|
}||
t|�kr�|j|
=n0|j�	|
|j
�|
��}||
t|�kr�||j|
<|�||||
��d}||
8}|sL||jv�r2|j�|||f�n||f|j|<�qHqLd�
|�S)N)rrrrr1)r�r�rJr:�ranger`�minr�riZdecryptrvr�Zupdr�)r=r+r7�size�partsrjZchunk_norVr:r��id�srYr�rZrrr
�read�s>




zFuseOperations.readc	�spd|fd|j|fg}|�|j|���t||d�|�D].\}\}}|�|�}t�||||d�s<qlq<dS�Nr&r'r)r~r�r�r�r�rrZ
readdir_reply)	r=r+�off�token�entries�ir�rU�attrsrrr
�readdir�s
zFuseOperations.readdirccshd|fd|j|fg}|�|j|���t||d�|�D]&\}\}}|�|�}|||dfVq<dSr6)r~r�r�r�r�r)r=r+r7r9r:r�rUr;rrr
r<�s

cCs|�|�}t�|j�Sr)r�r�r�r�r"rrr
�readlink�s
zFuseOperations.readlink)F)N)N)N)N)N)N)N)N)N)rorprqrrr>r�rrrrrr#r%r*r-r.r5rr<r=rrrr
r��s4	
\

,
	r�)6r(rrSr�r�rsr�r8r��collectionsrrrZ	fuse_implrrr&rr�rZcrypto.low_levelrZarchiverrr�rrZ	hashindexrZhelpersrrrrrrrrjrZlrucacher �platformr!r"Z
platformflagsr#Zremoter$r)r{r+rur�r�rrrr
�<module>sH
 -^