Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/apps.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Weiske <cweiske@cweiske.de>2014-01-18 00:31:39 +0400
committerChristian Weiske <cweiske@cweiske.de>2014-01-18 00:31:39 +0400
commitc9f92d3c83b735fbe2e26fb24368203b29344909 (patch)
treee5d79441e82272fd9703a36139ff508f19ba23a0 /user_external
parentce2b32dac38ff72fa935d518cc47c886f1aedadb (diff)
user_external: Check if extensions are enabled before using them
This patch checks if the relevant functionality is actually available before using it for authentication: 1. check if function imap_open() exists before using it 2. check if smbclient executable exists during smb auth 3. check if ftp/ftps stream wrappers are registered before using them for auth This fixes a crash (white page) that happens when using IMAP authentication and the IMAP extension is not installed.
Diffstat (limited to 'user_external')
-rw-r--r--user_external/lib/ftp.php7
-rw-r--r--user_external/lib/imap.php4
-rw-r--r--user_external/lib/smb.php14
3 files changed, 20 insertions, 5 deletions
diff --git a/user_external/lib/ftp.php b/user_external/lib/ftp.php
index 388e1327a..b94d7fe39 100644
--- a/user_external/lib/ftp.php
+++ b/user_external/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/user_external/lib/imap.php b/user_external/lib/imap.php
index 201d9d8ab..d1c62632c 100644
--- a/user_external/lib/imap.php
+++ b/user_external/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/user_external/lib/smb.php b/user_external/lib/smb.php
index 96429d8cf..8a95120a8 100644
--- a/user_external/lib/smb.php
+++ b/user_external/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;
}
}