From 39fabb357e4b8dc05ee5e28cbabfcbdba2ee5b1e Mon Sep 17 00:00:00 2001 From: Roland Gruber Date: Sun, 20 Dec 2009 14:35:42 +0000 Subject: [PATCH] allow to remove the extension --- lam/lib/modules/eduPerson.inc | 49 +++++++++++++++-- lam/lib/modules/phpGroupwareUser.inc | 26 ++++++++++ lam/lib/modules/sambaGroupMapping.inc | 2 +- lam/lib/modules/sambaSamAccount.inc | 75 +++++++++++++++++++++------ lam/lib/modules/shadowAccount.inc | 17 +++++- 5 files changed, 146 insertions(+), 23 deletions(-) diff --git a/lam/lib/modules/eduPerson.inc b/lam/lib/modules/eduPerson.inc index 0b07a49e..4bde854b 100644 --- a/lam/lib/modules/eduPerson.inc +++ b/lam/lib/modules/eduPerson.inc @@ -122,7 +122,18 @@ class eduPerson extends baseModule { 'orgUnitDNUpload' => array( "Headline" => _("Organizational units"), "Text" => _("The DNs of the directory entries representing the person's organizational units.") . ' ' . _('Multiple values are separated by comma.') + ), + 'autoAdd' => array( + "Headline" => _("Automatically add this extension"), + "Text" => _("This will enable the extension automatically if this profile is loaded.") )); + // profile options + $return['profile_options'] = array( + array( + array('kind' => 'text', 'text' => _('Automatically add this extension') . ":"), + array('kind' => 'input', 'name' => 'eduPerson_addExt', 'type' => 'checkbox'), + array('kind' => 'help', 'value' => 'autoAdd')), + ); // upload fields $return['upload_columns'] = array( array( @@ -215,9 +226,6 @@ class eduPerson extends baseModule { * @return array HTML meta data */ function display_html_attributes() { - if (isset($_POST['form_subpage_eduPerson_attributes_addObjectClass'])) { - $this->attributes['objectClass'][] = 'eduPerson'; - } $return = array(); if (in_array('eduPerson', $this->attributes['objectClass'])) { // principal name @@ -380,6 +388,13 @@ class eduPerson extends baseModule { ))), array('kind' => 'text', 'text' => ' ') ); + $return[] = array( + array('kind' => 'text', 'text' => ' ') + ); + $return[] = array( + array('kind' => 'input', 'type' => 'submit', 'name' => 'form_subpage_eduPerson_attributes_remObjectClass', + 'value' => _('Remove EDU person extension'), 'td' => array('colspan' => '3')) + ); } else { $return[] = array( @@ -397,6 +412,19 @@ class eduPerson extends baseModule { * @return array list of info/error messages */ function process_attributes() { + if (isset($_POST['form_subpage_eduPerson_attributes_addObjectClass'])) { + $this->attributes['objectClass'][] = 'eduPerson'; + return array(); + } + elseif (isset($_POST['form_subpage_eduPerson_attributes_remObjectClass'])) { + $this->attributes['objectClass'] = array_delete(array('eduPerson'), $this->attributes['objectClass']); + for ($i = 0; $i < sizeof($this->meta['attributes']); $i++) { + if (isset($this->attributes[$this->meta['attributes'][$i]])) { + unset($this->attributes[$this->meta['attributes'][$i]]); + } + } + return array(); + } $errors = array(); // primary affiliation $this->attributes['eduPersonPrimaryAffiliation'][0] = $_POST['primaryAffiliation']; @@ -493,6 +521,21 @@ class eduPerson extends baseModule { return $errors; } + /** + * Loads the values of an account profile into internal variables. + * + * @param array $profile hash array with profile values (identifier => value) + */ + function load_profile($profile) { + parent::load_profile($profile); + // add extension + if ($profile['eduPerson_addExt'][0] == "true") { + if (!in_array('eduPerson', $this->attributes['objectClass'])) { + $this->attributes['objectClass'][] = 'eduPerson'; + } + } + } + /** * In this function the LDAP account is built up. * diff --git a/lam/lib/modules/phpGroupwareUser.inc b/lam/lib/modules/phpGroupwareUser.inc index fa26e4c3..b3b56cb0 100644 --- a/lam/lib/modules/phpGroupwareUser.inc +++ b/lam/lib/modules/phpGroupwareUser.inc @@ -81,8 +81,19 @@ class phpGroupwareUser extends baseModule implements passwordService { 'phpgwAccountExpires' => array( "Headline" => _("Account expiration date"), "Text" => _("This is the date when the account will expire. Format: DD-MM-YYYY") + ), + 'autoAdd' => array( + "Headline" => _("Automatically add this extension"), + "Text" => _("This will enable the extension automatically if this profile is loaded.") ) ); + // profile options + $return['profile_options'] = array( + array( + array('kind' => 'text', 'text' => _('Automatically add this extension') . ":"), + array('kind' => 'input', 'name' => 'phpGroupwareUser_addExt', 'type' => 'checkbox'), + array('kind' => 'help', 'value' => 'autoAdd')), + ); // available PDF fields $return['PDF_fields'] = array( 'phpgwAccountStatus', 'phpgwAccountExpires', @@ -340,6 +351,21 @@ class phpGroupwareUser extends baseModule implements passwordService { } return $return; } + + /** + * Loads the values of an account profile into internal variables. + * + * @param array $profile hash array with profile values (identifier => value) + */ + function load_profile($profile) { + parent::load_profile($profile); + // add extension + if ($profile['phpGroupwareUser_addExt'][0] == "true") { + if (!in_array('phpgwAccount', $this->attributes['objectClass'])) { + $this->attributes['objectClass'][] = 'phpgwAccount'; + } + } + } /** * In this function the LDAP account is built up. diff --git a/lam/lib/modules/sambaGroupMapping.inc b/lam/lib/modules/sambaGroupMapping.inc index 34177ac4..1f27a3f2 100644 --- a/lam/lib/modules/sambaGroupMapping.inc +++ b/lam/lib/modules/sambaGroupMapping.inc @@ -276,7 +276,7 @@ class sambaGroupMapping extends baseModule { else { $return[] = array( array('kind' => 'text', 'text' => ' '), - array('kind' => 'input', 'type' => 'submit', 'name' => 'form_subpage_sambaGroupMapping_attributes_addObjectClass', 'value' => _('Add Samba 3 account')) + array('kind' => 'input', 'type' => 'submit', 'name' => 'form_subpage_sambaGroupMapping_attributes_addObjectClass', 'value' => _('Add Samba 3 extension')) ); } return $return; diff --git a/lam/lib/modules/sambaSamAccount.inc b/lam/lib/modules/sambaSamAccount.inc index 792fb483..971dcfc2 100644 --- a/lam/lib/modules/sambaSamAccount.inc +++ b/lam/lib/modules/sambaSamAccount.inc @@ -139,6 +139,13 @@ class sambaSamAccount extends baseModule implements passwordService { 'sambaUserWorkstations', 'sambaPrimaryGroupSID', 'sambaDomainName', 'sambaLogonHours', 'sambaMungedDial'); // PHP extensions $return['extensions'] = array('hash', 'iconv'); + // profile options + $return['profile_options'] = array( + array( + array('kind' => 'text', 'text' => _('Automatically add this extension') . ":"), + array('kind' => 'input', 'name' => 'sambaSamAccount_addExt', 'type' => 'checkbox'), + array('kind' => 'help', 'value' => 'autoAdd')), + ); // profile checks $return['profile_checks']['sambaSamAccount_smbhome'] = array( 'type' => 'ext_preg', @@ -376,8 +383,11 @@ class sambaSamAccount extends baseModule implements passwordService { "Text" => _("Windows password hashes are saved by default as NT and LM hashes. LM hashes are insecure and only needed for old versions of Windows. You should disable them unless you really need them.")), 'hiddenOptions' => array( "Headline" => _("Hidden options"), - "Text" => _("The selected options will not be managed inside LAM. You can use this to reduce the number of displayed input fields.")) - ); + "Text" => _("The selected options will not be managed inside LAM. You can use this to reduce the number of displayed input fields.")), + 'autoAdd' => array( + "Headline" => _("Automatically add this extension"), + "Text" => _("This will enable the extension automatically if this profile is loaded.")) + ); // upload dependencies $return['upload_preDepends'] = array('posixAccount', 'inetOrgPerson'); // upload options @@ -703,17 +713,19 @@ class sambaSamAccount extends baseModule implements passwordService { *
"modify" are attributes which have to been modified in LDAP entry */ function save_attributes() { - if (!in_array('sambaSamAccount', $this->attributes['objectClass'])) { + if (!in_array('sambaSamAccount', $this->attributes['objectClass']) && !in_array('sambaSamAccount', $this->orig['objectClass'])) { + // skip saving if the extension was not added/modified return array(); } - if ($this->expirePassword === true) { - $this->attributes['sambaPwdLastSet'][0] = '0'; + if (in_array('sambaSamAccount', $this->attributes['objectClass'])) { + if ($this->expirePassword === true) { + $this->attributes['sambaPwdLastSet'][0] = '0'; + } + elseif ((isset($this->attributes['sambaPwdLastSet'][0])) && ($this->attributes['sambaPwdLastSet'][0] == '0')) { + $this->attributes['sambaPwdLastSet'][0] = time(); + } } - elseif ((isset($this->attributes['sambaPwdLastSet'][0])) && ($this->attributes['sambaPwdLastSet'][0] == '0')) { - $this->attributes['sambaPwdLastSet'][0] = time(); - } - $return = $this->getAccountContainer()->save_module_attributes($this->attributes, $this->orig); - return $return; + return parent::save_attributes(); } /** @@ -723,6 +735,26 @@ class sambaSamAccount extends baseModule implements passwordService { * @return array list of info/error messages */ function process_attributes() { + // add extension + if (isset($_POST['form_subpage_sambaSamAccount_attributes_addObjectClass'])) { + $this->attributes['objectClass'][] = 'sambaSamAccount'; + return array(); + } + // remove extension + elseif (isset($_POST['form_subpage_sambaSamAccount_attributes_remObjectClass'])) { + $this->attributes['objectClass'] = array_delete(array('sambaSamAccount'), $this->attributes['objectClass']); + $attrKeys = array_keys($this->attributes); + for ($k = 0; $k < sizeof($attrKeys); $k++) { + if (strpos($attrKeys[$k], 'samba') > -1) { + unset($this->attributes[$attrKeys[$k]]); + } + } + if (isset($this->attributes['displayName'])) { + unset($this->attributes['displayName']); + } + return array(); + } + // skip processing if extension is not active if (!in_array('sambaSamAccount', $this->attributes['objectClass'])) { return array(); } @@ -1044,9 +1076,6 @@ class sambaSamAccount extends baseModule implements passwordService { * @return array HTML meta data */ function display_html_attributes() { - if (isset($_POST['form_subpage_sambaSamAccount_attributes_addObjectClass'])) { - $this->attributes['objectClass'][] = 'sambaSamAccount'; - } $return = array(); if (in_array('sambaSamAccount', $this->attributes['objectClass'])) { if ($this->get_scope() == "host") { @@ -1280,12 +1309,19 @@ class sambaSamAccount extends baseModule implements passwordService { array('kind' => 'text', 'text' => _('Reset password') ), array('kind' => 'input', 'type' => 'submit', 'name' => 'ResetSambaPassword', 'value' => _('Reset')), array('kind' => 'help', 'value' => 'resetPassword' )); - } + } + $return[] = array( + array('kind' => 'text', 'text' => ' ') + ); + $return[] = array( + array('kind' => 'input', 'type' => 'submit', 'name' => 'form_subpage_sambaSamAccount_attributes_remObjectClass', + 'value' => _('Remove Samba 3 extension'), 'td' => array('colspan' => '3')) + ); } else { $return[] = array( array('kind' => 'text', 'text' => ' '), - array('kind' => 'input', 'type' => 'submit', 'name' => 'form_subpage_sambaSamAccount_attributes_addObjectClass', 'value' => _('Add Samba 3 account')) + array('kind' => 'input', 'type' => 'submit', 'name' => 'form_subpage_sambaSamAccount_attributes_addObjectClass', 'value' => _('Add Samba 3 extension')) ); } return $return; @@ -1565,7 +1601,7 @@ class sambaSamAccount extends baseModule implements passwordService { * @return profile elements */ function get_profileOptions() { - $return = array(); + $return = parent::get_profileOptions(); if ($this->get_scope() == 'user') { // lists for expiration date $day = array(); $mon = array(); $year = array(); @@ -1708,7 +1744,12 @@ class sambaSamAccount extends baseModule implements passwordService { function load_profile($profile) { // profile mappings in meta data parent::load_profile($profile); - // special profile options + // add extension + if ($profile['sambaSamAccount_addExt'][0] == "true") { + if (!in_array('sambaSamAccount', $this->attributes['objectClass'])) { + $this->attributes['objectClass'][] = 'sambaSamAccount'; + } + } // use no password if ($profile['sambaSamAccount_sambaAcctFlagsN'][0] == "true") { $this->nopwd = true; diff --git a/lam/lib/modules/shadowAccount.inc b/lam/lib/modules/shadowAccount.inc index 48a564f7..22bf5d55 100644 --- a/lam/lib/modules/shadowAccount.inc +++ b/lam/lib/modules/shadowAccount.inc @@ -95,6 +95,10 @@ class shadowAccount extends baseModule implements passwordService { for ( $i=1; $i<=12; $i++ ) $mon[] = $i; for ( $i=2003; $i<=2030; $i++ ) $year[] = $i; $return['profile_options'] = array( + array( + array('kind' => 'text', 'text' => _('Automatically add this extension') . ":"), + array('kind' => 'input', 'name' => 'shadowAccount_addExt', 'type' => 'checkbox'), + array('kind' => 'help', 'value' => 'autoAdd')), // password warning array( array('kind' => 'text', 'text' => _('Password warning')), @@ -125,7 +129,7 @@ class shadowAccount extends baseModule implements passwordService { array('kind' => 'select', 'name' => 'shadowAccount_shadowExpire_yea', 'options' => $year, 'options_selected' => array('2030')) ) )), - array('kind' => 'help', 'value' => 'shadowExpire')) + array('kind' => 'help', 'value' => 'shadowExpire')), ); // profile checks $return['profile_checks']['shadowAccount_shadowMin'] = array( @@ -184,6 +188,10 @@ class shadowAccount extends baseModule implements passwordService { 'shadowExpire' => array ( "Headline" => _("Account expiration date"), "Text" => _("This is the date when the account will expire. Format: DD-MM-YYYY") + ), + 'autoAdd' => array( + "Headline" => _("Automatically add this extension"), + "Text" => _("This will enable the extension automatically if this profile is loaded.") ) ); // upload fields @@ -502,7 +510,12 @@ class shadowAccount extends baseModule implements passwordService { function load_profile($profile) { // profile mappings in meta data parent::load_profile($profile); - // special profile options + // add extension + if ($profile['shadowAccount_addExt'][0] == "true") { + if (!in_array('shadowAccount', $this->attributes['objectClass'])) { + $this->attributes['objectClass'][] = 'shadowAccount'; + } + } // expiration date if (isset($profile['shadowAccount_shadowExpire_day'][0]) && ($profile['shadowAccount_shadowExpire_day'][0] != "")) { $date = intval(mktime(0, 0, 0, intval($profile['shadowAccount_shadowExpire_mon'][0]),