]> source.dussan.org Git - nextcloud-server.git/commitdiff
SMB ignore connection errors when NetBIOS is disabled
authorVincent Petry <pvince81@owncloud.com>
Mon, 18 Nov 2013 11:27:30 +0000 (12:27 +0100)
committerVincent Petry <pvince81@owncloud.com>
Mon, 18 Nov 2013 11:31:55 +0000 (12:31 +0100)
When NetBIOS is blocked or disabled, a smb::look() call can still get
the list of shares from smbclient, even though the name resolution at
the end of the command fails.

This fix makes it ignore the connection error if we already got the list
of shares.

Fixed #5860

apps/files_external/3rdparty/smb4php/smb.php

index 1a6cd05590c3f1eeade22d2936176bf4a07c1021..9650f809041f687c33fd2138bb74a5581613ef66 100644 (file)
@@ -127,6 +127,7 @@ class smb {
                $old_locale = getenv('LC_ALL');
                putenv('LC_ALL=en_US.UTF-8');
                $output = popen (SMB4PHP_SMBCLIENT." -N {$auth} {$options} {$port} {$options} {$params} 2>/dev/null", 'r');
+               $gotInfo = false;
                $info = array ();
                $info['info']= array ();
                $mode = '';
@@ -188,7 +189,12 @@ class smb {
                                        }
                                        trigger_error($regs[0].' params('.$params.')', E_USER_ERROR);
                                case 'error-connect':
-                                       return false;
+                                       // connection error can happen after obtaining share list if
+                                       // NetBIOS is disabled/blocked on the target server,
+                                       // in which case we keep the info and continue
+                                       if (!$gotInfo) {
+                                               return false;
+                                       }
                        }
                        if ($i) switch ($i[1]) {
                                case 'file':
@@ -196,6 +202,7 @@ class smb {
                                case 'disk':
                                case 'server':
                                case 'workgroup': $info[$i[1]][] = $i[0];
+                               $gotInfo = true;
                        }
                }
                pclose($output);