]"}8ddlZddlZddlZddlZddlmZddlmZddlmZddl m Z ddl m Z dZ dZd Zd efd Zd ed efd Zd ed efdZd ed efdZdZdZd ed efdZdZdS)N)Path)ClPwd)drop_privileges)get_user_var_cagefs_path) write_via_tmpl%#Ds_ lcNt|}tj|dS)Nz/.cagefs/isolates.mounts)rpathlibr)user cagefs_dirs Wopt/cloudlinux/venv/lib/python3.11/site-packages/clcagefslib/webisolation/jail_utils.pyget_jail_config_pathr s()$//J <:??? @ @@ document_rootclt}|dD]}||z}|tzdz}|dS)z Generates unique id for an isolate website using FNV-1a 64-bit hash. FNV-1a has excellent avalanche properties and distribution. Must match the docroot_hash() function in jail C code. zutf-8l016x)_FNV_OFFSET_BASISencode _FNV_PRIME)r hash_valuechars r get_website_idrsP #J$$W--DDd  :-1CC   rr ct|}t|}tt |dz }||z }|ddd|ddt jt|ddt j t|dtd}|d }t|||t j |d t j||j d|d }t|||t j |d t j|ddd S)z Create website token directory structure and files in /var/cagefs. Creates: - /var/cagefs//.cagefs/website// - token directory .cagefs/websiteTiexist_okparentsmodei)rrr z/.cagefs.tokenz/.cagefs.websitei$N) rget_pw_by_namerrrmkdiroschownstrchmod_generate_passwordrpw_uid) r rpw website_idwebsite_base_dir website_dirtokentoken_file_pathdocroot_file_paths r create_website_token_directoryr/+sj    % %B ..J4T::;;>OO"Z/KD$UCCCt%000 HS  q!$$$HS  u%%% r " "E %444O+666H_e$$$H_bi+++'888+0-@@@H &&&H 1%%%%%rc\t|}t|jsdStt |j|}t |5|dddddddS#1swxYwYdS)z Create overlay storage directory in user's home. Creates: - /.cagefs/websites// - storage base for overlays Drops privileges to user before creating to ensure proper ownership. NTir)rr rpw_direxistsfull_website_pathrr!)r rr( storage_bases r create_overlay_storage_directoryr5Zs    % %B  ?? ! ! # #)")]CCDDL   DDD$UCCCDDDDDDDDDDDDDDDDDDs;B!!B%(B%ctt|dz }|t|z }|rt j|dSdS)z= Remove website token directory structure and files. rN)rrrr2shutilrmtreer rr*r+s r remove_website_token_directoryr:lsg4T::;;>OO"^M%B%BBK# k"""""##rc\tjdt|S)z5 Returns path: websites/ websites)r"pathjoinr)docroots r website_suffix_with_hashr@xs" 7<< N7$;$; < </.cagefs/websites/ z.cagefs)r"r=r>r@)homedirr?s r r3r3s% 7<<,DW,M,M N NNrctt|dz }|t|z }|dz ddS)z, Removes cached namespace from disk rz .cagefs.mntT) missing_okN)rrrunlinkr9s r invalidate_ns_cacherFsU4T::;;>OO"^M%B%BBK= ((D(99999rc|dks|dkrtddttj|}dfd|D}|S)z Generate a random password/token using the same algorithm as the C function. Uses cryptographically secure random bytes and converts them to alphanumeric characters. rrzInvalid buffer length requested>0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzc3.K|]}|zVdS)N).0bcharset charset_sizes r z%_generate_password..s-EE1WQ-.EEEEEEr) ValueErrorlensecrets token_bytesr>)length random_bytesresultrNrOs @@r r&r&sx {{fsll:;;;NGw<r\s  ******333333(((((()  AAA  #     ,&,&S,&,&,&,&^D3DsDDDD$ # #S # # # #===OOO:c:#::::r