diff options
Diffstat (limited to 'apps/files_external/lib/smb_oc.php')
-rw-r--r-- | apps/files_external/lib/smb_oc.php | 43 |
1 files changed, 41 insertions, 2 deletions
diff --git a/apps/files_external/lib/smb_oc.php b/apps/files_external/lib/smb_oc.php index a62a2c01533..ac325cd4fbc 100644 --- a/apps/files_external/lib/smb_oc.php +++ b/apps/files_external/lib/smb_oc.php @@ -8,11 +8,15 @@ namespace OC\Files\Storage; +require_once __DIR__ . '/../3rdparty/smb4php/smb.php'; + class SMB_OC extends \OC\Files\Storage\SMB { + private $username_as_share; + public function __construct($params) { if (isset($params['host']) && \OC::$session->exists('smb-credentials')) { $host=$params['host']; - $username_as_share = ($params['username_as_share'] === 'true'); + $this->username_as_share = ($params['username_as_share'] === 'true'); $params_auth = \OC::$session->get('smb-credentials'); $user = \OC::$session->get('loginname'); @@ -21,7 +25,7 @@ class SMB_OC extends \OC\Files\Storage\SMB { $root=isset($params['root'])?$params['root']:'/'; $share = ''; - if ($username_as_share) { + if ($this->username_as_share) { $share = '/'.$user; } elseif (isset($params['share'])) { $share = $params['share']; @@ -47,4 +51,39 @@ class SMB_OC extends \OC\Files\Storage\SMB { public function isSharable($path) { return false; } + + public function test($isPersonal = true) { + if ($isPersonal) { + if ($this->stat('')) + return true; + return false; + } else { + $smb = new \smb(); + $pu = $smb->parse_url($this->constructUrl('')); + + // Attempt to connect anonymously + $pu['user'] = ''; + $pu['pass'] = ''; + + // Share cannot be checked if dynamic + if ($this->username_as_share) { + if ($smb->look($pu)) + return true; + else + return false; + } + if (!$pu['share']) + return false; + + // The following error messages are expected due to anonymous login + $regexp = array( + '(NT_STATUS_ACCESS_DENIED)' => 'skip' + ) + $smb->getRegexp(); + + if ($smb->client("-d 0 " . escapeshellarg('//' . $pu['host'] . '/' . $pu['share']) . " -c exit", $pu, $regexp)) + return true; + else + return false; + } + } } |