additional check for subnet mask

This commit is contained in:
Roland Gruber 2010-01-30 14:29:40 +00:00
parent 14882104c2
commit e52a4f4cc0
1 changed files with 22 additions and 3 deletions

View File

@ -4,7 +4,7 @@ $Id$
This code is part of LDAP Account Manager (http://www.ldap-account-manager.org/)
Copyright (C) 2008 Thomas Manninger
2008 -2009 Roland Gruber
2008 -2010 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
@ -94,7 +94,6 @@ class dhcp_settings extends baseModule {
}
public function get_metaData() {
$return = array();
// manages host accounts
$return["account_types"] = array("dhcp");
@ -472,7 +471,7 @@ By default, the nodes are configured as H-Nodes which fits for small networks. I
if ($this->getAccountContainer()->dn_orig!=$_SESSION['config']->get_suffix('dhcp')) {
// Check subnet
$_POST['subnet'] = trim($_POST['subnet']);
if (!check_ip($_POST['subnet'], true)) {
if (!$this->checkSubnetMask($_POST['subnet'])) {
$errors[] = $this->messages['subnet'][0];
}
$this->setDHCPOption('subnet-mask', $_POST['subnet']);
@ -487,6 +486,26 @@ By default, the nodes are configured as H-Nodes which fits for small networks. I
return $errors;
}
/**
* Checks if the subnet mask is valid.
*
* @param String $mask subnet mask
* @return boolean correct or incorrect
*/
private function checkSubnetMask($mask) {
// check basic format
if (!check_ip($mask, true)) {
return false;
}
// check if bit order is 11...00...
$parts = explode('.', $mask);
$bits = '';
for ($i = 0; $i < sizeof($parts); $i++) {
$bits .= decbin($parts[$i]);
}
return preg_match('/^1*0*$/', $bits);
}
/**
* Calculates the net mask from the subnet.
*