get_permissions($ui->dn,"users/password"); $smarty->assign("ChangeACL" , $password_ACLS); $smarty->assign("NotAllowed" , !preg_match("/w/i",$password_ACLS)); /* Display expiration template */ if((isset($this->config->data['MAIN']['ACCOUNT_EXPIRATION'])) && preg_match('/true/i', $this->config->data['MAIN']['ACCOUNT_EXPIRATION'])){ $expired= ldap_expired_account($this->config, $ui->dn, $ui->username); if($expired == 4){ return($smarty->fetch(get_template_path("nochange.tpl", TRUE))); } } /* Pwd change requested */ if (isset($_POST['password_finish'])){ /* Should we check different characters in new password */ $check_differ = isset($this->config->data['MAIN']['PWDIFFER']); $differ = @$this->config->data['MAIN']['PWDIFFER']; /* Enable length check ? */ $check_length = isset($this->config->data['MAIN']['PWMINLEN']); $length = @$this->config->data['MAIN']['PWMINLEN']; /* Call external password quality hook ?*/ $check_hook = isset($this->config->data['MAIN']['EXTERNALPWDHOOK']); $hook = @$this->config->data['MAIN']['EXTERNALPWDHOOK']." ".$ui->username." ".$_POST['current_password']." ".$_POST['new_password']; if($check_hook){ exec($hook,$resarr); $check_hook_output = ""; if(count($resarr) > 0) { $check_hook_output= join('\n', $resarr); } } /* Check given values */ if(!isset($_POST['current_password']) || empty($_POST['current_password'])){ msg_dialog::display(_("User password"), _("You need to specify your current password in order to proceed."),WARNING_DIALOG); }elseif ($_POST['new_password'] != $_POST['repeated_password']){ msg_dialog::display(_("User password"), _("The passwords you've entered as 'New password' and 'Repeated new password' do not match."),WARNING_DIALOG); } elseif ($_POST['new_password'] == ""){ msg_dialog::display(_("User password"), _("The password you've entered as 'New password' is empty."),WARNING_DIALOG); }elseif($check_differ && (substr($_POST['current_password'], 0, $differ) == substr($_POST['new_password'], 0, $differ))){ msg_dialog::display(_("User password"), _("The password used as new and current are too similar."),WARNING_DIALOG); }elseif($check_length && (strlen($_POST['new_password']) < $length)){ msg_dialog::display(_("User password"), _("The password used as new is to short."),WARNING_DIALOG); }elseif($check_hook && $check_hook_output != ""){ msg_dialog::display(_("User password"), sprintf(_("External password changer reported a problem: %s."),$check_hook_output),WARNING_DIALOG); }else{ /* Try to connect via current password */ $tldap = new LDAP( $ui->dn, $_POST['current_password'], $this->config->current['SERVER'], isset($this->config->current['RECURSIVE']) && preg_match("/true/i",$this->config->current['RECURSIVE']), isset($this->config->current['TLS']) && preg_match("/true/i",$this->config->current['TLS'])); /* connection Successfull ? */ if ($tldap->error != "Success"){ msg_dialog::display(_("User password"), _("The password you've entered as your current password doesn't match the real one."),WARNING_DIALOG); }else{ /* Check GOsa permissions */ if (!preg_match("/w/i",$password_ACLS)){ msg_dialog::display(_("User password"), _("You have no permissions to change your password."),WARNING_DIALOG); }else{ change_password ($ui->dn, $_POST['new_password']); gosa_log ("User/password has been changed"); $ui->password= $_POST['new_password']; session::set('ui',$ui); #$this->handle_post_events("modify",array("userPassword" => $_POST['new_password'])); return($smarty->fetch(get_template_path("changed.tpl", TRUE))); } } } } return($smarty->fetch(get_template_path("password.tpl", TRUE))); } function remove_from_parent() { $this->handle_post_events("remove"); } function save() { } static function plInfo() { return (array( "plDescription" => _("User password"), "plSelfModify" => TRUE, "plDepends" => array("user"), "plPriority" => 10, "plSection" => array("personal" => _("My account")), "plCategory" => array("users"), "plOptions" => array(), "plProvidedAcls" => array()) ); } } // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: ?>