X-Git-Url: http://git.pjr.cc/?p=gwvp-mini.git;a=blobdiff_plain;f=gwvpmini%2Fgwvpmini_gitbackend.php;h=5fe188ab3bd5ef3de2bc58404cf09039e9c12487;hp=424c108e1d78c3a67e229ddc8cfe3657b9432219;hb=1801e714ec1393dfe1a8a35aa22429eb8483ef4a;hpb=7c855df8f42cc8508f556068a707c9258cd40e43 diff --git a/gwvpmini/gwvpmini_gitbackend.php b/gwvpmini/gwvpmini_gitbackend.php index 424c108..5fe188a 100644 --- a/gwvpmini/gwvpmini_gitbackend.php +++ b/gwvpmini/gwvpmini_gitbackend.php @@ -223,7 +223,7 @@ function gwvpmini_canManageRepo($userid, $repoid) } -// TODO: this whole bit needs a re-write +// TODO: this whole bit needs a re-write - seriously, like totally! function gwvpmini_callGitBackend($username, $repo) { // this is where things become a nightmare @@ -287,7 +287,7 @@ function gwvpmini_callGitBackend($username, $repo) $headers = getallheaders(); - error_log("path trans'd is /$repo_base/$repo.git/$euri from $ruri with ".$_REQUEST["q"]." $strrem pre is ".print_r($_REQUEST,true)." and foff ".print_r($headers, true)); + //error_log("path trans'd is /$repo_base/$repo.git/$euri from $ruri with ".$_REQUEST["q"]." $strrem pre is ".print_r($_REQUEST,true)." and foff ".print_r($headers, true)); $pwd = "/$repo_base/"; @@ -323,7 +323,7 @@ function gwvpmini_callGitBackend($username, $repo) $stlimit = 0; - $fp = fopen("/tmp/gitup.".rand(0,4000000), "w"); + //$fp = fopen("/tmp/gitup.".rand(0,4000000), "w"); $from_client_data = ""; // i was going to use stream_select, but i feel this works better like this while($continue) { @@ -351,13 +351,13 @@ function gwvpmini_callGitBackend($username, $repo) } if($from_client_data !== false) { fwrite($pipes[0], $from_client_data); - fwrite($fp, $from_client_data); + //fwrite($fp, $from_client_data); } fflush($pipes[0]); //fwrite($fl, $from_client_data); $client_len = strlen($from_client_data); } else { - error_log("client end"); + //error_log("client end"); $client_len = 0; //$continue = false; } @@ -381,18 +381,20 @@ function gwvpmini_callGitBackend($username, $repo) // or something the git-http-backend thing is doing.. // TODO: find out why this happens $from_cgi_data = preg_replace("/^\r\n/", "", $from_cgi_data_t); + /* if(strlen($from_cgi_data)!=strlen($from_cgi_data_t)) { error_log("MOOOKS - we did trunc"); } else { error_log("MOOOKS - we did not trunc"); - } + }*/ $firstline = false; } } - if($from_cgi_data !== false) { - error_log("send to client"); + if($from_cgi_data !== false && $from_cgi_data != "") { + //error_log("send to client of size ".strlen($from_cgi_data)); echo $from_cgi_data; + ob_flush(); flush(); } $cgi_len = strlen($from_cgi_data); @@ -407,18 +409,17 @@ function gwvpmini_callGitBackend($username, $repo) else { if($client_len == 0 && $cgi_len == 0) { usleep(200000); - error_log("sleep tick"); + //error_log("sleep tick"); $stlimit++; - if($stlimit > 5000) $continue = false; + if($stlimit > 300) $continue = false; // if we get no output from git backend after 1 minute, we close..... something went wrong } else { $stlimit = 0; - error_log("sizes: $client_len, $cgi_len"); + //error_log("sizes: $client_len, $cgi_len"); if($cgi_len > 0) { //error_log("from cgi: \"$from_cgi_data\""); } } } - } @@ -467,7 +468,7 @@ function gwvpmini_createGitRepo($name, $ownerid, $desc, $defperms, $clonefrom, $ $rn = gwvpmini_getRepo(null, $name, null); $rid = $rn["id"]; gwvpmini_SetRepoCloning($rid); - gwvpmini_SendMessage("info", "Background clone initiated for $name ($rid) from $clonefrom... your repo will be available once the background clone is finished"); + gwvpmini_SendMessageByDb("info", "Background clone initiated for $name ($rid) from $clonefrom... your repo will be available once the background clone is finished", $ownerid); return false; } } else { @@ -485,115 +486,5 @@ function gwvpmini_createGitRepo($name, $ownerid, $desc, $defperms, $clonefrom, $ return true; } -function gzdecode($data,&$filename='',&$error='',$maxlength=null) -{ - $len = strlen($data); - if ($len < 18 || strcmp(substr($data,0,2),"\x1f\x8b")) { - $error = "Not in GZIP format."; - return null; // Not GZIP format (See RFC 1952) - } - $method = ord(substr($data,2,1)); // Compression method - $flags = ord(substr($data,3,1)); // Flags - if ($flags & 31 != $flags) { - $error = "Reserved bits not allowed."; - return null; - } - // NOTE: $mtime may be negative (PHP integer limitations) - $mtime = unpack("V", substr($data,4,4)); - $mtime = $mtime[1]; - $xfl = substr($data,8,1); - $os = substr($data,8,1); - $headerlen = 10; - $extralen = 0; - $extra = ""; - if ($flags & 4) { - // 2-byte length prefixed EXTRA data in header - if ($len - $headerlen - 2 < 8) { - return false; // invalid - } - $extralen = unpack("v",substr($data,8,2)); - $extralen = $extralen[1]; - if ($len - $headerlen - 2 - $extralen < 8) { - return false; // invalid - } - $extra = substr($data,10,$extralen); - $headerlen += 2 + $extralen; - } - $filenamelen = 0; - $filename = ""; - if ($flags & 8) { - // C-style string - if ($len - $headerlen - 1 < 8) { - return false; // invalid - } - $filenamelen = strpos(substr($data,$headerlen),chr(0)); - if ($filenamelen === false || $len - $headerlen - $filenamelen - 1 < 8) { - return false; // invalid - } - $filename = substr($data,$headerlen,$filenamelen); - $headerlen += $filenamelen + 1; - } - $commentlen = 0; - $comment = ""; - if ($flags & 16) { - // C-style string COMMENT data in header - if ($len - $headerlen - 1 < 8) { - return false; // invalid - } - $commentlen = strpos(substr($data,$headerlen),chr(0)); - if ($commentlen === false || $len - $headerlen - $commentlen - 1 < 8) { - return false; // Invalid header format - } - $comment = substr($data,$headerlen,$commentlen); - $headerlen += $commentlen + 1; - } - $headercrc = ""; - if ($flags & 2) { - // 2-bytes (lowest order) of CRC32 on header present - if ($len - $headerlen - 2 < 8) { - return false; // invalid - } - $calccrc = crc32(substr($data,0,$headerlen)) & 0xffff; - $headercrc = unpack("v", substr($data,$headerlen,2)); - $headercrc = $headercrc[1]; - if ($headercrc != $calccrc) { - $error = "Header checksum failed."; - return false; // Bad header CRC - } - $headerlen += 2; - } - // GZIP FOOTER - $datacrc = unpack("V",substr($data,-8,4)); - $datacrc = sprintf('%u',$datacrc[1] & 0xFFFFFFFF); - $isize = unpack("V",substr($data,-4)); - $isize = $isize[1]; - // decompression: - $bodylen = $len-$headerlen-8; - if ($bodylen < 1) { - // IMPLEMENTATION BUG! - return null; - } - $body = substr($data,$headerlen,$bodylen); - $data = ""; - if ($bodylen > 0) { - switch ($method) { - case 8: - // Currently the only supported compression method: - $data = gzinflate($body,$maxlength); - break; - default: - $error = "Unknown compression method."; - return false; - } - } // zero-byte body content is allowed - // Verifiy CRC32 - $crc = sprintf("%u",crc32($data)); - $crcOK = $crc == $datacrc; - $lenOK = $isize == strlen($data); - if (!$lenOK || !$crcOK) { - $error = ( $lenOK ? '' : 'Length check FAILED. ') . ( $crcOK ? '' : 'Checksum FAILED.'); - return false; - } - return $data; -} + ?> \ No newline at end of file