summaryrefslogtreecommitdiff
path: root/src
Commit message (Collapse)AuthorAgeFilesLines
* libotutil: avoid leaking builder memory on errorLuca BRUNO2022-01-101-4/+4
| | | | | | | | | This swaps the order of a couple of input sanity checks, in order to fix a minor memory leak due to an early-return on the error path. Memory for the result is now allocated only after input has been sanity-checked. It fixes a static analysis warning highlighted by Coverity.
* rofiles-fuse: Build using FUSE 3 if possible, falling back to FUSE 2Simon McVittie2022-01-041-2/+47
| | | | | | | | This adds build-time configuration logic to automatically detect and switch between libfuse 2.x and 3.x. Signed-off-by: Simon McVittie <smcv@collabora.com> Co-authored-by: Luca BRUNO <luca.bruno@coreos.com>
* lib/static-delta: throw a proper error on bspatch failureLuca BRUNO2022-01-031-1/+1
| | | | | This makes sure that a populated GError is returned when bsdiff patching fails. The human-friendly label also helps in debugging.
* lib: use ostree-content-writer headerLuca BRUNO2022-01-031-0/+1
| | | | | | This installs and exposes the content of `ostree-content-writer.h`, so that library consumers can properly reference symbols defined in that header.
* soup-uri: Fix clang-analyzer warning by dropping dead codeColin Walters2021-12-211-45/+0
| | | | | | | | Fixes `Argument with 'nonnull' attribute passed null` by making the code not exist at all anymore. In upstream libsoup this code is gone too; it uses `GUri` from glib which we probably could now too, but one thing at a time.
* main: add support for CLI extensions via external binariesLuca BRUNO2021-12-203-16/+112
| | | | | | | | | | This adds some logic to detect and dispatch unknown subcommands to extensions available in `$PATH`. Additional commands can be implemented by adding relevant `ostree-$verb` binaries to the system. As an example, if a `/usr/bin/ostree-extcommand` extension is provided, the execution of `ostree extcommand --help` will be dispatched to that as `ostree-extcommand extcommand --help`.
* Merge pull request #2496 from lucab/ups/repo-assertsColin Walters2021-12-071-4/+9
|\ | | | | lib/repo: fix problematic invariant checks
| * lib/repo: do no return a NULL on failureLuca BRUNO2021-12-071-2/+4
| | | | | | | | | | | | This turns an existing check into an assert. The previously returned NULL may result in confusing callers, as none of them is checking for that.
| * lib/repo: do no return an arbitrary mode on failureLuca BRUNO2021-12-071-1/+2
| | | | | | | | | | This turns the existing check into an assert. Otherwise, the previous code may return an arbitrary repo mode (bare) on failure.
| * lib/repo: assert that writable state and error agreeLuca BRUNO2021-12-071-1/+3
| | | | | | | | | | This adds an assertion to check that writable stable and error are in sync. The subsequent logic uses them interchangeably.
* | Merge pull request #2494 from jmarrero/fsf-addressColin Walters2021-12-07238-714/+238
|\ \ | |/ |/| Update FSF license notices to use URL instead of address
| * Update FSF license notices to use URL instead of addressJoseph Marrero2021-12-07238-714/+238
| |
* | repo: Change locking for summary regeneration to be sharedColin Walters2021-12-031-8/+2
|/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is trying to address: https://pagure.io/fedora-iot/issue/48 Basically we changed rpm-ostree to start doing a shared lock during commit by default, but this broke because pungi is starting a process doing a commit for each architecture, and then trying to regenerate the summary after each one. This patch is deleting a big comment with a rationale for why summary regeneration should be exclusive. Point by point: > This makes sure the commits and deltas don't get > deleted while generating the summary. But prune operations require an exclusive lock, which means that data still can't be deleted when the summary grabs a shared lock. > It also means we can be sure refs > won't be created/updated/deleted during the operation, without having to > add exclusive locks to those operations which would prevent concurrent > commits from working. First: The status quo *has* prevented concurrent commits from working! There is no real locking solution to this problem. What we really need to do here is regenerate the summary after each commit *or* when the caller decides to do it and e.g. include deltas at the same time. It's OK if multiple threads race to regenerate the summary; last-one-wins behavior here is totally fine.
* lib: misc static analysis fixesLuca BRUNO2021-11-262-3/+3
| | | | | This fixes a few warnings from coverity, none of which really interesting.
* app: Only remount /sysroot if neededJonathan Lebon2021-11-191-17/+41
| | | | | | | | We should only try to remount `/sysroot` if we're actually handling the sysroot repo and the repo isn't writable. We already have public APIs to check each of those, so let's use them. Closes: #2485
* lib/prune: Avoid unnecessary object serializationDan Nicholson2021-11-181-12/+9
| | | | | | `repo_prune_internal` was deserializing each object and passing the components to `maybe_prune_loose_object`, which promptly reserialized it.
* lib: Avoid dereferencing NULL error valuesRyan Gonzalez2021-11-122-6/+16
| | | | | | Otherwise, this will segfault when callers don't need any exact errors. Signed-off-by: Ryan Gonzalez <ryan.gonzalez@collabora.com>
* Merge pull request #2476 from valentindavid/valentindavid/glib-fixColin Walters2021-11-091-1/+1
|\ | | | | lib: Fix a bad call to g_file_get_child
| * lib: Fix a bad call to g_file_get_childValentin David2021-11-031-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In Glib, since commit 3a6e8bc8876e149c36b6b14c6a25a718edb581ed, `g_file_get_child` does not accept absolute path as paramater anymore. The broken assertion was encountered during `ostree admin deploy` command for the checkout of subpath `etc`. Example of error log: ``` (ostree admin deploy:1640): GLib-GIO-CRITICAL **: 03:42:00.570: g_file_get_child: assertion '!g_path_is_absolute (name)' failed (ostree admin deploy:1640): GLib-GIO-CRITICAL **: 03:42:00.570: g_file_query_info: assertion 'G_IS_FILE (file)' failed ** OSTree:ERROR:src/ostree/ot-main.c:232:ostree_run: assertion failed: (success || error) Bail out! OSTree:ERROR:src/ostree/ot-main.c:232:ostree_run: assertion failed: (success || error) ```
* | prepare-root: Set up sysroot readonly in initramfsColin Walters2021-11-031-24/+66
|/ | | | | | | | Let's ensure things are right from the start in the initramfs; this closes off various race conditions. Followup to https://github.com/ostreedev/ostree/pull/2113/commits/35642259175973617da937f3cab6ce5f13c95077 Closes: https://github.com/ostreedev/ostree/issues/2115
* prepare-root: check for read-only sysroot status early onLuca BRUNO2021-11-011-14/+14
| | | | | | | | This moves read-only sysroot checks upfront, so that they are not intermixed with mount operations. It has no immediate side-effects, but allow these check to be independent from the rest of the mounting logic (and future changes to it).
* Merge pull request #2472 from lucab/ups/prepare-root-checked-printfJonathan Lebon2021-10-261-3/+6
|\
| * prepare-root: check return codes for errors when assembling pathsLuca BRUNO2021-10-261-3/+6
| | | | | | | | | | This adds checks around all `snprintf` calls in order to detect failures and gracefully abort.
* | prepare-root: get rid of a global variableLuca BRUNO2021-10-261-4/+1
|/ | | | | This moves a global mutable variable to a smaller local scope, as it is not really used outside of that.
* prepare-root: make all mount operations silentLuca BRUNO2021-10-261-13/+13
| | | | | | | This adds a `MS_SILENT` flag to all `mount(2)` calls, reducing the amount of kernel logs produced on each boot. Those messages do not contain actionable details, and in the "mount plus read-only remount" case they can easily become highly redundant.
* Merge pull request #2463 from cgwalters/fix-fanalyzerLuca Bruno2021-10-147-19/+25
|\ | | | | Fix various mostly theoretical gcc `-fanalyzer` issues
| * variantutil: Fix gcc `-fanalyzer` warninColin Walters2021-10-131-8/+7
| | | | | | | | | | Add some not-NULL assertions for return values from glib, and upgrade some `g_return_if_fail` to `g_assert`.
| * utils: Fix unreachable `NULL` deref by adding assertionColin Walters2021-10-131-2/+5
| | | | | | | | Again this one is just in theory, but let's add an assertion.
| * static-delta: Fix probably not actually possible NULL derefColin Walters2021-10-131-1/+1
| | | | | | | | | | | | Flagged by `gcc -fanalyzer`. I didn't study this really deeply but I think it's not actually reachable. Anyways, let's catch it on general principle.
| * fetcher/soup: Fix gcc `-fanalyzer` warningColin Walters2021-10-131-1/+1
| | | | | | | | | | | | | | | | | | In general, we're probably going to need to change most of our `g_return_if_fail` to `g_assert`. The analyzer flags that the function can return `NULL`, but the caller isn't prepared for this. In practice, let's abort.
| * sysroot: Fix gcc `-fanalyzer` warningColin Walters2021-10-131-2/+6
| | | | | | | | | | | | | | | | | | In general, we're probably going to need to change most of our `g_return_if_fail` to `g_assert`. The analyzer flags that the function can return `NULL`, but the caller isn't prepared for this. In practice, let's abort.
| * deployment: Fix gcc `-fanalyzer` warningColin Walters2021-10-131-3/+3
| | | | | | | | | | | | | | | | | | In general, we're probably going to need to change most of our `g_return_if_fail` to `g_assert`. The analyzer flags that the function can return `NULL`, but the caller isn't prepared for this. In practice, let's abort.
| * remote: Fix gcc `-fanalyzer` warningColin Walters2021-10-131-2/+2
| | | | | | | | | | | | | | | | | | In general, we're probably going to need to change most of our `g_return_if_fail` to `g_assert`. The analyzer flags that the function can return `NULL`, but the caller isn't prepared for this. In practice, let's abort.
* | repo/private: move OstreeRepoAutoTransaction to a boxed typeLuca BRUNO2021-10-112-16/+51
|/ | | | | | | This defines `OstreeRepoAutoTransaction` as a boxed type, in order to support auto-generating bindings for it. That first requires adding internal reference-counting to it, to allow freely copying/freeing references to a single transaction guard.
* prepare-root: tweak log messages to clarify errorsLuca BRUNO2021-10-071-4/+13
| | | | | | | | This rewords errors and log messages in the functions which take care of preparing sysroot in initramfs. Depending on the boot flow, it is possible to reach this logic with a sysroot mounted (unexpectedly) as read-only. In that case, let's clearly point out the problematic mountpoint.
* Remove OstreeTlsCertInteraction bits from introspectionColin Walters2021-10-063-2/+2
| | | | | | | | We filter out everything named `-private.h` from scanning, which differs from the gtk-doc exclude. Eventually this will be solved when we switch to the new gir-based docs. Came up in https://github.com/ostreedev/ostree-rs/pull/34#discussion_r723337772
* Release 2021.5v2021.5Colin Walters2021-10-052-6/+6
|
* Merge pull request #2449 from cgwalters/mtree-from-commitJonathan Lebon2021-10-054-9/+46
|\
| * lib: Add an API to construct a `MutableTree` from a commitColin Walters2021-10-014-9/+46
| | | | | | | | | | | | | | This is nicer than having the caller parse the commit object, or indirect via the `OstreeRepoFile*` object of the root. Will be used in ostree-rs-ext around tar parsing.
* | Merge pull request #2454 from lucab/ups/auto-txn-completeColin Walters2021-10-054-35/+156
|\ \ | | | | | | repo/private: allow committing/aborting through a transaction guard
| * | repo/private: allow committing/aborting through a transaction guardLuca BRUNO2021-10-054-35/+156
| |/ | | | | | | | | | | | | | | | | This enhances the auto-transaction logic, augmenting the scope of a transaction guard. It allows committing or aborting a transaction through its guard. It also supports tracking the completion status of a transaction guard, avoiding double commits/aborts, while retaining the auto-cleanup logic.
* | deploy: Ignore sockets, fifos in /etc during mergeColin Walters2021-10-011-3/+1
|/ | | | | | | | | | | https://bugzilla.redhat.com/show_bug.cgi?id=1945274 is an issue where a privileged kubernetes daemonset is writing a socket into `/etc`. This makes ostree upgrades barf. Now, they should clearly move it to `/run`. However, one option is for us to just ignore it instead of erroring out. Some brief investigation shows that e.g. `git add somesocket` is a silent no-op, which is an argument in favor of ignoring it. Closes: https://github.com/ostreedev/ostree/issues/2446
* Merge pull request #2447 from cgwalters/sepolicy-for-commitColin Walters2021-09-304-32/+73
|\ | | | | repo: Add an API to init `OstreeSePolicy` from commit directly
| * sepolicy: Add deprecation comment for `_get_path()`Colin Walters2021-09-301-1/+5
| | | | | | | | | | Came up in review https://github.com/ostreedev/ostree/pull/2447#issuecomment-931428312
| * repo: Add an API to init `OstreeSePolicy` from commit directlyColin Walters2021-09-304-31/+68
| | | | | | | | | | | | | | | | | | | | This is part of `OstreeCommitModifier`, but I'm not using that in some of the ostree-ext Rust code. It just makes more sense as a direct policy API, where it should have been in the first place. There's already support for setting a policy object on a commit modifier, so that's all the old API needs to do now.
* | fsck: Print a success messageColin Walters2021-09-301-0/+3
|/ | | | | | | | | There's a general Unix philosophy that "silence is golden". However, when one is explicitly invoking an error check it's nice to see explicit success. We already print various statistics, so ending with a happy note has no extra cost.
* bin/commit: Fix --tree=tar with --selinux-policyColin Walters2021-09-301-7/+12
| | | | | | | | | | | | The logic for `--selinux-policy` ended up in the `--tree=dir` path, but there's no reason for that. Fix the imported labeling with `--tree=tar`. Prep for use with containers. We had this bug because the previous logic was trying to avoid duplicating the code for generic `--selinux-policy` and the case of `--selinux-policy-from-base --tree=dir`. It's a bit more code, but it's cleaner if we dis-entangle them.
* Release 2021.4Colin Walters2021-09-082-6/+7
|
* Merge pull request #2434 from cgwalters/custom-remoteColin Walters2021-09-083-20/+56
|\ | | | | Add support for "custom remotes"
| * Add support for "custom remotes"Colin Walters2021-09-083-20/+56
| | | | | | | | | | | | | | | | | | | | This will be helpful for the "ostree native container" work in https://github.com/ostreedev/ostree-rs-ext/ Basically in order to reuse GPG/signapi verification, we need to support adding a remote, even though it can't be used via `ostree pull`. (At least, not until we merge ostree-rs-ext into ostree, but even then I think the principle stands)