added central password service
This commit is contained in:
		
							parent
							
								
									29647f9596
								
							
						
					
					
						commit
						9ea91629c3
					
				|  | @ -35,7 +35,7 @@ $Id$ | ||||||
| * | * | ||||||
| * @package modules | * @package modules | ||||||
| */ | */ | ||||||
| class inetOrgPerson extends baseModule { | class inetOrgPerson extends baseModule implements passwordService { | ||||||
| 	 | 	 | ||||||
| 	private static $unix_hosts_supported = 'unknown'; | 	private static $unix_hosts_supported = 'unknown'; | ||||||
| 	 | 	 | ||||||
|  | @ -100,9 +100,6 @@ class inetOrgPerson extends baseModule { | ||||||
| 		$this->messages['uid'][1] = array('ERROR', _('Account %s:') . ' inetOrgPerson_userName', _('User name contains invalid characters. Valid characters are: a-z, A-Z, 0-9 and .-_ !')); | 		$this->messages['uid'][1] = array('ERROR', _('Account %s:') . ' inetOrgPerson_userName', _('User name contains invalid characters. Valid characters are: a-z, A-Z, 0-9 and .-_ !')); | ||||||
| 		$this->messages['uid'][3] = array('ERROR', _('Account %s:') . ' inetOrgPerson_userName', _('User name already exists!')); | 		$this->messages['uid'][3] = array('ERROR', _('Account %s:') . ' inetOrgPerson_userName', _('User name already exists!')); | ||||||
| 		$this->messages['manager'][0] = array('ERROR', _('Account %s:') . ' inetOrgPerson_manager', _('This is not a valid DN!')); | 		$this->messages['manager'][0] = array('ERROR', _('Account %s:') . ' inetOrgPerson_manager', _('This is not a valid DN!')); | ||||||
| 		$this->messages['userPassword'][0] = array('ERROR', _('Password'), _('Please enter the same password in both password fields.')); |  | ||||||
| 		$this->messages['userPassword'][1] = array('ERROR', _('Password'), _('Password contains invalid characters. Valid characters are: a-z, A-Z, 0-9 and #*,.;:_-+!%&/|?{[()]}=@$ !')); |  | ||||||
| 		$this->messages['userPassword'][2] = array('ERROR', _('Account %s:') . ' posixAccount_password', _('Password contains invalid characters. Valid characters are: a-z, A-Z, 0-9 and #*,.;:_-+!%&/|?{[()]}=@$ !')); |  | ||||||
| 		$this->messages['photo'][0] = array('ERROR', _('No file selected.')); | 		$this->messages['photo'][0] = array('ERROR', _('No file selected.')); | ||||||
| 		$this->messages['businessCategory'][0] = array('ERROR', _('Business category'), _('Please enter a valid business category!')); | 		$this->messages['businessCategory'][0] = array('ERROR', _('Business category'), _('Please enter a valid business category!')); | ||||||
| 		$this->messages['businessCategory'][1] = array('ERROR', _('Account %s:') . ' inetOrgPerson_businessCategory', _('Please enter a valid business category!')); | 		$this->messages['businessCategory'][1] = array('ERROR', _('Account %s:') . ' inetOrgPerson_businessCategory', _('Please enter a valid business category!')); | ||||||
|  | @ -637,10 +634,6 @@ class inetOrgPerson extends baseModule { | ||||||
| 				"Headline" => _("Unix workstations"), | 				"Headline" => _("Unix workstations"), | ||||||
| 				"Text" => _("Please enter a comma separated list of host names where this user is allowed to log in. If you enable host restrictions for your servers then \"*\" means every host and an empty field means no host.") | 				"Text" => _("Please enter a comma separated list of host names where this user is allowed to log in. If you enable host restrictions for your servers then \"*\" means every host and an empty field means no host.") | ||||||
| 			), | 			), | ||||||
| 			'userPassword' => array( |  | ||||||
| 				"Headline" => _("Password"), |  | ||||||
| 				"Text" => _("Please enter the password which you want to set for this account.") |  | ||||||
| 			), |  | ||||||
| 			'photoUpload' => array( | 			'photoUpload' => array( | ||||||
| 				"Headline" => _("Add photo"), | 				"Headline" => _("Add photo"), | ||||||
| 				"Text" => _("Please select an image file to upload. It must be in JPG format (.jpg/.jpeg).") | 				"Text" => _("Please select an image file to upload. It must be in JPG format (.jpg/.jpeg).") | ||||||
|  | @ -736,16 +729,6 @@ class inetOrgPerson extends baseModule { | ||||||
| 			return array(); | 			return array(); | ||||||
| 		} | 		} | ||||||
| 		$return = $this->getAccountContainer()->save_module_attributes($this->attributes, $this->orig); | 		$return = $this->getAccountContainer()->save_module_attributes($this->attributes, $this->orig); | ||||||
| 		// do not set password if posixAccount is active
 |  | ||||||
| 		$modules = $_SESSION['config']->get_AccountModules($this->get_scope()); |  | ||||||
| 		if (in_array('posixAccount', $modules)) { |  | ||||||
| 			if (isset($return[$this->getAccountContainer()->dn]['modify']['userPassword'])) { |  | ||||||
| 				unset($return[$this->getAccountContainer()->dn]['modify']['userPassword']); |  | ||||||
| 			} |  | ||||||
| 			if (isset($return[$this->getAccountContainer()->dn]['add']['userPassword'])) { |  | ||||||
| 				unset($return[$this->getAccountContainer()->dn]['add']['userPassword']); |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 		// postalAddress, facsimileTelephoneNumber and jpegPhoto need special removing
 | 		// postalAddress, facsimileTelephoneNumber and jpegPhoto need special removing
 | ||||||
| 		if (isset($return[$this->getAccountContainer()->dn]['remove']['postalAddress'])) { | 		if (isset($return[$this->getAccountContainer()->dn]['remove']['postalAddress'])) { | ||||||
| 			$return[$this->getAccountContainer()->dn]['modify']['postalAddress'] = array(); | 			$return[$this->getAccountContainer()->dn]['modify']['postalAddress'] = array(); | ||||||
|  | @ -912,26 +895,6 @@ class inetOrgPerson extends baseModule { | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 		// check password
 |  | ||||||
| 		if (isset($_POST['userPassword']) && ($_POST['userPassword'] != '')) { |  | ||||||
| 			if ($_POST['userPassword'] != $_POST['userPassword2']) { |  | ||||||
| 				$errors[] = $this->messages['userPassword'][0]; |  | ||||||
| 			} |  | ||||||
| 			else { |  | ||||||
| 				if (!get_preg($_POST['userPassword'], 'password')) { |  | ||||||
| 					$errors[] = $this->messages['userPassword'][1]; |  | ||||||
| 				} |  | ||||||
| 				else { |  | ||||||
| 					$pwdPolicyResult = checkPasswordStrength($_POST['userPassword']); |  | ||||||
| 					if ($pwdPolicyResult === true) { |  | ||||||
| 						$this->attributes['userPassword'][0] = pwd_hash($_POST['userPassword'], true, 'SSHA'); |  | ||||||
| 					} |  | ||||||
| 					else { |  | ||||||
| 						$errors[] = array('ERROR', $pwdPolicyResult); |  | ||||||
| 					} |  | ||||||
| 				} |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 		if (isset($_POST['delPhoto'])) { | 		if (isset($_POST['delPhoto'])) { | ||||||
| 			$this->attributes['jpegPhoto'] = array(); | 			$this->attributes['jpegPhoto'] = array(); | ||||||
| 		} | 		} | ||||||
|  | @ -988,29 +951,6 @@ class inetOrgPerson extends baseModule { | ||||||
| 	 | 	 | ||||||
| 		} | 		} | ||||||
| 		$return[] = array(array('kind' => 'text', 'td' => array('colspan' => 3))); | 		$return[] = array(array('kind' => 'text', 'td' => array('colspan' => 3))); | ||||||
| 		// password
 |  | ||||||
| 		if (!in_array('posixAccount', $modules)) { |  | ||||||
| 			// new account, show input fields
 |  | ||||||
| 			if ($this->getAccountContainer()->isNewAccount && !isset($this->attributes['userPassword'][0])) { |  | ||||||
| 				$return[] = array( |  | ||||||
| 					array('kind' => 'text', 'text' => _('Password') ), |  | ||||||
| 					array('kind' => 'input', 'name' => 'userPassword', 'type' => 'password', 'size' => '30', 'maxlength' => '255'), |  | ||||||
| 					array('kind' => 'help', 'value' => 'userPassword')); |  | ||||||
| 				$return[] = array( |  | ||||||
| 					array('kind' => 'text', 'text' => _('Repeat password')), |  | ||||||
| 					array('kind' => 'input', 'name' => 'userPassword2', 'type' => 'password', 'size' => '30', 'maxlength' => '255'), |  | ||||||
| 					array('kind' => 'text', 'text' => '')); |  | ||||||
| 			} |  | ||||||
| 			// old account, show button for password page
 |  | ||||||
| 			else { |  | ||||||
| 				$return[] = array( |  | ||||||
| 					array('kind' => 'text', 'text' => _('Password') ), |  | ||||||
| 					array('kind' => 'input', 'name' => 'form_subpage_' . get_class($this) . '_password_open', 'type' => 'submit', 'value' => _('Change password'))); |  | ||||||
| 			} |  | ||||||
| 
 |  | ||||||
| 			$return[] = array(array('kind' => 'text', 'td' => array('colspan' => 3))); |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		if (!$this->isBooleanConfigOptionSet('inetOrgPerson_hideStreet')) { | 		if (!$this->isBooleanConfigOptionSet('inetOrgPerson_hideStreet')) { | ||||||
| 			$street = ''; | 			$street = ''; | ||||||
| 			if (isset($this->attributes['street'][0])) $street = $this->attributes['street'][0]; | 			if (isset($this->attributes['street'][0])) $street = $this->attributes['street'][0]; | ||||||
|  | @ -1234,54 +1174,6 @@ class inetOrgPerson extends baseModule { | ||||||
| 			array('kind' => 'table', 'value' => $photo, 'td' => array('valign' => 'top', 'align' => 'right','width' => '100%')) | 			array('kind' => 'table', 'value' => $photo, 'td' => array('valign' => 'top', 'align' => 'right','width' => '100%')) | ||||||
| 			)); | 			)); | ||||||
| 		return $return; | 		return $return; | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 	/** |  | ||||||
| 	* Sets a new password. |  | ||||||
| 	*/ |  | ||||||
| 	function process_password() { |  | ||||||
| 		if ($_POST['form_subpage_' . get_class($this) . '_attributes_back']) return array(); |  | ||||||
| 		$messages = array(); |  | ||||||
| 		if ($_POST['userPassword'] != $_POST['userPassword2']) { |  | ||||||
| 			$messages[] = $this->messages['userPassword'][0]; |  | ||||||
| 		} |  | ||||||
| 		else { |  | ||||||
| 			if (!get_preg($_POST['userPassword'], 'password')) { |  | ||||||
| 				$messages[] = $this->messages['userPassword'][1]; |  | ||||||
| 			} |  | ||||||
| 			else { |  | ||||||
| 				$pwdPolicyResult = checkPasswordStrength($_POST['userPassword']); |  | ||||||
| 				if ($pwdPolicyResult === true) { |  | ||||||
| 					$this->attributes['userPassword'][0] = pwd_hash($_POST['userPassword'], true, 'SSHA'); |  | ||||||
| 				} |  | ||||||
| 				else { |  | ||||||
| 					$messages[] = array('ERROR', $pwdPolicyResult); |  | ||||||
| 				} |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 		return $messages; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	/** |  | ||||||
| 	* Displays the password changing dialog. |  | ||||||
| 	* |  | ||||||
| 	* @return array meta HTML code |  | ||||||
| 	*/ |  | ||||||
| 	function display_html_password() { |  | ||||||
| 		$return[] = array( |  | ||||||
| 			array('kind' => 'text', 'text' => _('Password') ), |  | ||||||
| 			array('kind' => 'input', 'name' => 'userPassword', 'type' => 'password', 'size' => '20', 'maxlength' => '255'), |  | ||||||
| 			array('kind' => 'help', 'value' => 'userPassword')); |  | ||||||
| 		$return[] = array( |  | ||||||
| 			array('kind' => 'text', 'text' => _('Repeat password')), |  | ||||||
| 			array('kind' => 'input', 'name' => 'userPassword2', 'type' => 'password', 'size' => '20', 'maxlength' => '255')); |  | ||||||
| 		$return[] = array( |  | ||||||
| 			array('kind' => 'table', 'value' => array( |  | ||||||
| 				array( |  | ||||||
| 					array('kind' => 'input', 'type' => 'submit', 'value' => _('Ok'), 'name' => 'form_subpage_' . get_class($this) . '_attributes_submit'), |  | ||||||
| 					array('kind' => 'input', 'type' => 'submit', 'value' => _('Cancel'), 'name' => 'form_subpage_' . get_class($this) . '_attributes_back'), |  | ||||||
| 					array('kind' => 'text'))))); |  | ||||||
| 		return $return; |  | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	/** | 	/** | ||||||
|  | @ -2049,6 +1941,38 @@ class inetOrgPerson extends baseModule { | ||||||
| 		return $return; | 		return $return; | ||||||
| 	} | 	} | ||||||
| 	 | 	 | ||||||
|  | 	/** | ||||||
|  | 	 * This method specifies if a module manages password attributes. | ||||||
|  | 	 * @see passwordService::managesPasswordAttributes | ||||||
|  | 	 * | ||||||
|  | 	 * @return boolean true if this module manages password attributes | ||||||
|  | 	 */ | ||||||
|  | 	public function managesPasswordAttributes() { | ||||||
|  | 		$modules = $_SESSION['config']->get_AccountModules($this->get_scope()); | ||||||
|  | 		if (!in_array('posixAccount', $modules)) { | ||||||
|  | 			return true; | ||||||
|  | 		} | ||||||
|  | 		return false; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	/** | ||||||
|  | 	 * This function is called whenever the password should be changed. Account modules | ||||||
|  | 	 * must change their password attributes only if the modules list contains their module name. | ||||||
|  | 	 * | ||||||
|  | 	 * @param String $password new password | ||||||
|  | 	 * @param $modules list of modules for which the password should be changed | ||||||
|  | 	 * @return array list of error messages if any as parameter array for StatusMessage | ||||||
|  | 	 *               e.g. return arrray(array('ERROR', 'Password change failed.')) | ||||||
|  | 	 * @see passwordService::passwordChangeRequested | ||||||
|  | 	 */ | ||||||
|  | 	public function passwordChangeRequested($password, $modules) { | ||||||
|  | 		if (!in_array(get_class($this), $modules)) { | ||||||
|  | 			return array(); | ||||||
|  | 		} | ||||||
|  | 		$this->attributes['userPassword'][0] = pwd_hash($password, true, 'SSHA'); | ||||||
|  | 		return array(); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| ?>
 | ?>
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue