j( dZddlZddlZddlZddlmZddlmZddlm Z ddl m Z m Z m Z mZmZmZddlmZddlmZdd lmZmZdd lmZd d lmZd d lmZd dlmZm Z m!Z!m"Z"m#Z#ej$dZ%de&fdZ'Gdde Z(eGddZ)GddeZ*Gdde*Z+Gdde*Z,de)fdZ-d/de.de e+e,ffdZ/d/de.d e.ddfd!Z0d0d#Z1d1d%e.d&e&ddfd'Z2d1d%e.d&e&ddfd(Z3d/d%e.dee e.ee.ffd)Z4de fd*Z5dee e.e,ffd+Z6dee.fd,Z7d2d-Z8d2d.Z9dS)3zF This module contains a config parser for cloudlinux-xray-autotracing N) ConfigParser) dataclass)Enum)AnyUnionTupleIteratorListOptional)ClPwd)Feature)cpusersis_panel_feature_supported)CPAPIException) flag_fileSSAError)umask_0set_privilegesis_xray_user_agent_active xray_versionis_kernel_version_supportedzautotracing.configreturnc4ttjS)zACurrently Auto tracing feature is not supported on Shared edition)rr AUTOTRACINGM/opt/cloudlinux/venv/lib64/python3.11/site-packages/ssa/autotracing/config.pyis_autotracing_supportedr &s %g&9 : ::rceZdZdZdZdZdS)Statusz Autotracing statuses enableddisabledN)__name__ __module__ __qualname____doc__ENABLEDDISABLEDrrrr"r"+s$GHHHrr"c2eZdZUdZeed<eed<eed<dS)Userz User container uidnamehomeN)r%r&r'r(int__annotations__strrrrr,r,3s7 HHH III IIIIIrr,c^eZdZdZdZd dZdededdfdZdedefd Zdeddfd Z defd Z dS) AutotracingConfigz) Autotracing basic config parser confrNctj|j}tj|stj|dSdS)zh If subdirectory location for autotracing config file does not exist, create it N)ospathdirname config_fileexistsmkdir)self subdir_paths rcheck_config_dirz"AutotracingConfig.check_config_dirCsP good&677 w~~k** " H[ ! ! ! ! ! " "rkeyvaluec|||j|<|t|jd5}||ddddS#1swxYwYdS)D Set given config item 'key' to given value 'value' wN) main_sectionr?openr:write)r=r@rA configfiles rset_config_valuez"AutotracingConfig.set_config_valueLs(-T $  $"C ( ( #J JJz " " " # # # # # # # # # # # # # # # # # #sAA!$A!c\||j||j|S)rC)readr:rE)r=r@s rget_config_valuez"AutotracingConfig.get_config_valueUs, $"###D%&s++rc2|d|dS)" Set given status statusN)rI)r=rAs r set_statuszAutotracingConfig.set_status\s  h.....rc,|dS)rNrO)rL)r=s r get_statuszAutotracingConfig.get_statusbs$$X...rrN) r%r&r'r(rEr?rrIrLrPrRrrrr4r4=sL""""#C######,C,C,,,,////// /C//////rr4c"eZdZdZfdZxZS)AdminLevelConfigzAdmin level autotracing configcpddi}d|_t||jddS)NrOr$z/usr/share/clos_ssa/autotracingFdefault_sectionstrict)r:super__init__rE)r=defaults __class__s rr[zAdminLevelConfig.__init__ksN j = 43D %  ' ' ' ' 'r)r%r&r'r(r[ __classcell__r]s@rrUrUis>(('''''''''rrUc(eZdZdZdeffd ZxZS)UserLevelConfigzUser level autotracing config configpathcdti}|d|_t||jddS)NrOz/.ssa/autotracingFrW)rUrRr:rZr[rE)r=rbr\r]s rr[zUserLevelConfig.__init__vsj &((3355 );;; 43D %  ' ' ' ' 'r)r%r&r'r(r2r[r^r_s@rraratsJ'''3''''''''''rractjtj}t |j|j|jS)z* Get current user and his details )pwdgetpwuidr7getuidr,pw_uidpw_namepw_dir)pw_entrys rwho_am_irls2|BIKK((H !18? C CCr user_homect}|jdkr!|rt|}nAt}n2t rt|j}nt d|S)zF Initialize correct config file instance depending on context rzAuto tracing management is not available. Reason: X-Ray End-User plugin is not enabled, please contact your system administrator for help.)rlr-rarUrr/r)rm current_user conf_instances rconfig_instancerqs::L1  /+I66MM-..MM % & & ^+L,=>>MM]^^ ^ rrAuserc|r tj|}n&#t$r}td|d|d}~wwxYw t |j|j5t|j |ddddS#1swxYwYdS#t$r}t|j |d}~wwxYwtd5t |ddddS#1swxYwYdS)z zUser 'z ' not foundN target_uid target_gid) regetpwnamKeyErrorrrrhpw_gidrqrjrPPermissionErrorstrerrorr)rArrpw_dataes rrIrIs 0 >l4((GG > > >5D55566A = > .7>+2>;;; B B//::5AAA B B B B B B B B B B B B B B B B B B . . .1:&&A - .U^^ 0 0    ( ( / / / 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0s^ <7<B(B BBBBB C'B<<C"DD Dsuccessc P t}|j|j}}n%#t$rt jd}}YnwxYw |!t d|||||dSt d|||||t|dS#t$rYdSwxYw)Nunknownz7[audit] operation=%s status=%s uid=%d user=%s target=%sz@[audit] operation=%s status=%s uid=%d user=%s target=%s error=%r) rlr-r. Exceptionr7rgloggerinfor2) operationtargetrOerrorcaller caller_uid caller_names r_audit_autotracingrs9"(*fkK 999"$)++yK 9  = KKI6:{F D D D D D KKR6:{FCJJ P P P P P      s'AA!B(-B B%$B%Fusernamemode_allcL|r|n|rdnd} td}n#t$r}|j}Yd}~nd}~wwxYw |r|tt t jj|n&#t$r}td|d|d}~wwxYwtd||S)z Enable autotracing. If username is given, the user's config is changed in Admin's mode. Perform some misconfiguration checks before enabling and do not enable if some of them appear all_usersglobalNautotracing_enablefailurerOr) misconfiguration_checksrreasonremove_custom_users_configsrIr"r)rArr)rrrissuer~s renablers" NXXx(M XF!!!    *( ' ) ) )-x8888 / QRSSSS +V444 Ls' 8381A.. B8B  Bc|r|n|rdnd} |r|tttjj|n&#t $r}t d|d|d}~wwxYwt d|dS)ze Disable autotracing. If username is given, the user's config is changed in Admin's mode rrNautotracing_disablerr)rrIr"r*rArr)rrrr~s rdisablers " NXXx(M XF  *( ' ) ) ).9999 0&RSTTTT ,f55555s1> A!AA!c td}n#t$r}|j}Yd}~nd}~wwxYw|w tt |dfS#tj$r"}tt||d}~wwxYwt|fS)zk Get status of autotracing. If username is given, the status for a particular user is returned N) rrrrar get_homedirrRNoSuchUserExceptionr2rU)rrr~s rrOrOs !!!   *"##H--jllD! !( * * *3q66"" ) *    ( ( * *E 11s( .).AA66B'B""B'c\ tS#t$rtcYSwxYw)zP Get panel users via cpapi, ignoring exceptions like NotSupported, etc. )rrtuplerrr _panel_usersr s9yy wws ++c#KtD]M} t|}n#tj$rY6wxYw|t |fVNdS)zT Iterator over all users on the server along with their autotracing configs N)rr rrra)rr_homedirs r user_configsrs.. ww**400HH(    H OH------- ..s!6AAc2dtDS)zGet list of disabled userscfg|].\}}|tjjk,|/Sr)rRr"r*rA).0ruserconfs r z"disabled_users..!sB < < <+8    ! !V_%: : :  : : :r)rrrrdisabled_usersrs& < <|~~ < < <+2>;;; L L7>>"2">??LI.:;;;HRW__-=-IJJKKK  L L L L L L L L L L L L L L L  . . .1:&&A - . . .s<CA4C8 CC C C C C4C//C4c4dtdtdtfd}ts |ddts |ddt |d d t jts |d d d S)z(Additional checks for known malfunctionsrfixrc4|d|d}t|dS)Nz . You should z" in order to get Auto Tracing workwarning)flagr)rrmessages r make_errorz+misconfiguration_checks..make_error9s+QQ#QQQi0000rz@Your current server setup is unsupported by Auto Tracing featurez*switch Control Panel or CloudLinux editionz1Your kernel does not support throttling detectionzupdate the kernelNzX-Ray is not installedz install X-RayzSlow Site Analyzer is disabledz enable it) r2rr rrr7r8rr)rs rrr6s131S1X1111 $ % % j N 8   ' ( ( j ?    ~~j1?CCC 7>>) $ $Hj9;GGGHHr)N)rN)NFrS):r(loggingr7re configparserr dataclassesrenumrtypingrrrr r r clcommon.clpwdr clcommon.constr clcommon.cpapirrclcommon.cpapi.cpapiexceptionsrinternal.constantsrinternal.exceptionsrinternal.utilsrrrrr getLoggerrboolr r"r,r4rUrarlr2rqrIrrrrOrrrrrrrrrs %%%%%%!!!!!!>>>>>>>>>>>>>>>> """""">>>>>>>>999999************  / 0 0;$;;;; T  )/)/)/)/)/ )/)/)/X'''''(''''''''''''D$DDDDse4Do4U.V200C0s0d0000,    &S4D4 6 6c 6D 6T 6 6 6 6 22S2HU3 3E-F$G2222,e .huS/%9:; . . . .<S <<<< ...."HHHHHHr