mirror of
https://github.com/billz/raspap-webgui.git
synced 2025-07-21 11:38:01 +02:00
Merge pull request #1853 from RaspAP/fix/dhcpcd-handling
Refactor dhcpcd.conf handling w/ updateDhcpcdConfig()
This commit is contained in:
commit
1ee80b0572
@ -399,17 +399,11 @@ function SaveHostAPDConfig($wpa_array, $enc_types, $modes, $interfaces, $reg_dom
|
|||||||
$config[] = 'static ip_address='.$ip_address;
|
$config[] = 'static ip_address='.$ip_address;
|
||||||
$config[] = 'nohook wpa_supplicant';
|
$config[] = 'nohook wpa_supplicant';
|
||||||
$config[] = PHP_EOL;
|
$config[] = PHP_EOL;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
$def_ip = array();
|
$config = updateDhcpcdConfig($ap_iface, $jsonData, $ip_address, $routers, $domain_name_server);
|
||||||
$config = [ '# RaspAP '.$ap_iface.' configuration' ];
|
|
||||||
$config[] = 'interface '.$ap_iface;
|
|
||||||
$config[] = 'static ip_address='.$ip_address;
|
|
||||||
$config[] = 'static routers='.$routers;
|
|
||||||
$config[] = 'static domain_name_server='.$domain_name_server;
|
|
||||||
if (!empty($jsonData['Metric'])) {
|
|
||||||
$config[] = 'metric ' . $jsonData['Metric'];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$dhcp_cfg = file_get_contents(RASPI_DHCPCD_CONFIG);
|
$dhcp_cfg = file_get_contents(RASPI_DHCPCD_CONFIG);
|
||||||
|
|
||||||
$skip_dhcp = false;
|
$skip_dhcp = false;
|
||||||
@ -534,6 +528,70 @@ function updateHostapdConfig($ignore_broadcast_ssid,$wifiAPEnable,$bridgedEnable
|
|||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updates the dhcpcd configuration for a given interface, preserving existing settings
|
||||||
|
*
|
||||||
|
* @param string $ap_iface
|
||||||
|
* @param array $jsonData
|
||||||
|
* @param string $ip_address
|
||||||
|
* @param string $routers
|
||||||
|
* @param string $domain_name_server
|
||||||
|
* @return array updated configuration
|
||||||
|
*/
|
||||||
|
function updateDhcpcdConfig($ap_iface, $jsonData, $ip_address, $routers, $domain_name_server) {
|
||||||
|
$dhcp_cfg = file_get_contents(RASPI_DHCPCD_CONFIG);
|
||||||
|
$existing_config = [];
|
||||||
|
$section_regex = '/^#\sRaspAP\s'.preg_quote($ap_iface, '/').'\s.*?(?=\s*^\s*$)/ms';
|
||||||
|
|
||||||
|
// extract existing interface configuration
|
||||||
|
if (preg_match($section_regex, $dhcp_cfg, $matches)) {
|
||||||
|
$lines = explode(PHP_EOL, $matches[0]);
|
||||||
|
foreach ($lines as $line) {
|
||||||
|
$line = trim($line);
|
||||||
|
if (preg_match('/^(interface|static|metric|nogateway|nohook)/', $line)) {
|
||||||
|
$existing_config[] = $line;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// initialize with comment
|
||||||
|
$config = [ '# RaspAP '.$ap_iface.' configuration' ];
|
||||||
|
$config[] = 'interface '.$ap_iface;
|
||||||
|
$static_settings = [
|
||||||
|
'static ip_address' => $ip_address,
|
||||||
|
'static routers' => $routers,
|
||||||
|
'static domain_name_server' => $domain_name_server
|
||||||
|
];
|
||||||
|
|
||||||
|
// merge existing settings with updates
|
||||||
|
foreach ($existing_config as $line) {
|
||||||
|
$matched = false;
|
||||||
|
foreach ($static_settings as $key => $value) {
|
||||||
|
if (strpos($line, $key) === 0) {
|
||||||
|
$config[] = "$key=$value";
|
||||||
|
$matched = true;
|
||||||
|
unset($static_settings[$key]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!$matched && !preg_match('/^interface/', $line)) {
|
||||||
|
$config[] = $line;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// add any new static settings
|
||||||
|
foreach ($static_settings as $key => $value) {
|
||||||
|
$config[] = "$key=$value";
|
||||||
|
}
|
||||||
|
|
||||||
|
// add metric if provided
|
||||||
|
if (!empty($jsonData['Metric']) && !in_array('metric '.$jsonData['Metric'], $config)) {
|
||||||
|
$config[] = 'metric '.$jsonData['Metric'];
|
||||||
|
}
|
||||||
|
|
||||||
|
return $config;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Executes iw to set the specified ISO 2-letter country code
|
* Executes iw to set the specified ISO 2-letter country code
|
||||||
*
|
*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user