j"dZddlZddlZddlZddlmZddlmZddlm Z m Z m Z m Z m Z  ddlmZmZn#e$r dZd ZYnwxYwejeZdd Zdd Zd ed dfdZd ed dfdZdS)z Website isolation support for SSA (clos_ssa.ini) files. This module provides functions to manage clos_ssa.ini files in per-website directories when CageFS website isolation is enabled. N)iglob) disable_quota) INI_FILE_NAMEINI_USER_LOCATIONS_BASE$INI_USER_LOCATIONS_WEBSITE_ISOLATIONis_excluded_pathextract_php_version)(is_website_isolation_allowed_server_wideis_isolation_enabledcdSNFrL/opt/cloudlinux/venv/lib64/python3.11/site-packages/ssa/website_isolation.pyr r "urcdSrr)users rr r %rrreturnc ntsdSi}tD]}t|dD]h}t|r |d|}n"#td|YExYwt j|t} ||j |j 5t j |t j t jz}t j|5}t!|}|r+||j |j f||j|f<dddn #1swxYwYdddn #1swxYwY2#t&$rY?t($rtd|YfwxYw|sdSt-} t.D]}t|dD]}t|r |d|}n"#td|YExYwt1|js]t!|}|so|j|f} | |vr}|| \} } } t j|t}t jt j|s || | 5t75t|d5}|| dddn #1swxYwYdddn #1swxYwYdddn #1swxYwY| |j#t($r4}td|t=|Yd}~d}~wwxYw| D]}t?|dS)z Copy clos_ssa.ini files from base user paths to per-website directories. :param user_context_func: Context manager function for user permissions Npathr!Cannot get pw_record for path: %sFailed to read %swFailed to create %s: %s) r rrr loggerdebugosrjoinrpw_uidpw_gidopenO_RDONLY O_NOFOLLOWfdopenr readpw_nameFileNotFoundError Exceptionwarningsetrr existsdirnamerwriteaddstr"_regenerate_user_website_isolation)user_context_funcbase_ini_fileslocationdir_path pw_recordini_filefdfphp_ver created_inikeycontentuidgideusernames r$copy_inis_to_website_isolation_pathsrB+s, 4 5 5N+hv.//  H))  ,HV,X66   @(KKKw||Hm<>"'//(";";<<  &&sC00))-//))h,,)((())))))))))))))))))))))))))))))))))))))))))))) 12222   8(CFFKKK 9 > 55*8444455sAA7 E$6AE7=E 4 EE EE E E$E E$E E$$ F1$FF#G55H; ML7L 'L = L L  L L L  L7 L$ $L7'L$ (L7+ M7L; ;M>L; ?M N()NNc tsdSt}tD]>}t|dD]}t |r |d|}n#Y*xYwt j|t}t j |r ||j |j 5t j |dddn #1swxYwY| |j#t$r4}t d|t%|Yd}~d}~wwxYw|D]}t'|@dS)z Remove clos_ssa.ini files from all per-website directories. :param user_context_func: Context manager function for user permissions NrrzFailed to remove %s: %s)r r+rrr rrrrr,r r!unlinkr/r'r)rr*r0r1)r2 removed_inir4r5r6r7r@rAs r(remove_inis_from_website_isolation_pathsrFzs 4 5 5%%K899hv.//  H))  ,HV,X66  w||Hm<r?r@s rregenerate_inis_for_userrQsZ 4 5 5 KKLdSSSN+hv.//  H))  ,HV,X66 $,,-  @(KKKw||Hm<>"'//(";";<<  &&sC00))-//))h,,)((())))))))))))))))))))))))))))))))))))))))))))) L(3333   8(CFFKKK 7 > KK4d;;;;;s!A??BFAE76E  E7 E$ $E7'E$ (E7+ F7E; ;F>E; ?F F9$F98F9H..I  M:"M1L; L$  L; $L((L; +L(,L; / M;L? ?ML? M M:M M:M M:: N8)N33N8)rN)__doc__loggingrrKglobrsecureior clos_ssa_inirrrr r clcagefslib.domainr r ImportError getLogger__name__rrBrFr0r1rQrrrr[s """"""aaaaaaaaa   8 $ $L5L5L5L5^9999B S T    &P<3P