mirror of
https://github.com/phpseclib/phpseclib.git
synced 2024-11-05 21:17:53 +00:00
- Net_SFTP now has better support for uploading large files than it did before, per this:
http://www.frostjedi.com/phpbb/viewtopic.php?f=46&t=10415 git-svn-id: http://phpseclib.svn.sourceforge.net/svnroot/phpseclib/trunk@40 21d32557-59b3-4da0-833f-c5933fad653e
This commit is contained in:
parent
039cd313ee
commit
d6339e014f
@ -2,7 +2,7 @@
|
||||
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||
|
||||
/**
|
||||
* Pure-PHP implementations of RC4.
|
||||
* Pure-PHP implementation of RC4.
|
||||
*
|
||||
* Uses mcrypt, if available, and an internal implementation, otherwise.
|
||||
*
|
||||
@ -55,7 +55,7 @@
|
||||
* @author Jim Wigginton <terrafrost@php.net>
|
||||
* @copyright MMVII Jim Wigginton
|
||||
* @license http://www.gnu.org/licenses/lgpl.txt
|
||||
* @version $Id: RC4.php,v 1.7 2009-05-27 21:36:53 terrafrost Exp $
|
||||
* @version $Id: RC4.php,v 1.8 2009-06-09 04:00:38 terrafrost Exp $
|
||||
* @link http://phpseclib.sourceforge.net
|
||||
*/
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||
|
||||
/**
|
||||
* Pure-PHP implementations of Triple DES.
|
||||
* Pure-PHP implementation of Triple DES.
|
||||
*
|
||||
* Uses mcrypt, if available, and an internal implementation, otherwise. Operates in the EDE3 mode (encrypt-decrypt-encrypt).
|
||||
*
|
||||
@ -47,7 +47,7 @@
|
||||
* @author Jim Wigginton <terrafrost@php.net>
|
||||
* @copyright MMVII Jim Wigginton
|
||||
* @license http://www.gnu.org/licenses/lgpl.txt
|
||||
* @version $Id: TripleDES.php,v 1.7 2009-05-27 16:15:23 terrafrost Exp $
|
||||
* @version $Id: TripleDES.php,v 1.8 2009-06-09 04:00:38 terrafrost Exp $
|
||||
* @link http://phpseclib.sourceforge.net
|
||||
*/
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||
|
||||
/**
|
||||
* Pure-PHP implementations of SFTP.
|
||||
* Pure-PHP implementation of SFTP.
|
||||
*
|
||||
* PHP versions 4 and 5
|
||||
*
|
||||
@ -48,7 +48,7 @@
|
||||
* @author Jim Wigginton <terrafrost@php.net>
|
||||
* @copyright MMIX Jim Wigginton
|
||||
* @license http://www.gnu.org/licenses/lgpl.txt
|
||||
* @version $Id: SFTP.php,v 1.3 2009-05-30 16:48:42 terrafrost Exp $
|
||||
* @version $Id: SFTP.php,v 1.4 2009-06-09 04:00:38 terrafrost Exp $
|
||||
* @link http://phpseclib.sourceforge.net
|
||||
*/
|
||||
|
||||
@ -875,6 +875,11 @@ class Net_SFTP extends Net_SSH2 {
|
||||
}
|
||||
$sent = 0;
|
||||
$size = filesize($data);
|
||||
} else {
|
||||
$sent = 0;
|
||||
$size = strlen($data);
|
||||
}
|
||||
|
||||
while ($sent < $size) {
|
||||
/*
|
||||
"The 'maximum packet size' specifies the maximum size of an individual data packet that can be sent to the
|
||||
@ -890,53 +895,24 @@ class Net_SFTP extends Net_SSH2 {
|
||||
the reason that's mentioned is because sending $this->packet_size as the payload will result in a packet
|
||||
that's larger than $this->packet_size, but that's not a problem, as per the above.
|
||||
*/
|
||||
if ($initialize) {
|
||||
$temp = fread($fp, $this->packet_size);
|
||||
$temp = $mode == NET_SFTP_LOCAL_FILE ? fread($fp, $this->packet_size) : $this->_string_shift($data, $this->packet_size);
|
||||
$packet = pack('Na*N3a*', strlen($handle), $handle, 0, $sent, strlen($temp), $temp);
|
||||
if (!$this->_send_sftp_packet(NET_SFTP_WRITE, $packet)) {
|
||||
fclose($fp);
|
||||
return false;
|
||||
}
|
||||
$sent+= strlen($temp);
|
||||
$packet = pack('NCN2a*N3a*',
|
||||
$size + strlen($handle) + 21, NET_SFTP_WRITE, $this->request_id, strlen($handle), $handle, 0, 0, $size, $temp
|
||||
);
|
||||
$initialize = false;
|
||||
if (defined('NET_SFTP_LOGGING')) {
|
||||
$log_index = count($this->packet_type_log);
|
||||
$this->packet_type_log[] = '<- ' . $this->packet_types[$packet_type];
|
||||
$this->packet_log[] = $packet;
|
||||
}
|
||||
} else {
|
||||
$packet = fread($fp, $this->packet_size);
|
||||
$sent+= strlen($packet);
|
||||
if (defined('NET_SFTP_LOGGING')) {
|
||||
$this->packet_log[$log_index].= $packet;
|
||||
}
|
||||
}
|
||||
if (!$this->_send_channel_packet($packet)) {
|
||||
fclose($fp);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
fclose($fp);
|
||||
} else {
|
||||
while (strlen($data)) {
|
||||
if ($initialize) {
|
||||
$packet = pack('NCN2a*N3a*',
|
||||
strlen($data) + strlen($handle) + 21, NET_SFTP_WRITE, $this->request_id, strlen($handle), $handle, 0, 0, strlen($data),
|
||||
$this->_string_shift($data, $this->packet_size)
|
||||
);
|
||||
$initialize = false;
|
||||
} else {
|
||||
$packet = $this->_string_shift($data, $this->packet_size);
|
||||
}
|
||||
if (!$this->_send_channel_packet($packet)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$this->_get_sftp_packet();
|
||||
if ($this->packet_type != NET_SFTP_STATUS) {
|
||||
user_error('Expected SSH_FXP_STATUS', E_USER_NOTICE);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if ($mode == NET_SFTP_LOCAL_FILE) {
|
||||
fclose($fp);
|
||||
}
|
||||
|
||||
if (!$this->_send_sftp_packet(NET_SFTP_CLOSE, pack('Na*', strlen($handle), $handle))) {
|
||||
return false;
|
||||
@ -1213,25 +1189,6 @@ class Net_SFTP extends Net_SSH2 {
|
||||
$this->packet_log[] = $data;
|
||||
}
|
||||
|
||||
return $this->_send_channel_packet($data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sends Channel Packets
|
||||
*
|
||||
* If this function were in Net_SSH2, there'd have to be an additional server channel parameter since the Net_SSH2 object
|
||||
* doesn't currently have one. Plus, it wouldn't actually make a lot of sense for Net_SSH2 even to have one - if it did
|
||||
* and if Net_SSH2::exec() used it then Net_SFTP::exec() would also use it (through inheritance) and you'd have the
|
||||
* single server channel being overwritten and... all in all, I think this is easier.
|
||||
*
|
||||
* @param Integer $type
|
||||
* @param String $data
|
||||
* @see Net_SFTP::_send_sftp_packet()
|
||||
* @return Boolean
|
||||
* @access private
|
||||
*/
|
||||
function _send_channel_packet($data)
|
||||
{
|
||||
return $this->_send_binary_packet(pack('CN2a*', NET_SSH2_MSG_CHANNEL_DATA, $this->server_channel, strlen($data), $data));
|
||||
}
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||
|
||||
/**
|
||||
* Pure-PHP implementations of SSHv1.
|
||||
* Pure-PHP implementation of SSHv1.
|
||||
*
|
||||
* PHP versions 4 and 5
|
||||
*
|
||||
@ -65,7 +65,7 @@
|
||||
* @author Jim Wigginton <terrafrost@php.net>
|
||||
* @copyright MMVII Jim Wigginton
|
||||
* @license http://www.gnu.org/licenses/lgpl.txt
|
||||
* @version $Id: SSH1.php,v 1.11 2009-05-30 15:46:32 terrafrost Exp $
|
||||
* @version $Id: SSH1.php,v 1.12 2009-06-09 04:00:38 terrafrost Exp $
|
||||
* @link http://phpseclib.sourceforge.net
|
||||
*/
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||
|
||||
/**
|
||||
* Pure-PHP implementations of SSHv2.
|
||||
* Pure-PHP implementation of SSHv2.
|
||||
*
|
||||
* PHP versions 4 and 5
|
||||
*
|
||||
@ -41,7 +41,7 @@
|
||||
* @author Jim Wigginton <terrafrost@php.net>
|
||||
* @copyright MMVII Jim Wigginton
|
||||
* @license http://www.gnu.org/licenses/lgpl.txt
|
||||
* @version $Id: SSH2.php,v 1.17 2009-05-30 16:40:31 terrafrost Exp $
|
||||
* @version $Id: SSH2.php,v 1.18 2009-06-09 04:00:38 terrafrost Exp $
|
||||
* @link http://phpseclib.sourceforge.net
|
||||
*/
|
||||
|
||||
@ -931,9 +931,7 @@ class Net_SSH2 {
|
||||
$s = $s->modPow($e, $n);
|
||||
$s = $s->toBytes();
|
||||
|
||||
$h = chr(0x00) . chr(0x30) . chr(0x21) . chr(0x30) . chr(0x09) . chr(0x06) . chr(0x05) . chr(0x2B) .
|
||||
chr(0x0E) . chr(0x03) . chr(0x02) . chr(0x1A) . chr(0x05) . chr(0x00) . chr(0x04) . chr(0x14) .
|
||||
pack('H*', sha1($source));
|
||||
$h = pack('N4H*', 0x00302130, 0x0906052B, 0x0E03021A, 0x05000414, sha1($source));
|
||||
$h = chr(0x01) . str_repeat(chr(0xFF), $nLength - 3 - strlen($h)) . $h;
|
||||
|
||||
if ($s != $h) {
|
||||
|
Loading…
Reference in New Issue
Block a user