}CeJddlmZddlmZddlmZddlZddlZddlZddlmZddl m Z Gdd Z dd Z ed Z d ZddZdS))absolute_import)division)print_functionN)contextmanager)FormattedExceptionczeZdZdZGddeZddZdZdZdZ d Z d Z d Z d Z d ZdZdZddZdS)ClPwdz/etc/login.defsceZdZfdZxZS)ClPwd.NoSuchUserExceptioncdttj|jdd|idg|Ri|dS)NzNo such user (%(user)s)usermessagecontext)superr NoSuchUserException__init__)selfrargskwargs __class__s /builddir/build/BUILDROOT/alt-python27-cllib-3.3.7-2.el7.cloudlinux.x86_64/opt/cloudlinux/venv/lib/python3.11/site-packages/clcommon/clpwd.pyrz"ClPwd.NoSuchUserException.__init__sc ;E%+T 2 2 ;4"D>==         )__name__ __module__ __qualname__r __classcell__)rs@rrr s8         rrNci|_i|_i|_i|_||d|_dS||_dS)N) _user_key_map _uid_key_map_user_full_map _uid_full_mapget_sys_min_uid_min_uid)rmin_uids rrzClPwd.__init__ sK  ? 0055DMMM#DMMMrc8||jSN)_load_passwd_databaser!rs r get_user_dictzClPwd.get_user_dict* ""$$$!!rc8||jSr))r*r"r+s r get_uid_dictzClPwd.get_uid_dict.s ""$$$  rc8||jSr))r*r#r+s rget_user_full_dictzClPwd.get_user_full_dict2s ""$$$""rc8||jSr))r*r$r+s rget_uid_full_dictzClPwd.get_uid_full_dict6r-rc ||S#t$rt|wxYw)z* Return pw_entry for user )r1KeyErrorr rrrs rget_pw_by_namezClPwd.get_pw_by_name:sM 2**,,T2 2 2 2 2++D11 1 2 %Ac ||S#t$rt|wxYw)z7 Return list of passwd entries for uid r3r5r r)ruids r get_pw_by_uidzClPwd.get_pw_by_uidCsM 1))++C0 0 1 1 1++C00 0 1r8c ||jS#t$rt|wxYw)z& Returns uid for user )r1pw_uidr5r rr6s rget_uidz ClPwd.get_uidLsP 2**,,T29 9 2 2 2++D11 1 2 !%Ac ||jS#t$rt|wxYw)z` Returns homedir for a user @param user: string @return: string )r1pw_dirr5r rr6s r get_homedirzClPwd.get_homedirUsP  2**,,T29 9 2 2 2++D11 1 2r@c|jstjD]}||j|j<|j|jvrg|j|j<|j|j||j|jkrQ||j|j<|j|j vrg|j |j<|j |j|dSdS)zZ Loads the passwd database and fills user_to_uid and user_to_homedir maps N) r$pwdgetpwallr#pw_namer>appendr&r!r")rentrys rr*zClPwd._load_passwd_database`s! B B B5:#EM2>><4=008=D&u}5|4+<<<:<)%,7%el3::5AAA B B B Brc ||}n(#t$rt|wxYwd|DS)zs Return names of users with uid specified @param uid: int @return: list of strings cg|] }|j S)rG).0rIs r z#ClPwd.get_names..{s333% 333rr:)rr;entriess r get_nameszClPwd.get_namespsd  1,,..s3GG 1 1 1++C00 0 14373333s %Ar ctj|jrt |jd5}|}dddn #1swxYwY|D]d}|drM t|dd cS#t$rY`wxYwe|S)z Return system defined MIN_UID from /etc/login.def or def_min_uid @param def_min_uid: int @return: MIN_UID: int rNUID_MINr) ospathexistsLOGIN_DEF_FILEopen readlines startswithintsplitstrip ValueError)r def_min_uidflineslines rr%zClPwd.get_sys_min_uid}s 7>>$- . . d)3// &1  & & & & & & & & & & & & & & &  ??9--"4::i#8#8#;#A#A#C#CDDDDD% s#AA"A9B<< C C r))r )rrrrWrrrr,r/r1r3r7r<r?rCr*rPr%rLrrr r s&N     0   $$$$"""!!!###"""222111222 2 2 2BBB 4 4 4rr Tc0tj}|dkrrtj}fdt jD}|j}||vr||tj||r3tj |jtj |j n2tj |jtj |j |r)tjd<|jtjd<dSdSdSdS)z Drop current root privileges to user :param effective_or_real: if True - drop euid, else - drop ruid :param user: name of unix user :param set_env: bool -> if true set $HOME and $USER env variables :return: None rc0g|]}|jv |jSrL)gr_memgr_gid)rMgrouprs rrNz(drop_user_privileges..s'XXX45setgidsetuidenvironrB)reffective_or_realset_env current_euiduser_pwd user_groupsmain_user_groups` rdrop_user_privilegesr{s:<C9c|tdddlm}ddlm}||} |d\}}n#t $r|dd|id wxYw|S) zw Resolve document root by username :param user: str -> name of unix user :return: str -> document root Nz-Cannot resolve docroot without specified userr) userdomains)NoDomainrz!No domain for user %(user)s foundrr)rcpapircpapi.cpapiexceptionsr IndexError)rrr domains_list_results r_resolve_doc_root_by_userrs | !PQQQ#"""""//////;t$$L  O 66    h:~      Ms 6Ac&ddlm}ddlm}|}d}t j}|'||\}}||}n||kr |d|}nB|t |}n/|dkr)tj|j }t |}||fS)a Resolve username and doc_root by domain, or resolve document root by username, or resolve document root and username by effective uid :param user: str -> name of unix user :param domain: str -> domain of panel user :return: tuple -> user, doc_root r)docroot) IncorrectDataNzUser and domain are in conflict)rr) rrrrrTrjrrEgetpwuidrG) rdomainrr result_userresult_doc_rootrwdoc_root domain_users rresolve_username_and_doc_rootrs444444KO:<>>   l<008 3EEE  ''r)NTT)NN) __future__rrrrTrErl contextlibr clexceptionrr r{rrrrLrrrs '&&&&&%%%%%% %%%%%%++++++yyyyyyyyx1111<!!!&4((((((r