Blame view

sources/apps/user_external/lib/smb.php 1.72 KB
d1bafeea1   Kload   [fix] Upgrade to ...
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   Cédric Dupont   Update sources OC...
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   Kload   [fix] Upgrade to ...
18
  	private $host;
6d9380f96   Cédric Dupont   Update sources OC...
19
20
  	const SMBCLIENT = 'smbclient';
  	const LOGINERROR = 'NT_STATUS_LOGON_FAILURE';
d1bafeea1   Kload   [fix] Upgrade to ...
21

6d9380f96   Cédric Dupont   Update sources OC...
22
23
24
25
26
  	/**
  	 * Create new samba authentication provider
  	 *
  	 * @param string $host Hostname or IP of windows machine
  	 */
d1bafeea1   Kload   [fix] Upgrade to ...
27
  	public function __construct($host) {
6d9380f96   Cédric Dupont   Update sources OC...
28
  		parent::__construct($host);
d1bafeea1   Kload   [fix] Upgrade to ...
29
30
31
32
  		$this->host=$host;
  	}
  
  	/**
d1bafeea1   Kload   [fix] Upgrade to ...
33
  	 * Check if the password is correct without logging in the user
6d9380f96   Cédric Dupont   Update sources OC...
34
35
36
37
38
  	 *
  	 * @param string $uid      The username
  	 * @param string $password The password
  	 *
  	 * @return true/false
d1bafeea1   Kload   [fix] Upgrade to ...
39
40
41
42
43
  	 */
  	public function checkPassword($uid, $password) {
  		$uidEscaped=escapeshellarg($uid);
  		$password=escapeshellarg($password);
  		$result=array();
6d9380f96   Cédric Dupont   Update sources OC...
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   Kload   [fix] Upgrade to ...
54
  			return false;
6d9380f96   Cédric Dupont   Update sources OC...
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   Kload   [fix] Upgrade to ...
64
65
66
  			return $uid;
  		}
  	}
d1bafeea1   Kload   [fix] Upgrade to ...
67
  }