enhanced wildcards for custom scripts
This commit is contained in:
		
							parent
							
								
									8fa551882b
								
							
						
					
					
						commit
						519f2cea20
					
				| 
						 | 
				
			
			@ -7,6 +7,7 @@ April 2011 3.4.0
 | 
			
		|||
  - LAM Pro:
 | 
			
		||||
   -> support automount entries
 | 
			
		||||
   -> Zarafa groups: allow combination with group of names
 | 
			
		||||
   -> enhanced wildcards for custom scripts
 | 
			
		||||
  - fixed bugs:
 | 
			
		||||
   -> renaming of default profile (3183920)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,6 +12,7 @@
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  
 | 
			
		||||
  <meta http-equiv="content-type" content="text/html; charset=ISO-8859-15"><title>Upgrade notes</title>
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -28,7 +29,14 @@ This is a list of API changes for all LAM releases.
 | 
			
		|||
 | 
			
		||||
<br>
 | 
			
		||||
 | 
			
		||||
<h2>3.2.0 -> 3.3.0</h2>The cache class was removed. Please use local caching and the functions searchLDAP... instead of get_cache().<br>
 | 
			
		||||
<h2>3.3.0 -> 3.4.0</h2>Module interface:<br>
 | 
			
		||||
<ul>
 | 
			
		||||
  <li><span style="font-weight: bold;">save_attributes():</span> can now contain a return value 'info' => array() with values for pre/postModify actions</li>
 | 
			
		||||
  <li><span style="font-weight: bold;">checkSelfServiceOptions():</span> can now contain a return value 'info' => array() with values for pre/postModify actions</li>
 | 
			
		||||
</ul>
 | 
			
		||||
<br>
 | 
			
		||||
<h2>3.2.0 -> 3.3.0</h2>
 | 
			
		||||
The cache class was removed. Please use local caching and the functions searchLDAP... instead of get_cache().<br>
 | 
			
		||||
The return values for baseModule::pre/postDeleteActions() were changed to an array of StatusMessage parameters.
 | 
			
		||||
<br>CSS class TYPElist-sort removed without replacement.<br>
 | 
			
		||||
<br>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2592,6 +2592,44 @@ Have fun!
 | 
			
		|||
      the attribute "uid" and value "steve" then LAM will resolve "$uid$" to
 | 
			
		||||
      "steve".</para>
 | 
			
		||||
 | 
			
		||||
      <para>You can switch LAM's logging to debug mode if you are unsure which
 | 
			
		||||
      attributes with which values are available.</para>
 | 
			
		||||
 | 
			
		||||
      <para>The following special wildcards are available:</para>
 | 
			
		||||
 | 
			
		||||
      <itemizedlist>
 | 
			
		||||
        <listitem>
 | 
			
		||||
          <para><emphasis role="bold">$INFO.userPasswordClearText$:</emphasis>
 | 
			
		||||
          cleartext password when Unix password is changed (e.g. useful for
 | 
			
		||||
          external password synchronisation) for new/modified accounts</para>
 | 
			
		||||
        </listitem>
 | 
			
		||||
 | 
			
		||||
        <listitem>
 | 
			
		||||
          <para><emphasis
 | 
			
		||||
          role="bold">$INFO.userPasswordStatusChange$:</emphasis> provides
 | 
			
		||||
          additional information if the password locking status was changed,
 | 
			
		||||
          possible values: locked, unlocked, unchanged</para>
 | 
			
		||||
        </listitem>
 | 
			
		||||
 | 
			
		||||
        <listitem>
 | 
			
		||||
          <para><emphasis role="bold">$NEW.<attribute>$:</emphasis> the
 | 
			
		||||
          value of a new attribute (e.g. $NEW.telephoneNumber$) for modified
 | 
			
		||||
          accounts</para>
 | 
			
		||||
        </listitem>
 | 
			
		||||
 | 
			
		||||
        <listitem>
 | 
			
		||||
          <para><emphasis role="bold">$DEL.<attribute>$:</emphasis> the
 | 
			
		||||
          value of a deleted attribute (e.g. $DEL.telephoneNumber$) for
 | 
			
		||||
          modified accounts</para>
 | 
			
		||||
        </listitem>
 | 
			
		||||
 | 
			
		||||
        <listitem>
 | 
			
		||||
          <para><emphasis role="bold">$MOD.<attribute>$:</emphasis> the
 | 
			
		||||
          new value of a modified attribute (e.g. $MOD.telephoneNumber$) for
 | 
			
		||||
          modified accounts</para>
 | 
			
		||||
        </listitem>
 | 
			
		||||
      </itemizedlist>
 | 
			
		||||
 | 
			
		||||
      <para><emphasis role="bold">Output may contain HTML:</emphasis> If your
 | 
			
		||||
      scripts generate HTML output then activate this option.</para>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1019,6 +1019,7 @@ abstract class baseModule {
 | 
			
		|||
	* <br><b>"remove"</b> are attributes which have to be removed from the LDAP entry
 | 
			
		||||
	* <br><b>"modify"</b> are attributes which have to be modified in the LDAP entry
 | 
			
		||||
	* <br><b>"notchanged"</b> are attributes which stay unchanged
 | 
			
		||||
	* <br><b>"info"</b> values with informational value (e.g. to be used later by pre/postModify actions)
 | 
			
		||||
	* <br>
 | 
			
		||||
	* <br>This builds the required comands from $this-attributes and $this->orig.
 | 
			
		||||
	* 
 | 
			
		||||
| 
						 | 
				
			
			@ -1240,15 +1241,21 @@ abstract class baseModule {
 | 
			
		|||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Checks if all input values are correct and returns the LDAP attributes which should be changed.
 | 
			
		||||
	 * <br>Return values:
 | 
			
		||||
	 * <br>messages: array of parameters to create status messages
 | 
			
		||||
	 * <br>add: array of attributes to add
 | 
			
		||||
	 * <br>del: array of attributes to remove
 | 
			
		||||
	 * <br>mod: array of attributes to modify
 | 
			
		||||
	 * <br>info: array of values with informational value (e.g. to be used later by pre/postModify actions)
 | 
			
		||||
	 * 
 | 
			
		||||
	 * Calling this method does not require the existence of an enclosing {@link accountContainer}.
 | 
			
		||||
	 *
 | 
			
		||||
	 * @param string $fields input fields
 | 
			
		||||
	 * @param array $attributes LDAP attributes
 | 
			
		||||
	 * @return array messages and attributes (array('messages' => array(), 'add' => array('mail' => array('test@test.com')), 'del' => array(), 'mod' => array()))
 | 
			
		||||
	 * @return array messages and attributes (array('messages' => array(), 'add' => array('mail' => array('test@test.com')), 'del' => array(), 'mod' => array(), 'info' => array()))
 | 
			
		||||
	 */
 | 
			
		||||
	public function checkSelfServiceOptions($fields, $attributes) {
 | 
			
		||||
		$return = array('messages' => array(), 'add' => array(), 'del' => array(), 'mod' => array());
 | 
			
		||||
		$return = array('messages' => array(), 'add' => array(), 'del' => array(), 'mod' => array(), 'info' => array());
 | 
			
		||||
		return $return;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1623,6 +1623,7 @@ class accountContainer {
 | 
			
		|||
	* @return array an array which can be passed to $this->saveAccount()
 | 
			
		||||
	*/
 | 
			
		||||
	function save_module_attributes($attributes, $orig) {
 | 
			
		||||
		$return = array();
 | 
			
		||||
		$toadd = array();
 | 
			
		||||
		$tomodify = array();
 | 
			
		||||
		$torem = array();
 | 
			
		||||
| 
						 | 
				
			
			@ -1924,22 +1925,39 @@ class accountContainer {
 | 
			
		|||
			$this->finalDN = $this->dn_orig;
 | 
			
		||||
		}
 | 
			
		||||
		// pre modify actions
 | 
			
		||||
		$currentAccountAttributes = array();
 | 
			
		||||
		$prePostModifyAttributes = array();
 | 
			
		||||
		if (isset($attributes[$this->finalDN]) && is_array($attributes[$this->finalDN])) {
 | 
			
		||||
			if (isset($attributes[$this->finalDN]['notchanged'])) {
 | 
			
		||||
				$currentAccountAttributes = array_merge($currentAccountAttributes, $attributes[$this->finalDN]['notchanged']);
 | 
			
		||||
				$prePostModifyAttributes = array_merge($prePostModifyAttributes, $attributes[$this->finalDN]['notchanged']);
 | 
			
		||||
			}
 | 
			
		||||
			if (isset($attributes[$this->finalDN]['modify'])) {
 | 
			
		||||
				$currentAccountAttributes = array_merge($currentAccountAttributes, $attributes[$this->finalDN]['modify']);
 | 
			
		||||
				$prePostModifyAttributes = array_merge($prePostModifyAttributes, $attributes[$this->finalDN]['modify']);
 | 
			
		||||
				foreach ($attributes[$this->finalDN]['modify'] as $key => $value) {
 | 
			
		||||
					$prePostModifyAttributes['MOD.' . $key] = $value;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			if (isset($attributes[$this->finalDN]['add'])) {
 | 
			
		||||
				$currentAccountAttributes = array_merge($currentAccountAttributes, $attributes[$this->finalDN]['add']);
 | 
			
		||||
				$prePostModifyAttributes = array_merge($prePostModifyAttributes, $attributes[$this->finalDN]['add']);
 | 
			
		||||
				foreach ($attributes[$this->finalDN]['add'] as $key => $value) {
 | 
			
		||||
					$prePostModifyAttributes['NEW.' . $key] = $value;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		$currentAccountAttributes['dn'][0] = $this->finalDN;
 | 
			
		||||
			if (isset($attributes[$this->finalDN]['remove'])) {
 | 
			
		||||
				foreach ($attributes[$this->finalDN]['remove'] as $key => $value) {
 | 
			
		||||
					$prePostModifyAttributes['DEL.' . $key] = $value;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			if (isset($attributes[$this->finalDN]['info'])) {
 | 
			
		||||
				foreach ($attributes[$this->finalDN]['info'] as $key => $value) {
 | 
			
		||||
					$prePostModifyAttributes['INFO.' . $key] = $value;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		$prePostModifyAttributes['dn'][0] = $this->finalDN;
 | 
			
		||||
		logNewMessage(LOG_DEBUG, 'Edit page pre/postModify attributes: ' . print_r($prePostModifyAttributes, true));
 | 
			
		||||
		$preModifyOk = true;
 | 
			
		||||
		foreach ($module as $singlemodule) {
 | 
			
		||||
			$result = $this->module[$singlemodule]->preModifyActions($this->isNewAccount, $currentAccountAttributes);
 | 
			
		||||
			$result = $this->module[$singlemodule]->preModifyActions($this->isNewAccount, $prePostModifyAttributes);
 | 
			
		||||
			if (!$result) {
 | 
			
		||||
				$preModifyOk = false;
 | 
			
		||||
				break;
 | 
			
		||||
| 
						 | 
				
			
			@ -2035,7 +2053,7 @@ class accountContainer {
 | 
			
		|||
		if (!$stopprocessing) {
 | 
			
		||||
			// post modify actions
 | 
			
		||||
			foreach ($module as $singlemodule) {
 | 
			
		||||
				$this->module[$singlemodule]->postModifyActions($this->isNewAccount, $currentAccountAttributes);
 | 
			
		||||
				$this->module[$singlemodule]->postModifyActions($this->isNewAccount, $prePostModifyAttributes);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		return $errors;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -157,6 +157,7 @@ class account extends baseModule {
 | 
			
		|||
	* <br>"add" are attributes which have to be added to LDAP entry
 | 
			
		||||
	* <br>"remove" are attributes which have to be removed from LDAP entry
 | 
			
		||||
	* <br>"modify" are attributes which have to been modified in LDAP entry
 | 
			
		||||
	* <br>"info" are values with informational value (e.g. to be used later by pre/postModify actions)
 | 
			
		||||
	*/
 | 
			
		||||
	function save_attributes() {
 | 
			
		||||
		// skip saving if account is based on another structural object class
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -313,6 +313,7 @@ class asteriskAccount extends baseModule implements passwordService {
 | 
			
		|||
	* <br>"add" are attributes which have to be added to LDAP entry
 | 
			
		||||
	* <br>"remove" are attributes which have to be removed from LDAP entry
 | 
			
		||||
	* <br>"modify" are attributes which have to been modified in LDAP entry
 | 
			
		||||
	* <br>"info" are values with informational value (e.g. to be used later by pre/postModify actions)
 | 
			
		||||
	*/
 | 
			
		||||
	function save_attributes() {
 | 
			
		||||
		if (!in_array('AsteriskSIPUser', $this->attributes['objectClass'])) {
 | 
			
		||||
| 
						 | 
				
			
			@ -458,14 +459,22 @@ class asteriskAccount extends baseModule implements passwordService {
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Checks if all input values are correct and returns the LDAP commands which should be executed.
 | 
			
		||||
	 * Checks if all input values are correct and returns the LDAP attributes which should be changed.
 | 
			
		||||
	 * <br>Return values:
 | 
			
		||||
	 * <br>messages: array of parameters to create status messages
 | 
			
		||||
	 * <br>add: array of attributes to add
 | 
			
		||||
	 * <br>del: array of attributes to remove
 | 
			
		||||
	 * <br>mod: array of attributes to modify
 | 
			
		||||
	 * <br>info: array of values with informational value (e.g. to be used later by pre/postModify actions)
 | 
			
		||||
	 * 
 | 
			
		||||
	 * Calling this method does not require the existence of an enclosing {@link accountContainer}.
 | 
			
		||||
	 *
 | 
			
		||||
	 * @param string $fields input fields
 | 
			
		||||
	 * @param array $attributes LDAP attributes
 | 
			
		||||
	 * @return array messages and LDAP commands (array('messages' => array(), 'add' => array(), 'del' => array(), 'mod' => array()))
 | 
			
		||||
	 * @return array messages and attributes (array('messages' => array(), 'add' => array('mail' => array('test@test.com')), 'del' => array(), 'mod' => array(), 'info' => array()))
 | 
			
		||||
	 */
 | 
			
		||||
	function checkSelfServiceOptions($fields, $attributes) {
 | 
			
		||||
		$return = array('messages' => array(), 'add' => array(), 'del' => array(), 'mod' => array());
 | 
			
		||||
		$return = array('messages' => array(), 'add' => array(), 'del' => array(), 'mod' => array(), 'info' => array());
 | 
			
		||||
		if (!in_array_ignore_case('AsteriskSIPUser', $attributes['objectClass'])) {
 | 
			
		||||
			return $return;
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,7 +4,7 @@ $Id$
 | 
			
		|||
 | 
			
		||||
  This code is part of LDAP Account Manager (http://www.sourceforge.net/projects/lam)
 | 
			
		||||
  Copyright (C) 2010         Pavel Pozdnyak
 | 
			
		||||
				2010  Roland Gruber
 | 
			
		||||
				2010 - 2011  Roland Gruber
 | 
			
		||||
 | 
			
		||||
  This program is free software; you can redistribute it and/or modify
 | 
			
		||||
  it under the terms of the GNU General Public License as published by
 | 
			
		||||
| 
						 | 
				
			
			@ -523,6 +523,7 @@ class asteriskVoicemail extends baseModule implements passwordService {
 | 
			
		|||
	* <br>"add" are attributes which have to be added to LDAP entry
 | 
			
		||||
	* <br>"remove" are attributes which have to be removed from LDAP entry
 | 
			
		||||
	* <br>"modify" are attributes which have to been modified in LDAP entry
 | 
			
		||||
	* <br>"info" are values with informational value (e.g. to be used later by pre/postModify actions)
 | 
			
		||||
	*/
 | 
			
		||||
	function save_attributes() {
 | 
			
		||||
		if (!in_array('AsteriskVoiceMail', $this->attributes['objectClass']) && !in_array('AsteriskVoiceMail', $this->orig['objectClass'])) {
 | 
			
		||||
| 
						 | 
				
			
			@ -564,14 +565,22 @@ class asteriskVoicemail extends baseModule implements passwordService {
 | 
			
		|||
	}
 | 
			
		||||
	
 | 
			
		||||
	/**
 | 
			
		||||
	 * Checks if all input values are correct and returns the LDAP commands which should be executed.
 | 
			
		||||
	 * Checks if all input values are correct and returns the LDAP attributes which should be changed.
 | 
			
		||||
	 * <br>Return values:
 | 
			
		||||
	 * <br>messages: array of parameters to create status messages
 | 
			
		||||
	 * <br>add: array of attributes to add
 | 
			
		||||
	 * <br>del: array of attributes to remove
 | 
			
		||||
	 * <br>mod: array of attributes to modify
 | 
			
		||||
	 * <br>info: array of values with informational value (e.g. to be used later by pre/postModify actions)
 | 
			
		||||
	 * 
 | 
			
		||||
	 * Calling this method does not require the existence of an enclosing {@link accountContainer}.
 | 
			
		||||
	 *
 | 
			
		||||
	 * @param string $fields input fields
 | 
			
		||||
	 * @param array $attributes LDAP attributes
 | 
			
		||||
	 * @return array messages and LDAP commands (array('messages' => array(), 'add' => array(), 'del' => array(), 'mod' => array()))
 | 
			
		||||
	 * @return array messages and attributes (array('messages' => array(), 'add' => array('mail' => array('test@test.com')), 'del' => array(), 'mod' => array(), 'info' => array()))
 | 
			
		||||
	 */
 | 
			
		||||
	function checkSelfServiceOptions($fields, $attributes) {
 | 
			
		||||
		$return = array('messages' => array(), 'add' => array(), 'del' => array(), 'mod' => array());
 | 
			
		||||
		$return = array('messages' => array(), 'add' => array(), 'del' => array(), 'mod' => array(), 'info' => array());
 | 
			
		||||
		if (!in_array_ignore_case('AsteriskVoiceMail', $attributes['objectClass'])) {
 | 
			
		||||
			return $return;
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -294,13 +294,17 @@ By default, the nodes are configured as H-Nodes which fits for small networks. I
 | 
			
		|||
		$this->messages['domainname'][5] = array('ERROR', _('Account %s:') . ' dhcp_settings_domainName', _('The domain name includes invalid characters. Valid characters are A-Z, a-z, 0-9, ".", "_","-".'));
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	/** This function returns an array with 4 entries:
 | 
			
		||||
	* array( DN1 ('add' => array($attr), 'remove' => array($attr), 'modify' => array($attr), 'lamdaemon' => array(cmds)), DN2 .... )
 | 
			
		||||
	* DN is the DN to change. It may be possible to change several DNs,
 | 
			
		||||
	* e.g. create a new user and add him to some groups via attribute memberUid
 | 
			
		||||
	* add are attributes which have to be added to ldap entry
 | 
			
		||||
	* remove are attributes which have to be removed from ldap entry
 | 
			
		||||
	* lamdaemon are lamdaemon commands to modify homedir, quotas, ...
 | 
			
		||||
	/**
 | 
			
		||||
	* Returns a list of modifications which have to be made to the LDAP account.
 | 
			
		||||
	*
 | 
			
		||||
	* @return array list of modifications
 | 
			
		||||
	* <br>This function returns an array with 3 entries:
 | 
			
		||||
	* <br>array( DN1 ('add' => array($attr), 'remove' => array($attr), 'modify' => array($attr)), DN2 .... )
 | 
			
		||||
	* <br>DN is the DN to change. It may be possible to change several DNs (e.g. create a new user and add him to some groups via attribute memberUid)
 | 
			
		||||
	* <br>"add" are attributes which have to be added to LDAP entry
 | 
			
		||||
	* <br>"remove" are attributes which have to be removed from LDAP entry
 | 
			
		||||
	* <br>"modify" are attributes which have to been modified in LDAP entry
 | 
			
		||||
	* <br>"info" are values with informational value (e.g. to be used later by pre/postModify actions)
 | 
			
		||||
	*/
 | 
			
		||||
	public function save_attributes() {
 | 
			
		||||
		// remove dhcpSubnet object class if only the DHCP settings were changed
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -418,13 +418,16 @@ class fixed_ip extends baseModule {
 | 
			
		|||
	}
 | 
			
		||||
	
 | 
			
		||||
	/**
 | 
			
		||||
	 * This function returns an array with 4 entries:
 | 
			
		||||
	 * array( DN1 ('add' => array($attr), 'remove' => array($attr), 'modify' => array($attr), 'lamdaemon' => array(cmds)), DN2 .... )
 | 
			
		||||
	 * DN is the DN to change. It may be possible to change several DNs,
 | 
			
		||||
	 * e.g. create a new user and add him to some groups via attribute memberUid
 | 
			
		||||
	 * add are attributes which have to be added to ldap entry
 | 
			
		||||
	 * remove are attributes which have to be removed from ldap entry
 | 
			
		||||
	 * lamdaemon are lamdaemon commands to modify homedir, quotas, ...
 | 
			
		||||
	* Returns a list of modifications which have to be made to the LDAP account.
 | 
			
		||||
	*
 | 
			
		||||
	* @return array list of modifications
 | 
			
		||||
	* <br>This function returns an array with 3 entries:
 | 
			
		||||
	* <br>array( DN1 ('add' => array($attr), 'remove' => array($attr), 'modify' => array($attr)), DN2 .... )
 | 
			
		||||
	* <br>DN is the DN to change. It may be possible to change several DNs (e.g. create a new user and add him to some groups via attribute memberUid)
 | 
			
		||||
	* <br>"add" are attributes which have to be added to LDAP entry
 | 
			
		||||
	* <br>"remove" are attributes which have to be removed from LDAP entry
 | 
			
		||||
	* <br>"modify" are attributes which have to been modified in LDAP entry
 | 
			
		||||
	* <br>"info" are values with informational value (e.g. to be used later by pre/postModify actions)
 | 
			
		||||
	*/
 | 
			
		||||
	public function save_attributes() {
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -114,6 +114,7 @@ class hostObject extends baseModule {
 | 
			
		|||
	* <br>"add" are attributes which have to be added to LDAP entry
 | 
			
		||||
	* <br>"remove" are attributes which have to be removed from LDAP entry
 | 
			
		||||
	* <br>"modify" are attributes which have to been modified in LDAP entry
 | 
			
		||||
	* <br>"info" are values with informational value (e.g. to be used later by pre/postModify actions)
 | 
			
		||||
	*/
 | 
			
		||||
	function save_attributes() {
 | 
			
		||||
		if (!in_array('hostObject', $this->attributes['objectClass']) && !in_array('hostObject', $this->orig['objectClass'])) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -697,6 +697,7 @@ class inetOrgPerson extends baseModule implements passwordService {
 | 
			
		|||
	* <br>"add" are attributes which have to be added to LDAP entry
 | 
			
		||||
	* <br>"remove" are attributes which have to be removed from LDAP entry
 | 
			
		||||
	* <br>"modify" are attributes which have to been modified in LDAP entry
 | 
			
		||||
	* <br>"info" are values with informational value (e.g. to be used later by pre/postModify actions)
 | 
			
		||||
	*/
 | 
			
		||||
	function save_attributes() {
 | 
			
		||||
		// skip saving if account is based on another structural object class
 | 
			
		||||
| 
						 | 
				
			
			@ -1662,14 +1663,22 @@ class inetOrgPerson extends baseModule implements passwordService {
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Checks if all input values are correct and returns the LDAP commands which should be executed.
 | 
			
		||||
	 * Checks if all input values are correct and returns the LDAP attributes which should be changed.
 | 
			
		||||
	 * <br>Return values:
 | 
			
		||||
	 * <br>messages: array of parameters to create status messages
 | 
			
		||||
	 * <br>add: array of attributes to add
 | 
			
		||||
	 * <br>del: array of attributes to remove
 | 
			
		||||
	 * <br>mod: array of attributes to modify
 | 
			
		||||
	 * <br>info: array of values with informational value (e.g. to be used later by pre/postModify actions)
 | 
			
		||||
	 * 
 | 
			
		||||
	 * Calling this method does not require the existence of an enclosing {@link accountContainer}.
 | 
			
		||||
	 *
 | 
			
		||||
	 * @param string $fields input fields
 | 
			
		||||
	 * @param array $attributes LDAP attributes
 | 
			
		||||
	 * @return array messages and LDAP commands (array('messages' => array(), 'add' => array(), 'del' => array(), 'mod' => array()))
 | 
			
		||||
	 * @return array messages and attributes (array('messages' => array(), 'add' => array('mail' => array('test@test.com')), 'del' => array(), 'mod' => array(), 'info' => array()))
 | 
			
		||||
	 */
 | 
			
		||||
	function checkSelfServiceOptions($fields, $attributes) {
 | 
			
		||||
		$return = array('messages' => array(), 'add' => array(), 'del' => array(), 'mod' => array());
 | 
			
		||||
		$return = array('messages' => array(), 'add' => array(), 'del' => array(), 'mod' => array(), 'info' => array());
 | 
			
		||||
		$attributeNames = array(); // list of attributes which should be checked for modification
 | 
			
		||||
		$attributesNew = $attributes;
 | 
			
		||||
		// first name
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -606,6 +606,7 @@ class kolabUser extends baseModule {
 | 
			
		|||
	* <br>"add" are attributes which have to be added to LDAP entry
 | 
			
		||||
	* <br>"remove" are attributes which have to be removed from LDAP entry
 | 
			
		||||
	* <br>"modify" are attributes which have to been modified in LDAP entry
 | 
			
		||||
	* <br>"info" are values with informational value (e.g. to be used later by pre/postModify actions)
 | 
			
		||||
	*/
 | 
			
		||||
	function save_attributes() {
 | 
			
		||||
		if (!in_array('kolabInetOrgPerson', $this->attributes['objectClass']) && !in_array('kolabInetOrgPerson', $this->orig['objectClass'])) {
 | 
			
		||||
| 
						 | 
				
			
			@ -909,14 +910,22 @@ class kolabUser extends baseModule {
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Checks if all input values are correct and returns the LDAP commands which should be executed.
 | 
			
		||||
	 * Checks if all input values are correct and returns the LDAP attributes which should be changed.
 | 
			
		||||
	 * <br>Return values:
 | 
			
		||||
	 * <br>messages: array of parameters to create status messages
 | 
			
		||||
	 * <br>add: array of attributes to add
 | 
			
		||||
	 * <br>del: array of attributes to remove
 | 
			
		||||
	 * <br>mod: array of attributes to modify
 | 
			
		||||
	 * <br>info: array of values with informational value (e.g. to be used later by pre/postModify actions)
 | 
			
		||||
	 * 
 | 
			
		||||
	 * Calling this method does not require the existence of an enclosing {@link accountContainer}.
 | 
			
		||||
	 *
 | 
			
		||||
	 * @param string $fields input fields
 | 
			
		||||
	 * @param array $attributes LDAP attributes
 | 
			
		||||
	 * @return array messages and LDAP commands (array('messages' => array(), 'add' => array(), 'del' => array(), 'mod' => array()))
 | 
			
		||||
	 * @return array messages and attributes (array('messages' => array(), 'add' => array('mail' => array('test@test.com')), 'del' => array(), 'mod' => array(), 'info' => array()))
 | 
			
		||||
	 */
 | 
			
		||||
	function checkSelfServiceOptions($fields, $attributes) {
 | 
			
		||||
		$return = array('messages' => array(), 'add' => array(), 'del' => array(), 'mod' => array());
 | 
			
		||||
		$return = array('messages' => array(), 'add' => array(), 'del' => array(), 'mod' => array(), 'info' => array());
 | 
			
		||||
		if (!in_array_ignore_case('kolabInetOrgPerson', $attributes['objectClass'])) {
 | 
			
		||||
			return $return;
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -119,6 +119,7 @@ class nisMailAlias extends baseModule {
 | 
			
		|||
	* <br>"add" are attributes which have to be added to LDAP entry
 | 
			
		||||
	* <br>"remove" are attributes which have to be removed from LDAP entry
 | 
			
		||||
	* <br>"modify" are attributes which have to been modified in LDAP entry
 | 
			
		||||
	* <br>"info" are values with informational value (e.g. to be used later by pre/postModify actions)
 | 
			
		||||
	*/
 | 
			
		||||
	function save_attributes() {
 | 
			
		||||
		// skip saving if account is based on another structural object class
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -154,6 +154,7 @@ class nisnetgroup extends baseModule {
 | 
			
		|||
	* <br>"add" are attributes which have to be added to LDAP entry
 | 
			
		||||
	* <br>"remove" are attributes which have to be removed from LDAP entry
 | 
			
		||||
	* <br>"modify" are attributes which have to been modified in LDAP entry
 | 
			
		||||
	* <br>"info" are values with informational value (e.g. to be used later by pre/postModify actions)
 | 
			
		||||
	*/
 | 
			
		||||
	function save_attributes() {
 | 
			
		||||
		$return = $this->getAccountContainer()->save_module_attributes($this->attributes, $this->orig);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -133,6 +133,7 @@ class phpGroupwareGroup extends baseModule {
 | 
			
		|||
	* <br>"add" are attributes which have to be added to LDAP entry
 | 
			
		||||
	* <br>"remove" are attributes which have to be removed from LDAP entry
 | 
			
		||||
	* <br>"modify" are attributes which have to been modified in LDAP entry
 | 
			
		||||
	* <br>"info" are values with informational value (e.g. to be used later by pre/postModify actions)
 | 
			
		||||
	*/
 | 
			
		||||
	public function save_attributes() {
 | 
			
		||||
		if (!in_array('phpgwGroup', $this->attributes['objectClass'])) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -309,6 +309,7 @@ class phpGroupwareUser extends baseModule implements passwordService {
 | 
			
		|||
	* <br>"add" are attributes which have to be added to LDAP entry
 | 
			
		||||
	* <br>"remove" are attributes which have to be removed from LDAP entry
 | 
			
		||||
	* <br>"modify" are attributes which have to been modified in LDAP entry
 | 
			
		||||
	* <br>"info" are values with informational value (e.g. to be used later by pre/postModify actions)
 | 
			
		||||
	*/
 | 
			
		||||
	function save_attributes() {
 | 
			
		||||
		if (!in_array('phpgwAccount', $this->attributes['objectClass'])) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -474,9 +474,24 @@ class posixAccount extends baseModule implements passwordService {
 | 
			
		|||
	* <br>"add" are attributes which have to be added to LDAP entry
 | 
			
		||||
	* <br>"remove" are attributes which have to be removed from LDAP entry
 | 
			
		||||
	* <br>"modify" are attributes which have to been modified in LDAP entry
 | 
			
		||||
	* <br>"info" are values with informational value (e.g. to be used later by pre/postModify actions)
 | 
			
		||||
	*/
 | 
			
		||||
	function save_attributes() {
 | 
			
		||||
		$return = $this->getAccountContainer()->save_module_attributes($this->attributes, $this->orig);
 | 
			
		||||
		// add information about clear text password and password status change
 | 
			
		||||
		$return[$this->getAccountContainer()->dn]['info']['userPasswordClearText'][0] = $this->clearTextPassword;
 | 
			
		||||
		if (isset($this->orig['userPassword'][0]) && isset($this->attributes['userPassword'][0])) {
 | 
			
		||||
			if ((pwd_is_enabled($this->orig['userPassword'][0]) && pwd_is_enabled($this->attributes['userPassword'][0]))
 | 
			
		||||
				|| (!pwd_is_enabled($this->orig['userPassword'][0]) && !pwd_is_enabled($this->attributes['userPassword'][0]))) {
 | 
			
		||||
				$return[$this->getAccountContainer()->dn]['info']['userPasswordStatusChange'][0] = 'unchanged'; 
 | 
			
		||||
			}
 | 
			
		||||
			elseif (pwd_is_enabled($this->orig['userPassword'][0])) {
 | 
			
		||||
				$return[$this->getAccountContainer()->dn]['info']['userPasswordStatusChange'][0] = 'locked';
 | 
			
		||||
			}
 | 
			
		||||
			else {
 | 
			
		||||
				$return[$this->getAccountContainer()->dn]['info']['userPasswordStatusChange'][0] = 'unlocked';
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		// Remove primary group from additional groups
 | 
			
		||||
		if (!isset($this->moduleSettings['posixAccount_primaryGroupAsSecondary'][0])
 | 
			
		||||
			|| ($this->moduleSettings['posixAccount_primaryGroupAsSecondary'][0] != 'true')) {
 | 
			
		||||
| 
						 | 
				
			
			@ -1694,14 +1709,22 @@ class posixAccount extends baseModule implements passwordService {
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Checks if all input values are correct and returns the LDAP commands which should be executed.
 | 
			
		||||
	 * Checks if all input values are correct and returns the LDAP attributes which should be changed.
 | 
			
		||||
	 * <br>Return values:
 | 
			
		||||
	 * <br>messages: array of parameters to create status messages
 | 
			
		||||
	 * <br>add: array of attributes to add
 | 
			
		||||
	 * <br>del: array of attributes to remove
 | 
			
		||||
	 * <br>mod: array of attributes to modify
 | 
			
		||||
	 * <br>"info" are values with informational value (e.g. to be used later by pre/postModify actions)
 | 
			
		||||
	 * 
 | 
			
		||||
	 * Calling this method does not require the existence of an enclosing {@link accountContainer}.
 | 
			
		||||
	 *
 | 
			
		||||
	 * @param string $fields input fields
 | 
			
		||||
	 * @param array $attributes LDAP attributes
 | 
			
		||||
	 * @return array messages and LDAP commands (array('messages' => array(), 'add' => array(), 'del' => array(), 'mod' => array()))
 | 
			
		||||
	 * @return array messages and attributes (array('messages' => array(), 'add' => array('mail' => array('test@test.com')), 'del' => array(), 'mod' => array(), 'info' => array()))
 | 
			
		||||
	 */
 | 
			
		||||
	function checkSelfServiceOptions($fields, $attributes) {
 | 
			
		||||
		$return = array('messages' => array(), 'add' => array(), 'del' => array(), 'mod' => array());
 | 
			
		||||
		$return = array('messages' => array(), 'add' => array(), 'del' => array(), 'mod' => array(), 'info' => array());
 | 
			
		||||
		if (in_array('password', $fields)) {
 | 
			
		||||
			if (isset($_POST['posixAccount_password']) && ($_POST['posixAccount_password'] != '')) {
 | 
			
		||||
				if ($_POST['posixAccount_password'] != $_POST['posixAccount_password2']) {
 | 
			
		||||
| 
						 | 
				
			
			@ -1715,6 +1738,7 @@ class posixAccount extends baseModule implements passwordService {
 | 
			
		|||
						$pwdPolicyResult = checkPasswordStrength($_POST['posixAccount_password']);
 | 
			
		||||
						if ($pwdPolicyResult === true) {
 | 
			
		||||
							$return['mod']['userPassword'][0] = pwd_hash($_POST['posixAccount_password'], true, $this->selfServiceSettings->moduleSettings['posixAccount_pwdHash'][0]);
 | 
			
		||||
							$return['info']['userPasswordClearText'][0] = $_POST['posixAccount_password'];
 | 
			
		||||
							if (isset($attributes['shadowLastChange'][0])) {
 | 
			
		||||
								$return['mod']['shadowLastChange'][0] = intval(time()/3600/24);
 | 
			
		||||
							}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -680,6 +680,7 @@ class posixGroup extends baseModule implements passwordService {
 | 
			
		|||
	* <br>"add" are attributes which have to be added to LDAP entry
 | 
			
		||||
	* <br>"remove" are attributes which have to be removed from LDAP entry
 | 
			
		||||
	* <br>"modify" are attributes which have to been modified in LDAP entry
 | 
			
		||||
	* <br>"info" are values with informational value (e.g. to be used later by pre/postModify actions)
 | 
			
		||||
	*/
 | 
			
		||||
	function save_attributes() {
 | 
			
		||||
		// skip saving if account is based on another structural object class
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -451,13 +451,16 @@ class range extends baseModule {
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * This function returns an array with 4 entries:
 | 
			
		||||
	 * array( DN1 ('add' => array($attr), 'remove' => array($attr), 'modify' => array($attr), 'lamdaemon' => array(cmds)), DN2 .... )
 | 
			
		||||
	 * DN is the DN to change. It may be possible to change several DNs,
 | 
			
		||||
	 * e.g. create a new user and add him to some groups via attribute memberUid
 | 
			
		||||
	 * add are attributes which have to be added to ldap entry
 | 
			
		||||
	 * remove are attributes which have to be removed from ldap entry
 | 
			
		||||
	 * lamdaemon are lamdaemon commands to modify homedir, quotas, ...
 | 
			
		||||
	* Returns a list of modifications which have to be made to the LDAP account.
 | 
			
		||||
	*
 | 
			
		||||
	* @return array list of modifications
 | 
			
		||||
	* <br>This function returns an array with 3 entries:
 | 
			
		||||
	* <br>array( DN1 ('add' => array($attr), 'remove' => array($attr), 'modify' => array($attr)), DN2 .... )
 | 
			
		||||
	* <br>DN is the DN to change. It may be possible to change several DNs (e.g. create a new user and add him to some groups via attribute memberUid)
 | 
			
		||||
	* <br>"add" are attributes which have to be added to LDAP entry
 | 
			
		||||
	* <br>"remove" are attributes which have to be removed from LDAP entry
 | 
			
		||||
	* <br>"modify" are attributes which have to been modified in LDAP entry
 | 
			
		||||
	* <br>"info" are values with informational value (e.g. to be used later by pre/postModify actions)
 | 
			
		||||
	*/
 | 
			
		||||
	public function save_attributes() {
 | 
			
		||||
		$return = array();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -538,6 +538,7 @@ class sambaGroupMapping extends baseModule {
 | 
			
		|||
	* <br>"add" are attributes which have to be added to LDAP entry
 | 
			
		||||
	* <br>"remove" are attributes which have to be removed from LDAP entry
 | 
			
		||||
	* <br>"modify" are attributes which have to been modified in LDAP entry
 | 
			
		||||
	* <br>"info" are values with informational value (e.g. to be used later by pre/postModify actions)
 | 
			
		||||
	*/
 | 
			
		||||
	function save_attributes() {
 | 
			
		||||
		if (!in_array('sambaGroupMapping', $this->attributes['objectClass'])) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -659,6 +659,7 @@ class sambaSamAccount extends baseModule implements passwordService {
 | 
			
		|||
	* <br>"add" are attributes which have to be added to LDAP entry
 | 
			
		||||
	* <br>"remove" are attributes which have to be removed from LDAP entry
 | 
			
		||||
	* <br>"modify" are attributes which have to been modified in LDAP entry
 | 
			
		||||
	* <br>"info" are values with informational value (e.g. to be used later by pre/postModify actions)
 | 
			
		||||
	*/
 | 
			
		||||
	function save_attributes() {
 | 
			
		||||
		if (!in_array('sambaSamAccount', $this->attributes['objectClass']) && !in_array('sambaSamAccount', $this->orig['objectClass'])) {
 | 
			
		||||
| 
						 | 
				
			
			@ -2051,14 +2052,22 @@ class sambaSamAccount extends baseModule implements passwordService {
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Checks if all input values are correct and returns the LDAP commands which should be executed.
 | 
			
		||||
	 * Checks if all input values are correct and returns the LDAP attributes which should be changed.
 | 
			
		||||
	 * <br>Return values:
 | 
			
		||||
	 * <br>messages: array of parameters to create status messages
 | 
			
		||||
	 * <br>add: array of attributes to add
 | 
			
		||||
	 * <br>del: array of attributes to remove
 | 
			
		||||
	 * <br>mod: array of attributes to modify
 | 
			
		||||
	 * <br>info: array of values with informational value (e.g. to be used later by pre/postModify actions)
 | 
			
		||||
	 * 
 | 
			
		||||
	 * Calling this method does not require the existence of an enclosing {@link accountContainer}.
 | 
			
		||||
	 *
 | 
			
		||||
	 * @param string $fields input fields
 | 
			
		||||
	 * @param array $attributes LDAP attributes
 | 
			
		||||
	 * @return array messages and LDAP commands (array('messages' => array(), 'add' => array(), 'del' => array(), 'mod' => array()))
 | 
			
		||||
	 * @return array messages and attributes (array('messages' => array(), 'add' => array('mail' => array('test@test.com')), 'del' => array(), 'mod' => array(), 'info' => array()))
 | 
			
		||||
	 */
 | 
			
		||||
	function checkSelfServiceOptions($fields, $attributes) {
 | 
			
		||||
		$return = array('messages' => array(), 'add' => array(), 'del' => array(), 'mod' => array());
 | 
			
		||||
		$return = array('messages' => array(), 'add' => array(), 'del' => array(), 'mod' => array(), 'info' => array());
 | 
			
		||||
		if (!in_array_ignore_case('sambaSamAccount', $attributes['objectClass'])) {
 | 
			
		||||
			return $return;
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -239,6 +239,7 @@ class shadowAccount extends baseModule implements passwordService {
 | 
			
		|||
	* <br>"add" are attributes which have to be added to LDAP entry
 | 
			
		||||
	* <br>"remove" are attributes which have to be removed from LDAP entry
 | 
			
		||||
	* <br>"modify" are attributes which have to been modified in LDAP entry
 | 
			
		||||
	* <br>"info" are values with informational value (e.g. to be used later by pre/postModify actions)
 | 
			
		||||
	*/
 | 
			
		||||
	function save_attributes() {
 | 
			
		||||
		if (!in_array('shadowAccount', $this->attributes['objectClass']) && !in_array('shadowAccount', $this->orig['objectClass'])) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -114,7 +114,7 @@ function getSelfServiceOptions($scope, $fields, $attributes) {
 | 
			
		|||
 * @return array messages and LDAP commands (array('messages' => array(), 'add' => array(), 'del' => array(), 'mod' => array()))
 | 
			
		||||
 */
 | 
			
		||||
function checkSelfServiceOptions($scope, $fields, $attributes) {
 | 
			
		||||
	$return = array('messages' => array(), 'add' => array(), 'del' => array(), 'mod' => array());
 | 
			
		||||
	$return = array('messages' => array(), 'add' => array(), 'del' => array(), 'mod' => array(), 'info' => array());
 | 
			
		||||
	$modules = getAvailableModules($scope);
 | 
			
		||||
	for ($i = 0; $i < sizeof($modules); $i++) {
 | 
			
		||||
		if (!isset($fields[$modules[$i]])) continue;
 | 
			
		||||
| 
						 | 
				
			
			@ -124,6 +124,7 @@ function checkSelfServiceOptions($scope, $fields, $attributes) {
 | 
			
		|||
		if (sizeof($result['add']) > 0) $return['add'] = array_merge($result['add'], $return['add']);
 | 
			
		||||
		if (sizeof($result['del']) > 0) $return['del'] = array_merge($result['del'], $return['del']);
 | 
			
		||||
		if (sizeof($result['mod']) > 0) $return['mod'] = array_merge($result['mod'], $return['mod']);
 | 
			
		||||
		if (sizeof($result['info']) > 0) $return['info'] = array_merge($result['info'], $return['info']);
 | 
			
		||||
	}
 | 
			
		||||
	return $return;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,7 +4,7 @@
 | 
			
		|||
 | 
			
		||||
	This code is part of LDAP Account Manager (http://www.ldap-account-manager.org/)
 | 
			
		||||
	Copyright (C) 2003 - 2006  Tilo Lutz
 | 
			
		||||
	Copyright (C) 2007 - 2010  Roland Gruber
 | 
			
		||||
	Copyright (C) 2007 - 2011  Roland Gruber
 | 
			
		||||
 | 
			
		||||
	This program is free software; you can redistribute it and/or modify
 | 
			
		||||
	it under the terms of the GNU General Public License as published by
 | 
			
		||||
| 
						 | 
				
			
			@ -218,7 +218,7 @@ if (isset($_POST['delete'])) {
 | 
			
		|||
							$allOk = false;
 | 
			
		||||
						}
 | 
			
		||||
					}
 | 
			
		||||
					// removce attributes
 | 
			
		||||
					// remove attributes
 | 
			
		||||
					if (isset($attributes[$DNs[$i]]['remove']) && !$stopprocessing) {
 | 
			
		||||
						$success = @ldap_mod_del($_SESSION['ldap']->server(), $DNs[$i], $attributes[$DNs[$i]]['remove']);
 | 
			
		||||
						if (!$success) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue