Merge pull request #7165 from nextcloud/smb-2.0.3

update icewind/smb to 2.0.3
This commit is contained in:
Morris Jobke 2017-11-14 17:46:04 +01:00 committed by GitHub
commit a3f86b99e9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
16 changed files with 126 additions and 47 deletions

View File

@ -8,7 +8,7 @@
"classmap-authoritative": true "classmap-authoritative": true
}, },
"require": { "require": {
"icewind/smb": "2.0.2", "icewind/smb": "2.0.3",
"icewind/streams": "0.5.2" "icewind/streams": "0.5.2"
} }
} }

View File

@ -4,20 +4,20 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"content-hash": "85f8c3519f909ded38d917d3901f2709", "content-hash": "b6a304e8ab2effa3791b513007fadcbc",
"packages": [ "packages": [
{ {
"name": "icewind/smb", "name": "icewind/smb",
"version": "v2.0.2", "version": "v2.0.3",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/icewind1991/SMB.git", "url": "https://github.com/icewind1991/SMB.git",
"reference": "6691355d9314ac3a8cb9ec9446e4c26e8aab09d0" "reference": "8394551bf29a37b884edb33dae8acde369177f32"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/icewind1991/SMB/zipball/6691355d9314ac3a8cb9ec9446e4c26e8aab09d0", "url": "https://api.github.com/repos/icewind1991/SMB/zipball/8394551bf29a37b884edb33dae8acde369177f32",
"reference": "6691355d9314ac3a8cb9ec9446e4c26e8aab09d0", "reference": "8394551bf29a37b884edb33dae8acde369177f32",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -45,7 +45,7 @@
} }
], ],
"description": "php wrapper for smbclient and libsmbclient-php", "description": "php wrapper for smbclient and libsmbclient-php",
"time": "2017-08-16T16:08:57+00:00" "time": "2017-10-18T16:21:10+00:00"
}, },
{ {
"name": "icewind/streams", "name": "icewind/streams",

View File

@ -22,6 +22,7 @@ return array(
'Icewind\\SMB\\Exception\\ForbiddenException' => $vendorDir . '/icewind/smb/src/Exception/ForbiddenException.php', 'Icewind\\SMB\\Exception\\ForbiddenException' => $vendorDir . '/icewind/smb/src/Exception/ForbiddenException.php',
'Icewind\\SMB\\Exception\\HostDownException' => $vendorDir . '/icewind/smb/src/Exception/HostDownException.php', 'Icewind\\SMB\\Exception\\HostDownException' => $vendorDir . '/icewind/smb/src/Exception/HostDownException.php',
'Icewind\\SMB\\Exception\\InvalidHostException' => $vendorDir . '/icewind/smb/src/Exception/InvalidHostException.php', 'Icewind\\SMB\\Exception\\InvalidHostException' => $vendorDir . '/icewind/smb/src/Exception/InvalidHostException.php',
'Icewind\\SMB\\Exception\\InvalidParameterException' => $vendorDir . '/icewind/smb/src/Exception/InvalidParameterException.php',
'Icewind\\SMB\\Exception\\InvalidPathException' => $vendorDir . '/icewind/smb/src/Exception/InvalidPathException.php', 'Icewind\\SMB\\Exception\\InvalidPathException' => $vendorDir . '/icewind/smb/src/Exception/InvalidPathException.php',
'Icewind\\SMB\\Exception\\InvalidRequestException' => $vendorDir . '/icewind/smb/src/Exception/InvalidRequestException.php', 'Icewind\\SMB\\Exception\\InvalidRequestException' => $vendorDir . '/icewind/smb/src/Exception/InvalidRequestException.php',
'Icewind\\SMB\\Exception\\InvalidResourceException' => $vendorDir . '/icewind/smb/src/Exception/InvalidResourceException.php', 'Icewind\\SMB\\Exception\\InvalidResourceException' => $vendorDir . '/icewind/smb/src/Exception/InvalidResourceException.php',
@ -30,6 +31,8 @@ return array(
'Icewind\\SMB\\Exception\\NoRouteToHostException' => $vendorDir . '/icewind/smb/src/Exception/NoRouteToHostException.php', 'Icewind\\SMB\\Exception\\NoRouteToHostException' => $vendorDir . '/icewind/smb/src/Exception/NoRouteToHostException.php',
'Icewind\\SMB\\Exception\\NotEmptyException' => $vendorDir . '/icewind/smb/src/Exception/NotEmptyException.php', 'Icewind\\SMB\\Exception\\NotEmptyException' => $vendorDir . '/icewind/smb/src/Exception/NotEmptyException.php',
'Icewind\\SMB\\Exception\\NotFoundException' => $vendorDir . '/icewind/smb/src/Exception/NotFoundException.php', 'Icewind\\SMB\\Exception\\NotFoundException' => $vendorDir . '/icewind/smb/src/Exception/NotFoundException.php',
'Icewind\\SMB\\Exception\\OutOfSpaceException' => $vendorDir . '/icewind/smb/src/Exception/OutOfSpaceException.php',
'Icewind\\SMB\\Exception\\RevisionMismatchException' => $vendorDir . '/icewind/smb/src/Exception/RevisionMismatchException.php',
'Icewind\\SMB\\Exception\\TimedOutException' => $vendorDir . '/icewind/smb/src/Exception/TimedOutException.php', 'Icewind\\SMB\\Exception\\TimedOutException' => $vendorDir . '/icewind/smb/src/Exception/TimedOutException.php',
'Icewind\\SMB\\FileInfo' => $vendorDir . '/icewind/smb/src/FileInfo.php', 'Icewind\\SMB\\FileInfo' => $vendorDir . '/icewind/smb/src/FileInfo.php',
'Icewind\\SMB\\IFileInfo' => $vendorDir . '/icewind/smb/src/IFileInfo.php', 'Icewind\\SMB\\IFileInfo' => $vendorDir . '/icewind/smb/src/IFileInfo.php',

View File

@ -52,6 +52,7 @@ class ComposerStaticInit98fe9b281934250b3a93f69a5ce843b3
'Icewind\\SMB\\Exception\\ForbiddenException' => __DIR__ . '/..' . '/icewind/smb/src/Exception/ForbiddenException.php', 'Icewind\\SMB\\Exception\\ForbiddenException' => __DIR__ . '/..' . '/icewind/smb/src/Exception/ForbiddenException.php',
'Icewind\\SMB\\Exception\\HostDownException' => __DIR__ . '/..' . '/icewind/smb/src/Exception/HostDownException.php', 'Icewind\\SMB\\Exception\\HostDownException' => __DIR__ . '/..' . '/icewind/smb/src/Exception/HostDownException.php',
'Icewind\\SMB\\Exception\\InvalidHostException' => __DIR__ . '/..' . '/icewind/smb/src/Exception/InvalidHostException.php', 'Icewind\\SMB\\Exception\\InvalidHostException' => __DIR__ . '/..' . '/icewind/smb/src/Exception/InvalidHostException.php',
'Icewind\\SMB\\Exception\\InvalidParameterException' => __DIR__ . '/..' . '/icewind/smb/src/Exception/InvalidParameterException.php',
'Icewind\\SMB\\Exception\\InvalidPathException' => __DIR__ . '/..' . '/icewind/smb/src/Exception/InvalidPathException.php', 'Icewind\\SMB\\Exception\\InvalidPathException' => __DIR__ . '/..' . '/icewind/smb/src/Exception/InvalidPathException.php',
'Icewind\\SMB\\Exception\\InvalidRequestException' => __DIR__ . '/..' . '/icewind/smb/src/Exception/InvalidRequestException.php', 'Icewind\\SMB\\Exception\\InvalidRequestException' => __DIR__ . '/..' . '/icewind/smb/src/Exception/InvalidRequestException.php',
'Icewind\\SMB\\Exception\\InvalidResourceException' => __DIR__ . '/..' . '/icewind/smb/src/Exception/InvalidResourceException.php', 'Icewind\\SMB\\Exception\\InvalidResourceException' => __DIR__ . '/..' . '/icewind/smb/src/Exception/InvalidResourceException.php',
@ -60,6 +61,8 @@ class ComposerStaticInit98fe9b281934250b3a93f69a5ce843b3
'Icewind\\SMB\\Exception\\NoRouteToHostException' => __DIR__ . '/..' . '/icewind/smb/src/Exception/NoRouteToHostException.php', 'Icewind\\SMB\\Exception\\NoRouteToHostException' => __DIR__ . '/..' . '/icewind/smb/src/Exception/NoRouteToHostException.php',
'Icewind\\SMB\\Exception\\NotEmptyException' => __DIR__ . '/..' . '/icewind/smb/src/Exception/NotEmptyException.php', 'Icewind\\SMB\\Exception\\NotEmptyException' => __DIR__ . '/..' . '/icewind/smb/src/Exception/NotEmptyException.php',
'Icewind\\SMB\\Exception\\NotFoundException' => __DIR__ . '/..' . '/icewind/smb/src/Exception/NotFoundException.php', 'Icewind\\SMB\\Exception\\NotFoundException' => __DIR__ . '/..' . '/icewind/smb/src/Exception/NotFoundException.php',
'Icewind\\SMB\\Exception\\OutOfSpaceException' => __DIR__ . '/..' . '/icewind/smb/src/Exception/OutOfSpaceException.php',
'Icewind\\SMB\\Exception\\RevisionMismatchException' => __DIR__ . '/..' . '/icewind/smb/src/Exception/RevisionMismatchException.php',
'Icewind\\SMB\\Exception\\TimedOutException' => __DIR__ . '/..' . '/icewind/smb/src/Exception/TimedOutException.php', 'Icewind\\SMB\\Exception\\TimedOutException' => __DIR__ . '/..' . '/icewind/smb/src/Exception/TimedOutException.php',
'Icewind\\SMB\\FileInfo' => __DIR__ . '/..' . '/icewind/smb/src/FileInfo.php', 'Icewind\\SMB\\FileInfo' => __DIR__ . '/..' . '/icewind/smb/src/FileInfo.php',
'Icewind\\SMB\\IFileInfo' => __DIR__ . '/..' . '/icewind/smb/src/IFileInfo.php', 'Icewind\\SMB\\IFileInfo' => __DIR__ . '/..' . '/icewind/smb/src/IFileInfo.php',

View File

@ -44,17 +44,17 @@
}, },
{ {
"name": "icewind/smb", "name": "icewind/smb",
"version": "v2.0.2", "version": "v2.0.3",
"version_normalized": "2.0.2.0", "version_normalized": "2.0.3.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/icewind1991/SMB.git", "url": "https://github.com/icewind1991/SMB.git",
"reference": "6691355d9314ac3a8cb9ec9446e4c26e8aab09d0" "reference": "8394551bf29a37b884edb33dae8acde369177f32"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/icewind1991/SMB/zipball/6691355d9314ac3a8cb9ec9446e4c26e8aab09d0", "url": "https://api.github.com/repos/icewind1991/SMB/zipball/8394551bf29a37b884edb33dae8acde369177f32",
"reference": "6691355d9314ac3a8cb9ec9446e4c26e8aab09d0", "reference": "8394551bf29a37b884edb33dae8acde369177f32",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -64,7 +64,7 @@
"require-dev": { "require-dev": {
"phpunit/phpunit": "^4.8" "phpunit/phpunit": "^4.8"
}, },
"time": "2017-08-16T16:08:57+00:00", "time": "2017-10-18T16:21:10+00:00",
"type": "library", "type": "library",
"installation-source": "source", "installation-source": "source",
"autoload": { "autoload": {

View File

@ -15,7 +15,7 @@ class ErrorCodes {
const BadHostName = 'NT_STATUS_BAD_NETWORK_NAME'; const BadHostName = 'NT_STATUS_BAD_NETWORK_NAME';
const Unsuccessful = 'NT_STATUS_UNSUCCESSFUL'; const Unsuccessful = 'NT_STATUS_UNSUCCESSFUL';
const ConnectionRefused = 'NT_STATUS_CONNECTION_REFUSED'; const ConnectionRefused = 'NT_STATUS_CONNECTION_REFUSED';
const NoLogonServers = 'NT_STATUS_NO_LOGON_SERVERS'; const NoLogonServers = 'NT_STATUS_NO_LOGON_SERVERS';
const PathNotFound = 'NT_STATUS_OBJECT_PATH_NOT_FOUND'; const PathNotFound = 'NT_STATUS_OBJECT_PATH_NOT_FOUND';
const NoSuchFile = 'NT_STATUS_NO_SUCH_FILE'; const NoSuchFile = 'NT_STATUS_NO_SUCH_FILE';
@ -26,4 +26,6 @@ class ErrorCodes {
const FileIsADirectory = 'NT_STATUS_FILE_IS_A_DIRECTORY'; const FileIsADirectory = 'NT_STATUS_FILE_IS_A_DIRECTORY';
const NotADirectory = 'NT_STATUS_NOT_A_DIRECTORY'; const NotADirectory = 'NT_STATUS_NOT_A_DIRECTORY';
const SharingViolation = 'NT_STATUS_SHARING_VIOLATION'; const SharingViolation = 'NT_STATUS_SHARING_VIOLATION';
const InvalidParameter = 'NT_STATUS_INVALID_PARAMETER';
const RevisionMismatch = 'NT_STATUS_REVISION_MISMATCH';
} }

View File

@ -14,7 +14,7 @@ class Exception extends \Exception {
$message .= ' for ' . $path; $message .= ' for ' . $path;
} }
return new Exception($message, $error); return new Exception($message, is_string($error) ? 0 : $error);
} }
/** /**

View File

@ -0,0 +1,10 @@
<?php
/**
* Copyright (c) 2014 Robin Appelman <icewind@owncloud.com>
* This file is licensed under the Licensed under the MIT license:
* http://opensource.org/licenses/MIT
*/
namespace Icewind\SMB\Exception;
class InvalidParameterException extends InvalidRequestException {}

View File

@ -0,0 +1,11 @@
<?php
/**
* Copyright (c) 2014 Robin Appelman <icewind@owncloud.com>
* This file is licensed under the Licensed under the MIT license:
* http://opensource.org/licenses/MIT
*/
namespace Icewind\SMB\Exception;
class OutOfSpaceException extends InvalidRequestException {
}

View File

@ -0,0 +1,16 @@
<?php
/**
* Copyright (c) 2014 Robin Appelman <icewind@owncloud.com>
* This file is licensed under the Licensed under the MIT license:
* http://opensource.org/licenses/MIT
*/
namespace Icewind\SMB\Exception;
use Throwable;
class RevisionMismatchException extends Exception {
public function __construct($message = 'Protocol version mismatch', $code = 0, Throwable $previous = null) {
parent::__construct($message, $code, $previous);
}
}

View File

@ -31,6 +31,7 @@ class NativeState {
17 => '\Icewind\SMB\Exception\AlreadyExistsException', 17 => '\Icewind\SMB\Exception\AlreadyExistsException',
20 => '\Icewind\SMB\Exception\InvalidTypeException', 20 => '\Icewind\SMB\Exception\InvalidTypeException',
21 => '\Icewind\SMB\Exception\InvalidTypeException', 21 => '\Icewind\SMB\Exception\InvalidTypeException',
28 => '\Icewind\SMB\Exception\OutOfSpaceException',
39 => '\Icewind\SMB\Exception\NotEmptyException', 39 => '\Icewind\SMB\Exception\NotEmptyException',
110 => '\Icewind\SMB\Exception\TimedOutException', 110 => '\Icewind\SMB\Exception\TimedOutException',
111 => '\Icewind\SMB\Exception\ConnectionRefusedException', 111 => '\Icewind\SMB\Exception\ConnectionRefusedException',

View File

@ -9,6 +9,8 @@
namespace Icewind\SMB; namespace Icewind\SMB;
use Icewind\SMB\Exception\Exception;
class NotifyHandler implements INotifyHandler { class NotifyHandler implements INotifyHandler {
/** /**
* @var Connection * @var Connection
@ -22,6 +24,12 @@ class NotifyHandler implements INotifyHandler {
private $listening = true; private $listening = true;
// todo replace with static once <5.6 support is dropped
// see error.h
private static $exceptionMap = [
ErrorCodes::RevisionMismatch => '\Icewind\SMB\Exception\RevisionMismatchException',
];
/** /**
* @param Connection $connection * @param Connection $connection
* @param string $path * @param string $path
@ -43,6 +51,7 @@ class NotifyHandler implements INotifyHandler {
stream_set_blocking($this->connection->getOutputStream(), 0); stream_set_blocking($this->connection->getOutputStream(), 0);
$lines = []; $lines = [];
while (($line = $this->connection->readLine())) { while (($line = $this->connection->readLine())) {
$this->checkForError($line);
$lines[] = $line; $lines[] = $line;
} }
stream_set_blocking($this->connection->getOutputStream(), 1); stream_set_blocking($this->connection->getOutputStream(), 1);
@ -59,6 +68,7 @@ class NotifyHandler implements INotifyHandler {
public function listen($callback) { public function listen($callback) {
if ($this->listening) { if ($this->listening) {
$this->connection->read(function ($line) use ($callback) { $this->connection->read(function ($line) use ($callback) {
$this->checkForError($line);
$change = $this->parseChangeLine($line); $change = $this->parseChangeLine($line);
if ($change) { if ($change) {
return $callback($change); return $callback($change);
@ -80,6 +90,13 @@ class NotifyHandler implements INotifyHandler {
} }
} }
private function checkForError($line) {
if (substr($line, 0, 16) === 'notify returned ') {
$error = substr($line, 16);
throw Exception::fromMap(self::$exceptionMap, $error, 'Notify is not supported with the used smb version');
}
}
public function stop() { public function stop() {
$this->listening = false; $this->listening = false;
$this->connection->close(); $this->connection->close();

View File

@ -30,6 +30,7 @@ class Parser {
// todo replace with static once <5.6 support is dropped // todo replace with static once <5.6 support is dropped
// see error.h // see error.h
private static $exceptionMap = [ private static $exceptionMap = [
ErrorCodes::LogonFailure => '\Icewind\SMB\Exception\AuthenticationException',
ErrorCodes::PathNotFound => '\Icewind\SMB\Exception\NotFoundException', ErrorCodes::PathNotFound => '\Icewind\SMB\Exception\NotFoundException',
ErrorCodes::ObjectNotFound => '\Icewind\SMB\Exception\NotFoundException', ErrorCodes::ObjectNotFound => '\Icewind\SMB\Exception\NotFoundException',
ErrorCodes::NoSuchFile => '\Icewind\SMB\Exception\NotFoundException', ErrorCodes::NoSuchFile => '\Icewind\SMB\Exception\NotFoundException',
@ -38,7 +39,8 @@ class Parser {
ErrorCodes::DirectoryNotEmpty => '\Icewind\SMB\Exception\NotEmptyException', ErrorCodes::DirectoryNotEmpty => '\Icewind\SMB\Exception\NotEmptyException',
ErrorCodes::FileIsADirectory => '\Icewind\SMB\Exception\InvalidTypeException', ErrorCodes::FileIsADirectory => '\Icewind\SMB\Exception\InvalidTypeException',
ErrorCodes::NotADirectory => '\Icewind\SMB\Exception\InvalidTypeException', ErrorCodes::NotADirectory => '\Icewind\SMB\Exception\InvalidTypeException',
ErrorCodes::SharingViolation => '\Icewind\SMB\Exception\FileInUseException' ErrorCodes::SharingViolation => '\Icewind\SMB\Exception\FileInUseException',
ErrorCodes::InvalidParameter => '\Icewind\SMB\Exception\InvalidParameterException'
]; ];
/** /**

View File

@ -7,6 +7,7 @@
namespace Icewind\SMB; namespace Icewind\SMB;
use Icewind\SMB\Exception\ConnectException;
use Icewind\SMB\Exception\ConnectionException; use Icewind\SMB\Exception\ConnectionException;
class RawConnection { class RawConnection {
@ -25,6 +26,9 @@ class RawConnection {
* *
* $pipes[0] holds STDIN for smbclient * $pipes[0] holds STDIN for smbclient
* $pipes[1] holds STDOUT for smbclient * $pipes[1] holds STDOUT for smbclient
* $pipes[3] holds the authfile for smbclient
* $pipes[4] holds the stream for writing files
* $pipes[5] holds the stream for reading files
*/ */
private $pipes; private $pipes;
@ -33,32 +37,44 @@ class RawConnection {
*/ */
private $process; private $process;
public function __construct($command, $env = array()) { /**
* @var resource|null $authStream
*/
private $authStream = null;
private $connected = false;
public function __construct($command, array $env = []) {
$this->command = $command; $this->command = $command;
$this->env = $env; $this->env = $env;
$this->connect();
} }
private function connect() { public function connect() {
$descriptorSpec = array( if (is_null($this->getAuthStream())) {
0 => array('pipe', 'r'), // child reads from stdin throw new ConnectException('Authentication not set before connecting');
1 => array('pipe', 'w'), // child writes to stdout }
2 => array('pipe', 'w'), // child writes to stderr
3 => array('pipe', 'r'), // child reads from fd#3 $descriptorSpec = [
4 => array('pipe', 'r'), // child reads from fd#4 0 => ['pipe', 'r'], // child reads from stdin
5 => array('pipe', 'w') // child writes to fd#5 1 => ['pipe', 'w'], // child writes to stdout
); 2 => ['pipe', 'w'], // child writes to stderr
3 => $this->getAuthStream(), // child reads from fd#3
4 => ['pipe', 'r'], // child reads from fd#4
5 => ['pipe', 'w'] // child writes to fd#5
];
setlocale(LC_ALL, Server::LOCALE); setlocale(LC_ALL, Server::LOCALE);
$env = array_merge($this->env, array( $env = array_merge($this->env, [
'CLI_FORCE_INTERACTIVE' => 'y', // Needed or the prompt isn't displayed!! 'CLI_FORCE_INTERACTIVE' => 'y', // Needed or the prompt isn't displayed!!
'LC_ALL' => Server::LOCALE, 'LC_ALL' => Server::LOCALE,
'LANG' => Server::LOCALE, 'LANG' => Server::LOCALE,
'COLUMNS' => 8192 // prevent smbclient from line-wrapping it's output 'COLUMNS' => 8192 // prevent smbclient from line-wrapping it's output
)); ]);
$this->process = proc_open($this->command, $descriptorSpec, $this->pipes, '/', $env); $this->process = proc_open($this->command, $descriptorSpec, $this->pipes, '/', $env);
if (!$this->isValid()) { if (!$this->isValid()) {
throw new ConnectionException(); throw new ConnectionException();
} }
$this->connected = true;
} }
/** /**
@ -129,7 +145,7 @@ class RawConnection {
} }
public function getAuthStream() { public function getAuthStream() {
return $this->pipes[3]; return $this->authStream;
} }
public function getFileInputStream() { public function getFileInputStream() {
@ -143,14 +159,10 @@ class RawConnection {
public function writeAuthentication($user, $password) { public function writeAuthentication($user, $password) {
$auth = ($password === false) $auth = ($password === false)
? "username=$user" ? "username=$user"
: "username=$user\npassword=$password"; : "username=$user\npassword=$password\n";
if (fwrite($this->getAuthStream(), $auth) === false) { $this->authStream = fopen('php://temp', 'w+');
fclose($this->getAuthStream()); fwrite($this->getAuthStream(), $auth);
return false;
}
fclose($this->getAuthStream());
return true;
} }
public function close($terminate = true) { public function close($terminate = true) {
@ -163,8 +175,8 @@ class RawConnection {
$status = proc_get_status($this->process); $status = proc_get_status($this->process);
$ppid = $status['pid']; $ppid = $status['pid'];
$pids = preg_split('/\s+/', `ps -o pid --no-heading --ppid $ppid`); $pids = preg_split('/\s+/', `ps -o pid --no-heading --ppid $ppid`);
foreach($pids as $pid) { foreach ($pids as $pid) {
if(is_numeric($pid)) { if (is_numeric($pid)) {
//9 is the SIGKILL signal //9 is the SIGKILL signal
posix_kill($pid, 9); posix_kill($pid, 9);
} }

View File

@ -134,6 +134,7 @@ class Server {
); );
$connection = new RawConnection($command); $connection = new RawConnection($command);
$connection->writeAuthentication($this->getUser(), $this->getPassword()); $connection->writeAuthentication($this->getUser(), $this->getPassword());
$connection->connect();
$output = $connection->readAll(); $output = $connection->readAll();
$parser = new Parser($this->timezoneProvider); $parser = new Parser($this->timezoneProvider);

View File

@ -68,8 +68,9 @@ class Share extends AbstractShare {
); );
$connection = new Connection($command, $this->parser); $connection = new Connection($command, $this->parser);
$connection->writeAuthentication($this->server->getUser(), $this->server->getPassword()); $connection->writeAuthentication($this->server->getUser(), $this->server->getPassword());
$connection->connect();
if (!$connection->isValid()) { if (!$connection->isValid()) {
throw new ConnectionException(); throw new ConnectionException($connection->readLine());
} }
return $connection; return $connection;
} }
@ -88,7 +89,6 @@ class Share extends AbstractShare {
protected function reconnect() { protected function reconnect() {
$this->connection->reconnect(); $this->connection->reconnect();
$this->connection->writeAuthentication($this->server->getUser(), $this->server->getPassword());
if (!$this->connection->isValid()) { if (!$this->connection->isValid()) {
throw new ConnectionException(); throw new ConnectionException();
} }
@ -318,9 +318,9 @@ class Share extends AbstractShare {
$modeString = ''; $modeString = '';
$modeMap = array( $modeMap = array(
FileInfo::MODE_READONLY => 'r', FileInfo::MODE_READONLY => 'r',
FileInfo::MODE_HIDDEN => 'h', FileInfo::MODE_HIDDEN => 'h',
FileInfo::MODE_ARCHIVE => 'a', FileInfo::MODE_ARCHIVE => 'a',
FileInfo::MODE_SYSTEM => 's' FileInfo::MODE_SYSTEM => 's'
); );
foreach ($modeMap as $modeByte => $string) { foreach ($modeMap as $modeByte => $string) {
if ($mode & $modeByte) { if ($mode & $modeByte) {
@ -413,6 +413,7 @@ class Share extends AbstractShare {
} }
$path = str_replace('/', '\\', $path); $path = str_replace('/', '\\', $path);
$path = str_replace('"', '^"', $path); $path = str_replace('"', '^"', $path);
$path = ltrim($path, '\\');
return '"' . $path . '"'; return '"' . $path . '"';
} }