diff options
author | Robin Appelman <icewind@owncloud.com> | 2012-07-19 22:42:26 +0200 |
---|---|---|
committer | Robin Appelman <icewind@owncloud.com> | 2012-07-19 22:42:26 +0200 |
commit | b357a968c07bdfe888c469ff261baff8f8ed4d51 (patch) | |
tree | 4169870dcc1062aef1012ac74d592586186c1242 /apps | |
parent | 57fb37151a6c29d857733c78e3b00909aabaf413 (diff) | |
download | nextcloud-server-b357a968c07bdfe888c469ff261baff8f8ed4d51.tar.gz nextcloud-server-b357a968c07bdfe888c469ff261baff8f8ed4d51.zip |
smb user backend
Diffstat (limited to 'apps')
-rw-r--r-- | apps/user_external/appinfo/app.php | 1 | ||||
-rw-r--r-- | apps/user_external/lib/smb.php | 43 | ||||
-rw-r--r-- | apps/user_external/tests/config.php | 6 | ||||
-rw-r--r-- | apps/user_external/tests/smb.php | 34 |
4 files changed, 84 insertions, 0 deletions
diff --git a/apps/user_external/appinfo/app.php b/apps/user_external/appinfo/app.php index e53b839daf5..66320da95bc 100644 --- a/apps/user_external/appinfo/app.php +++ b/apps/user_external/appinfo/app.php @@ -1,2 +1,3 @@ <?php OC::$CLASSPATH['OC_User_IMAP']='apps/user_external/lib/imap.php'; +OC::$CLASSPATH['OC_User_SMB']='apps/user_external/lib/smb.php'; diff --git a/apps/user_external/lib/smb.php b/apps/user_external/lib/smb.php new file mode 100644 index 00000000000..44d2b7903d8 --- /dev/null +++ b/apps/user_external/lib/smb.php @@ -0,0 +1,43 @@ +<?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. + */ + +class OC_User_SMB extends OC_User_Backend{ + private $host; + + const smbclient='smbclient'; + const loginError='NT_STATUS_LOGON_FAILURE'; + + public function __construct($host){ + $this->host=$host; + } + + /** + * @brief Check if the password is correct + * @param $uid The username + * @param $password The password + * @returns true/false + * + * Check if the password is correct without logging in the user + */ + public function checkPassword($uid, $password){ + $uidEscaped=escapeshellarg($uid); + $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){ + return false; + }else{ + return $uid; + } + } + + public function userExists($uid){ + return true; + } +}
\ No newline at end of file diff --git a/apps/user_external/tests/config.php b/apps/user_external/tests/config.php index a32ad5d83a2..a72b2bbce80 100644 --- a/apps/user_external/tests/config.php +++ b/apps/user_external/tests/config.php @@ -13,4 +13,10 @@ return array( 'user'=>'foo',//valid username/password combination 'password'=>'bar', ), + 'smb'=>array( + 'run'=>true, + 'host'=>'localhost', + 'user'=>'test',//valid username/password combination + 'password'=>'test', + ), ); diff --git a/apps/user_external/tests/smb.php b/apps/user_external/tests/smb.php new file mode 100644 index 00000000000..1ed7eb934be --- /dev/null +++ b/apps/user_external/tests/smb.php @@ -0,0 +1,34 @@ +<?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. + */ + +class Test_User_SMB extends UnitTestCase{ + /** + * @var OC_User_IMAP $instance + */ + private $instance; + + private function getConfig(){ + return include(__DIR__.'/config.php'); + } + + function skip(){ + $config=$this->getConfig(); + $this->skipUnless($config['smb']['run']); + } + + function setUp(){ + $config=$this->getConfig(); + $this->instance=new OC_User_SMB($config['smb']['host']); + } + + function testLogin(){ + $config=$this->getConfig(); + $this->assertEqual($config['smb']['user'],$this->instance->checkPassword($config['smb']['user'],$config['smb']['password'])); + $this->assertFalse($this->instance->checkPassword($config['smb']['user'],$config['smb']['password'].'foo')); + } +} |