Viewing File: /opt/imunify360/venv/share/imunify360/scripts/__pycache__/imunify_core_release.cpython-311.pyc



`jWdZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
mZmZddl
mZmZmZmZmZedZdZdZdZd	Zd
ZdZdZd
ZejdZejdZGddeZ deddfdZ!dede"ddfdZ#dede$fdZ%de$de$fdZ&dedede'fdZ(dedefdZ)dedeefd Z*d!e$defd"Z+ded#ed$e$ddfd%Z,	dEd&ed'ee$ddfd(Z-dede$dedefd)Z.d*e$deddfd+Z/d&ede$fd,Z0deddfd-Z1d.ed&eddfd/Z2d0eedeefd1Z3deddfd2Z4ded*e$d3e'ddfd4Z5d.eddfd5Z6ded&eddfd6Z7dedefd7Z8dede$deddfd8Z9de$deddfd9Z:de$deddfd:Z;dede$deddfd;Z<deddfd<Z=dedeefd=Z>deddfd>Z?deddfd?Z@deddfd@ZAdejBfdAZCdEdBeee$de"fdCZDeEdDkreFeDdS)FaInstall and atomically select versioned imunify-core Python releases.

This module deliberately uses only the Python standard library and never
imports ``defence360agent``: it must remain runnable while the live package
selection is being changed by rpm or dpkg maintainer scripts.
N)Path
PurePosixPath)IterableListOptionalSequenceSetz/opt/imunify360/venvversionsz
imunify-core-z.imunify-core-currentdefence360agentzimunify_core.egg-infoz.artifact-sha256z00-imunify-core-migration.pthz"# managed by imunify-core-release
z+^imunify-core-[A-Za-z0-9][A-Za-z0-9._+~-]*$z^imunify_core-[^/]+\.egg-info$ceZdZdZdS)ReleaseErrorz3The managed release layout is unsafe or incomplete.N)__name__
__module____qualname____doc__E/opt/imunify360/venv/share/imunify360/scripts/imunify_core_release.pyr
r
#s====rr
pathreturnc	X	tjt|tjt	tddz}n#t
$rYdSwxYw	tj|n#t
$rYnwxYwtj|dS#tj|wxYw)NO_DIRECTORYr)osopenstrO_RDONLYgetattrOSErrorfsyncclose)rfds  r_fsync_directoryr"'s
WSYYgb-.K.K K
L
L




	s<AA
AAA-,B-
A:7B9A::BB)destinationmodec|jdd|d5}tj|||t
j|dddn#1swxYwYt
j	t||dzdS)NTparentsexist_okxb)parentmkdirrshutilcopyfileobjflushrrfilenochmodr)sourcer#r$outputs    r_write_filer44sTD999			$		"666***
!!!"""""""""""""""HS

te|,,,,,sABBBarchivectj}|d5tfddD]}||	dddn#1swxYwY|S)Nrbc.dS)Ni)read)streamsr<lambda>z!_archive_digest.<locals>.<lambda>@s&++k":":rr)hashlibsha256riterupdate	hexdigest)r5digestchunkr:s   @r_archive_digestrC=s
^

F	d		!v::::C@@	!	!EMM%    	!!!!!!!!!!!!!!!!s,A##A'*A'
release_idc~t|s"td||S)Nzunsafe release id: {!r})_RELEASE_RE	fullmatchr
format)rDs r_validate_release_idrIEs<  ,,I4;;JGGHHHrr+cV	||n#t$rYdSwxYwdS)NFT)relative_to
ValueError)rr+s  r_is_relative_torMKsE    uu4s
&&	venv_rootc|tzSN)VERSIONS_DIRNAME)rNs r_versions_rootrRSs'''rc|dzfddD}|s"tdt|S)Nlibclh|]0}|D]}||1Sr)globis_dir).0patternrrTs   r	<setcomp>z%_site_package_dirs.<locals>.<setcomp>YsZ


HHW%%


;;==	




r)zpython*/site-packageszpython*/dist-packagesz,no Python site-packages directories below {})r
rHsorted)rNfoundrTs  @r_site_package_dirsr]Wsp
e
C



I


E
:AA#FF

	
%==rnamec8t|}|s|js"td|td|jD}|rd|vr"td|t|S)Nzunsafe archive path: {!r}c3"K|]
}|dv|VdS)).Nr)rXparts  r	<genexpr>z$_safe_member_path.<locals>.<genexpr>js,GG4Y1F1F$1F1F1F1FGGrz..)ris_absolutepartsr
rHtuple)r^rrfs   r_safe_member_pathrhfsDEE6==dCCDDDGG4:GGGGGEEDEMM6==dCCDDD%  rstagerAcd}t}g}	tjt|d}nA#ttjf$r(}t
d||d}~wwxYw|5|D]}t|j
}	|	jd}
|
tkrd}nRt|
r||
n"t
d|
|s;|s't
d|j
|||	f|st
d	t'|d
krt
d|d|D]\}}	|j|	j}|rB|dd
t-jt||jdzj||}|'t
d|j
|5t5|||jdddn#1swxYwY	dddn#1swxYwY|t7t9|z}
|t:z}t-jt|
t||t>z}|dd5}| |dz|!t-j"|#dddn#1swxYwYtI||tKd|&dDdD]}tO|tO|dS)NFzr:*)r$z"cannot open release archive {}: {}rTz(unexpected top-level archive entry: {!r}z%unsupported archive member type: {!r}z&archive has no defence360agent packagez=archive must contain exactly one imunify_core-*.egg-info treeir&r*zcannot read archive member {!r}xasciiencoding
expected_digestc3BK|]}||VdSrP)rWrXrs  rrdz#_extract_release.<locals>.<genexpr>s/<<$dkkmm<<<<<<<r*)reverse)(settarfilerrrTarErrorr
rH
getmembersrhr^rfPACKAGE_LINK_EGG_INFO_RErGaddisdirisregappendlenr,joinpathrr1r$extractfiler4nextr>
METADATA_LINKreplaceARTIFACT_DIGESTwriter/rr0_validate_releaser[rglobr")r5rirApackage_seenmetadata_rootsmembersbundleexcmemberrrootr#r2
metadata_rootnormalized_metadatadigest_filer:	directorys                  r_extract_releaserpsL"uuNG
c'll777W%&


077EE

	



&>&>''))	+	+F$V[11D:a=D|###''--
""4((((">EEdKKLLNN
fllnn
";BB6;OO
NNFD>****	IGHHH~!##O
	#	>	>LFD(%.$*5K||~~
!!$!>>>[))6;+>???''//F~"5<<V[II
>
>FK===
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>	>5&>&>&>&>&>&>&>&>&>&>&>&>&>&>&>PDn!5!5666M-/Js=!!3':#;#;<<</)K			#		0	0"FVd]###
!!!"""""""""""""""eV4444<<%++c**<<<d$$		####Us_#8A6#A11A6;G4J+/JJ+JJ+JJ++J/2J//ANNNreleaserrc|s|s"td||tz}|t
z}|s|dzstd|s|dzstd|tz}	|d	}n4#t$r'}td|d}~wwxYwtjd	|std
|||krtddSdS)Nz#release is not a real directory: {}z__init__.pyz/release has no complete defence360agent packagezPKG-INFOz%release has no complete core metadatarmrnz"release has no artifact digest: {}z[0-9a-f]{64}z"release artifact digest is invalidz4existing release does not match the package artifact)
is_symlinkrWr
rHr{ris_filer	read_textstriprrerG)rrrpackagemetadatarinstalled_digestrs       rrrs
7>>#3#3
188AA

	
$G&HNGm$;#D#D#F#FNLMMMDX
%:$C$C$E$EDBCCCO+KM&00'0BBHHJJMMM?FFsKKLLLM
<)9::A?@@@"'7?'J'JB

	
#"'J'Js(D
D8"D33D8c|s"td|t|}|dd|rtd||z}t
|}|s|rt|||Sttjd|t|}|
	t|||tjt|t|t#|nZ#t$$rM|r7|s#t'jt|dwxYw|S)	Nz"release archive does not exist: {}Tr&#versions root must not be a symlinkrqz.{}-tmp-)prefixdir
ignore_errors)rr
rHrRr,rrCexistsrrtempfilemkdtemprrmdirrrrr"	Exceptionr-rmtree)r5rDrNr
finalrAris       r_stage_releasers??
077@@

	
i((HNN4$N///B@AAAz!E
W
%
%F||~~))++%8888$$Z00c(mm	
	
	


E

KKMMM%000

3u::s5zz***""""<<>>	:%"2"2"4"4	:M#e**D9999
Ls'AE77AGtargetc|jd|jtjjz}	t
j|t|t
j	t|t|t|j	|dS#t$rYdSwxYw#	|w#t$rYwwxYwxYw)N
.{}.tmp-{})
r+rHr^uuiduuid4hexrsymlinkrrr"unlinkFileNotFoundError)rr#	temporarys   r_atomic_symlinkrs"\%8%8$*,,*&&I

63y>>***

3y>>3{#3#3444+,,,	 			DD		 			D	sBA%C!B77
CCC/
CC/
C,)C/+C,,C/cztdt|zS)Nz%import sys; sys.path.insert(0, {!r})
)MIGRATION_SELECTOR_MARKERrHrresolve)rs r_migration_selector_contentrs2$077GOO<M<M8N8NOOrc|s|s"td|	|d}n5#t
$r(}td||d}~wwxYw|ts"td|dS)Nz,migration selector is not a regular file: {}utf-8rnz%cannot read migration selector {}: {}z)refusing to replace unmanaged selector {})rrr
rHrr
startswithr)rcontentrs   r_validate_migration_selectorrs

:AA$GG

	

..'.22


3::4EE

	

788
7>>tDD

	


sA##
B-#BB
site_packagesc||tz}|s|rt||jd|jtjj	z}	|
dd5}|t||
tj|dddn#1swxYwYtjt%|dtjt%|t%|t)|j	|dS#t,$rYdSwxYw#	|w#t,$rYwwxYwxYw)Nrrlrrni)MIGRATION_SELECTORrrrr+rHr^rrrrrrr/rrr0r1rrr"rr)rrr#rr:s     r_write_migration_selectorrs"44K2{55772$[111"\%8%8$*,,*&&I
^^C'^
2
2	&fLL4W==>>>LLNNNHV]]__%%%	&	&	&	&	&	&	&	&	&	&	&	&	&	&	&	Y'''

3y>>3{#3#3444+,,,	 			DD		 			D	sh<FAC<0F<DFDA(F-F
FFF;F+*F;+
F85F;7F88F;site_packages_dirscg}|D]X}|tz}|s|r$t|||Y|SrP)rrrrr)r	selectorsrselectors    r_migration_selectorsr*soI+''
 #55??	' 3 3 5 5	'(222X&&&rc	t|}n#t$rYdSwxYwt|}|D]*}|t	|j+dSrP)r]r
rrr"r+)rNrrrs    r_remove_migration_selectorsr4s/	::$%788I**))))**s
  allow_legacy_directoryc|rtjt|}||krdS|d}t|jdd}t||s"td	||
nm|rY|r|s"td	|tjt|t||dS)NFstrictz(refusing to replace unmanaged symlink {}z%refusing to replace unmanaged path {})rrreadlinkrrrRr'rMr
rHrrrWr-rr)rrrexistingresolvedr
s      r_ensure_public_linkr?s0!;s4yy))vF<<u<--!$,q/22::%:HHx22	:AA$GG
	




	
!%	T[[]]	7>>tDD
	
c$ii   FD!!!!!rc<|tz}|dD]{}||kr	|s|r|F|r!t
jt||dS)Nzimunify_core-*.egg-info)	rrVrrrrWr-rr)rstablers   r_remove_legacy_metadatarWs
]
*F""#<==%%6>>??	%	%KKMMMM
[[]]	%M#d))$$$
%%rct|}|}t||stdt	|D]}|t
z}|tz}t|t|d	tt
dt|d	ttdt	|D]}|tz}|r6|s"td	|tjt!|t!|}||z|krtdt#||dS)Nz)release escapes the managed versions root{}/{}T)rFz%current selector is not a symlink: {}z3computed current target does not resolve to release)rRrrMr
r]r{rrrrHCURRENT_LINKrrrrrelpathrr)	rNrr
resolved_releaserpackage_link
metadata_linkcurrentrs	         r_activate_linksrbsi((0022H((+X66HFGGG+I66




$|3%
5

...NN<66#'	
	
	
	

	NN<77#(	
	
	
	
	
,I66))
,.>>	G$6$6$8$8	7>>wGG
%5!6!6M8J8JKKF"++--1AAAE
	(((())rc\t|}t}t|D]}|tz}|s"t
d||d}t||st
d|	|t|dkr"t
d|tt|}t||S)Nzmissing current selector: {}Trz)current selector escapes managed releasesrkz$site-packages selectors disagree: {})rRrrwr]rrr
rHrMr}rrr>r)rNr
selectedrrrrs       r_selected_releasersi((0022H%%H+I66
,.!!##	O=DDWMMNNN??$?//x22	LJKKKX
8}}299(CC

	
4>>""GgNrct|}|}t|||}t|dSrP)rIrrr)r5rDrNrrs     rririsO%j11JDW__..
DAAGgrc"t|}|}t||z}t|t	t|t
||t|t|dSrP)	rIrrRrrr]rverifyr)rDrNrrs    rselectrs%j11JDT""Z/Gg+D11222D'"""
4LLL%%%%%rc$t|}|}t||z}t|t	|}g}|D]}|t
z}|r_|sK|s"td
||||st||dSt||D]}t||dS)aExpose a staged release before rpm erases the legacy direct layout.

    On the first upgrade, rpm still owns the direct ``defence360agent`` tree
    when the new package's ``%post`` and the existing consumer triggers run.
    Replacing that tree with the final symlink at this point would let the old
    package erase traverse into the new release. A temporary ``.pth`` selector
    instead makes fresh Python processes import the staged tree without
    changing any old package-owned path. ``select`` replaces the legacy layout
    after erasure and removes this selector. Later upgrades have only managed
    links and can select atomically here without the migration shim.
    z*legacy package path is not a directory: {}N)rIrrRrr]r{rrrWr
rHrrrr)rDrNrrrlegacy_packagesrrs        rselect_for_rpm_transactionrs>&j11JDT""Z/Gg+D11O+	,	,
,.>>	,G$6$6$8$8	,>>##
"@GG

""7+++z4   +,,,+::
!-9999::rcHt|||t||dSrP)rir)r5rDrNs   ractivaters*	':y)))
:y!!!!!rc$t|}t|D]o}|tz}|tz}dt
t}dt
t}|r%tjt||kr"td||r%tjt||kr"td||d|tzkrtd|d|tzkrtdqdS)Nrzinvalid package link: {}zinvalid metadata link: {}Trz&package link selects the wrong releasez'metadata link selects the wrong release)rr]r{rrHrrrrrr
r)rNrrrrexpected_packageexpected_metadatas       rrrs} ++H+I66JJ
$|3%
5
">>,EE#NN<GG''))	P{3|,,--1AAA9@@NNOOO((**	{3}--..2CCC+22=AA
t,,<0GGGGHHH   --M1IIIHIIIJ'JJrct|}|sgS|rtdt	d|DS)Nrc3K|]M}|jt!|5|I|VNdSrP)r^rRELEASE_PREFIXrWrrts  rrdz(_managed_release_dirs.<locals>.<genexpr>sr9//
KKMM	
!!r)rRrrr
r[iterdir)rNr
s  r_managed_release_dirsrsi((H??	B@AAA$$&&rc\t|}|sdS|rtd|dD]M}|r7|s#t
jt|dNdS)Nrz.imunify-core-*-tmp-*Tr)	rRrrr
rVrWr-rr)rNr
rs   r_remove_temporary_release_dirsrsi((H??B@AAA]]#:;;>>		>i&:&:&<&<	>M#i..====>>rc|}t|}t|D];}||kr!tjt|<t
|dSrP)rrrr-rrr)rNrrrs    rcleanuprswD &&H(..((??((M#g,,'''"4(((((rc|}t|d}	t|}n#t$rg}YnwxYwt	||D]}t
dtt
ftdttffD]W\}}||z}|	r9tjt||kr|
X|tz}|	r:|d}	t|	|r|
t|D]#}
t!jt|
$t%||r7t)|s|dSdSdS)NFrr)rrRr]r
rr{rHrrrrrrrrMrr-rrranyrr)rNrr
sitesrr^expectedrrrrs           rremoversDd##++5+99H"4((%%%!!

7>>,EEF
GNN<GGH
		ND(!4'D  
R[T%;%;x%G%G


,.	!e44Hx22
!   (..$$
c'll####"4(((X%5%5%7%7!8!8sA		AAc
tjt}|dd}dD]K}||}|dtd|dd	Ld
D].}||}|dd	/dD]O}||jvr
|j|n||}|dtt
P|S)N)descriptioncommandT)destrequired)rriz	--archive)typerz--release-id)r)rselect-for-rpm-transaction)rrirrrrrz--venv-root)rdefault)	argparseArgumentParserradd_subparsers
add_parseradd_argumentrchoicesDEFAULT_VENV_ROOT)parser
subparsersrcommand_parser
select_parsers     r_parserr1sB

$
9
9
9F&&I&EEJ(CC#..w77##KdT#JJJ##NT#BBBB;BB"--g66
"">D"AAAA

*,,,
w''&&w//	
	##.?	$	
	
	
	
Mrargvc8t|}	|jdkr!t|j|j|jn|jdkr!t|j|j|jn|jdkrt|j|jn|jdkrt|j|jnt|jdkrt|jnT|jdkrt|jn4|jdkrt|jnt|jn^#ttt jf$r?}t%d|j|t(j	Yd}~d
Sd}~wwxYwdS)Nrrirrrrrz"imunify-core release {} failed: {})filerkr)r
parse_argsrrr5rDrNrirrrrrAssertionErrorrr
rxryprintrHsysstderr)rargsrs   rmainrOs99%%D<:%%T\4?DNCCCC
\W
$
$$,@@@@
\X
%
%4?DN3333
\9
9
9&tGGGG
\Y
&
&DN####
\X
%
%4>""""
\X
%
%4>"""" ...\7#34
077cJJ	
	
	
	
qqqqq
1sDD<<F4FF__main__rP)Grrr<rrr-rrxrrpathlibrrtypingrrrrr	rrQrrr{rrrrcompilerFr|RuntimeErrorr
r"intr4rrCrIboolrMrRr]rhrrrrrrrrrrrrrrirrrrrrrrr	rrr
SystemExitrrr<module>r&sX								







''''''''::::::::::::::D/00 & '
$4AbjGHHrz;<<>>>>><>>>
4
D



-T------TcSS$(d(t(((($4:!C!M!!!!AdA4AAAAAAJ59



$,SM
	



4Dcdt@Cdt#
t




"TDT,Xd^T
*4*D****"
""59"	""""0%4%D%%%% )t )d )t ) ) ) )F$(4STd
&s
&t
&
&
&
&
&$:3$:4$:D$:$:$:$:N"d"""""""
JdJtJJJJ2Thtn>d>t>>>>)t)))))dt8(<

x
&
#



8z
*TTVV

r
Back to Directory File Manager