This commit is contained in:
Mateusz Gruszczyński committed 2026-10-09 13:11:33 +02:00
1 parent f87eec7287
commit dd8c195600
38 files changed
+5491 -4682

No files matched your search

+73 -50
View File
@@ -1,3 +1,72 @@
impl Php {
pub fn validate(&mut self) -> Result<()> {
ensure!(
self.extensions.len() <= MAX_PHP_EXTENSIONS,
"Web Service PHP allows at most 16 extensions"
);
self.extensions = normalize_extensions(
std::mem::take(&mut self.extensions),
"Web Service PHP extension",
)?;
self.endpoint = self.endpoint.trim().to_owned();
ensure!(
self.connect_timeout_ms >= 50 && self.connect_timeout_ms <= 60_000,
"Web Service PHP connect timeout must be 50..60000 ms"
);
ensure!(
self.request_timeout_ms >= 100 && self.request_timeout_ms <= 3_600_000,
"Web Service PHP request timeout must be 100..3600000 ms"
);
ensure!(
(1..=4096).contains(&self.max_concurrent_requests),
"Web Service PHP max concurrent requests must be 1..4096"
);
ensure!(
self.max_request_body_bytes <= 8_u64 * 1024 * 1024 * 1024,
"Web Service PHP request body limit must be 0..8589934592 bytes"
);
ensure!(
self.max_response_header_bytes >= 4096
&& self.max_response_header_bytes <= 1024 * 1024,
"Web Service PHP response header limit must be 4096..1048576 bytes"
);
ensure!(
self.stderr_log_bytes <= 64 * 1024,
"Web Service PHP stderr log limit must be 0..65536 bytes"
);
self.custom_params = normalize_fastcgi_params(std::mem::take(&mut self.custom_params))?;
self.php_values = normalize_php_values(std::mem::take(&mut self.php_values))?;
self.php_admin_values = normalize_php_values(std::mem::take(&mut self.php_admin_values))?;
ensure!(!self.php_values.keys().any(|key| self.php_admin_values.contains_key(key)), "PHP_VALUE and PHP_ADMIN_VALUE must not define the same directive");
let php_custom_bytes = self
.custom_params
.iter()
.chain(self.php_values.iter())
.chain(self.php_admin_values.iter())
.map(|(name, value)| name.len() + value.len() + 2)
.sum::<usize>();
ensure!(
php_custom_bytes <= 128 * 1024,
"Web Service PHP custom FastCGI/PHP_VALUE data must be at most 128 KiB"
);
if self.enabled {
ensure!(!self.extensions.is_empty(), "PHP-FPM needs executable extensions");
FastCgiEndpoint::parse(&self.endpoint)?;
}
Ok(())
}
}
impl PhpFpmProfile {
pub fn validate(&mut self) -> Result<()> {
ensure!(crate::config::valid_id(&self.id), "invalid PHP-FPM profile id");
self.name = self.name.trim().to_owned();
ensure!(!self.name.is_empty() && self.name.len() <= MAX_SERVICE_NAME_BYTES
&& !self.name.chars().any(char::is_control), "PHP-FPM profile name is invalid");
self.php.validate()
}
}
impl Service {
pub fn validate(&mut self) -> Result<()> {
ensure!(crate::config::valid_id(&self.id), "invalid Web Service id");
@@ -206,56 +275,10 @@ impl Service {
"Web Service download extension",
)?;
ensure!(
self.php.extensions.len() <= MAX_PHP_EXTENSIONS,
"Web Service PHP allows at most 16 extensions"
);
self.php.extensions = normalize_extensions(
std::mem::take(&mut self.php.extensions),
"Web Service PHP extension",
)?;
self.php.endpoint = self.php.endpoint.trim().to_owned();
ensure!(
self.php.connect_timeout_ms >= 50 && self.php.connect_timeout_ms <= 60_000,
"Web Service PHP connect timeout must be 50..60000 ms"
);
ensure!(
self.php.request_timeout_ms >= 100 && self.php.request_timeout_ms <= 3_600_000,
"Web Service PHP request timeout must be 100..3600000 ms"
);
ensure!(
(1..=4096).contains(&self.php.max_concurrent_requests),
"Web Service PHP max concurrent requests must be 1..4096"
);
ensure!(
self.php.max_request_body_bytes <= 8_u64 * 1024 * 1024 * 1024,
"Web Service PHP request body limit must be 0..8589934592 bytes"
);
ensure!(
self.php.max_response_header_bytes >= 4096
&& self.php.max_response_header_bytes <= 1024 * 1024,
"Web Service PHP response header limit must be 4096..1048576 bytes"
);
ensure!(
self.php.stderr_log_bytes <= 64 * 1024,
"Web Service PHP stderr log limit must be 0..65536 bytes"
);
self.php.custom_params = normalize_fastcgi_params(std::mem::take(&mut self.php.custom_params))?;
self.php.php_values = normalize_php_values(std::mem::take(&mut self.php.php_values))?;
self.php.php_admin_values = normalize_php_values(std::mem::take(&mut self.php.php_admin_values))?;
ensure!(!self.php.php_values.keys().any(|key| self.php.php_admin_values.contains_key(key)), "PHP_VALUE and PHP_ADMIN_VALUE must not define the same directive");
let php_custom_bytes = self
.php
.custom_params
.iter()
.chain(self.php.php_values.iter())
.chain(self.php.php_admin_values.iter())
.map(|(name, value)| name.len() + value.len() + 2)
.sum::<usize>();
ensure!(
php_custom_bytes <= 128 * 1024,
"Web Service PHP custom FastCGI/PHP_VALUE data must be at most 128 KiB"
);
self.php.validate()?;
if let Some(id) = &self.php_profile_id {
ensure!(crate::config::valid_id(id), "invalid PHP-FPM profile reference");
}
htaccess::validate(&mut self.htaccess)?;
if self.php.enabled {