summaryrefslogtreecommitdiffstats
path: root/apps/files_external/lib/smb_oc.php
diff options
context:
space:
mode:
Diffstat (limited to 'apps/files_external/lib/smb_oc.php')
-rw-r--r--apps/files_external/lib/smb_oc.php43
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;
+ }
+ }
}