diff --git a/lam/lib/modules.inc b/lam/lib/modules.inc index 62a73b02..3b1cb612 100644 --- a/lam/lib/modules.inc +++ b/lam/lib/modules.inc @@ -667,7 +667,7 @@ class accountContainer { private $module; /** DN suffix of the account */ - public $dn; + public $dnSuffix; /** DN suffix of account when it was loaded */ public $dn_orig; @@ -755,11 +755,11 @@ class accountContainer { } elseif (!$profileLoaded) { // change dn suffix - if (isset($_GET['suffix']) && ($_GET['suffix'] != '') && ($this->dn == null)) { - $this->dn = $_GET['suffix']; + if (isset($_GET['suffix']) && ($_GET['suffix'] != '') && ($this->dnSuffix == null)) { + $this->dnSuffix = $_GET['suffix']; } if (isset($_POST['accountContainerSuffix']) && ($_POST['accountContainerSuffix'] != '')) { - $this->dn = $_POST['accountContainerSuffix']; + $this->dnSuffix = $_POST['accountContainerSuffix']; } // change RDN if (isset($_POST['accountContainerRDN'])) { @@ -769,7 +769,7 @@ class accountContainer { if (isset($_POST['accountContainerCreateAgain'])) { // open fresh account page unset($_SESSION[$this->base]); - metaRefresh("edit.php?type=" . $this->type . "&suffix=" . $this->dn); + metaRefresh("edit.php?type=" . $this->type . "&suffix=" . $this->dnSuffix); exit(); } // reedit account @@ -911,13 +911,13 @@ class accountContainer { $rootsuffix = $_SESSION['config']->get_Suffix($this->type); foreach ($this->getOUs() as $suffix) { echo '\n"; } - if (!($this->dn == '') && !in_array($this->dn, $this->getOUs())) { - echo '\n";; + if (!($this->dnSuffix == '') && !in_array($this->dnSuffix, $this->getOUs())) { + echo '\n";; } echo "\n"; echo '    '; @@ -1233,7 +1233,7 @@ class accountContainer { } } if (isset($profile['ldap_suffix'][0]) && ($profile['ldap_suffix'][0] != '-')) { - $this->dn = $profile['ldap_suffix'][0]; + $this->dnSuffix = $profile['ldap_suffix'][0]; } return true; } @@ -1348,10 +1348,10 @@ class accountContainer { unset($torem[$attributes2[$i]]); } } - if (count($toadd)!=0) $return[$this->dn]['add'] = $toadd; - if (count($torem)!=0) $return[$this->dn]['remove'] = $torem; - if (count($tomodify)!=0) $return[$this->dn]['modify'] = $tomodify; - if (count($notchanged)!=0) $return[$this->dn]['notchanged'] = $notchanged; + if (count($toadd)!=0) $return[$this->dn_orig]['add'] = $toadd; + if (count($torem)!=0) $return[$this->dn_orig]['remove'] = $torem; + if (count($tomodify)!=0) $return[$this->dn_orig]['modify'] = $tomodify; + if (count($notchanged)!=0) $return[$this->dn_orig]['notchanged'] = $notchanged; return $return; } @@ -1376,7 +1376,7 @@ class accountContainer { if (!$entry) { return array(array("ERROR", _("Unable to load LDAP entry:") . " " . htmlspecialchars($dn), ldap_error($_SESSION['ldap']->server()))); } - $this->dn = substr($dn, strpos($dn, ',')+1); + $this->dnSuffix = substr($dn, strpos($dn, ',')+1); $this->dn_orig = $dn; // extract RDN $this->rdn = explode("=", substr($dn, 0, strpos($dn, ','))); @@ -1517,7 +1517,7 @@ class accountContainer { } } if (isset($profile['ldap_suffix'][0]) && ($profile['ldap_suffix'][0] != '-')) { - $this->dn = $profile['ldap_suffix'][0]; + $this->dnSuffix = $profile['ldap_suffix'][0]; } // get titles $typeObject = new $this->type(); @@ -1535,7 +1535,7 @@ class accountContainer { if (!checkIfWriteAccessIsAllowed()) { die(); } - $this->finalDN = $this->dn; + $this->finalDN = $this->dn_orig; $errors = array(); $ldapUser = $_SESSION['ldap']->decrypt_login(); $ldapUser = $ldapUser[0]; @@ -1553,39 +1553,26 @@ class accountContainer { $ops = array_keys($temp[$DNs[$i]]); for ($j=0; $jrdn; - $DNChanged = false; - foreach ($attributes as $DN) { - if (isset($DN['modify'][$search][0]) && !$DNChanged) { - $attributes[$search.'='.$DN['modify'][$search][0].','.$this->finalDN] = $attributes[$this->finalDN]; - unset ($attributes[$this->finalDN]); - $this->finalDN = $search.'='.$DN['modify'][$search][0].','.$this->finalDN; - $DNChanged = true; - } - if (isset($DN['add'][$search][0]) && !$DNChanged) { - $attributes[$search.'='.$DN['add'][$search][0].','.$this->finalDN] = $attributes[$this->finalDN]; - unset ($attributes[$this->finalDN]); - $this->finalDN = $search.'='.$DN['add'][$search][0].','.$this->finalDN; - $DNChanged = true; - } - if (isset($DN['notchanged'][$search][0]) && !$DNChanged) { - $attributes[$search.'='.$DN['notchanged'][$search][0].','.$this->finalDN] = $attributes[$this->finalDN]; - unset ($attributes[$this->finalDN]); - $this->finalDN = $search.'='.$DN['notchanged'][$search][0].','.$this->finalDN; - $DNChanged = true; - } + } + // build DN for new accounts and change it for existing ones if needed + if (isset($attributes[$this->dn_orig]['modify'][$this->rdn][0])) { + $this->finalDN = $this->rdn . '=' . $attributes[$this->dn_orig]['modify'][$this->rdn][0] . ',' . $this->dnSuffix; + if ($this->dn_orig != $this->finalDN) { + $attributes[$this->finalDN] = $attributes[$this->dn_orig]; + unset($attributes[$this->dn_orig]); + } + } + elseif (isset($attributes[$this->dn_orig]['add'][$this->rdn][0])) { + $this->finalDN = $this->rdn . '=' . $attributes[$this->dn_orig]['add'][$this->rdn][0] . ',' . $this->dnSuffix; + if ($this->dn_orig != $this->finalDN) { + $attributes[$this->finalDN] = $attributes[$this->dn_orig]; + unset($attributes[$this->dn_orig]); } - // Add old dn if dn hasn't changed - if (!$DNChanged) { - $attributes[$this->dn_orig] = $attributes[$this->finalDN]; - unset ($attributes[$this->finalDN]); - $this->finalDN = $this->dn_orig; } // pre modify actions $prePostModifyAttributes = array(); diff --git a/lam/lib/modules/inetOrgPerson.inc b/lam/lib/modules/inetOrgPerson.inc index 6abb68a9..b120d9fb 100644 --- a/lam/lib/modules/inetOrgPerson.inc +++ b/lam/lib/modules/inetOrgPerson.inc @@ -739,21 +739,21 @@ class inetOrgPerson extends baseModule implements passwordService { } $return = $this->getAccountContainer()->save_module_attributes($this->attributes, $this->orig); // postalAddress, facsimileTelephoneNumber and jpegPhoto need special removing - if (isset($return[$this->getAccountContainer()->dn]['remove']['postalAddress'])) { - $return[$this->getAccountContainer()->dn]['modify']['postalAddress'] = $this->attributes['postalAddress']; - unset($return[$this->getAccountContainer()->dn]['remove']['postalAddress']); + if (isset($return[$this->getAccountContainer()->dn_orig]['remove']['postalAddress'])) { + $return[$this->getAccountContainer()->dn_orig]['modify']['postalAddress'] = $this->attributes['postalAddress']; + unset($return[$this->getAccountContainer()->dn_orig]['remove']['postalAddress']); } - if (isset($return[$this->getAccountContainer()->dn]['remove']['facsimileTelephoneNumber'])) { - $return[$this->getAccountContainer()->dn]['modify']['facsimileTelephoneNumber'] = $this->attributes['facsimileTelephoneNumber']; - unset($return[$this->getAccountContainer()->dn]['remove']['facsimileTelephoneNumber']); + if (isset($return[$this->getAccountContainer()->dn_orig]['remove']['facsimileTelephoneNumber'])) { + $return[$this->getAccountContainer()->dn_orig]['modify']['facsimileTelephoneNumber'] = $this->attributes['facsimileTelephoneNumber']; + unset($return[$this->getAccountContainer()->dn_orig]['remove']['facsimileTelephoneNumber']); } - if (isset($return[$this->getAccountContainer()->dn]['remove']['jpegPhoto'])) { - $return[$this->getAccountContainer()->dn]['modify']['jpegPhoto'] = array(); - unset($return[$this->getAccountContainer()->dn]['remove']['jpegPhoto']); + if (isset($return[$this->getAccountContainer()->dn_orig]['remove']['jpegPhoto'])) { + $return[$this->getAccountContainer()->dn_orig]['modify']['jpegPhoto'] = array(); + unset($return[$this->getAccountContainer()->dn_orig]['remove']['jpegPhoto']); } // add information about clear text password if ($this->clearTextPassword != null) { - $return[$this->getAccountContainer()->dn]['info']['userPasswordClearText'][0] = $this->clearTextPassword; + $return[$this->getAccountContainer()->dn_orig]['info']['userPasswordClearText'][0] = $this->clearTextPassword; } return $return; } diff --git a/lam/lib/modules/nisnetgroup.inc b/lam/lib/modules/nisnetgroup.inc index d3b665b0..d8748884 100644 --- a/lam/lib/modules/nisnetgroup.inc +++ b/lam/lib/modules/nisnetgroup.inc @@ -159,13 +159,13 @@ class nisnetgroup extends baseModule { function save_attributes() { $return = $this->getAccountContainer()->save_module_attributes($this->attributes, $this->orig); // nisNetgroupTriple needs special changing - if (isset($return[$this->getAccountContainer()->dn]['remove']['nisNetgroupTriple'])) { - $return[$this->getAccountContainer()->dn]['modify']['nisNetgroupTriple'] = $this->attributes['nisNetgroupTriple']; - unset($return[$this->getAccountContainer()->dn]['remove']['nisNetgroupTriple']); + if (isset($return[$this->getAccountContainer()->dn_orig]['remove']['nisNetgroupTriple'])) { + $return[$this->getAccountContainer()->dn_orig]['modify']['nisNetgroupTriple'] = $this->attributes['nisNetgroupTriple']; + unset($return[$this->getAccountContainer()->dn_orig]['remove']['nisNetgroupTriple']); } - if (isset($return[$this->getAccountContainer()->dn]['add']['nisNetgroupTriple'])) { - $return[$this->getAccountContainer()->dn]['modify']['nisNetgroupTriple'] = $this->attributes['nisNetgroupTriple']; - unset($return[$this->getAccountContainer()->dn]['add']['nisNetgroupTriple']); + if (isset($return[$this->getAccountContainer()->dn_orig]['add']['nisNetgroupTriple'])) { + $return[$this->getAccountContainer()->dn_orig]['modify']['nisNetgroupTriple'] = $this->attributes['nisNetgroupTriple']; + unset($return[$this->getAccountContainer()->dn_orig]['add']['nisNetgroupTriple']); } return $return; } diff --git a/lam/lib/modules/posixAccount.inc b/lam/lib/modules/posixAccount.inc index 14113f52..b21e4036 100644 --- a/lam/lib/modules/posixAccount.inc +++ b/lam/lib/modules/posixAccount.inc @@ -506,17 +506,17 @@ class posixAccount extends baseModule implements passwordService { 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; + $return[$this->getAccountContainer()->dn_orig]['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'; + $return[$this->getAccountContainer()->dn_orig]['info']['userPasswordStatusChange'][0] = 'unchanged'; } elseif (pwd_is_enabled($this->orig['userPassword'][0])) { - $return[$this->getAccountContainer()->dn]['info']['userPasswordStatusChange'][0] = 'locked'; + $return[$this->getAccountContainer()->dn_orig]['info']['userPasswordStatusChange'][0] = 'locked'; } else { - $return[$this->getAccountContainer()->dn]['info']['userPasswordStatusChange'][0] = 'unlocked'; + $return[$this->getAccountContainer()->dn_orig]['info']['userPasswordStatusChange'][0] = 'unlocked'; } } // Remove primary group from additional groups diff --git a/lam/lib/modules/posixGroup.inc b/lam/lib/modules/posixGroup.inc index 260e5c7e..516f4094 100644 --- a/lam/lib/modules/posixGroup.inc +++ b/lam/lib/modules/posixGroup.inc @@ -143,7 +143,7 @@ class posixGroup extends baseModule implements passwordService { $return = array(); $result = searchLDAPByFilter('gidNumber=' . $this->attributes['gidNumber'][0], array('dn'), array('user', 'host')); if (sizeof($result) > 0) { - $return[$this->getAccountContainer()->dn]['errors'][] = $this->messages['primaryGroup'][0]; + $return[$this->getAccountContainer()->dn_orig]['errors'][] = $this->messages['primaryGroup'][0]; } return $return; }