PNG  IHDR;IDATxܻn0K )(pA 7LeG{ §㻢|ذaÆ 6lذaÆ 6lذaÆ 6lom$^yذag5bÆ 6lذaÆ 6lذa{ 6lذaÆ `}HFkm,mӪôô! x|'ܢ˟;E:9&ᶒ}{v]n&6 h_tڠ͵-ҫZ;Z$.Pkž)!o>}leQfJTu іچ\X=8Rن4`Vwl>nG^is"ms$ui?wbs[m6K4O.4%/bC%t Mז -lG6mrz2s%9s@-k9=)kB5\+͂Zsٲ Rn~GRC wIcIn7jJhۛNCS|j08yiHKֶۛkɈ+;SzL/F*\Ԕ#"5m2[S=gnaPeғL lذaÆ 6l^ḵaÆ 6lذaÆ 6lذa; _ذaÆ 6lذaÆ 6lذaÆ RIENDB`  hc@sddlZddlZddlZddlZddlZddlZddlmZyddlj j Z Wne k rddl Z nXdZ dZdZdZd Zd Zd Zd Zd ZdZdZedkrejeejdndS(iN(tcopy2tchecktinstallt uninstallcCstjjdstStS(sk Check is it environment with installed plesk panel @rtype : bool @return True or False s/usr/sbin/plesk(tostpathtexiststFalsetTrue(((s6/opt/alt/alt-php-config/alt-php-panel-configuration.pytis_plesksc Cs\tjjdstSttjd(}tjddgd|d|}WdQX|dkS(sj Check if we're in environment with enabled cagefs @rtype : bool @return True or False s/usr/sbin/cagefsctltwbs--cagefs-statuststdouttstderrNi(RRRRtopentdevnullt subprocesstcall(Rtresult((s6/opt/alt/alt-php-config/alt-php-panel-configuration.pyt has_cagefss cCstot S(s Check is it environment with installed plesk panel on clean ELS system without cagefs @rtype : bool @return True or False (R R(((s6/opt/alt/alt-php-config/alt-php-panel-configuration.pyt is_bare_plesk-scCs|rtj}n tj}tj}|j|d}tj|d}|j|tj}|j||j||S(s Logging configuration function :type verbose: bool :param verbose: Enable additional debug output if True, display only errors othervise :return: configured logger object s%(levelname)-8s: %(message)ss%H:%M:%S %d.%m.%y( tloggingtDEBUGtERRORt StreamHandlertsetLevelt Formattert setFormattert getLoggert addHandler(tverbosetlevelthandlert log_formatt formattertlogger((s6/opt/alt/alt-php-config/alt-php-panel-configuration.pytconfigure_logging6s         cCsEg}x.tjdD]}|j|d|fqW|j|S(s Returns list of installed alt-php versions and their base directories :rtype: list :return: List of version (e.g. 44, 55) and base directory tuples s/opt/alt/php[0-9][0-9]i(tglobtappendtsort(t php_versionstphp_dir((s6/opt/alt/alt-php-config/alt-php-panel-configuration.pytfind_alt_php_versionsNs  cCstjddgdtjdtjdt}|j\}}x[|jdD]J}d||f|jjdd krOtj d ||ftSqOWtj d ||ft S( sx :param php_ver: alt-php version (e.g. 44, 55, 70) :return: If handler exist returns True, otherwise False s/usr/local/psa/bin/php_handlers--listR R tuniversal_newliness s alt-php%s-%st isHandler for alt-php%s-%s exist.s#Handler for alt-php%s-%s not exist.( RtPopentPIPEtSTDOUTRt communicatetsplittstripRtinfoR(tcgi_typetphp_vertproctoutt_tline((s6/opt/alt/alt-php-config/alt-php-panel-configuration.pytplesk_check_php_handler\s )cCstr$tjd||ftSt||rNtjd||ftStjd||ftjjdj ||d}|ddd||fd t j j |d d t j j |d d |dd||fg }|dkrw|j dd|dt j j |ddt j j |dgt j jd|stt j j |dt j j |dqn"|j dt j j |dgtj|dtjdtjdt}|j\}}|jdkrtddj ||fntj|d gdtjdtjdt}|j\}}|jdkrltd!|d"|ntjd#|tS($Ns<Skipping alt-php%s-%s on Plesk installations without CageFS.sHandler for alt-php%s-%s exist.s'Plesk: Installing alt-php%s-%s handler.s)Plesk: Installing alt-php{0}-{1} handler.s/usr/local/psa/bin/php_handlers--adds -displaynames alt-php%s-%ss-clipaths usr/bin/phps-phpinis etc/php.inis-types-idtfpms-services alt-php%s-fpms-pathsusr/sbin/php-fpms-poolds etc/php-fpm.ds/opt/alt/php%s/etc/php-fpm.confsetc/php-fpm.conf.plesksetc/php-fpm.confsusr/bin/php-cgiR R R*iucannot execute "%s": %sR+s--rereaducannot execute "s --reread": %ss-Handler for alt-php%s was successfully added.(RRR2RR9RtsysR twritetformatRRtjointextendRRRR,R-R.R/t returncodet Exception(R3R4tphp_pathtcommandt add_commandR5R6R7((s6/opt/alt/alt-php-config/alt-php-panel-configuration.pytplesk_add_php_handlernsH   1"cCst||rtjd||ftjjdj||dddd||fg}tj|dtj dtj d t }|j \}}|j d krtd d j||fntjd ||ft Stjd||ftSdS(Ns%Plesk: Removing alt-php%s-%s handler.s'Plesk: Removing alt-php{0}-{1} handler.s/usr/local/psa/bin/php_handlers--removes-ids alt-php%s-%sR R R*iucannot execute "%s": %sR+s2Handler for alt-php%s-%s was successfully removed.s#Handler for alt-php%s-%s not exist.(R9RR2R;R R<R=RR,R-R.RR/R@RAR>R(R3R4RCR5R6R7((s6/opt/alt/alt-php-config/alt-php-panel-configuration.pytplesk_remove_php_handlers "cCsfy>tj}|dkr=tjjds<tdn|dkrtd||td||tjjd|stjjd|r:td ||q:q=|d krtd|td|tjjd|stjjd|r:td |q:q=td|o9td|o9td |SnWn!tk ra}t j |t SXd S( sL :rtype: bool :return: If success returns True, otherwise False tPlesks/usr/local/psa/bin/php_handlers)/usr/local/psa/bin/php_handler not exist.Rtfastcgitcgis/etc/init.d/alt-php%s-fpms-/usr/lib/systemd/system/alt-php%s-fpm.serviceR:RN( tcpapit getCPNameRRRRARERFR9RR2R(tmodeR4RBtcp_namete((s6/opt/alt/alt-php-config/alt-php-panel-configuration.pytconfigure_alt_phps&   ,   ,2 c Csy(tj|ddddg\}}Wn0tjk rZ}tjjdj|dSXt}d}g}x|D]\}}|dkr|tkrd}q|}n|dkrtj j d |stjjd j|dS|j |d |fn|dkrtt }qtqtWt |} |skt}| jddjg|D]} d| ^qMnx$|D]\} } t|| | qrWdS(Nsm:p:vsmode=sphp=Rs(cannot parse command line arguments: {0}iRs-ms--modes-ps--phps/opt/alt/php%ssunknown PHP version {0}s-vs --verboseu!installed alt-php versions are %ss s alt-php%s: %s(s-ms--mode(s-ps--php(s-vs --verbose(tgetoptt GetoptErrorR;R R<R=RtMODESRRtisdirR%RR#R)R2R>RO( tsys_argstoptstargsRNRRLR'topttargtlogtitverR((s6/opt/alt/alt-php-config/alt-php-panel-configuration.pytmains6(          +t__main__i(schecksinstalls uninstall(RPR$RRRR;tshutilRtdb.clcommon.cpapitclcommonRJt ImportErrortdetectcpRRR RRR#R)R9RERFROR\t__name__texittargv(((s6/opt/alt/alt-php-config/alt-php-panel-configuration.pyts.            +   !