Ë
    8ûÝj]  ã                  óè  — d Z ddl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Zddl	m
Z
 ddlmZ ej                  Zej                  j!                  ej                  j#                  ej                  j%                  e«      «      d«      Zej                  j!                  ed«      Zej                  j!                  ed«      Zd	Zdd
„Zdd„Zdd„Zdd„Zddddœdd„Zddddœ	 	 	 dd„Zdddddœ	 	 	 dd„Zy)z‰Gemeinsame Hilfen fuer die Isolationstests. Startet iso_exec.py als Subprozess mit
python3 / /bin/true INNERHALB des Kaefigs - NIE codex.é    )ÚannotationsN)ÚISO_EXEC_PATH)Údefault_bus_envÚfixtureszcage_probe.pyzfake_codex_cage.pyz
/home/ariac                 ó8   — t        j                  dt        ¬«      S )a.  Wegwerf-Verzeichnis direkt unter dem echten Home (NICHT in einem Worktree). Wird VOR dem
    Profilbau angelegt, damit es als bestehender Teilbaum eine Regel bekommt (seit E44 Option 2 nur
    noch LESEN; schreibbar nur, wenn es ein Allowlist-Ordner ist). Der Aufrufer loescht es mit
    shutil.rmtree.z.aria-v3-probe-©ÚprefixÚdir©ÚtempfileÚmkdtempÚ	REAL_HOME© ó    ú2/home/aria/aria-v3-dev/python/tests/iso_helpers.pyÚhome_probe_dirr      s   € ô
 ×ÑÐ#4¼)ÔDÐDr   c                 ó8   — t        j                  dt        ¬«      S )zûWie home_probe_dir, aber NICHT versteckt: ein Allowlist-Eintrag (codex.tools_write_allowlist)
    darf keine Komponente mit fuehrendem '.' haben. Name ohne 'aria-v3-'-Stamm (sonst Geschwister-
    Sperre 1g). Der Aufrufer loescht es mit shutil.rmtree.zaria-e44-probe-r   r   r   r   r   Úhome_project_probe_dirr       s   € ô ×ÑÐ#4¼)ÔDÐDr   c            
     ó  — t        j                  d d¬«      } t         j                  | j                  _        t        | j                  t        j                  d«      d t        j                  d«      t        j                  d«      «      «      S )NT)Ú	use_errnoi¼  r   é   )ÚctypesÚCDLLÚc_longÚsyscallÚrestypeÚint)Úlibcs    r   Úlandlock_abir   '   sX   € Ü�;‰;�t tÔ,€DÜ!Ÿ=™=€D‡L�LÔÜˆt�|‰|œFŸM™M¨#Ó.°´f·m±mÀAÓ6FÌÏÉÐVWÓHXÓYÓZÐZr   c                 óÌ   — t        «       } 	 t        j                  g d¢| ddd¬«      }|j
                  dk(  xr d|j                  v S # t        t        j                  f$ r Y yw xY w)N)z/usr/bin/systemctlz--userÚshowz-pÚVersionTé   F)ÚenvÚcapture_outputÚtimeoutÚcheckr   s   Version=)r   Ú
subprocessÚrunÚOSErrorÚTimeoutExpiredÚ
returncodeÚstdout)r$   Úps     r   Úuser_bus_reachabler/   -   sh   € Ü
Ó
€CðÜ�N‰NÒTØ"°4ÀÈ%ôQˆð �<‰<˜1ÑÒ8 °·±Ð!8Ð8øô ”Z×.Ñ.Ð/ò Ùðús   ŒA ÁA#Á"A#r   é   r   )Ústdinr&   Úpass_fdsc          
     ó‚  — t        j                  dd¬«      \  }}t        j                  |dd¬«      5 }t	        j
                  | |«       ddd«       	 t        j                  t        dt        |d	g|¢|d
|dt        |«      ¬«      t        j                  |«       S # 1 sw Y   ŒRxY w# t        j                  |«       w xY w)zVFuehrt `python3 -I iso_exec.py <cfg> -- argv...` aus und liefert die CompletedProcess.z.jsonzisocfg-)Úsuffixr	   Úwzutf-8)ÚencodingNú-Iz--TF)Úinputr%   r&   r'   r2   )r   ÚmkstempÚosÚfdopenÚjsonÚdumpr(   r)   ÚPYTHONr   ÚtupleÚunlink)ÚcfgÚargvr1   r&   r2   ÚfdÚcfg_pathÚfhs           r   Úrun_in_cagerF   7   sž   € ä×#Ñ#¨7¸9ÔE�L€BˆÜ	�‰�2�s WÔ	-ð °Ü�	‰	�#�rÔ÷ðÜ�~‰~œv t¬]¸HÀdÐRÈTÐRØ$)¸$ÈÐW\Ü',¨X£ô8ô 	�	‰	�(Õ÷ð ûô 	�	‰	�(Õús   ³BÁ2B' ÂB$Â'B>é   )ÚextraÚrlimitsÚmin_abic               ó  — || dgdt         g| gddi|�|nddidœ}|xs i j                  «       D ]R  \  }}|dv ri |j                  |i «      ¥|¥||<   Œ$|j                  |g «       t	        ||   «      t	        |«      z   ||<   ŒT |S )	zNBasis-cfg, damit python3 die cage_probe INNERHALB des Kaefigs ausfuehren kann.z/usrz/etc/ld.so.cacheÚPATHz/usr/bin:/binÚNOFILEi   )rJ   ÚcwdÚrxÚfile_roÚrwr$   rI   )r$   rI   )Ú
CAGE_PROBEÚitemsÚgetÚ
setdefaultÚlist)ÚscratchrH   rI   rJ   rA   ÚkeyÚvalss          r   Ú	probe_cfgrZ   D   s²   € ð ØØˆhØ&¬
Ð3ØˆiØ˜Ð(Ø%Ð1‘7¸À$Ð7Gñ€Cð ’k˜r×(Ñ(Ó*ò 3‰	ˆˆTØÐ$Ñ$Ø3˜#Ÿ'™' # rÓ*Ð3¨dÐ3ˆC�ŠHà�N‰N˜3 Ô#Ü˜C ™H“~¬¨T«
Ñ2ˆC�ŠHð3ð €Jr   )rH   rI   r1   r&   c               óX   — t        | ||¬«      }t        |t        dt        |g|¢||¬«      S )N)rH   rI   r7   )r1   r&   )rZ   rF   r>   rR   )rW   r'   rH   rI   r1   r&   ÚargsrA   s           r   Ú	run_prober]   Y   s0   € ä
�G 5°'Ô
:€CÜ�sœV T¬:°uÐD¸tÐDÈEÐ[bÔcÐcr   )ÚreturnÚstr)r^   r   )r^   Úbool)rA   Údictr1   Úbytesr&   Úfloat)
rW   r_   rH   údict | NonerI   rd   rJ   r   r^   ra   )rW   r_   r'   r_   rH   rd   rI   rd   r1   rb   r&   rc   )Ú__doc__Ú
__future__r   r   r<   r:   r(   Úsysr   Úaria_router.isolationr   Ú"aria_router.isolation.caged_runnerr   Ú
executabler>   ÚpathÚjoinÚdirnameÚabspathÚ__file__ÚFIXTURESrR   ÚFAKE_CODEX_CAGEr   r   r   r   r/   rF   rZ   r]   r   r   r   ú<module>rr      sù   ðñ:å "ã Û Û 	Û Û 
Û å /Ý >à	�‰€Ø�7‰7�<‰<˜Ÿ™Ÿ™¨¯©¯©¸Ó(AÓBÀJÓO€Ø�W‰W�\‰\˜( OÓ4€
Ø—'‘'—,‘,˜xÐ)=Ó>€ð €	óEóEó[ó9ð 47ÈÐVXõ 
ð 59ÐQUØñØðØ#'óð* EIÐaeØ °2ñdØðdØ+0ôdr   