diff --git a/lib/ftp.php b/lib/ftp.php index 388e132..b94d7fe 100644 --- a/lib/ftp.php +++ b/lib/ftp.php @@ -18,7 +18,6 @@ class OC_User_FTP extends OC_User_Backend{ if($this->secure) { $this->protocol.='s'; } - $this->protocol.='://'; } /** @@ -30,7 +29,11 @@ class OC_User_FTP extends OC_User_Backend{ * Check if the password is correct without logging in the user */ public function checkPassword($uid, $password) { - $url=$this->protocol.$uid.':'.$password.'@'.$this->host.'/'; + if (false === array_search($this->protocol, stream_get_wrappers())) { + OCP\Util::writeLog('user_external', 'ERROR: Stream wrapper not available: ' . $this->protocol, OCP\Util::ERROR); + return false; + } + $url = sprintf('%s://%s:%s@%s/', $this->protocol, $uid, $password, $this->host); $result=@opendir($url); if(is_resource($result)) { return $uid; diff --git a/lib/imap.php b/lib/imap.php index 201d9d8..d1c6263 100644 --- a/lib/imap.php +++ b/lib/imap.php @@ -22,6 +22,10 @@ class OC_User_IMAP extends OC_User_Backend{ * Check if the password is correct without logging in the user */ public function checkPassword($uid, $password) { + if (!function_exists('imap_open')) { + OCP\Util::writeLog('user_external', 'ERROR: PHP imap extension is not installed', OCP\Util::ERROR); + return false; + } $mbox = @imap_open($this->mailbox, $uid, $password); imap_errors(); imap_alerts(); diff --git a/lib/smb.php b/lib/smb.php index 96429d8..8a95120 100644 --- a/lib/smb.php +++ b/lib/smb.php @@ -29,10 +29,18 @@ class OC_User_SMB extends OC_User_Backend{ $password=escapeshellarg($password); $result=array(); $command=self::smbclient.' //'.$this->host.'/dummy -U'.$uidEscaped.'%'.$password; - $result=exec($command,$result); - if(substr($result,-strlen(self::loginError))==self::loginError) { + $lastline = exec($command, $output, $retval); + if ($retval === 127) { + OCP\Util::writeLog('user_external', 'ERROR: smbclient executable missing', OCP\Util::ERROR); return false; - }else{ + } else if (strpos($lastline, self::loginError) !== false) { + //normal login error + return false; + } else if ($retval != 0) { + //some other error + OCP\Util::writeLog('user_external', 'ERROR: smbclient error: ' . trim($lastline), OCP\Util::ERROR); + return false; + } else { return $uid; } }