
    i                         d dl mZmZ d dlZd dlZd dlZd dlZd dlZddlm	Z	m
Z
 ddlmZmZmZ ddlmZ ddlmZmZmZmZ  G d d	e      Zda ed
      Zd Zy)    )print_functionunicode_literalsN   )ANYWINMACOS)AXSVFSAuthSrv)bos)chkcmd	json_hescmin_exundotc                   P    e Zd Zd ZddZd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zy)Fstabc                     || _         || _        d| _        d| _        d | _        d | _        d| _        i | _        d| _        |j                  | _
        y )NFag        )log_funcverbosewarnedtrustedtaboldtabsrctabcacheagemtab_agemaxage)selflogargsr   s       C/home/ubuntu/myenv/lib/python3.12/site-packages/copyparty/fsutil.py__init__zFstab.__init__   sL    
mm    c                 H    |r| j                   ry | j                  d||       y )Nfstab)r   r   )r   msgcs      r"   r    z	Fstab.log   s    DLLgsA&r$   c                    t        j                          }|| j                  z
  | j                  kD  st        | j                        dkD  r4|| _        | j
                  xs | j                  | _        d | _        i | _        d}d}d}t        rd}	 | j                  |      }t        |      }	 | j                  |   S #  | j                  |||t               fz  d       |dfcY S xY w#  Y nxY w	 t        r| j                  |      n| j                  |      \  }}n'#  | j                  |||t               fz  d       Y nxY w|j                         }||f| j                  |<   | j                  d|d|d	|       ||fS )
Ni(#   ext4z4failed to determine filesystem at %r; assuming %s
%svfat   zfound z at z, )timer   r   lenr   r   r   r   _winpathr    r   r   get_w32get_unixlower)r   pathnowmpfsr'   s         r"   getz	Fstab.get"   sW   iik>DKK'3tzz?T+ADH((1dkkDKDHDJEB}}T*
 T{	::d##b&(33Q72v
		4+1T\\$'t}}T7JFB	4HHSD"fh//3XXZ8

4R672vs$   B8 )C# 8&C #C'++D "D;c                    |j                  dd      }|j                  dd      d   j                  d      j                  dd      d   }	 dj                  |t	        j
                  |      j                        S #  |cY S xY w)N/\:r   r   z{}*{})replacesplitstripformatr   statst_dev)r   r4   vids      r"   r0   zFstab._winpathF   st    ||C&jja #))$/55dA>qA	>>#sxx~'<'<==	Js   .A: :B c                 `    t        | j                  dddt               i       | _        d| _        y )Nidkr:   F)r	   r   r   r   r   )r   s    r"   build_fallbackzFstab.build_fallbackO   s%    t}}eS#subAr$   c                    d}t         rd}t        j                  |      }t        dg      \  }}i }|j	                  d      D ]@  }|j                  |      }|s|j                         \  }}	t        |	      |t        |      <   B |S )Nz^.*? on (.*) type ([^ ]+) \(.*z^.*? on (.*) \(([^ ]+), .*mount
)r   recompiler   r>   matchgroupsstr)
r   sptnptnso_dtablnmzs1zs2s
             r"   _from_sp_mountzFstab._from_sp_mountS   s    00Djjy!A((4. 	&B		"AxxzHC XDSN	& r$   c                    i }t        ddd      5 }|j                  d      j                  dd      j                  d      }d d d        D cg c]  }|j                  d       c}D ]P  }t	        |      dk  r|d	   }|j                  d
d      j                  dd      j                  dd      }|d   ||<   R |S # 1 sw Y   }xY wc c}w )Nz/proc/self/mountsrbi   zutf-8r=   rI    r-   r   z\011	z\040z\134r;      )openreaddecoder>   r/   r=   )r   retfsrcxzslzss          r"   
_from_proczFstab._from_proce   s    %tV4 	H&&.'';AA$GC	H*-.QAGGCL. 	C3x!|QBGT*227C@HHRVWB!fCG	 
	H 	H.s   1B=C	=Cc                    | j                  d       t        r| j                         n| j                         }t	        t        |j                                     }|| j                  k(  r| j                  | _	        y | j                  d       	 |j                         D cg c]  \  }}|dk(  s| }}}|rt        r
t               	 t        g d      \  }}|j                  d      D ]2  }|j                  dd      }	t        |	      d	k7  r$|	\  }}||v s.|||<   4 	 t        |j                               }
|
j                  d
        |
d   \  }}t!        | j"                  |||t%               i       }|
dd  D ])  \  }}|j'                  d      }|j)                  |||       + || _	        || _        y c c}}w #  t        g d      \  }}Y xY w#  Y xY w)Nzinspecting mtab for changesz7mtab has changed; reevaluating support for sparse filesfuseblk)lsblk-nrfozFSTYPE,MOUNTPOINT)rj   rk   zFSTYPE,MOUNTPOINTSrI   r[   r   r]   c                 (    t        | d         | d   fS )Nr   )r/   )rd   s    r"   <lambda>z!Fstab.build_tab.<locals>.<lambda>   s    QqTAaD 1 r$   )keyr   r:   )r    r   rX   rg   rN   sorteditemsr   r   r   	Exceptionr   r>   r/   listsortr	   r   r   lstripadd)r   rS   r   r6   r7   fusesrQ   rR   rT   re   tab1path1fs1r   r4   rf   s                   r"   	build_tabzFstab.build_tabq   s   ./(-t""$4??3D VDJJL)*T[[ {{DHJK	&*jjlFFBbIoRFEFEk!IFGA hhtn "hhsA&s8q=B;!DH" DJJL!		1	2!W
s$--eUCE2>QR 	 HD"S!BGGBB	  5 G
IGHA	sB   G  F5.F52G F; >G G 5G ;GG Gc                    i | _         t        r| j                  |      }t        |      }t	        j
                  d      }| j                  j                  |      \  }}| j                  sd|v rYt        j                  j                  |j                  |j                  d      d         }| j                  j                  d||       |r| j                  j                  |||       y ||_        y |g}|rg|j!                         }|j#                  ||j                        |_        |j%                  t'        |j(                  j+                                      |rfy y )Nz^[^\\/]*r:   r   rE   )r   r   r0   r   rJ   rK   r   _findr   osr4   joinvpathr>   ru   realpathpopsubextendrr   nodesvalues)r   r4   nvalrP   vnremrf   visits           r"   relabelzFstab.relabel   s   
==&DT{jj%((..&C||czWW\\"((CIIcN1,=>UB+T4.  #B''$4BKLLbhhoo/01 r$   c                    | j                   s	 | j                          d| _        | j                   j                  |      d   }| j                  s||j                  k(  r*|j                  j                  d      d   |j                  fS y#  | j                  s'd| _        d}| j	                  |t               fz  d       | j                          Y xY w)NTz=failed to associate fs-mounts with the VFS (this is fine):
%s   r   r:   )rE   r*   )r   rz   r   r   r    r   rF   r|   r   r   r>   )r   r4   tra   s       r"   r2   zFstab.get_unix   s    xx	& # hhnnT"1%<<4399,<<%%c*1-syy88&{{"&DKXAHHQ&(_a0##%s   B	 	ACc                     | j                   s| j                          | j                   j                  |      d   }|j                  dfS )Nr   r*   )r   rF   r|   r   )r   r4   ra   s      r"   r1   zFstab.get_w32   s;    xx!hhnnT"1%||Rr$   N)r   )__name__
__module____qualname__r#   r    r8   r0   rF   rX   rg   rz   r   r2   r1    r$   r"   r   r      s;    $'
"H$
'R24& r$   r   )msdosr,   ntfsexfatc                 L   g }d}| j                   xs t        }t        st        || j                  d      a| j
                  j                  j                         D ]Q  }|j                  j                  rd|j                  v r)|j                  }|rt        j                  j                  |      rWt        j                  |      \  }}d|j!                  d      z   }|dk(  s|dk(  s||v s|j#                  |j$                  |||f       |j                  j                  j'                          |j                  j(                  j'                          t+        |j,                  j/                               D ]2  \  }}	t+        |	      }
d|
d<   d|
d<   t1        |
      |j,                  |<   4 T |r3d}|D cg c]  }d	|z  	 }} |d
|dj3                  |      z   dz   d       t4        rdnd}| j
                  j                  j                         D ]
  }|j                  r|j                  j                  d      r,|j                  d   j!                         d d j7                         }t8        r|sd}|dv r||j                  d<   xt        j                  |j                        d   }|t:        v rdn|}t=        j>                  |j@                        }|x|j                  d<   x|jB                  d<   |d<   tE        t=        jF                  |            |_          y c c}w )N)tmpfsoverlayFwramr:   r   r   r]   aE  WARNING: write-access was removed from the following volumes because they are not mapped to an actual HDD for storage! All uploaded data would live in RAM only, and all uploaded files would be LOST on next reboot. To allow uploading and ignore this hazard, enable the 'wram' option (global/volflag). List of affected volumes:z-
  volume=[/%s], abspath=%r, type=%s, root=%rvfsr*   rI   maclinis_filefsntr-   win)r   r   r   r   )$r   print_fstabr   r!   r   	all_nodesr   axsuwriteflagsr   r}   r4   isfiler8   r?   appendr   clearumoverr   uaxsrp   tupler~   r   r3   r   winfsjsonloadsjs_htmjs_lsr   dumps)asrvmodsramfsr    r   apr7   r6   unztspre   r   rd   t2assumevolrf   htms                     r"   ramdisk_chkr      s    D E
--
 5CsDIIu-hh  '') )vv}}"(( 2[[RWW^^B'BB288C= =R3Y2;KK2r2./FFMM!FFLL  1 )D4jAA#Cj	))"  TLPQq>BQQE1rwwr{?T)1-UFxx!!((* 0||syy}}Y7YYv$$&r*002"B&& "CIIfZZ%a(EkUvjj$>@@		&@CIIf-Ftzz#/
0	 Rs   7L!)
__future__r   r   argparser   r}   rJ   r.   r#   r   r   authsrvr   r	   r
   r   utilr   r   r   r   objectr   r   setr   r   r   r$   r"   <module>r      sO    7   	 	  # & &  2 2} F } @ ./,0r$   