Blame view
sources/apps/user_external/lib/smb.php
1.72 KB
|
d1bafeea1
|
1 2 3 4 5 6 7 |
<?php /** * Copyright (c) 2012 Robin Appelman <icewind@owncloud.com> * This file is licensed under the Affero General Public License version 3 or * later. * See the COPYING-README file. */ |
|
6d9380f96
|
8 9 10 11 12 13 14 15 16 17 |
/**
* User authentication via samba (smbclient)
*
* @category Apps
* @package UserExternal
* @author Robin Appelman <icewind@owncloud.com>
* @license http://www.gnu.org/licenses/agpl AGPL
* @link http://github.com/owncloud/apps
*/
class OC_User_SMB extends \OCA\user_external\Base{
|
|
d1bafeea1
|
18 |
private $host; |
|
6d9380f96
|
19 20 |
const SMBCLIENT = 'smbclient'; const LOGINERROR = 'NT_STATUS_LOGON_FAILURE'; |
|
d1bafeea1
|
21 |
|
|
6d9380f96
|
22 23 24 25 26 |
/** * Create new samba authentication provider * * @param string $host Hostname or IP of windows machine */ |
|
d1bafeea1
|
27 |
public function __construct($host) {
|
|
6d9380f96
|
28 |
parent::__construct($host); |
|
d1bafeea1
|
29 30 31 32 |
$this->host=$host; } /** |
|
d1bafeea1
|
33 |
* Check if the password is correct without logging in the user |
|
6d9380f96
|
34 35 36 37 38 |
* * @param string $uid The username * @param string $password The password * * @return true/false |
|
d1bafeea1
|
39 40 41 42 43 |
*/
public function checkPassword($uid, $password) {
$uidEscaped=escapeshellarg($uid);
$password=escapeshellarg($password);
$result=array();
|
|
6d9380f96
|
44 45 46 47 48 49 50 51 52 53 |
$command=self::SMBCLIENT.' //'.$this->host.'/dummy -U'.$uidEscaped.'%'.$password;
$lastline = exec($command, $output, $retval);
if ($retval === 127) {
OCP\Util::writeLog(
'user_external', 'ERROR: smbclient executable missing',
OCP\Util::ERROR
);
return false;
} else if (strpos($lastline, self::LOGINERROR) !== false) {
//normal login error
|
|
d1bafeea1
|
54 |
return false; |
|
6d9380f96
|
55 56 57 58 59 60 61 62 63 |
} else if ($retval != 0) {
//some other error
OCP\Util::writeLog(
'user_external', 'ERROR: smbclient error: ' . trim($lastline),
OCP\Util::ERROR
);
return false;
} else {
$this->storeUser($uid);
|
|
d1bafeea1
|
64 65 66 |
return $uid; } } |
|
d1bafeea1
|
67 |
} |