lNCa)jddlZddlZddlZddlZddlmZddlmZddlmZddl m Z ddl m Z m Z dZdZd Zd efd Zd ed efd Zd ed efdZd ed efdZdZdZd ed efdZdZdS)N)Path)ClPwd)drop_privileges)get_user_var_cagefs_path)apply_metadata_nofollow 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_pathrs()$//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 t|dddtd}|d }t|||t |d |j d|d }t|||t |d 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_namerrrmkdirrstr_generate_passwordrpw_uid) r rpw website_idwebsite_base_dir website_dirtokentoken_file_pathdocroot_file_paths r create_website_token_directoryr-+s+    % %B ..J4T::;;>OO"Z/KD$UCCCt%000C ,,eQ::: r " "E %444O+666OUBIqAAA'888+0-@@@-ua;;;;;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_directoryr3Zs    % %B  ?? ! ! # #)")]CCDDL   DDD$UCCCDDDDDDDDDDDDDDDDDDs;B!!B%(B%ctt|dz }|t|z }|rt j|dSdS)z= Remove website token directory structure and files. rN)rrrr0shutilrmtreer rr(r)s r remove_website_token_directoryr8lsg4T::;;>OO"^M%B%BBK# k"""""##rc\tjdt|S)z5 Returns path: websites/ websites)ospathjoinr)docroots r website_suffix_with_hashr?xs" 7<< N7$;$; < </.cagefs/websites/ z.cagefs)r;r<r=r?)homedirr>s r r1r1s% 7<<,DW,M,M N NNrctt|dz }|t|z }|dz ddS)z, Removes cached namespace from disk rz .cagefs.mntT) missing_okN)rrrunlinkr7s r invalidate_ns_cacherEsU4T::;;>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. rr zInvalid buffer length requested>0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzc3.K|]}|zVdS)N).0bcharset charset_sizes r z%_generate_password..s-EE1WQ-.EEEEEEr) ValueErrorlensecrets token_bytesr=)length random_bytesresultrMrNs @@r r$r$sx {{fsll:;;;NGw<r[s  ******333333AAAAAAAA)  AAA  #     ,<,