cron: handle missing job during deletion (#10773)
* cron: handle missing job during deletion
* Update src/opnsense/mvc/app/controllers/OPNsense/Cron/Api/SettingsController.php
Co-authored-by: Ad Schellevis <AdSchellevis at users.noreply.github.com>
---------
Co-authored-by: Ad Schellevis <AdSchellevis at users.noreply.github.com>
[libc][math] Integer-only, statically rounded implementation of expf (#209406)
Integer-only, statically rounded implementation of `expf`, using 1
single `Frac64`-based pipeline
# Accuracy
All unit, smoke, and exhaustive tests against
`LIBC_NAMESPACE::shared::expf` pass for all rounding modes.
# Code size:
> [!NOTE]
> The report below are from the`armv8m.main-none-eabi` triple.
## Before the patch
```sh
$ ls -lB libc/src/math/generic/CMakeFiles/libc.src.math.generic.expf.dir/
[68 lines not shown]
cad/freecad-devel: Mark BROKEN
Fails to build,
"The Addon Manager requires the Python package 'defusedxml', which was not found"
Reported by: pkg-fallout
Force ACL application on app-owned ix-volume paths
## Problem
Enabling an ACL on an ix-volume of an installed app fails with `path contains existing data and 'force' was not specified`. The served schema hides the `force` flag for ix-volumes and defaults it to true, but clients can still submit an explicit false, and middleware then faithfully applies it - so the guard trips as soon as the app has written anything into its own volume, which is almost immediately after install. A false which has already been persisted is worse: on the next update validation rejects the config before normalization ever gets a chance to correct it.
## Solution
Add an `is_app_volume_path` helper and use it at the two places the same root cause surfaces. Both gates are structural - they hang off the ix-volume node itself rather than off what a path string happens to look like, because the two call sites are shared with host path ACLs and because an ix-volume's path is not final until the ix-volume ref has run.
**Normalization** - `normalize_ix_volume` stamps `force` to true right after it computes the volume's host path, in place, so the dict which gets written back to the app config agrees with the ACL which was actually applied and a stored false heals itself. Doing it there rather than in `normalize_acl` matters twice over: `normalize_acl` is also reached by `host_path_config.acl`, which must keep its data-loss guard, and for volumes whose `acl_entries` carries its own `normalize/acl` ref the child is normalized while descending, before the parent has re-pointed the path - a decision taken then would outlive the re-point. `dataset_name` is not validated as a path anywhere, so the containment check is what stops an absolute or `..`-laden one from steering the clamp onto somebody else's data.
**Validation** - `validate_question` threads a flag marking whether a node sits under a `normalize/ix_volume` parent, and `validate_acl_entries` skips the existing-data probe only for a contained path on such a node. It only skips, never mutates. The exemption is permanent rather than transitional: a volume with its ACL disabled keeps a persisted path and whatever force value was stored with it, and normalization ignores it because it has no entries, so without the skip that config stays unsavable forever.
The app name is threaded from `normalize_and_validate_values` through validation rather than read off `app_data`, which is None on create - and on create the volume datasets do not exist yet, so probing a real path there would raise a spurious `path does not exist`.