IQg|ddlZddlZddlZddlmZddlmZGddZd dZed Z d Z d d Z dS)N)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)superrNoSuchUserException__init__)selfr argskwargs __class__s n/builddir/build/BUILD/imunify360-venv-2.5.0/opt/imunify360/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_databaserrs r get_user_dictzClPwd.get_user_dict' ""$$$!!rc8||jSr&)r'rr(s r get_uid_dictzClPwd.get_uid_dict+s ""$$$  rc8||jSr&)r'r r(s rget_user_full_dictzClPwd.get_user_full_dict/s ""$$$""rc8||jSr&)r'r!r(s rget_uid_full_dictzClPwd.get_uid_full_dict3r*rc ||S#t$r }t||d}~wwxYw)z* Return pw_entry for user N)r.KeyErrorrrrr es rget_pw_by_namezClPwd.get_pw_by_name7sS 9**,,T2 2 9 9 9++D11q 8 9 AAAc ||S#t$r }t||d}~wwxYw)z7 Return list of passwd entries for uid Nr0r2rr)ruidr4s r get_pw_by_uidzClPwd.get_pw_by_uid@sS 8))++C0 0 8 8 8++C00a 7 8r6c ||jS#t$r }t||d}~wwxYw)z& Returns uid for user N)r.pw_uidr2rrr3s rget_uidz ClPwd.get_uidIsV 9**,,T29 9 9 9 9++D11q 8 9! A AA c ||jS#t$r }t||d}~wwxYw)z` Returns homedir for a user @param user: string @return: string N)r.pw_dirr2rrr3s r get_homedirzClPwd.get_homedirRsV  9**,,T29 9 9 9 9++D11q 8 9r>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#rr)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$r }t||d}~wwxYwd|DS)zs Return names of users with uid specified @param uid: int @return: list of strings Ncg|] }|j S)rE).0rGs r z#ClPwd.get_names..xs333% 333rr8)rr9entriesr4s r get_nameszClPwd.get_namesmsj  8,,..s3GG 8 8 8++C00a 7 84373333s AAArctj|jrt |jdd5}|}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 rzutf-8)encodingNUID_MINr) ospathexistsLOGIN_DEF_FILEopen readlines startswithintsplitstrip ValueError)r def_min_uidflineslines rr"zClPwd.get_sys_min_uidzs 7>>$- . . d)3AAA &Q  & & & & & & & & & & & & & & &  ??9--"4::i#8#8#;#A#A#C#CDDDDD% s#AA!$A!9B>> C  C r&)r)rrrrVrrrr)r,r.r0r5r:r=rAr'rNr"rJrrrrs&N     0   $$$$"""!!!###"""999888999 9 9 9BBB 4 4 4rrTc0tj}|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 |jSrJ)gr_memgr_gid)rKgroupr s rrLz(drop_user_privileges..s'XXX45C>C>c|tdddlm}ddlm}||} |d\}}n##t $r}|dd|id |d}~wwxYw|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 foundr r )rcpapircpapi.cpapiexceptionsr IndexError)r rr domains_list_resultr4s r_resolve_doc_root_by_userrs | !PQQQ#"""""//////;t$$L O 66 h:~      Ms 6 AAAc&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)r r) rrrrrSrirrCgetpwuidrE) r domainrr result_userresult_doc_rootrvdoc_root domain_users rresolve_username_and_doc_rootrs444444KO:<>>   l<008 3EEE  ''r)NTT)NN) rSrCrk contextlibr clexceptionrrrzrrrrJrrrs %%%%%%++++++yyyyyyyyx1111<!!!&4((((((r