mirror of
https://codeberg.org/icewind/SMB.git
synced 2026-06-03 17:24:07 +02:00
Handle login server error
This commit is contained in:
parent
2fc9501826
commit
f299504ca5
3 changed files with 25 additions and 5 deletions
|
|
@ -8,8 +8,10 @@
|
||||||
namespace Icewind\SMB;
|
namespace Icewind\SMB;
|
||||||
|
|
||||||
use Icewind\SMB\Exception\AuthenticationException;
|
use Icewind\SMB\Exception\AuthenticationException;
|
||||||
|
use Icewind\SMB\Exception\ConnectException;
|
||||||
use Icewind\SMB\Exception\ConnectionException;
|
use Icewind\SMB\Exception\ConnectionException;
|
||||||
use Icewind\SMB\Exception\InvalidHostException;
|
use Icewind\SMB\Exception\InvalidHostException;
|
||||||
|
use Icewind\SMB\Exception\NoLoginServerException;
|
||||||
|
|
||||||
class Connection extends RawConnection {
|
class Connection extends RawConnection {
|
||||||
const DELIMITER = 'smb:';
|
const DELIMITER = 'smb:';
|
||||||
|
|
@ -31,13 +33,16 @@ class Connection extends RawConnection {
|
||||||
*/
|
*/
|
||||||
public function read() {
|
public function read() {
|
||||||
if (!$this->isValid()) {
|
if (!$this->isValid()) {
|
||||||
throw new ConnectionException();
|
throw new ConnectionException('Connection not valied');
|
||||||
}
|
}
|
||||||
$line = $this->readLine(); //first line is prompt
|
$line = $this->readLine(); //first line is prompt
|
||||||
$this->checkConnectionError($line);
|
$this->checkConnectionError($line);
|
||||||
|
|
||||||
$output = array();
|
$output = array();
|
||||||
$line = $this->readLine();
|
$line = $this->readLine();
|
||||||
|
if ($line === false) {
|
||||||
|
throw new ConnectException('Unknown error');
|
||||||
|
}
|
||||||
$length = mb_strlen(self::DELIMITER);
|
$length = mb_strlen(self::DELIMITER);
|
||||||
while (mb_substr($line, 0, $length) !== self::DELIMITER) { //next prompt functions as delimiter
|
while (mb_substr($line, 0, $length) !== self::DELIMITER) { //next prompt functions as delimiter
|
||||||
$output[] .= $line;
|
$output[] .= $line;
|
||||||
|
|
@ -52,20 +57,24 @@ class Connection extends RawConnection {
|
||||||
* @param $line
|
* @param $line
|
||||||
* @throws AuthenticationException
|
* @throws AuthenticationException
|
||||||
* @throws InvalidHostException
|
* @throws InvalidHostException
|
||||||
|
* @throws NoLoginServerException
|
||||||
*/
|
*/
|
||||||
private function checkConnectionError($line) {
|
private function checkConnectionError($line) {
|
||||||
$line = rtrim($line, ')');
|
$line = rtrim($line, ')');
|
||||||
if (substr($line, -23) === ErrorCodes::LogonFailure) {
|
if (substr($line, -23) === ErrorCodes::LogonFailure) {
|
||||||
throw new AuthenticationException();
|
throw new AuthenticationException('Invalid login');
|
||||||
}
|
}
|
||||||
if (substr($line, -26) === ErrorCodes::BadHostName) {
|
if (substr($line, -26) === ErrorCodes::BadHostName) {
|
||||||
throw new InvalidHostException();
|
throw new InvalidHostException('Invalid hostname');
|
||||||
}
|
}
|
||||||
if (substr($line, -22) === ErrorCodes::Unsuccessful) {
|
if (substr($line, -22) === ErrorCodes::Unsuccessful) {
|
||||||
throw new InvalidHostException();
|
throw new InvalidHostException('Connection unsuccessful');
|
||||||
}
|
}
|
||||||
if (substr($line, -28) === ErrorCodes::ConnectionRefused) {
|
if (substr($line, -28) === ErrorCodes::ConnectionRefused) {
|
||||||
throw new InvalidHostException();
|
throw new InvalidHostException('Connection refused');
|
||||||
|
}
|
||||||
|
if (substr($line, -26) === ErrorCodes::NoLogonServers) {
|
||||||
|
throw new NoLoginServerException('No login server');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -15,6 +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 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';
|
||||||
|
|
|
||||||
10
src/Exception/NoLoginServerException.php
Normal file
10
src/Exception/NoLoginServerException.php
Normal 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 NoLoginServerException extends ConnectException {}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue