jVoddlmZddlmZddlmZddlZddlZddlZddlmZddlm Z ddl m Z ddl Z ddlZddlZddlZddlZddlmZmZdd lmZdd lmZdd lmZmZdd lmZdd lmZmZmZm Z m!Z!m"Z"m#Z#ddl$m%Z%m&Z&ddl'm(Z(m)Z)ddl*m+Z+m,Z,ddl-m.Z.ddlm/Z/m0Z0ddlm1Z1m2Z2m3Z3m4Z4ddlm5Z5m6Z6ej7e8Z9e9:ej;ej<e=ddZ>e9?e>dZ@dZAdZBdZCdZDdZEdZFdZGd ZHd!ZId"ZJd#ZKd$ZLd%ZMd&ZNd'ZOd(ZPd)ZQd*ZRd+ZSd,ZTd-ZUd.ZVd/ZWd0ddeGdfd1ZXd2ZYdAd3ZZd4Z[eGfd5Z\d6Z]d7Z^dBd8Z_d9Z`d:ZadBd;Zbd<Zcd=Zdd>Zed?Zfd@ZgdS)C)absolute_import)print_function)divisionN)datetime) iteritems) configparser) clcaptainutils) userdomains)*get_file_system_in_which_file_is_stored_on)get_file_lineswrite_file_lines) mod_makedirs) QuotaWrapperNoSuchUserExceptionInsufficientPrivilegesExceptionIncorrectLimitFormatExceptionGeneralExceptionNoSuchPackageExceptionQuotaDisabledException)PyLve PyLveError) set_user_perm set_root_perm)DictUnion)ClSelectExcept)file_readlines file_write) get_abs_relmkdir_p file_readfile_writelines)get_using_realpath_keysrealpaths_are_equalz /dev/nullwz9# DO NOT REMOVE. CLOUDLINUX PASSENGER CONFIGURATION BEGINz7# DO NOT REMOVE. CLOUDLINUX PASSENGER CONFIGURATION ENDz config.ruzapp = proc do |env| message = "It works!\n" version = "Ruby %s\n" % RUBY_VERSION response = [message, version].join("\n") [200, {"Content-Type" => "text/plain"}, [response]] end run app ztmp/restart.txtzpassenger_wsgi.pyaMimport os import sys sys.path.insert(0, os.path.dirname(__file__)) def application(environ, start_response): start_response('200 OK', [('Content-Type', 'text/plain')]) message = 'It works!\n' version = 'Python %s\n' % sys.version.split()[0] response = '\n'.join([message, version]) return [response.encode()] zapp.jsaCvar http = require('http'); var server = http.createServer(function(req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); var message = 'It works!\n', version = 'NodeJS ' + process.versions.node + '\n', response = [message, version].join('\n'); res.end(response); }); server.listen(); cftj|}t|j|jddS)NFexit)pwdgetpwnamrpw_uidpw_giduseruserpwds K/opt/cloudlinux/venv/lib64/python3.11/site-packages/clselect/clpassenger.pydrop_root_permr3^s0l4  G'.'.??????c t||d}tj|tj|S#t $rYdSwxYw)Nsurrogateescapeerrors)openfcntlflockfilenoLOCK_EXIOError) config_pathmode conf_files r2get_config_lockrBcsdd3DEEE  I$$&& 666 ttsAA AAc@ |dS#YdSxYwN)close) lock_files r2 release_lockrGls-   scd}tjdkstjdkrt|d}d} t |t |d}t j}||tj|| ng#tttjtjf$r=}t#jt"jd||Yd}~nd}~wwxYwt)||rt+ddSdS#t)||rt+dwwxYw)zS Write config with locking. Drop permissions if method called as root. FrTNrzCan't write {}: {}r))osgetegidgeteuidr3check_and_createdirrBioStringIOwriter getvaluer>OSErrorrUnableToSaveDatar ExternalProgramFailedsyslog LOG_WARNINGformatrGr)r0r?configpermissions_dropped config_file file_contentes r2 write_configr]ss    z||qBJLLA--t"K&K(((%k377 {}}  \""" \%:%:%<%<==== Wn=u?Z [CCC f(*11+qAA C C C C C C C CC [!!!  & u % % % % % % & & [!!!  & u % % % % % &s1A.B43E4'D3DEDE$E$c,tj|}tj|sU t j|dS#t tjtjf$r}tj ||d}~wwxYwdSrD) rJpathdirnameisdirr mkdirrRrrTr rS)r_user_backup_pathr\s r2rMrMswt,, 7==) * *G G O, - - - - -=u?Z[ G G G 12BAFF F G GGsA!B7B  Bcvtj|}tj|jddS)Nz .cl.selectorhtaccess_cache)r+r,rJr_joinpw_dirr/s r2get_htaccess_cache_pathrhs,l4  G 7<<8H I IIr4c|d}d}i}tj|r tj|}|j|d<|j|d<|j|d<t|j|d<tj |j  ||d<tj |j  ||d<|dd kr|S t|d 5}|||d <|| d |||d <dddn #1swxYwYn,#t"t$f$r}d|d|d||d<Yd}~nd}~wwxYwt'|d|d<n)#t"t$f$r}d|d||d<Yd}~nd}~wwxYw|S)zp Get info (stat, first n symbols and file system in which file is stored) about htaccess_cache file z%Y-%m-%d %H:%M:%Sd file_sizegiduid permissions last_accesslast_modificationrrI first_symbols last_symbolsNzWe cannot get first and last z symbols from "z" file. Exception: errordetails file_systemzWe cannot get info about ")rJr_existsstatst_sizest_gidst_uidoctst_moder fromtimestampst_atimestrftimest_mtimer9readseekrRr>r ) path_to_file time_formatnumber_of_symbols file_info file_statferrs r2#_get_info_about_htaccess_cache_filerso&KI w~~l##  --I%.%6Ik "(/Ie (/Ie '*9+<'='=Im $'/'=i>P'Q'Q'Z'Z[f'g'gIm $-5-CIDV-W-W-`-`al-m-mI) *%**   ,,,J128I1J1JIo.FF--q111017H0I0IIn- JJJJJJJJJJJJJJJ W%    %%% LLC& '""""""  (RR^'_'_`i'jIm $ $!     "Ig        sgB4FE.AE6 EEE E E FE7E2-F2E77FF9$ F44F9ctt} t}|||}|j|jz |d<|j|d<|j|d<|j|d<|j |d<|j |d<|j |d<n"#t$r}d|d ||d <Yd }~nd }~wwxYw|S) zB Getting user lve limits for logging those for next debug cpupmemvmemrNiopsepnprocz,We cannot get lve limits for user with uid "". Exception: rtN) dictr initializelve_infols_cpu ls_cpu_weight ls_memory_phy ls_memoryls_iols_iops ls_entersls_nprocr)user_uidresultpy_lve user_limitsrs r2_get_user_lve_limitsrs VVF ooh// #*[-FFu $2v$.v"(t $,v",t %.w      w MsBB B5 B00B5c 4t}t|} t}|||}|}nM#tt t tttttf$r}d|d||d<Yd}~nd}~wwxYw|S)zD Getting user quota limits for logging those for next debug z.We cannot get quota limits for user with uid "rrtN) rstrrget_user_limitsrrrrrrr>rR)rr quota_wrapper user_quotasrs r2_get_user_quota_limitsrs VVF8}}H $ #33H==hG   " +  ) "         HH C w   Ms+A 5B BBcHt|}t}||d<t|d< tj|j}n*#t $r}d|d||dd<d}Yd}~nd}~wwxYw|t|dd<|ddt|t|dd<|ddt|t |d | dS) zy Logging info (lve & quota limits) about user and info (stat info, first & last n symbols) about config file config_file_info user_infozUser "z" does not exist. Exception: rtN lve_limits quota_limitsT)exc_infoextra) rrr+r,r-KeyErrorupdaterrlogger exception)r0r?rtr debug_inforrs r2*_log_debug_info_about_user_and_config_filers;4K@@IJ%.J!""ffJ{<%%,  DD C, ;(  04 ; -; -445I(5S5STTT26&& ;/;/667Mh7W7WXXX UT<<<<rRr ParsingErrorMissingSectionHeaderError_unlinkrUrVrWrG)r0rXr?rZrs r2 read_configr"s@  ) 7 7 7F)$//K!+s33K & MM+ & & & &! O O O 6t[# N N N N N N N N)<+QR @ @ @ K M&,077 DD F F F"1???FFF  @  % % % %L % % % % ; s<A C?C,A50C?5A4C,)C?+C,,C??Dct|\}}||rB ||dd}|S#tj$rYdSwxYwdS)N htaccess_list,)r has_sectiongetsplitr NoOptionError)r0doc_rootrX_rs r2get_htaccess_cacher9sD!!IFA (## "JJxAAGGLLM )   44  4s*AA'&A'cb|d}ttt|}t |\}}||s||||dd|t|||dS)N rr) rlistfilterboolrr add_sectionsetrfr])r0rdatarXr?s r2write_htaccess_cacherDs ::d  D tT"" # #D%d++FK   h ' '%8$$$ JJx#((4..999{F+++++r4ct|\}}||r*||dd}n.||||ddg}||vrt||ttt|}||dd |t|||dSdS)Nrr) rrrrrrappendrrrrfr])r0rrrXr?rs r2update_htaccess_cacherPs%d++FK (## 8_==CCCHH 8$$$ 8_b111 =((\***VD-8899  8_chh}.E.EFFFT;///// )(r4ct|d}g}d}|D]R}|trd}|trd};|s||St |}t ||dddS)z Removes clpassenger lines from .htaccess to stop application :param htaccess_filename: Application .htaccess path :return: None r6r7FTr'N)r startswithHTACCESS_BEGIN HTACCESS_ENDrrm_double_empty_linesr$)htaccess_filenamelines new_lines in_configlines r2$remove_passenger_lines_from_htaccessr_s ,5F G G GEII## ??> * * I ??< ( ( I  #   T " " "%i00I%y#>OPPPPPPr4Tc t||\} } tj| r3tj| st jd|dvrt jd|zt|} t||| } |dkr| d}t jd|z|s| d}n)#t$r|t j d |zYnwxYw|d krtj |}t|tj ||\}} tj |d }d }tj|rt|d }t|vr| D]}tj |dtjz}tjtj||tjzgd kr'|d}|| krt jd|zd}|}ng}|rC|d |t|d| z|d|z|d|d|d|dkr-|d|d|z| r|dvr|d| z|t.t1|}t3|t5|d|Dd t7||||rt9||||dSdS)aX Configure passenger application :param user: name of unix user :param directory: name of dir in user home :param alias: alias of application :param interpreter: interpreter which execute application :param binary: binary of interpreter that execute application :param populate: True if application have to be be populated :param action: action with apllication. can be transit or None :param doc_root: doc_root :param startup_file: start application file :param passenger_log_file: Passenger log filename to write to app's .htaccess :return: None z,Destination exists and it is not a directory)pythonrubynodejszUnsupported interpreter ('%s')transit directoryz(Specified directory already used by '%s'docrootNz8No such application (or application not configured) "%s"r .htaccessTr6r7aliaszhSpecified alias is already used by the other application: '%s'. Please, specify another application url.FzPassengerAppRoot "%s"zPassengerBaseURI "/%s" Passengerz ""rzPassengerAppType nodezPassengerStartupFile %s)rrzPassengerAppLogFile "%s"c3 K|] }d|zV dSz%s N.0rs r2 zconfigure..s&"C"CT6D="C"C"C"C"C"Cr4) startup_file)r!rJr_rwrar WebAppErrorInterpreterErrorsummaryr%rNoSuchApplicationnormpathrfr#rvaluessepr` commonprefix splitlinesrtitlerrr"r$r populate_app)r0rr interpreterbinarypopulateactionrrpassenger_log_fileabs_dirr user_summary app_summary exists_dir abs_aliashtaccesshtaccess_needs_update htaccess_rawitem item_aliasrs r2 configurervs T9--JGQ w~~g+>+>+>GHHH ( " " LL0 1 1 1 LL2\A B B B  J+1E"E"E LL36HH I I I \"""%e,, "C"CU"C"C"CL]^^^^dHh777NT9k MMMMMMNNsC#C87C8c tt|D]\}}|\}}tj|d|dftj}|d|tjzs!tj d|dd|d|dt|dzd}tj |d}tj |d}||tjzstj d|d|d|t|dzd} tj t|| d|} |d } t| t!||||d | |d  dS) Nrrz Directory 'z' not under common home ''rz Binary dir 'rr rr)r)r_summaryrJr_rrstriprrr WrongDatalenr`basenamerfr! _unconfigurer) r0 domain_aliasrrrold_homer binary_dir binary_name_binaryr htaccess_paths r2 fix_homedirrs'77aa d5 7''k):DN(KLLSSTVTZ[[K ++Hrv,=>> ] **?CK?P?P?PRZRZRZ[]] ]%c(mma&7&8&89 W__T(^44 g&&tH~66 $$X%677 W **@J HHHUWW WS]]Q.//0k$88;[IIZ( ]###$ 5$}*=vPTU^P_`````1aar4cPt||t|}|p|d}|p|}tj||}tj|d}tj||} tj| d} t ||| sht |t|d} t|d t| | ddt|| |dSdS)Nrrr6r7r'a) r%rrJr_rfr&rrr9rEr$r) r0r old_alias new_alias old_doc_root new_doc_rootapp_data old_abs_alias old_htaccess new_abs_alias new_htaccessrs r2mover)s&tY FFH68I#6L/"8,, =>#F++~=h 0 x / / /  "4  L ! ! ! FOOO   ! 9 |]C 8 8 8  n  H    FOOO   /wv..H7==** .Xu--- v~ . . .    L ! ! ! H    D)r4cR tj|dS#t$rYdSwxYwrD)rJunlinkrR)r_s r2rr;s:  $      s  &&c<tjd|ddgtjtj}g}|jD]O} |d}||@#t$rYLwxYwd|S)Nz /bin/findz-namer)stdoutstderrzutf-8r) subprocessPopenPIPErGdecoderstripUnicodeDecodeErrorrf)rp clean_linesr decoded_lines r2_find_htaccess_filesrRBs+x+F * * 1 1 1A K ;;w//L   |1133 4 4 4 4!    H  99[ ! !!s.+?)"?$zD^Passenger(?PPython|Ruby|Nodejs)\s+"?(?P.+?)"?$rrz(^PassengerBaseURI\s+"?(?P.+?)"?$appurirrr)r rXrrrr)rJr_rfr#r>rRresearch MULTILINEr!rrrcompare_aliases groupdictlower)r0rWsummrXrrr r approotr alias_absr doc_root_absrr\s r2rTrTos D#7. . x7<<{33 $X6GHHHLL!    H ) 9 ",((  i # ",((   "4// 1%dH55 a  $ $Y-A-A,QSQWBW-X-X $ <//Ys.s&??v}??????r4r')r#rrrrrr$)r r rrrrs r2rrsX.?@@@L  # # % %EII   > ! !I  <  I     !) , ,EH?????M^______r4c#K|tjD]&}tj||}|V'dSrD)rrJrr_rf)rootsubrOs r2 iter_pathrvsM YYrv  w||D!$$ r4ct||\}}tj|st jdd|iztjtj|d}||tj zst j d|ztj|stj |tj|d}tj|rtj |ddSt|ddS)NzMissing directory %(abs_dir)srr/z0Directory 'tmp' is outside application root '%s'z restart.txtr)r!rJr_rwrMissingApprootDirectoryrealpathrfrrrrbutimer9rE)r0rrrtmp_dir app_restarts r2r6r6s0T9--JGQ 7>>' " "m45TXacjWk5klllgrw||GU;;<>' " " ',,w 66K w~~k""' d##### [#$$&&&&&r4cg}d}|D]3}|rd}n|rd}||4|r |ddS|S)NTF)rMr)r_lines empty_liners r2rrsr FJ ::<< JJ   J dcrc{ Mr4)NNrD)h __future__rrrr:r+rUr future.utilsr future.movesrrrNloggingrJr]rIclcommonr r clcommon.cpapir clcommon.utilsr r rrclquotarrrrrrrlveapirrsecureiorrtypingrrclselectexceptrrr r!r"r#r$r%r& getLogger__name__rsetLevelERROR StreamHandlerr9 null_handler addHandlerrrr0r3 RESTART_PATHr1r4 APPJS_PATHr5r3rBrGr]rMrhrrrrrrrrrrrr)r,rrrRrrTr`rr+rrvr6rrr4r2rs'&&&&&%%%%%% """"""555555  %%%%%%%%&&&&&&EEEEEE;;;;;;;;''''''EEEEEEEEEEEEEEEEEE$$$$$$$$11111111******--------CCCCCCCCCCCC????????  8 $ $ $w$TT+s%;%;<< ,MH     !      @@@    &&&>GGGJJJ ***Z4<===6. , , , 0 0 0QQQ.EIDzVZWNWNWNWNtaaa8@@@@&%%% =G4444n   """$99996111hVVV B ```* '''"r4