diff --git a/lam/lib/modules/freeRadius.inc b/lam/lib/modules/freeRadius.inc index 25bb79db..502c5e64 100644 --- a/lam/lib/modules/freeRadius.inc +++ b/lam/lib/modules/freeRadius.inc @@ -77,7 +77,8 @@ class freeRadius extends baseModule { // managed object classes $return['objectClasses'] = array('radiusprofile'); // managed attributes - $return['attributes'] = array('radiusFramedIPAddress', 'radiusFramedIPNetmask', 'radiusRealm', 'radiusGroupName', 'radiusExpiration', 'radiusIdleTimeout'); + $return['attributes'] = array('radiusFramedIPAddress', 'radiusFramedIPNetmask', 'radiusRealm', 'radiusGroupName', + 'radiusExpiration', 'radiusIdleTimeout', 'dialupAccess'); // help Entries $return['help'] = array( 'radiusFramedIPAddress' => array( @@ -108,6 +109,10 @@ class freeRadius extends baseModule { "Headline" => _("Idle timeout"), 'attr' => 'radiusIdleTimeout', "Text" => _("Specifies the maximum number of seconds that a connection can be idle before the session is terminated.") ), + 'dialupAccess' => array( + "Headline" => _("Enabled"), 'attr' => 'dialupAccess', + "Text" => _("Specifies if the user may authenticate with FreeRadius.") + ), '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.") @@ -130,6 +135,8 @@ class freeRadius extends baseModule { $configContainerOptions->addElement(new htmlTableExtendedInputCheckbox('freeRadius_hideRadiusExpiration', false, _('Expiration date'), null, false)); $configContainerOptions->addNewLine(); $configContainerOptions->addElement(new htmlTableExtendedInputCheckbox('freeRadius_hideRadiusIdleTimeout', false, _('Idle timeout'), null, false)); + $configContainerOptions->addElement(new htmlOutputText(' ')); + $configContainerOptions->addElement(new htmlTableExtendedInputCheckbox('freeRadius_hideDialupAccess', false, _('Enabled'), null, false)); $configContainer->addElement($configContainerOptions, true); $return['config_options']['all'] = $configContainer; // profile settings @@ -161,6 +168,13 @@ class freeRadius extends baseModule { 'error_message' => $this->messages['radiusIdleTimeout'][0]); $return['profile_mappings']['freeRadius_radiusIdleTimeout'] = 'radiusIdleTimeout'; } + if (!$this->isBooleanConfigOptionSet('freeRadius_hideDialupAccess')) { + $enabledOptions = array('-' => '', _('Yes') => 'true', _('No') => 'false'); + $dialupAccessSelect = new htmlTableExtendedSelect('freeRadius_dialupAccess', $enabledOptions, array('true'), _('Enabled'), 'dialupAccess'); + $dialupAccessSelect->setHasDescriptiveElements(true); + $profileElements[] = $dialupAccessSelect; + $return['profile_mappings']['freeRadius_dialupAccess'] = 'dialupAccess'; + } if (sizeof($profileElements) > 0) { $profileContainer = new htmlTable(); for ($i = 0; $i < sizeof($profileElements); $i++) { @@ -219,6 +233,15 @@ class freeRadius extends baseModule { 'example' => '3600' ); } + if (!$this->isBooleanConfigOptionSet('freeRadius_hideDialupAccess')) { + $return['upload_columns'][] = array( + 'name' => 'freeRadius_dialupAccess', + 'description' => _('Enabled'), + 'help' => 'dialupAccess', + 'example' => 'true', + 'values' => 'true, false' + ); + } // available PDF fields $return['PDF_fields'] = array(); if (!$this->isBooleanConfigOptionSet('freeRadius_hideRadiusFramedIPAddress')) { @@ -239,6 +262,9 @@ class freeRadius extends baseModule { if (!$this->isBooleanConfigOptionSet('freeRadius_hideRadiusIdleTimeout')) { $return['PDF_fields']['radiusIdleTimeout'] = _('Idle timeout'); } + if (!$this->isBooleanConfigOptionSet('freeRadius_hideDialupAccess')) { + $return['PDF_fields']['dialupAccess'] = _('Enabled'); + } return $return; } @@ -258,6 +284,7 @@ class freeRadius extends baseModule { $this->messages['radiusExpiration'][1] = array('ERROR', _('Account %s:') . ' freeRadius_radiusExpiration', _('The expiration date must be in format DD.MM.YYYY HH:MM.')); $this->messages['radiusIdleTimeout'][0] = array('ERROR', _('Please enter a numeric value for the idle timeout.')); $this->messages['radiusIdleTimeout'][1] = array('ERROR', _('Account %s:') . ' freeRadius_radiusIdleTimeout', _('Please enter a numeric value for the idle timeout.')); + $this->messages['dialupAccess'][0] = array('ERROR', _('Account %s:') . ' freeRadius_dialupAccess', _('This value can only be "true" or "false".')); } /** @@ -302,6 +329,21 @@ class freeRadius extends baseModule { $return->addElement($radiusExpirationList); $return->addElement(new htmlHelpLink('radiusExpiration'), true); } + // enabled + if (!$this->isBooleanConfigOptionSet('freeRadius_hideDialupAccess')) { + $enabled = array(''); + if (!empty($this->attributes['dialupAccess'][0])) { + $enabled = array($this->attributes['dialupAccess'][0]); + // value in LDAP may be anything other than "false" to count as "true" + if (!in_array($this->attributes['dialupAccess'][0], array('true', 'false', 'TRUE', 'FALSE'))) { + $enabled = array('true'); + } + } + $enabledOptions = array('-' => '', _('Yes') => 'true', _('No') => 'false'); + $enabledSelect = new htmlTableExtendedSelect('dialupAccess', $enabledOptions, $enabled, _('Enabled'), 'dialupAccess'); + $enabledSelect->setHasDescriptiveElements(true); + $return->addElement($enabledSelect, true); + } // button to remove extension $return->addElement(new htmlSpacer(null, '10px'), true); $remButton = new htmlButton('remObjectClass', _('Remove FreeRadius extension')); @@ -371,6 +413,18 @@ class freeRadius extends baseModule { $errors[] = $this->messages['radiusIdleTimeout'][0]; } } + // enabled + if (!$this->isBooleanConfigOptionSet('freeRadius_hideDialupAccess')) { + if (!empty($this->attributes['dialupAccess']) && ($_POST['dialupAccess'] === '')) { + unset($this->attributes['dialupAccess']); + } + elseif ($_POST['dialupAccess'] === 'false') { + $this->attributes['dialupAccess'][0] = 'false'; + } + elseif ($_POST['dialupAccess'] === 'true') { + $this->attributes['dialupAccess'][0] = 'true'; + } + } return $errors; } @@ -523,6 +577,17 @@ class freeRadius extends baseModule { // idle timeout $this->mapSimpleUploadField($rawAccounts, $ids, $partialAccounts, $i, 'freeRadius_radiusIdleTimeout', 'radiusIdleTimeout', 'digit', $this->messages['radiusIdleTimeout'][1], $errors); + // enabled + if (!empty($rawAccounts[$i][$ids['freeRadius_dialupAccess']])) { + if (in_array($rawAccounts[$i][$ids['freeRadius_dialupAccess']], array('true', 'false'))) { + $partialAccounts[$i]['dialupAccess'] = $rawAccounts[$i][$ids['freeRadius_dialupAccess']]; + } + else { + $errMsg = $this->messages['dialupAccess'][0]; + array_push($errMsg, array($i)); + $errors[] = $errMsg; + } + } } return $errors; } @@ -542,6 +607,13 @@ class freeRadius extends baseModule { if (isset($this->attributes['radiusExpiration'][0])) { $return[get_class($this) . '_radiusExpiration'][0] = '' . _('Expiration date') . '' . $this->formatExpirationDate($this->attributes['radiusExpiration'][0]) . ''; } + if (isset($this->attributes['dialupAccess'][0])) { + $enabled = _('Yes'); + if (in_array($this->attributes['dialupAccess'][0], array('false', 'FALSE'))) { + $enabled = _('No'); + } + $return[get_class($this) . '_dialupAccess'][0] = '' . _('Enabled') . '' . $enabled . ''; + } return $return; }