}Ce:ddlmZddlmZddlmZddlZddlZddlZddlZddlZddl Z ddl m Z m Z Gdde ZGdd e ZGd d e ZGd d e ZdZgdZdgZgdZdZdZdZGddZdS))absolute_import)division)print_functionN)S_IRUSRS_IRGRPceZdZdZdS) NoSuchUsercDt|d|ddS)NzNo such user () Exception__init__)selfusers /builddir/build/BUILDROOT/alt-python27-cllib-3.3.7-2.el7.cloudlinux.x86_64/opt/cloudlinux/venv/lib/python3.11/site-packages/clsudo.pyrzNoSuchUser.__init__s'44!>?????N__name__ __module__ __qualname__rrrr r s(@@@@@rr ceZdZdZdS) NoSuchGroupcFd|z}t||dS)NzNo such group (%s)r )rgroupmessages rrzNoSuchGroup.__init__s(&.4)))))rNrrrrrrs#*****rrceZdZdZdS)UnableToReadFilec<t|ddS)NzCannot read sudoers filer rs rrzUnableToReadFile.__init__!s4!;<<<<>>>>rNrrrrr"r"%s#?????rr"z /etc/sudoers)z/bin/psz /bin/grepz /sbin/servicez%/usr/bin/getcontrolpaneluserspackagesz/usr/sbin/lvectlz>/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)/usr/bin/cl-selectorz/usr/bin/pinisetz/usr/sbin/lvepsz/usr/bin/selectorctlzDefaults:%s !requirettyz-%%%s ALL=NOPASSWD: LVECTL_CMDS, SELECTOR_CMDSzDefaults:%%%s !requirettycxeZdZdZdZgZdZdZdZdZ dZ dZ dZ dZ dZdZeefdZeefdZeefdZeefdZeefdZeefd Zed Zed Zed Zed ZedZedZedZdS)Clsudoz/ Adds CloudLinux users to sudoers file NFct|t|t|tjs:tjddtztj s:tjddtztj s:tjddtztj s"tj|dtjs"tj|dtjs"tj|dtjs(tjt"|fztdS) z@ Adds username to sudoers file (for lvemanager) 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_CMDSN)r&update_commands_list _check_user _get_contents has_alias sudoers_listappendjoinALIAS_LVECTL_CMDShas_user_aliasALIAS_LVECTL_USER_CMDShas_selector_aliasALIAS_SELECTOR_CMDS has_rightshas_user_rightshas_selector_rights has_actionDEFAULTS_REQUIRETTY_write_contentsr sudoers_files radd_userzClsudo.add_userJs ##L1114   T""" c   & &'BTYYO`EaEa'a b b b$ m   & &'G$))TjJkJk'k l l l( g   & &'DtyyQdGeGe'e f f f  Q   & &'O P P P% \   & &TXTXTX'Z [ [ [) S   & &444'Q R R R  F   & &':dW'D E E E     rc|t_t|t|tjstjdtjs"tj|dtjs(tjt|fzt dS)z< Adds username to sudoers file (for cagefs) zOCmnd_Alias CAGEFS_CMDS = /usr/sbin/cagefsctl, /bin/ps, /bin/grep, /sbin/service ALL=NOPASSWD: CAGEFS_CMDSN) r&filepathr/r0has_cagefs_aliasr2r3has_cagefs_rightsr=r>r?r@s radd_cagefs_userzClsudo.add_cagefs_userds '4   T"""& L   & &(K L L L' Q   & &'O P P P  F   & &':dW'D E E E     rct|t|t|tjs:tjddtztj s:tjddtztj s(tjt|fztj s(tjt|fztdS)zJ Adds group to sudoers file, grants access to LVE Manager r(r)r*N)r&r. _check_group_get_contents_groupr1r2r3r4r5r8r9r=GROUP_LVECTL_SELECTORhas_group_actionGROUP_DEFAULTS_REQUIRETTYr?) group_namerAs radd_lvemanager_groupzClsudo.add_lvemanager_groupus ##L111J'''"":... c   & &'BTYYO`EaEa'a b b b( g   & &'DtyyQdGeGe'e f f f  N   & &'< }'L M M M& R   & &'@J='P Q Q Q     rcp|t_ ttj}|t_|d}d}|ttjkrjtj|}|d|vs t|fz|vr"tj |d}e|dz }|ttjkj|rt dSdS#ttf$rtwxYw)z5 Removes username from sudoers file rFz ALL=NOPASSWD:TN)r&rEopenread splitlinesr2closelenr>remover?IOErrorOSErrorr)rrAfidxremovedlines r remove_userzClsudo.remove_users4 ' %V_%%A"#&&(("5"5"7"7F  GGIIICGF/0000*3/+/441d::ATX\W^A^bf@f@f'..t444"Gq F/0000 )&&((((( ) )! % % %"$$ $ %s DD D5ct|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 N)r&r.r/r0r@s r update_userzClsudo.update_usersH ##L111 4   T"""""rc |t_tjtjt_tttd}d}tttj D]}tj |}| D]\}}||vr| |d}|d}|D]@}||vr:d}d|d|tj |<nA|rtdS) 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 )Cmnd_Alias LVECTL_CMDSCmnd_Alias SELECTOR_CMDSF,Tz {0} = {1}r)N)r&rEospathdirnametemp_dir _read_sudoersr5r9rangerWr2itemsreplacestripsplitformatr4r?) rA cmnd_dictis_sudoer_changer\command_string aliase_key aliase_list cmnd_listaliase_cmnd_items rr.zClsudo.update_commands_lists]''//&/::/@1DFF  V01122 ) )C#05N+4??+<+< " "' K//%3%;%;J%K%K%Q%Q%S%SN . 4 4S 9 9I,7""(+9<  ! !ffhh1133  rcdt_dt_dt_dt_dt_dt_dt_dt_dt_ dt_ tj d|z} t tttjD]}dtj|vr dt_$dtj|vr dt_Edtj|vr dt_ f|dtj|vr dt_|dtj|vr dt_|d tj|vr dt_ d tj|vr5|tj|}|r dt_d tj|vrd tj|vr3tj|d dtj|<dtj|vr3tj|ddtj|<dt_|dtj|vrdt_dS#t&t(f$rt+wxYw)zM Reads file into list of strings @param user: string FzDefaults:\s*%s\s*!requirettyrcTzCmnd_Alias LVECTL_USER_CMDSCmnd_Alias CAGEFS_CMDSr+r,rD requirettyrdpinisetr$&/usr/bin/cl-selector, /usr/bin/pinisetlveps7/usr/bin/cl-selector, /usr/bin/piniset, /usr/sbin/lvepsr-N)r&r=rMr1r6r:r;r8r<rFrGrecompilerkrlrWr2searchrnrYrZr)rrequire_tty_patternr\ pattern_matchs rr0zClsudo._get_contentss""'  %!!&$)!%*""'#(  j)H4)OPP) %  " " "S!45566$ $ +v/B3/GGG'+F$0F4G4LLL,0F)+v/B3/GGG.2F+59TT;v?RSV?WWW(,F%@DF&J]^aJbbb-1F*59TT;v?RSV?WWW/3F,6#6s#;;;$7$>$>v?RSV?W$X$XM$1,0)-1DS1III (;C(@@@393Fs3K3S3S24\4^4^+C0f&9#&>>>393Fs3K3S3SDU4W4W+C015F-7;tt=ATUXAYYY15F.ZE$ $ J! % % %"$$ $ %s H1K K$cdt_dt_dt_dt_dt_dt_dt_dt_d|z}d|z}tj |d} t tttjD]}}dtj|vrdtj|vr3tj|ddtj|<d tj|vr3tj|dd tj|<d t_d tj|vr d t_d tj|vr d t_tj||r3|tj|}|r d t_tj||r d t_dS#t$t&f$rt)wxYw)zS Reads file into list of strings @param group_name: string Fz%%%sz Defaults:%%%sz/\s*ALL=NOPASSWD:\s*LVECTL_CMDS,\s*SELECTOR_CMDSrdrr$rrrTrcrN)r&r=rMr1r:r8r<rFrGrrrkrlrWr2rn startswithrrYrZr)rO group_prefix group_action group_patternr\rs rrKzClsudo._get_contents_group)s.""' !$)!%*""'#(  * &3  [e[e[e#ghh  %  " " "S!45566 3 3-1DS1III (;C(@@@393Fs3K3S3S24\4^4^+C0f&9#&>>>393Fs3K3S3SDU4W4W+C015F-+v/B3/GGG'+F$+v/B3/GGG.2F+&s+66|DD1$1$8$89LS9Q$R$RM$1,0)&s+66|DD3.2F+- 3 3.! % % %"$$ $ %s F>I I#c tjtj}d}t j||\}}tj|d}|d tj dz| ttz}tj||t|st n_#t t"f$rK tj|rtj|n#YnxYwt)wxYw tj|tjdS#t"$rt)wxYw)zX Writes data to temporary file then checks it and rewrites sudoers file lve_sudoers_)prefixdirw N)rgrhrir&rEtempfilemkstempfdopenwriter4r2rVrrchmod_is_file_validrYrZexistsunlinkr"rename)rj temp_prefixfd temp_pathfomasks rr?zClsudo._write_contentsYsf  &wv77H(K$,KXNNNMB 2s##B HHTYYv233d: ; ; ; HHJJJW$D HY % % %((33   ! & & & 7>>),,)Ii((( #%% %  & & Ii 1 1 1 1 1 & & &#%% % &s0C'C**E<3D0/E0D42E E++Fcddd|g}tj|tdtjtjd}||jdkrdSdS) Nz/usr/sbin/visudoz-cz-fz /dev/nullT)stdinstdoutstderr close_fdsrF) subprocessPopenrSPIPESTDOUT communicate returncode)filenamecmdrvs rrzClsudo._is_file_validust   (    {##?$   =A  5tr)rrr__doc__rEr2r=rMr1r6r:r;r8r<rFrG staticmethod SUDOERS_FILErBrHrPr_rar.r/rJrkr0rKr?rrrrr&r&9sHLJINJO$0!!!\!2+7!!!\! 6B!!!\!&'3%%%\%.'3 # # #\ #*6)))\)<##\#**\*\ ;%;%\;%z-%-%\-%^&&\&6\rr&) __future__rrrrgrzrrrrstatrrr r rrr"rr5r7r9r>rLrNr&rrrrs'&&&&&%%%%%% !!!!!!!!@@@@@@@@ *****)*** =====y=== ????? ???  IIIRRmmm/G7LLLLLLLLLLr