/opt/cloudlinux/venv/lib/python3.11/site-packages/__pycache__
NameSizeModeActions
clcontrollib.cpython-311.opt-1.pyc732640644editdlrm
clcontrollib.cpython-311.pyc732640644editdlrm
cldetectlib.cpython-311.opt-1.pyc245840644editdlrm
cldetectlib.cpython-311.pyc245840644editdlrm
cldiaglib.cpython-311.opt-1.pyc676420644editdlrm
cldiaglib.cpython-311.pyc676420644editdlrm
cli_utils.cpython-311.opt-1.pyc21610644editdlrm
cli_utils.cpython-311.pyc21610644editdlrm
cllicenselib.cpython-311.opt-1.pyc161930644editdlrm
cllicenselib.cpython-311.pyc161930644editdlrm
clsetuplib.cpython-311.opt-1.pyc69740644editdlrm
clsetuplib.cpython-311.pyc69740644editdlrm
clsudo.cpython-311.opt-1.pyc270110644editdlrm
clsudo.cpython-311.pyc270110644editdlrm
cl_proc_hidepid.cpython-311.opt-1.pyc61170644editdlrm
cl_proc_hidepid.cpython-311.pyc61170644editdlrm
configparser.cpython-311.pyc16510644editdlrm
ddt.cpython-311.pyc153380644editdlrm
docopt.cpython-311.pyc379350644editdlrm
getcontrolpanel.cpython-311.opt-1.pyc10220644editdlrm
getcontrolpanel.cpython-311.pyc10220644editdlrm
lveapi.cpython-311.opt-1.pyc269850644editdlrm
lveapi.cpython-311.pyc269850644editdlrm
lvectllib.cpython-311.opt-1.pyc1620120644editdlrm
lvectllib.cpython-311.pyc1620120644editdlrm
lvestat.cpython-311.opt-1.pyc71390644editdlrm
lvestat.cpython-311.pyc71390644editdlrm
mccabe.cpython-311.pyc205640644editdlrm
migration_ve1_to_v2.cpython-311.opt-1.pyc32310644editdlrm
migration_ve1_to_v2.cpython-311.pyc32310644editdlrm
pam.cpython-311.pyc101330644editdlrm
pep8ext_naming.cpython-311.pyc288400644editdlrm
py.cpython-311.pyc4520644editdlrm
pycodestyle.cpython-311.pyc1213910644editdlrm
remount_proc.cpython-311.opt-1.pyc7730644editdlrm
remount_proc.cpython-311.pyc7730644editdlrm
remove_ubc.cpython-311.opt-1.pyc103620644editdlrm
remove_ubc.cpython-311.pyc103620644editdlrm
schema.cpython-311.pyc442030644editdlrm
secureio.cpython-311.opt-1.pyc280750644editdlrm
secureio.cpython-311.pyc280750644editdlrm
six.cpython-311.pyc464220644editdlrm
typing_extensions.cpython-311.pyc1315440644editdlrm
_pyrsistent_version.cpython-311.pyc2310644editdlrm
Edit: /opt/cloudlinux/venv/lib/python3.11/site-packages/__pycache__/clsudo.cpython-311.pyc (27011B)
§  Fx»K0b~ãó†—ddlZddlZddlZddlZddlZddlZddlZddlmZm Z ej e ¦«Z Gd„de ¦«ZGd„de ¦«ZGd„de ¦«ZGd „d e ¦«Zd Zgd ¢Zd gZgd¢Zejd¦«Zejd¦«Zejd¦«Zgd¢ZdZdZdZGd„d¦«ZdS)éN)ÚS_IRUSRÚS_IRGRPcó—eZdZd„ZdS)Ú NoSuchUsercóD—t |d|›d�¦«dS)NzNo such user (ú)©Ú ExceptionÚ__init__)ÚselfÚusers ú†/builddir/build/BUILDROOT/alt-python27-cllib-3.4.42-1.el9.cloudlinux.x86_64/opt/cloudlinux/venv/lib/python3.11/site-packages/clsudo.pyr zNoSuchUser.__init__s*€Ý×Ò˜4Ð!9°$Ð!9Ð!9Ð!9Ñ:Ô:Ð:Ð:Ð:óN©Ú__name__Ú __module__Ú __qualname__r ©rrrrs#€€€€€ð;ð;ð;ð;ð;rrcó—eZdZd„ZdS)Ú NoSuchGroupcóD—t |d|›d�¦«dS)NzNo such group (rr )r Úgroups rr zNoSuchGroup.__init__s*€Ý×Ò˜4Ð!;°5Ð!;Ð!;Ð!;Ñ<Ô<Ð<Ð<ÐÔ>Ð>Ð>Ð>rNrrrrrr#s#€€€€€ð?ð?ð?ð?ð?rrz /etc/sudoers)ú /bin/ps ""ú /bin/grep ""ú/sbin/service ""z%/usr/bin/getcontrolpaneluserspackagesz/usr/sbin/lvectl lve-versionz>/usr/local/directadmin/plugins/new_lvemanager/admin/GetDomainsz0/usr/share/l.v.e-manager/utils/cloudlinux-cli.pyz5/usr/share/l.v.e-manager/utils/cloudlinux-cli-user.py)z/usr/sbin/cagefsctl ""r!r"r#z ^\s*Cmnd_Alias\s+CAGEFS_CMDS\s*=z"^\s*Cmnd_Alias\s+SELECTOR_CMDS\s*=z ^\s*Cmnd_Alias\s+LVECTL_CMDS\s*=)z/usr/bin/cl-selector ""z/usr/bin/piniset ""z/usr/sbin/lveps ""z/usr/bin/selectorctl ""zDefaults:%s !requirettyz-%%%s ALL=NOPASSWD: LVECTL_CMDS, SELECTOR_CMDSzDefaults:%%%s !requirettycó”—eZdZdZefZdZgZdZdZ dZ dZ dZ dZ dZdZdZdZeefd„¦«Zeefd„¦«Zeefd„¦«Zeefd„¦«Zeefd„¦«Zeefd „¦«Zed „¦«Zed „¦«Zed „¦«Zed „¦«Zed„¦«Zed„¦«Zed„¦«Zed„¦«Z dS)ÚClsudoz/ Adds CloudLinux users to sudoers file NFcó¬—t d||tj¦«tj¦«¦«t  |¦«t  |¦«t  |¦«t j s:t j   dd  t¦«z¦«t js:t j   dd  t¦«z¦«t js:t j   dd  t"¦«z¦«t js"t j   |›d�¦«t js"t j   |›d�¦«t js"t j   |›d�¦«t js(t j   t,|fz¦«t  ¦«t d ||¦«d S) z@ Adds username to sudoers file (for lvemanager) z@add_user: adding user '%s' to sudoers file '%s' (uid=%d, pid=%d)úCmnd_Alias LVECTL_CMDS = ú, zCmnd_Alias LVECTL_USER_CMDS = úCmnd_Alias SELECTOR_CMDS = ú ALL=NOPASSWD: LVECTL_CMDSú% ALL=(ALL) NOPASSWD: LVECTL_USER_CMDSú ALL=NOPASSWD: SELECTOR_CMDSz.add_user: successfully added user '%s' to '%s'N)ÚloggerÚinfoÚosÚgetuidÚgetpidr%Úupdate_commands_listÚ _check_userÚ _get_contentsÚ has_aliasÚ sudoers_listÚappendÚjoinÚALIAS_LVECTL_CMDSÚhas_user_aliasÚALIAS_LVECTL_USER_CMDSÚhas_selector_aliasÚALIAS_SELECTOR_CMDSÚ has_rightsÚhas_user_rightsÚhas_selector_rightsÚ has_actionÚDEFAULTS_REQUIRETTYÚ_write_contents©r Ú sudoers_files rÚadd_userzClsudo.add_userfsþ€õ � Š ð(Ø)-¨|Ý”Y‘[”[¥"¤)¡+¤+ñ /ô /ð /õ ×#Ò# LÑ1Ô1Ð1Ý×Ò˜4Ñ Ô Ð Ý×Ò˜TÑ"Ô"Ð"åÔð cÝ Ô × &Ò &Ð'BÀTÇYÂYÕO`ÑEaÔEaÑ'aÑ bÔ bÐ bÝÔ$ð mÝ Ô × &Ò &Ð'GÈ$Ï)Ê)ÕTjÑJkÔJkÑ'kÑ lÔ lÐ lÝÔ(ð gÝ Ô × &Ò &Ð'DÀtÇyÂyÕQdÑGeÔGeÑ'eÑ fÔ fÐ fÝÔ ð LÝ Ô × &Ò &¨$Ð'JÐ'JÐ'JÑ KÔ KÐ KÝÔ%ð WÝ Ô × &Ò &¨$Ð'UÐ'UÐ'UÑ VÔ VÐ VÝÔ)ð NÝ Ô × &Ò &¨$Ð'LÐ'LÐ'LÑ MÔ MÐ MÝÔ ð FÝ Ô × &Ò &Õ':¸d¸WÑ'DÑ EÔ EÐ EÝ×ÒÑ Ô Ð Ý� Š ÐDؘ<ñ )ô )ð )ð )ð )rcóÀ—t d||tj¦«tj¦«¦«|t _t  |¦«t  |¦«t j s:t j   dd  t¦«z¦«t js"t j   |›d�¦«t js(t j   t |fz¦«t  ¦«t d||¦«dS)z< Adds username to sudoers file (for cagefs) zGadd_cagefs_user: adding user '%s' to sudoers file '%s' (uid=%d, pid=%d)zCmnd_Alias CAGEFS_CMDS = r(ú ALL=NOPASSWD: CAGEFS_CMDSz5add_cagefs_user: successfully added user '%s' to '%s'N)r-r.r/r0r1r%Úfilepathr3r4Úhas_cagefs_aliasr6r7r8ÚALIAS_CAGEFS_CMDSÚhas_cagefs_rightsrArBrCrDs rÚadd_cagefs_userzClsudo.add_cagefs_user…s-€õ � Š ð(Ø)-¨|Ý”Y‘[”[¥"¤)¡+¤+ñ /ô /ð /ð'�ŒÝ×Ò˜4Ñ Ô Ð Ý×Ò˜TÑ"Ô"Ð"ÝÔ&ð cÝ Ô × &Ò &Ð'BÀTÇYÂYÕO`ÑEaÔEaÑ'aÑ bÔ bÐ bÝÔ'ð LÝ Ô × &Ò &¨$Ð'JÐ'JÐ'JÑ KÔ KÐ KÝÔ ð FÝ Ô × &Ò &Õ':¸d¸WÑ'DÑ EÔ EÐ EÝ×ÒÑ Ô Ð Ý� Š ÐKؘ<ñ )ô )ð )ð )ð )rcót—t d||tj¦«tj¦«¦«t  |¦«t  |¦«t  |¦«t j s:t j   dd  t¦«z¦«t js:t j   dd  t¦«z¦«t js(t j   t"|fz¦«t js(t j   t&|fz¦«t  ¦«t d||¦«dS)zJ Adds group to sudoers file, grants access to LVE Manager zMadd_lvemanager_group: adding group '%s' to sudoers file '%s' (uid=%d, pid=%d)r'r(r)z;add_lvemanager_group: successfully added group '%s' to '%s'N)r-r.r/r0r1r%r2Ú _check_groupÚ_get_contents_groupr5r6r7r8r9r<r=rAÚGROUP_LVECTL_SELECTORÚhas_group_actionÚGROUP_DEFAULTS_REQUIRETTYrC)Ú group_namerEs rÚadd_lvemanager_groupzClsudo.add_lvemanager_groupšso€õ � Š ð(Ø)3°\Ý”Y‘[”[¥"¤)¡+¤+ñ /ô /ð /õ ×#Ò# LÑ1Ô1Ð1Ý×Ò˜JÑ'Ô'Ð'Ý×"Ò" :Ñ.Ô.Ð.ÝÔð cÝ Ô × &Ò &Ð'BÀTÇYÂYÕO`ÑEaÔEaÑ'aÑ bÔ bÐ bÝÔ(ð gÝ Ô × &Ò &Ð'DÀtÇyÂyÕQdÑGeÔGeÑ'eÑ fÔ fÐ fÝÔ ð NÝ Ô × &Ò &Õ'<À ¸}Ñ'LÑ MÔ MÐ MÝÔ&ð RÝ Ô × &Ò &Õ'@ÀJÀ=Ñ'PÑ QÔ QÐ Qå×ÒÑ Ô Ð Ý� Š ÐQØ ñ /ô /ð /ð /ð /rcó"—t d||tj¦«tj¦«¦«|t _ tt jd¬¦«5}| ¦«  ¦«t _ ddd¦«n #1swxYwYd}d}|tt j ¦«krÀt j |}|  |›d�¦«s6|  |›d�¦«s|  t|fz¦«r>t d ||¦«t j  |¦«d }Œ»|d z }|tt j ¦«k°À|r7t  ¦«t d ||¦«dSt d ||¦«dS#t t"f$r}t%¦«|‚d}~wwxYw)z5 Removes username from sudoers file zGremove_user: removing user '%s' from sudoers file '%s' (uid=%d, pid=%d)úutf-8©ÚencodingNrFz ALL=NOPASSWD:z ALL=(ALL) NOPASSWD:z4remove_user: removing sudoers rule for user '%s': %sTéz5remove_user: successfully removed user '%s' from '%s'z1remove_user: no rules found for user '%s' in '%s')r-r.r/r0r1r%rIÚopenÚreadÚ splitlinesr6ÚlenÚ startswithrBÚremoverCÚIOErrorÚOSErrorr)r rEÚfÚidxÚremovedÚlineÚes rÚ remove_userzClsudo.remove_user³sK€õ � Š ð(Ø)-¨|Ý”Y‘[”[¥"¤)¡+¤+ñ /ô /ð /ð'�Œð ,Ý•f”o°Ð8Ñ8Ô8ð <¸AØ&'§f¢f¡h¤h×&9Ò&9Ñ&;Ô&;•Ô#ð <ð <ð <ñ <ô <ð <ð <ð <ð <ð <ð <øøøð <ð <ð <ð <àˆC؈GØ��FÔ/Ñ0Ô0Ò0Ð0ÝÔ*¨3Ô/�ð—O’O tÐ$;Ð$;Ð$;Ñ<Ô<ðØŸ?š?¨dÐ+HÐ+HÐ+HÑIÔIðàŸ?š?Õ+>À$ÀÑ+HÑIÔIðõ—K’KÐ VØ $ dñ,ô,ð,åÔ'×.Ò.¨tÑ4Ô4Ð4Ø"�GØØ�q‘�ð!��FÔ/Ñ0Ô0Ò0Ð0ð"ð 1Ý×&Ò&Ñ(Ô(Ð(Ý— ’ ÐSØ! <ñ1ô1ð1ð1ð1õ— ’ ÐOØ! <ñ1ô1ð1ð1ð1øå�Ð!ð ,ð ,ð ,Ý"Ñ$Ô$¨!Ð +øøøøð ,øøøsCÁG)Á)1B& G)Â&B*Â*G)Â-B*Â.DG)Ç G)Ç)HÇ:H È Hcó"—t d||tj¦«tj¦«¦«t  |¦«t  |¦«t  |¦«dS)zµ updates username in sudoers file :param user: username for caching :param sudoers_file: path to /etc/sudoers (only for tests) :return: None zEupdate_user: updating user '%s' in sudoers file '%s' (uid=%d, pid=%d)N) r-r.r/r0r1r%r2r3r4rDs rÚ update_userzClsudo.update_userÜs{€õ � Š ð(Ø)-¨|Ý”Y‘[”[¥"¤)¡+¤+ñ /ô /ð /õ ×#Ò# LÑ1Ô1Ð1õ ×Ò˜4Ñ Ô Ð Ý×Ò˜TÑ"Ô"Ð"Ð"Ð"rcó¸—|t_tj tj¦«t_t ¦«tdtftdtff}d}ttj ¦«D]k\}}|D]c\}}}|  |¦«rHtj |}t |||¦«tj ||krd}nŒdŒl|rZt d|tj¦«tj¦«¦«t ¦«dSdS)z» Update command lists for lvemanager plugin If any required command absent in file, add it :param sudoers_file: path to /etc/sudoers :return: None Ú LVECTL_CMDSÚ SELECTOR_CMDSFTzGupdate_commands_list: updating command aliases in '%s' (uid=%d, pid=%d)N)r%rIr/ÚpathÚdirnameÚtemp_dirÚ _read_sudoersÚLVECTL_ALIAS_REr9ÚSELECTOR_ALIAS_REr=Ú enumerater6ÚmatchÚ_rewrite_aliasr-r.r0r1rC) rEÚ alias_specsÚis_sudoer_changerdÚcommand_stringÚalias_reÚ alias_nameÚ alias_listÚbefores rr2zClsudo.update_commands_listîsI€ð'�ŒÝœ'Ÿ/š/­&¬/Ñ:Ô:�ŒÝ×ÒÑÔÐõ(¨Õ8IÐJÝ)¨?Õ’> .Ñ1Ô1ðÝ#Ô0°Ô5�FÝ×)Ò)¨#¨z¸:ÑFÔFÐFÝÔ*¨3Ô/°6Ò9Ð9Ø+/Ð(Ø�Eð øð ð %Ý �KŠKð,Ø-9Ýœ™œ¥b¤i¡k¤kñ 3ô 3ð 3õ × "Ò "Ñ $Ô $Ð $Ð $Ð $ð  %ð %rcót— tj|¦«dS#t$r}t|¦«|‚d}~wwxYw)zZ Checks passwd database for username presence @param user: string N)ÚpwdÚgetpwnamÚKeyErrorr)r rgs rr3zClsudo._check_usersL€ð  *Ý ŒL˜Ñ Ô Ð Ð Ð øÝð *ð *ð *ݘTÑ"Ô"¨Ð )øøøøð *øøøó‚˜ 7¢2²7cót— tj|¦«dS#t$r}t|¦«|‚d}~wwxYw)z_ Checks grp database for group_name presence @param group_name: string N)ÚgrpÚgetgrnamr�r)rTrgs rrOzClsudo._check_groupsL€ð  1Ý ŒL˜Ñ $Ô $Ð $Ð $Ð $øÝð 1ð 1ð 1ݘjÑ)Ô)¨qÐ 0øøøøð 1øøør‚cóΗttjd¬¦«5}| ¦« ¦«t_ddd¦«dS#1swxYwYdS)NrWrX)r[r%rIr\r]r6)rcs rrqzClsudo._read_sudoers(s”€å •&”/¨GÐ 4Ñ 4Ô 4ð 8¸Ø"#§&¢&¡(¤(×"5Ò"5Ñ"7Ô"7�FÔ ð 8ð 8ð 8ñ 8ô 8ð 8ð 8ð 8ð 8ð 8ð 8ð 8øøøð 8ð 8ð 8ð 8ð 8ð 8sœ1AÁAÁ!Acób—tj}|}|| d¦«r8|dzt|¦«krdS|dz }|| d¦«°8d|›d�d |¦«z}||kr || ¦«|krdS|g|||dz…<dS)aíRewrite the existing `alias_name` Cmnd_Alias definition at sudoers_list[idx] to the single canonical argv-restricted line, in place. Shared by the CAGEFS_CMDS and SELECTOR_CMDS upgrade rewrites - both are lax bare-command aliases whose pre-fix on-disk form must be tightened to the argv-restricted `alias_cmds` join without duplicating or corrupting the definition. The definition may span several physical lines via visudo-legal backslash line-continuation (_read_sudoers splits on physical lines, so each continuation line is its own list element). Consume the whole span - the matched line plus every following line the preceding line continued onto - and replace it with one restricted line. Never-corrupt invariant: if the definition cannot be confidently and safely collapsed (a continuation whose trailing backslash runs off the end of the file - i.e. the file is already malformed), leave it exactly as-is. The worst case of the upgrade rewrite is a safe no-op (the file stays as valid as it was), never a corrupted sudoers file. The caller still sets the has_*_alias flag, so no duplicate definition is appended. ú\rZNz Cmnd_Alias z = r()r%r6Úendswithr^r8Ústrip)rdr{Ú alias_cmdsÚlinesÚendÚ restricteds rrvzClsudo._rewrite_alias-sÓ€õ.Ô#ˆØˆð �CŒj×!Ò! $Ñ'Ô'ð Ø�Q‰w�#˜e™*œ*Ò$Ð$Ø�Ø �1‰HˆCð�CŒj×!Ò! $Ñ'Ô'ð ð3 :Ð2Ð2Ð2°T·Y²Y¸zÑ5JÔ5JÑJˆ Ø �#Š:ˆ:˜% œ*×*Ò*Ñ,Ô,° Ò:Ð:Ø ˆFð)˜\ˆˆc�#˜‘'ˆkÑÐÐrcó`—dt_dt_dt_dt_dt_dt_dt_dt_dt_ dt_ tj d|›d�¦«} t  ¦«ttj¦«D�]À\}}d|vr dt_Œd|vr dt_Œ(t  |¦«r.t |dt&¦«dt_ Œp| ¦« |›d�¦«r dt_Œ§| ¦« |›d �¦«r dt_ŒÞ| ¦« |›d �¦«rdt_ �Œd |vr%| |¦«}|r dt_�Œ?t. |¦«r/t |d t0¦«dt_�Œˆ| ¦« |›d �¦«rdt_�ŒÀ�ŒÂdS#t2t4f$r}t7¦«|‚d}~wwxYw)zM Reads file into list of strings @param user: string Fz Defaults:\s*z\s*!requirettyúCmnd_Alias LVECTL_CMDSTzCmnd_Alias LVECTL_USER_CMDSÚ CAGEFS_CMDSr*r+rHÚ requirettyrmr,N)r%rArRr5r:r>r?r<r@rJrLÚreÚcompilerqrtr6ÚCAGEFS_ALIAS_RErurvrKÚlstripr_Úsearchrsr=rarbr)r Úrequire_tty_patternrdryÚ pattern_matchrgs rr4zClsudo._get_contentsVsš€ð"�ÔØ"'�ÔØ �ÔØ %�ÔØ!�ÔØ!&�ÔØ$)�Ô!Ø%*�Ô"Ø"'�ÔØ#(�Ô Ý œjÐ)M¸Ð)MÐ)MÐ)MÑNÔNÐð3 ,å × Ò Ñ "Ô "Ð "Ý'0µÔ1DÑ'EÔ'Eð. ñ. Ñ#��^Ø+¨~Ð=Ð=Ø'+•FÔ$ØØ0°NÐBÐBØ,0•FÔ)ØÝ"×(Ò(¨Ñ8Ô8ðõ ×)Ò)¨#¨}Õ>OÑPÔPÐPØ.2•FÔ+Øð"×(Ò(Ñ*Ô*×5Ò5¸Ð6YÐ6YÐ6YÑZÔZðØ(,•FÔ%ØØ!×(Ò(Ñ*Ô*×5Ò5¸Ð6dÐ6dÐ6dÑeÔeðØ-1•FÔ*ØØ!×(Ò(Ñ*Ô*×5Ò5¸Ð6YÐ6YÐ6YÑZÔZðØ/3•FÔ,ÙØ >Ð1Ð1Ø$7×$>Ò$>¸~Ñ$NÔ$N�MØ$ð1Ø,0�Ô)ÙÝ$×*Ò*¨>Ñ:Ô:ðõ ×)Ò)¨#¨Õ@SÑTÔTÐTØ04•FÔ-ÙØ!×(Ò(Ñ*Ô*×5Ò5¸Ð6[Ð6[Ð6[Ñ\Ô\ðØ15•FÔ.ÙñðY. ð. øõ^�Ð!ð ,ð ,ð ,Ý"Ñ$Ô$¨!Ð +øøøøð ,øøøsÂG4JÊJ-ÊJ(Ê(J-có—dt_dt_dt_dt_dt_dt_dt_dt_d|›�}d|›�}tj |›d�¦«} t  ¦«ttj ¦«D�]\}}t |¦«r.t |dt"¦«dt_ŒNd|vr dt_Œ_t$ |¦«r.t |dt&¦«dt_Œ§| |¦«r#| |¦«}|r dt_| |¦«r dt_�Œd S#t,t.f$r}t1¦«|‚d }~wwxYw) zS Reads file into list of strings @param group_name: string Fú%z Defaults:%z/\s*ALL=NOPASSWD:\s*LVECTL_CMDS,\s*SELECTOR_CMDSrmTr�r‘N)r%rArRr5r>r<r@rJrLr“r”rqrtr6rsrurvr=r•rKr_r—rarbr)rTÚ group_prefixÚ group_actionÚ group_patternrdryr™rgs rrPzClsudo._get_contents_groupžsЀð"�ÔØ"'�ÔØ �ÔØ!�ÔØ$)�Ô!Ø%*�Ô"Ø"'�ÔØ#(�Ô Ø'˜:Ð'Ð'ˆ Ø0 JÐ0Ð0ˆ Ýœ  zÐ#bÐ#bÐ#bÑcÔcˆ ð ,å × Ò Ñ "Ô "Ð "Ý'0µÔ1DÑ'EÔ'Eð 3ñ 3Ñ#��^Ý$×*Ò*¨>Ñ:Ô:ðõ×)Ò)¨#¨Õ@SÑTÔTÐTØ04•FÔ-ØØ+¨~Ð=Ð=Ø'+•FÔ$ØÝ"×(Ò(¨Ñ8Ô8ðõ×)Ò)¨#¨}Õ>OÑPÔPÐPØ.2•FÔ+ØØ!×,Ò,¨\Ñ:Ô:ð1Ø$1×$8Ò$8¸Ñ$HÔ$H�MØ$ð1Ø,0�Ô)Ø!×,Ò,¨\Ñ:Ô:ð3Ø.2•FÔ+ùð+ 3ð 3øõ,�Ð!ð ,ð ,ð ,Ý"Ñ$Ô$¨!Ð +øøøøð ,øøøsÂD4F9Æ9GÇ GÇGcóˆ—d„tjD¦«}tj tj¦«|vrWt  dtjtj¦«tj ¦«¦«t¦«‚ tj  tj¦«}d}tj ||¬¦«\}}tj|d¦«}| d tj¦«dz¦«| ¦«t&t(z}tj||¦«t |¦«st.‚n¶#t.t0f$r¢}t  dtjtj¦«tj ¦«¦« tj |¦«rtj|¦«n#t6$rYnwxYwt¦«|‚d}~wwxYw tj|tj¦«dS#t0$r]}t  d tjtj¦«tj ¦«¦«t¦«|‚d}~wwxYw) zX Writes data to temporary file then checks it and rewrites sudoers file cóL—h|]!}tj |¦«’Œ"Sr)r/rnÚrealpath)Ú.0Úps rú z)Clsudo._write_contents..Ös(€ÐNÐNÐN¨1•2”7×#Ò# AÑ&Ô&ÐNÐNÐNrzZ_write_contents: refusing to write sudoers to disallowed destination '%s' (uid=%d, pid=%d)Ú lve_sudoers_)ÚprefixÚdirÚwú zC_write_contents: failed to write sudoers file '%s' (uid=%d, pid=%d)NzD_write_contents: failed to rename temp file to '%s' (uid=%d, pid=%d))r%Ú_ALLOWED_SUDOERS_PATHSr/rnr¡rIr-Úwarningr0r1rroÚtempfileÚmkstempÚfdopenÚwriter8r6ÚcloserrÚchmodÚ_is_file_validrarbÚexistsÚunlinkr Úrename)ÚallowedrpÚ temp_prefixÚfdÚ temp_pathÚfoÚmaskrgs rrCzClsudo._write_contentsÍs`€ðOÐNµÔ0MÐNÑNÔNˆÝ Œ7× Ò �FœOÑ ,Ô ,°GÐ ;Ð ;Ý �NŠNðJå!œ?­B¬I©K¬K½¼¹¼ñ Fô Fð Fõ$Ñ%Ô%Ð %ð -Ý”w—’¥v¤Ñ7Ô7ˆHØ(ˆKÝ$Ô,°KÀXÐNÑNÔN‰MˆB� Ý”˜2˜sÑ#Ô#ˆBØ �HŠH�T—Y’Y�vÔ2Ñ3Ô3°dÑ:Ñ ;Ô ;Ð ;Ø �HŠH‰JŒJˆJÝ�WÑ$ˆDÝ ŒH�Y Ñ %Ô %Ð %Ý×(Ò(¨Ñ3Ô3ð Ý� ð øå�Ð!ð -ð -ð -Ý �NŠNð.Ý/5¬Ýœ9™;œ;­¬ © ¬ ñ 5ô 5ð 5ð Ý”7—>’> )Ñ,Ô,ð)Ý”I˜iÑ(Ô(Ð(øøÝð ð ð Ø�ð øøøå#Ñ%Ô%¨1Ð ,øøøøð -øøøð -Ý ŒI�i¥¤Ñ 1Ô 1Ð 1Ð 1Ð 1øÝð -ð -ð -Ý �NŠNð.Ý/5¬Ýœ9™;œ;­¬ © ¬ ñ 5ô 5ð 5õ$Ñ%Ô%¨1Ð ,øøøøð  -øøøsWÂC'FÆH5ÆA H0Ç3HÈH0È HÈH0ÈHÈH0È0H5È9IÉ KÉ$AJ<Ê<Kcó —ddd|g}tj|tjtjtj¬¦«5}| ¦«|jdkr ddd¦«dS ddd¦«n #1swxYwYdS)Nz/usr/sbin/visudoz-cz-f)ÚstdinÚstdoutÚstderrrFT)Ú subprocessÚPopenÚDEVNULLÚPIPEÚSTDOUTÚ communicateÚ returncode)ÚfilenameÚcmdÚprocs rr²zClsudo._is_file_validùsï€ð Ø Ø �(ð ˆõ Ô Ø ÝÔ$Ý”?ÝÔ$ð  ñ ô ð ð Ø × Ò Ñ Ô Ð ØŒ !Ò#Ð#Øð ð ð ñ ô ð ð ð ð$ð ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ðˆts½!A8Á8A<Á?A<)!rrrÚ__doc__Ú SUDOERS_FILErªrIr6rArRr5r:r>r?r<r@rJrLÚ staticmethodrFrMrUrhrjr2r3rOrqrvr4rPrCr²rrrr%r%Os€€€€€ððð+˜_ÐØ€HØ€LØ€JØÐØ€IØ€NØ€JØ€OØÐØÐØÐØÐàØ$0ð)ð)ð)ñ„\ð)ð<Ø+7ð)ð)ð)ñ„\ð)ð(Ø6Bð/ð/ð/ñ„\ð/ð0Ø'3ð&,ð&,ð&,ñ„\ð&,ðPØ'3ð#ð#ð#ñ„\ð#ð"Ø*6ð!%ð!%ð!%ñ„\ð!%ðFð*ð*ñ„\ð*ðð1ð1ñ„\ð1ðð8ð8ñ„\ð8ðð&*ð&*ñ„\ð&*ðPðE,ðE,ñ„\ðE,ðNð,,ð,,ñ„\ð,,ð\ð)-ð)-ñ„\ð)-ðVððñ„\ðððrr%)Úloggingr/rr„r“rÀr¬ÚstatrrÚ getLoggerrr-r rrrrrËr9r;rKr”r•rsrrr=rBrQrSr%rrrúrÐsððð€€€Ø € € € Ø € € € Ø € € € Ø € € € ØÐÐÐØ€€€Ø!Ð!Ð!Ð!Ð!Ð!Ð!Ð!à ˆÔ ˜8Ñ $Ô $€ð;ð;ð;ð;ð;�ñ;ô;ð;ð =ð=ð=ð=ð=�)ñ=ô=ð=ð =ð=ð=ð=ð=�yñ=ô=ð=ð ?ð?ð?ð?ð?˜ ñ?ô?ð?ð € ðIðIðIÐð RÐRÐðaÐ`Ð`Ðð�"”*Ð@ÑAÔA€Ø�B”JÐDÑEÔEÐØ�"”*Ð@ÑAÔA€ðHðHðHÐð0ÐàGÐØ7Ððzðzðzðzðzñzôzðzðzðzr