SMB ignore connection errors when NetBIOS is disabled
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
This commit is contained in:
parent
c3746e866a
commit
7e6f3817d0
|
@ -127,6 +127,7 @@ class smb {
|
||||||
$old_locale = getenv('LC_ALL');
|
$old_locale = getenv('LC_ALL');
|
||||||
putenv('LC_ALL=en_US.UTF-8');
|
putenv('LC_ALL=en_US.UTF-8');
|
||||||
$output = popen (SMB4PHP_SMBCLIENT." -N {$auth} {$options} {$port} {$options} {$params} 2>/dev/null", 'r');
|
$output = popen (SMB4PHP_SMBCLIENT." -N {$auth} {$options} {$port} {$options} {$params} 2>/dev/null", 'r');
|
||||||
|
$gotInfo = false;
|
||||||
$info = array ();
|
$info = array ();
|
||||||
$info['info']= array ();
|
$info['info']= array ();
|
||||||
$mode = '';
|
$mode = '';
|
||||||
|
@ -188,14 +189,20 @@ class smb {
|
||||||
}
|
}
|
||||||
trigger_error($regs[0].' params('.$params.')', E_USER_ERROR);
|
trigger_error($regs[0].' params('.$params.')', E_USER_ERROR);
|
||||||
case 'error-connect':
|
case 'error-connect':
|
||||||
|
// 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;
|
return false;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if ($i) switch ($i[1]) {
|
if ($i) switch ($i[1]) {
|
||||||
case 'file':
|
case 'file':
|
||||||
case 'folder': $info['info'][$i[0]] = $i;
|
case 'folder': $info['info'][$i[0]] = $i;
|
||||||
case 'disk':
|
case 'disk':
|
||||||
case 'server':
|
case 'server':
|
||||||
case 'workgroup': $info[$i[1]][] = $i[0];
|
case 'workgroup': $info[$i[1]][] = $i[0];
|
||||||
|
$gotInfo = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pclose($output);
|
pclose($output);
|
||||||
|
|
Loading…
Reference in New Issue