From b2c358c770aed3df7afdcb0926e1b10ec7417157 Mon Sep 17 00:00:00 2001 From: Roland Gruber Date: Tue, 24 Nov 2009 21:50:17 +0000 Subject: [PATCH] allow to set the host name (RFE 2898948) --- lam/lib/modules/dhcp_settings.inc | 40 ++++++++++++++++++++++++------- 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/lam/lib/modules/dhcp_settings.inc b/lam/lib/modules/dhcp_settings.inc index f5d657b8..600db890 100644 --- a/lam/lib/modules/dhcp_settings.inc +++ b/lam/lib/modules/dhcp_settings.inc @@ -227,6 +227,12 @@ By default, the nodes are configured as H-Nodes which fits for small networks. I ); // upload fields $return['upload_columns'] = array( + array( + 'name' => 'dhcp_settings_host-name', + 'description' => _('Host name'), + 'help' => 'host-name', + 'example' => _('server01'), + ), array( 'name' => 'dhcp_settings_subnet', 'description' => _('Subnet'), @@ -327,6 +333,7 @@ By default, the nodes are configured as H-Nodes which fits for small networks. I $this->messages['domainname'][4] = array('ERROR', _('Account %s:') . ' dhcp_settings_domainName', _('The domain name needs to have at least 3 characters.')); $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->messages['host-name'][0] = array('ERROR', _('Host name'), _('Host name contains invalid characters. Valid characters are: a-z, A-Z, 0-9 and .-_ !')); + $this->messages['host-name'][1] = array('ERROR', _('Account %s:') . ' dhcp_settings_host-name', _('Host name contains invalid characters. Valid characters are: a-z, A-Z, 0-9 and .-_ !')); } /* This function returns an array with 4 entries: @@ -404,7 +411,7 @@ By default, the nodes are configured as H-Nodes which fits for small networks. I $errors[] = $this->messages['domainname'][2]; } } - $this->setDHCPOption('domain-name', $_POST['domainname']); + $this->setDHCPOption('domain-name', '"' . $_POST['domainname'] . '"'); // Check DNS if (!empty($_POST['dns'])) { @@ -477,6 +484,13 @@ By default, the nodes are configured as H-Nodes which fits for small networks. I $this->setDHCPOption('netbios-node-type', $_POST['netbios_node_type']); if ($this->getAccountContainer()->dn_orig!=$_SESSION['config']->get_suffix('dhcp')) { + // check host name + if ($_POST['host-name'] != '') { + if (!get_preg($_POST['host-name'], 'hostname')) { + $errors[] = $this->messages['host-name'][0]; + } + } + $this->setDHCPOption('host-name', '"' . $_POST['host-name'] . '"'); // Check subnet $_POST['subnet'] = trim($_POST['subnet']); if (!check_ip($_POST['subnet'], true)) { @@ -535,12 +549,6 @@ By default, the nodes are configured as H-Nodes which fits for small networks. I } } - // host name - $return[] = array( - array('kind' => 'text', 'text' => _('Host name') . ": "), - array('kind' => 'input', 'name' => 'host-name', 'value' => $this->getDHCPOption('host-name')), - array('kind' => 'help', 'value' => 'host-name')); - // Subnet name if ($_SESSION['config']->get_suffix('dhcp') == $this->getAccountContainer()->dn_orig) { $return[] = array( @@ -549,7 +557,12 @@ By default, the nodes are configured as H-Nodes which fits for small networks. I array('kind' => 'help', 'value' => 'subnet')); } else { + // host name $return[] = array( + array('kind' => 'text', 'text' => _('Host name') . ": "), + array('kind' => 'input', 'name' => 'host-name', 'value' => $this->getDHCPOption('host-name')), + array('kind' => 'help', 'value' => 'host-name')); + $return[] = array( array('kind' => 'text', 'text' => _('Subnet') . ":* "), array('kind' => 'input', 'name' => 'cn', 'value' => $this->attributes['cn'][0]), array('kind' => 'help', 'value' => 'subnet'), @@ -696,7 +709,7 @@ By default, the nodes are configured as H-Nodes which fits for small networks. I * @param String $name option name * @return String value */ - private function getDHCPOption($name) { + public function getDHCPOption($name) { $return = null; if (is_array($this->attributes['dhcpOption'])) { for ($i = 0; $i < sizeof($this->attributes['dhcpOption']); $i++) { @@ -821,6 +834,17 @@ By default, the nodes are configured as H-Nodes which fits for small networks. I // add object class if (!in_array("dhcpOptions", $partialAccounts[$i]['objectClass'])) $partialAccounts[$i]['objectClass'][] = "dhcpOptions"; if (!in_array("dhcpSubnet", $partialAccounts[$i]['objectClass'])) $partialAccounts[$i]['objectClass'][] = "dhcpSubnet"; + // host name + if ($rawAccounts[$i][$ids['dhcp_settings_host-name']] != '') { + if (get_preg($rawAccounts[$i][$ids['dhcp_settings_host-name']], 'hostname')) { + $partialAccounts[$i]['dhcpOption'][] = 'host-name "' . $rawAccounts[$i][$ids['dhcp_settings_host-name']] . '"'; + } + else { + $error = $this->messages['host-name'][1]; + array_push($error, $i); + $messages[] = $error; + } + } // subnet if (check_ip($rawAccounts[$i][$ids['dhcp_settings_subnet']],true)) { $partialAccounts[$i]['cn'] = $rawAccounts[$i][$ids['dhcp_settings_subnet']];