EGroupware /
egroupware
| 1 | <?php |
||
| 2 | /** |
||
| 3 | * eGroupWare API - Auth from PAM |
||
| 4 | * |
||
| 5 | * @link http://www.egroupware.org |
||
| 6 | * @license http://opensource.org/licenses/lgpl-license.php LGPL - GNU Lesser General Public License |
||
| 7 | * @package api |
||
| 8 | * @subpackage authentication |
||
| 9 | * @version $Id$ |
||
| 10 | */ |
||
| 11 | |||
| 12 | namespace EGroupware\Api\Auth; |
||
| 13 | |||
| 14 | use EGroupware\Api; |
||
| 15 | |||
| 16 | /** |
||
| 17 | * Auth from PAM |
||
| 18 | * |
||
| 19 | * Requires PHP PAM extension: pecl install pam |
||
| 20 | * |
||
| 21 | * To read full name from password file PHP's posix extension is needed (sometimes in package php_process) |
||
| 22 | */ |
||
| 23 | class Pam implements Backend |
||
| 24 | { |
||
| 25 | /** |
||
| 26 | * password authentication |
||
| 27 | * |
||
| 28 | * @param string $username username of account to authenticate |
||
| 29 | * @param string $passwd corresponding password |
||
| 30 | * @param string $passwd_type ='text' 'text' for cleartext passwords (default) |
||
| 31 | * @return boolean true if successful authenticated, false otherwise |
||
| 32 | */ |
||
| 33 | function authenticate($username, $passwd, $passwd_type='text') |
||
| 34 | { |
||
| 35 | unset($passwd_type); // not used but required by interface |
||
| 36 | |||
| 37 | if (pam_auth($username, get_magic_quotes_gpc() ? stripslashes($passwd) : $passwd)) |
||
|
0 ignored issues
–
show
Bug
introduced
by
Loading history...
|
|||
| 38 | { |
||
| 39 | // for new accounts read full name from password file and pass it to EGroupware |
||
| 40 | if (!$GLOBALS['egw']->accounts->name2id($username) && |
||
| 41 | function_exists('posix_getpwnam') && ($data = posix_getpwnam($username))) |
||
| 42 | { |
||
| 43 | list($fullname) = explode(',',$data['gecos']); |
||
| 44 | $parts = explode(' ',$fullname); |
||
| 45 | if (count($parts) > 1) |
||
| 46 | { |
||
| 47 | $lastname = array_pop($parts); |
||
| 48 | $firstname = implode(' ',$parts); |
||
| 49 | $email = Api\Accounts::email($firstname, $lastname, $username); |
||
| 50 | |||
| 51 | $GLOBALS['auto_create_acct'] = array( |
||
| 52 | 'firstname' => $firstname, |
||
| 53 | 'lastname' => $lastname, |
||
| 54 | 'email' => $email, |
||
| 55 | 'account_id' => $data['uid'], |
||
| 56 | ); |
||
| 57 | } |
||
| 58 | } |
||
| 59 | return True; |
||
| 60 | } |
||
| 61 | return False; |
||
| 62 | } |
||
| 63 | |||
| 64 | /** |
||
| 65 | * changes password |
||
| 66 | * |
||
| 67 | * @param string $old_passwd must be cleartext or empty to not to be checked |
||
| 68 | * @param string $new_passwd must be cleartext |
||
| 69 | * @param int $account_id =0 account id of user whose passwd should be changed |
||
| 70 | * @return boolean true if password successful changed, false otherwise |
||
| 71 | */ |
||
| 72 | function change_password($old_passwd, $new_passwd, $account_id=0) |
||
| 73 | { |
||
| 74 | unset($old_passwd, $new_passwd, $account_id); // not used but required by interface |
||
| 75 | |||
| 76 | // deny password changes. |
||
| 77 | return False; |
||
| 78 | } |
||
| 79 | } |
||
| 80 |