jgjddlmZddlmZddlmZddlZddlZddlZddlmZddlm 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/m0Z0m1Z1ddlm2Z2m3Z3m4Z4m5Z5ddlm6Z6m7Z7ej8e9Z:e:;ej<ej=e>ddZ?e:@e?dZAdZBdZCdZDdZEdZFdZGdZHd ZId!ZJd"ZKd#ZLd$ZMd%ZNd&ZOd'ZPd(ZQd)ZRd*ZSd+ZTd,ZUd-ZVd.ZWd/ZXd0ddeHdfd1ZYd2ZZdAd3Z[d4Z\eHfd5Z]d6Z^d7Z_dBd8Z`d9Zad:ZbdBd;Zcd<Zdd=Zed>Zfd?Zgd@ZhdS)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 s_partition) 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_permr4^s0l4  G'.'.??????c t||d}tj|tj|S#t $rYdSwxYw)Nsurrogateescapeerrors)openfcntlflockfilenoLOCK_EXIOError) config_pathmode conf_files r3get_config_lockrCcsdd3DEEE  I$$&& 666 ttsAA AAc@ |dS#YdSxYwN)close) lock_files r3 release_lockrHls-   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*)osgetegidgeteuidr4check_and_createdirrCioStringIOwriter getvaluer?OSErrorrUnableToSaveDatar ExternalProgramFailedsyslog LOG_WARNINGformatrHr)r1r@configpermissions_dropped config_file file_contentes r3 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}~wwxYwdSrE) rKpathdirnameisdirr mkdirrSrrUr rT)r`user_backup_pathr]s r3rNrNswt,, 7==) * *G G O, - - - - -=u?Z[ G G G 12BAFF F G GGsA!B7B  Bcvtj|}tj|jddS)Nz .cl.selectorhtaccess_cache)r,r-rKr`joinpw_dirr0s r3get_htaccess_cache_pathris,l4  G 7<<8H I IIr5c|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_modificationrrJ first_symbols last_symbolsNzWe cannot get first and last z symbols from "z" file. Exception: errordetails file_systemzWe cannot get info about ")rKr`existsstatst_sizest_gidst_uidoctst_moder fromtimestampst_atimestrftimest_mtimer:readseekrSr?r ) path_to_file time_formatnumber_of_symbols file_info file_statferrs r3#_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 cpupmemvmemrOiopsepnprocz,We cannot get lve limits for user with uid "". Exception: ruN) dictr initializelve_infols_cpu ls_cpu_weight ls_memory_phy ls_memoryls_iols_iops ls_entersls_nprocr)user_uidresultpy_lve user_limitsrs r3_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 "rruN) rstrrget_user_limitsrrrrrrr?rS)rr quota_wrapper user_quotasrs r3_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 exists. Exception: ruN lve_limits quota_limitsT)exc_infoextra) rrr,r-r.KeyErrorupdaterrlogger exception)r1r@rur debug_inforrs r3*_log_debug_info_about_user_and_config_filers;4K@@IJ%.J!""ffJ{<%%,  DD C, ;(  04 ; -; -445I(5S5STTT26&& ;/;/667Mh7W7WXXX UT<<<< * * I ??< ( ( I  #   T " " "%i00I%y#>OPPPPPPr5Tc 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 .htaccessTr7r8aliaszhSpecified 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 r3 zconfigure..s&"C"CT6D="C"C"C"C"C"Cr5) startup_file)r"rKr`rxrbr WebAppErrorInterpreterErrorsummaryr&rNoSuchApplicationnormpathrgr$rvaluessepra commonprefix splitlinesrtitlerrr#r%r populate_app)r1rr interpreterbinarypopulateactionrrpassenger_log_fileabs_dirr user_summary app_summary exists_dir abs_aliashtaccesshtaccess_needs_update htaccess_rawitem item_aliasrs r3 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 ztt|D]\}}|\}}tj|d|df}t |d|\}}}tj|d}tj|d}t ||\}}} tjt|| d|} |d} t| t||||d| |ddS)Nrrrr rr)r) r_summaryrKr`rr!rabasenamergr" _unconfigurer) r1 domain_aliasrrrold_homer binary_dir binary_name_binaryr htaccess_paths r3 fix_homedirrs%'77aa d57''k):DN(KLL%d;&7BB1i W__T(^44 g&&tH~66 #J99 1gk$88;[IIZ( ]###$ 5$}*=vPTU^P_`````aar5cPt||t|}|p|d}|p|}tj||}tj|d}tj||} tj| d} t ||| sht |t|d} t|d t| | ddt|| |dSdS)Nrrr7r8r(a) r&rrKr`rgr'rrr:rFr%r) r1r old_alias new_alias old_doc_root new_doc_rootapp_data old_abs_alias old_htaccess new_abs_alias new_htaccessrs r3mover&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)r5cR tj|dS#t$rYdSwxYwrE)rKunlinkrS)r`s r3rr1s:  $      s  &&c<tjd|ddgtjtj}g}|jD]O} |d}||@#t$rYLwxYwd|S)Nz /bin/findz-namer)stdoutstderrzutf-8r) subprocessPopenPIPErDdecoderstripUnicodeDecodeErrorrg)rp clean_linesr decoded_lines r3_find_htaccess_filesrO8s+x+F * * 1 1 1A K ;;w//L   |1133 4 4 4 4!    H  99[ ! !!s.+?)"?$zD^Passenger(?PPython|Ruby|Nodejs)\s+"?(?P.+?)"?$z(^PassengerBaseURI\s+"?(?P.+?)"?$appurirrr)r rUrrrr)rKr`rgr$r?rSresearch MULTILINEr"r!lstriprcompare_aliases groupdictlower)r1rTsummrUrrr r approotr alias_absr doc_root_absrrYs r3rQrQes D#7' ' x7<<{33 $X6GHHHLL!    H ) 9 ",((  i # ",((   "4// 1%dH55 a!)\:: 1e RV$$' E'77  /&*:*:*<*.s&??v}??????r5r()r$rrrrrr%)r r rrrrs r3rrsX.?@@@L  # # % %EII   > ! !I  <  I     !) , ,EH?????M^______r5c#K|tjD]&}tj||}|V'dSrE)rrKrr`rg)rootsubrLs r3 iter_pathrusM YYrv  w||D!$$ r5c<t||\}}tj|st jdd|iztj|d}tj|stj|tj|t}tj|rtj |ddSt|d dS)NzMissing directory %(abs_dir)srr,r) r"rKr`rxrMissingApprootDirectoryrgrc RESTART_PATHutimer:rF)r1rrrtmp_dir app_restarts r3r3r3sT9--JGQ 7>>' " "m45TXacjWk5klllgll7E**G 7>>' " " ',,w 55K w~~k""' d##### [#$$&&&&&r5cg}d}|D]3}|rd}n|rd}||4|r |ddS|S)NTF)rJr)r_lines empty_liners r3rrsr FJ ::<< JJ   J dcrc{ Mr5)NNrE)i __future__rrrr;r,rVr future.utilsr future.movesrrrOloggingrKrZrFclcommonr r clcommon.cpapir clcommon.utilsr r rrclquotarrrrrrrlveapirrsecureiorrtypingrrclselectexceptrrr r!r"r#r$r%r&r' getLogger__name__rsetLevelERROR StreamHandlerr: null_handler addHandlerrrr-r0rxr.r1 APPJS_PATHr2r4rCrHr^rNrirrrrrrrrrrrr&r)rrrOrrQr^rr(rrur3rrr5r3rs '&&&&&%%%%%% """"""555555  %%%%%%%%&&&&&&EEEEEE;;;;;;;;''''''EEEEEEEEEEEEEEEEEE$$$$$$$$11111111******::::::::::CCCCCCCCCCCC????????  8 $ $ $w$TT+s%;%;<< ,MH     !      @@@    &&&>GGGJJJ ***Z4<===6. , , , 0 0 0QQQ.EIDzVZWNWNWNWNtaaa$@@@@&%%% =G4444n   """$99996***ZVVV B ```* ' ' 'r5