fj_ dZddlZddlZddlZddlZddlZddlZddlZddlZddl m Z m Z ddl m Z ddlmZddlmZmZddlmZmZddlmZdd lmZdd lmZmZmZmZm Z dd l!m"Z"m#Z#m$Z$dd l%m&Z&ej'd Z(ej)dZ*dZ+dZ,ej-e.Z/e Z0dZ1de e2e2ffdZ3de2de4fdZ5de2de2fdZ6de7de4dede e2e2ffdZ8ddZ9d dZ:dS)!z@ This module contains X-Ray User Manager service implementation N)Lockcurrent_thread)Tuple)BoundedThreadExecutor) get_runnerRunner)user_agent_sockuser_agent_log) XRayError)gettext)unpack_request pack_response extract_credscheck_for_rooterror_response) create_socket read_sys_idconfigure_logging)get_locale_from_envars user_agentz0^[a-zA-Z]{1,5}(_[a-zA-Z]{2})?(\.[a-zA-Z0-9-]+)?$2ireturncftd}t|dfS)zN General format of message in case of errors during manager execution z[X-Ray User Plugin failed to execute your request. Please, contact your server administrator)_rencode)_errs F/opt/cloudlinux/venv/lib64/python3.11/site-packages/xray/user_agent.pygeneral_exec_errorr /s1 j k kD $   & & ( (# --rorig_msgcRtjdd|S)zL Cut data field from the original message, because it could be huge z(?<="data": {).+(?=}, "result")z...)resubdecode)r!s r log_truncater&7s# 63UHOO.genCs7V wwqzz / / /*$ $ rs(?<="warning": ").+(?="}))r#r$)r!r-s rduplicate_warning_castr.>s(    6.X > >>rcommanduserrunnerc jdkr1 t|d<n#t$rtcYSwxYwfdd d}d}||g||}||t }t |trt |st pd}|r0|}dj d ||| d g}ndj | d g}| fd | D||d } td |t|  t!j|d| d} n6#t$t&t(t jf$rtcYSwxYw| j| j} } | r:tdt3jt5| | r?tdt3j| t9| | fS)zA Trigger runner.target utility with requested parameters manager system_idcF|jvrj||n|S)z0runner may define a special cast for each option) option_cast)optr1s rrunner_cast_optz(execute_manager..runner_cast_opt]s<6---'v!#& 36 7rc|durdnd|S)z=Hide True value from cmd representation for bool-flag optionsT=)vs r hide_true_valz&execute_manager..hide_true_valbs$YYrrGGG+r api_versionlangzC.UTF-8z /usr/sbin/--r/cTg|]$\}}|r|v d||%S)rAr<).0kr=r>r8 skip_optionss r z#execute_manager..zs^@@@1#$@)*,)>)><__Q'';q)9)9;;)>)>)>r) XRAYEXEC_UIDLANGz*Going to execute: %s, with environment: %sTx)capture_outputenvtimeoutz[%s] Proxied command stdout: %sz[%s] Proxied command stderr: %s)namerr r getr isinstancestr _LOCALE_REmatchtargetpopextenditemsloggerinfo subprocessrunOSError ValueError TypeErrorSubprocessErrorstdoutstripstderrrr&r%r.)r/r0r1api_version_key locale_optionr? target_localecasted_api_versioncmdwith_envpbyte_outbyte_errr>r8rEs ` @@@rexecute_managerrkSs{i (#.==GK  ( ( (%'' ' ' ' (77777 ,,,$OM$]3L++o..KKK /E/G/GHHM mS ) )>1A1A-1P1P>.00=I E,__==+FM++-F2D-F-F U\U`U`ajUkUkl+FM++W[[-C-CDJJ@@@@@@ @@@AAA!%m<>+;+;hH, 5~7G7G7L ** , , ,' 5~7G7G7LOO%% ' ' ' !( + +X 55s#>><F0GG connection socket objectc  tjdtdid}|5|dt |\}}}t |rB|t| ddddSt5t |dtkr4td| dddddddSt|xxd z cc<dddn #1swxYwY |d }|rt!|d kr[ t5t|xxd zcc<t|dkrt|=dddn #1swxYwYddddSt#jd |d}|dks |t&kr[ t5t|xxd zcc<t|dkrt|=dddn #1swxYwYddddSd }t!||kr||t!|z }|s[ t5t|xxd zcc<t|dkrt|=dddn #1swxYwYddddS||z }t!||k t)|} n#tjt,f$r} |ttjdt/| idYd} ~ t5t|xxd zcc<t|dkrt|=dddn #1swxYwYddddSd} ~ wwxYw t1| d } n#t4$r} |tt/| Yd} ~ t5t|xxd zcc<t|dkrt|=dddn #1swxYwYddddSd} ~ wwxYw | | n#t8$r} |tt/| Yd} ~ t5t|xxd zcc<t|dkrt|=dddn #1swxYwYddddSd} ~ wwxYwt;| t/|| \} } |t| p| nu#t<t>j f$r\Yt5t|xxd zcc<t|dkrt|=dddn #1swxYwYddddSwxYw t5t|xxd zcc<t|dkrt|=dddn #1swxYwYnR#t5t|xxd zcc<t|dkrt|=dddw#1swxYwYwxYwddddS#1swxYwYdS)z Handle incoming connection :param connection: socket object usable to send and receive data on the connection resultz#Commands from root are not acceptedF) ensure_asciig@Nrz6Too many concurrent connections from uid=%s, rejectingz>Irr1)!jsondumpsr settimeoutrrsendallrr_uid_connections_lock_uid_connectionsrN_MAX_CONNECTIONS_PER_UIDrWwarningrecvlenstructunpack_MAX_REQUEST_SIZEr JSONDecodeErrorUnicodeDecodeErrorrPrrTr validator SystemExitrkr[socketrL)rl root_error_pid_uid_gid raw_msglenmsglendatachunkargser1_outrs rhandlers !9::J 8/8/c"""(44dD $      }Z->->-@-@AA B B B  8/8/8/8/8/8/8/8/# ( (##D!,,0HHHWY]^^^ ( ( ( ( ( (8/8/8/8/8/8/8/8/ T " " "a ' " " "  ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( + /#++J Z1!4!4J' / / &&&!+&&&#D)Q..(. / / / / / / / / / / / / / / /k8/8/8/8/8/8/8/8/$]444Q7F{{f'888B' / / &&&!+&&&#D)Q..(. / / / / / / / / / / / / / / /k8/8/8/8/8/8/8/8/,Dd))f$$"T(:;;6' / / &&&!+&&&#D)Q..(. / / / / / / / / / / / / / / /k8/8/8/8/8/8/8/8/6  d))f$$  %d++(*<=   ""=J#a&&1FFFMMOO$Q$QRRR&' / / &&&!+&&&#D)Q..(. / / / / / / / / / / / / / / /k8/8/8/8/8/8/8/8/>   #DHHX$6$677   ""=Q#A#ABBB' / / &&&!+&&&#D)Q..(. / / / / / / / / / / / / / / /k8/8/8/8/8/8/8/8/L    &&&&   ""=Q#A#ABBB' / / &&&!+&&&#D)Q..(. / / / / / / / / / / / / / / /k8/8/8/8/8/8/8/8/X )s4yy&AAJD$   }T\T:: ; ; ; ;(    & / / &&&!+&&&#D)Q..(. / / / / / / / / / / / / / / /k8/8/8/8/8/8/8/8/d  <' / / &&&!+&&&#D)Q..(. / / / / / / / / / / / / / / /& / / &&&!+&&&#D)Q..(. / / / / / / / / / / / / / / / /k8/8/8/8/8/8/8/8/8/8/8/8/8/8/8/8/8/8/sA-["[)AD#* [D# [#D' '[*D' +[/*V1[!/F [F [#F $[4,V1![(/H# [#H' '[*H' +[; >[J> [V1+K;:V1;O AO(V1,[3/N." [.N2 2[5N2 6[O  V1"O21V12 R  [ X [X ["X##Y5'[./Y) [)Y- -[0Y- 1[5[=/Z8 , [8Z< <[?Z< [[[[ctttt5}t t d5} |\}} |t|nC#tj $r1t d| YnwxYwx#1swxYwYddddS#1swxYwYdS)z Run listening service r) max_workers maxqueuesizeTz(Connection rejected: thread pool is fullN)rr rr r _MAX_WORKERSacceptsubmitrqueueFullrWerrorclose)spoolconnrs rrZrZs<n%%%  ' '1  >CB> CCC)rlrmrN)rN);__doc__ collectionsrsloggingrr#rr}rY threadingrrtypingrxray.agent.executorr#xray.console_utils.run_user.runnersrrxray.internal.constantsr r xray.internal.exceptionsr xrayr rxray.internal.user_plugin_utilsr rrrrxray.internal.utilsrrrclcommon.clwpos_libr getLoggerrWcompilerQrry defaultdictintrxrwrbytesr rPr&r.dictrkrrZr<rrrs  ********555555BBBBBBBBCCCCCCCC......NMMMMMMMMM666666  < ( ( RZK L L  *;*3//.E%,/....O5OSOOOO?U?u????*96T9696f96ue|AT96969696xA/A/A/A/H      r