Skip to content

Commit

Permalink
Merge pull request #1497 from RaspAP/fix/static-leases
Browse files Browse the repository at this point in the history
Validate static leases input
  • Loading branch information
billz authored Jan 13, 2024
2 parents c594b8f + e5c7ca4 commit bb23dc7
Show file tree
Hide file tree
Showing 4 changed files with 66 additions and 3 deletions.
8 changes: 8 additions & 0 deletions app/js/custom.js
Original file line number Diff line number Diff line change
Expand Up @@ -468,6 +468,14 @@ $(document).ready(function(){
},
placeholder: "___.___.___.___"
});
$('.date').mask('FF:FF:FF:FF:FF:FF', {
translation: {
"F": {
pattern: /[0-9a-z]/, optional: true
}
},
placeholder: "__:__:__:__:__:__"
});
});

$('#wg-upload,#wg-manual').on('click', function (e) {
Expand Down
42 changes: 40 additions & 2 deletions includes/dhcp.php
Original file line number Diff line number Diff line change
Expand Up @@ -108,9 +108,18 @@ function saveDHCPConfig($status)
return false;
}

if (($_POST['dhcp-iface'] == "1")) {
$return = updateDnsmasqConfig($iface,$status);
if (($_POST['dhcp-iface'] == "1") || (isset($_POST['mac']))) {
$errors = validateDnsmasqInput();
if (empty($errors)) {
$return = updateDnsmasqConfig($iface,$status);
} else {
foreach ($errors as $error) {
$status->addMessage($error, 'danger');
}
$return = 1;
}
}

if ($return == 0) {
$status->addMessage('Dnsmasq configuration updated successfully.', 'success');
} else {
Expand Down Expand Up @@ -179,6 +188,34 @@ function compareIPs($ip1, $ip2)
return $ipu1 > $ipu2;
}

/**
* Validates Dnsmasq user input from the $_POST object
*
* @return array $errors
*/
function validateDnsmasqInput()
{
$errors = [];
$encounteredIPs = [];

if (isset($_POST["static_leases"]["mac"])) {
for ($i=0; $i < count($_POST["static_leases"]["mac"]); $i++) {
$mac = trim($_POST["static_leases"]["mac"][$i]);
$ip = trim($_POST["static_leases"]["ip"][$i]);
if (!validateMac($mac)) {
$errors[] = _('Invalid MAC address: '.$mac);
}
if (in_array($ip, $encounteredIPs)) {
$errors[] = _('Duplicate IP address entered: ' . $ip);
} else {
$encounteredIPs[] = $ip;
}
}
}
return $errors;
}


/**
* Updates a dnsmasq configuration
*
Expand All @@ -188,6 +225,7 @@ function compareIPs($ip1, $ip2)
*/
function updateDnsmasqConfig($iface,$status)
{

$config = '# RaspAP '.$iface.' configuration'.PHP_EOL;
$config .= 'interface='.$iface.PHP_EOL.'dhcp-range='.$_POST['RangeStart'].','.$_POST['RangeEnd'].','.$_POST['SubnetMask'].',';
if ($_POST['RangeLeaseTimeUnits'] !== 'i') {
Expand Down
17 changes: 17 additions & 0 deletions includes/functions.php
Original file line number Diff line number Diff line change
Expand Up @@ -780,6 +780,23 @@ function validate_host($host)
return preg_match('/^([a-z\d](-*[a-z\d])*)(\.([a-z\d](-*[a-z\d])*))*$/i', $host);
}

/**
* Validates a MAC address
*
* @param string $mac
* @return bool
*/
function validateMac($mac) {
$macAddress = strtoupper(preg_replace('/[^a-fA-F0-9]/', '', $mac));
if (strlen($macAddress) !== 12) {
return false;
}
if (!ctype_xdigit($macAddress)) {
return false;
}
return true;
}

// Gets night mode toggle value
// @return boolean
function getNightmode()
Expand Down
2 changes: 1 addition & 1 deletion templates/dhcp/static_leases.php
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@

<div class="row dhcp-static-lease-row js-new-dhcp-static-lease">
<div class="col-md-4 col-xs-3">
<input type="text" name="mac" value="" placeholder="<?php echo _("MAC address") ?>" class="form-control" autofocus="autofocus">
<input type="text" name="mac" value="" placeholder="<?php echo _("MAC address") ?>" class="form-control date" autofocus="autofocus">
</div>
<div class="col-md-3 col-xs-3">
<input type="text" name="ip" value="" placeholder="<?php echo _("IP address") ?>" class="form-control ip_address" maxlength="15">
Expand Down

0 comments on commit bb23dc7

Please sign in to comment.