repo: Delete the last use of GFile tmp_dir
The keyring isn't large, so let's just fall back to copying it rather than requiring `renameat()`. Prep for `ostree_repo_open_at()`. Closes: #821 Approved by: jlebon
This commit is contained in:
parent
8d8f06f21b
commit
4f80548454
|
|
@ -116,7 +116,7 @@ _ostree_gpg_verifier_check_signature (OstreeGpgVerifier *self,
|
||||||
if (result == NULL)
|
if (result == NULL)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
if (!ot_gpgme_ctx_tmp_home_dir (result->context, NULL,
|
if (!ot_gpgme_ctx_tmp_home_dir (result->context,
|
||||||
&tmp_dir, &target_stream,
|
&tmp_dir, &target_stream,
|
||||||
cancellable, error))
|
cancellable, error))
|
||||||
goto out;
|
goto out;
|
||||||
|
|
|
||||||
|
|
@ -78,7 +78,6 @@ struct OstreeRepo {
|
||||||
|
|
||||||
GFile *repodir;
|
GFile *repodir;
|
||||||
int repo_dir_fd;
|
int repo_dir_fd;
|
||||||
GFile *tmp_dir;
|
|
||||||
int tmp_dir_fd;
|
int tmp_dir_fd;
|
||||||
int cache_dir_fd;
|
int cache_dir_fd;
|
||||||
char *cache_dir;
|
char *cache_dir;
|
||||||
|
|
|
||||||
|
|
@ -517,7 +517,6 @@ ostree_repo_finalize (GObject *object)
|
||||||
(void) close (self->commit_stagedir_fd);
|
(void) close (self->commit_stagedir_fd);
|
||||||
g_free (self->commit_stagedir_name);
|
g_free (self->commit_stagedir_name);
|
||||||
glnx_release_lock_file (&self->commit_stagedir_lock);
|
glnx_release_lock_file (&self->commit_stagedir_lock);
|
||||||
g_clear_object (&self->tmp_dir);
|
|
||||||
if (self->tmp_dir_fd != -1)
|
if (self->tmp_dir_fd != -1)
|
||||||
(void) close (self->tmp_dir_fd);
|
(void) close (self->tmp_dir_fd);
|
||||||
if (self->cache_dir_fd != -1)
|
if (self->cache_dir_fd != -1)
|
||||||
|
|
@ -605,8 +604,6 @@ ostree_repo_constructed (GObject *object)
|
||||||
|
|
||||||
g_assert (self->repodir != NULL);
|
g_assert (self->repodir != NULL);
|
||||||
|
|
||||||
self->tmp_dir = g_file_resolve_relative_path (self->repodir, "tmp");
|
|
||||||
|
|
||||||
/* Ensure the "sysroot-path" property is set. */
|
/* Ensure the "sysroot-path" property is set. */
|
||||||
if (self->sysroot_dir == NULL)
|
if (self->sysroot_dir == NULL)
|
||||||
self->sysroot_dir = g_object_ref (_ostree_get_default_sysroot_path ());
|
self->sysroot_dir = g_object_ref (_ostree_get_default_sysroot_path ());
|
||||||
|
|
@ -1401,7 +1398,6 @@ ostree_repo_remote_gpg_import (OstreeRepo *self,
|
||||||
ot_auto_gpgme_data gpgme_data_t data_buffer = NULL;
|
ot_auto_gpgme_data gpgme_data_t data_buffer = NULL;
|
||||||
gpgme_import_result_t import_result;
|
gpgme_import_result_t import_result;
|
||||||
gpgme_import_status_t import_status;
|
gpgme_import_status_t import_status;
|
||||||
const char *tmp_dir = NULL;
|
|
||||||
g_autofree char *source_tmp_dir = NULL;
|
g_autofree char *source_tmp_dir = NULL;
|
||||||
g_autofree char *target_tmp_dir = NULL;
|
g_autofree char *target_tmp_dir = NULL;
|
||||||
glnx_fd_close int target_temp_fd = -1;
|
glnx_fd_close int target_temp_fd = -1;
|
||||||
|
|
@ -1409,6 +1405,7 @@ ostree_repo_remote_gpg_import (OstreeRepo *self,
|
||||||
struct stat stbuf;
|
struct stat stbuf;
|
||||||
gpgme_error_t gpg_error;
|
gpgme_error_t gpg_error;
|
||||||
gboolean ret = FALSE;
|
gboolean ret = FALSE;
|
||||||
|
const GLnxFileCopyFlags copyflags = self->disable_xattrs ? GLNX_FILE_COPY_NOXATTRS : 0;
|
||||||
|
|
||||||
g_return_val_if_fail (OSTREE_IS_REPO (self), FALSE);
|
g_return_val_if_fail (OSTREE_IS_REPO (self), FALSE);
|
||||||
g_return_val_if_fail (name != NULL, FALSE);
|
g_return_val_if_fail (name != NULL, FALSE);
|
||||||
|
|
@ -1419,17 +1416,6 @@ ostree_repo_remote_gpg_import (OstreeRepo *self,
|
||||||
if (remote == NULL)
|
if (remote == NULL)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
/* Use OstreeRepo's "tmp" directory so the keyring files remain
|
|
||||||
* under one mount point. Necessary for renameat() below. */
|
|
||||||
|
|
||||||
/* XXX This produces a path under "/proc/self/fd/" which won't
|
|
||||||
* work in a child process so I had to resort to the GFile.
|
|
||||||
* I was trying to avoid the GFile so we can get rid of it.
|
|
||||||
*
|
|
||||||
* tmp_dir = glnx_fdrel_abspath (self->repo_dir_fd, "tmp");
|
|
||||||
*/
|
|
||||||
tmp_dir = gs_file_get_path_cached (self->tmp_dir);
|
|
||||||
|
|
||||||
/* Prepare the source GPGME context. If reading GPG keys from an input
|
/* Prepare the source GPGME context. If reading GPG keys from an input
|
||||||
* stream, point the OpenPGP engine at a temporary directory and import
|
* stream, point the OpenPGP engine at a temporary directory and import
|
||||||
* the keys to a new pubring.gpg file. If the key data format is ASCII
|
* the keys to a new pubring.gpg file. If the key data format is ASCII
|
||||||
|
|
@ -1443,7 +1429,7 @@ ostree_repo_remote_gpg_import (OstreeRepo *self,
|
||||||
{
|
{
|
||||||
data_buffer = ot_gpgme_data_input (source_stream);
|
data_buffer = ot_gpgme_data_input (source_stream);
|
||||||
|
|
||||||
if (!ot_gpgme_ctx_tmp_home_dir (source_context, tmp_dir, &source_tmp_dir,
|
if (!ot_gpgme_ctx_tmp_home_dir (source_context, &source_tmp_dir,
|
||||||
NULL, cancellable, error))
|
NULL, cancellable, error))
|
||||||
{
|
{
|
||||||
g_prefix_error (error, "Unable to configure context: ");
|
g_prefix_error (error, "Unable to configure context: ");
|
||||||
|
|
@ -1526,7 +1512,7 @@ ostree_repo_remote_gpg_import (OstreeRepo *self,
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
/* No need for an output stream since we copy in a pubring.gpg. */
|
/* No need for an output stream since we copy in a pubring.gpg. */
|
||||||
if (!ot_gpgme_ctx_tmp_home_dir (target_context, tmp_dir, &target_tmp_dir,
|
if (!ot_gpgme_ctx_tmp_home_dir (target_context, &target_tmp_dir,
|
||||||
NULL, cancellable, error))
|
NULL, cancellable, error))
|
||||||
{
|
{
|
||||||
g_prefix_error (error, "Unable to configure context: ");
|
g_prefix_error (error, "Unable to configure context: ");
|
||||||
|
|
@ -1541,10 +1527,9 @@ ostree_repo_remote_gpg_import (OstreeRepo *self,
|
||||||
|
|
||||||
if (fstatat (self->repo_dir_fd, remote->keyring, &stbuf, AT_SYMLINK_NOFOLLOW) == 0)
|
if (fstatat (self->repo_dir_fd, remote->keyring, &stbuf, AT_SYMLINK_NOFOLLOW) == 0)
|
||||||
{
|
{
|
||||||
GLnxFileCopyFlags copyflags = self->disable_xattrs ? GLNX_FILE_COPY_NOXATTRS : 0;
|
|
||||||
if (!glnx_file_copy_at (self->repo_dir_fd, remote->keyring,
|
if (!glnx_file_copy_at (self->repo_dir_fd, remote->keyring,
|
||||||
&stbuf, target_temp_fd, "pubring.gpg", copyflags,
|
&stbuf, target_temp_fd, "pubring.gpg",
|
||||||
cancellable, error))
|
copyflags, cancellable, error))
|
||||||
{
|
{
|
||||||
g_prefix_error (error, "Unable to copy remote's keyring: ");
|
g_prefix_error (error, "Unable to copy remote's keyring: ");
|
||||||
goto out;
|
goto out;
|
||||||
|
|
@ -1626,13 +1611,11 @@ ostree_repo_remote_gpg_import (OstreeRepo *self,
|
||||||
|
|
||||||
/* Import successful; replace the remote's old keyring with the
|
/* Import successful; replace the remote's old keyring with the
|
||||||
* updated keyring in the target context's temporary directory. */
|
* updated keyring in the target context's temporary directory. */
|
||||||
|
if (!glnx_file_copy_at (target_temp_fd, "pubring.gpg", NULL,
|
||||||
if (renameat (target_temp_fd, "pubring.gpg",
|
self->repo_dir_fd, remote->keyring,
|
||||||
self->repo_dir_fd, remote->keyring) == -1)
|
copyflags | GLNX_FILE_COPY_OVERWRITE,
|
||||||
{
|
cancellable, error))
|
||||||
glnx_set_prefix_error_from_errno (error, "%s", "Unable to rename keyring");
|
goto out;
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (out_imported != NULL)
|
if (out_imported != NULL)
|
||||||
*out_imported = (guint) import_result->imported;
|
*out_imported = (guint) import_result->imported;
|
||||||
|
|
|
||||||
|
|
@ -67,7 +67,6 @@ ot_gpgme_error_to_gio_error (gpgme_error_t gpg_error,
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
ot_gpgme_ctx_tmp_home_dir (gpgme_ctx_t gpgme_ctx,
|
ot_gpgme_ctx_tmp_home_dir (gpgme_ctx_t gpgme_ctx,
|
||||||
const char *tmp_dir,
|
|
||||||
char **out_tmp_home_dir,
|
char **out_tmp_home_dir,
|
||||||
GOutputStream **out_pubring_stream,
|
GOutputStream **out_pubring_stream,
|
||||||
GCancellable *cancellable,
|
GCancellable *cancellable,
|
||||||
|
|
@ -85,10 +84,7 @@ ot_gpgme_ctx_tmp_home_dir (gpgme_ctx_t gpgme_ctx,
|
||||||
* and hand the caller an open output stream to concatenate necessary
|
* and hand the caller an open output stream to concatenate necessary
|
||||||
* keyring files. */
|
* keyring files. */
|
||||||
|
|
||||||
if (tmp_dir == NULL)
|
tmp_home_dir = g_build_filename (g_get_tmp_dir (), "ostree-gpg-XXXXXX", NULL);
|
||||||
tmp_dir = g_get_tmp_dir ();
|
|
||||||
|
|
||||||
tmp_home_dir = g_build_filename (tmp_dir, "ostree-gpg-XXXXXX", NULL);
|
|
||||||
|
|
||||||
if (mkdtemp (tmp_home_dir) == NULL)
|
if (mkdtemp (tmp_home_dir) == NULL)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,6 @@ GLNX_DEFINE_CLEANUP_FUNCTION0(gpgme_ctx_t, ot_cleanup_gpgme_ctx, gpgme_release)
|
||||||
void ot_gpgme_error_to_gio_error (gpgme_error_t gpg_error, GError **error);
|
void ot_gpgme_error_to_gio_error (gpgme_error_t gpg_error, GError **error);
|
||||||
|
|
||||||
gboolean ot_gpgme_ctx_tmp_home_dir (gpgme_ctx_t gpgme_ctx,
|
gboolean ot_gpgme_ctx_tmp_home_dir (gpgme_ctx_t gpgme_ctx,
|
||||||
const char *tmp_dir,
|
|
||||||
char **out_tmp_home_dir,
|
char **out_tmp_home_dir,
|
||||||
GOutputStream **out_pubring_stream,
|
GOutputStream **out_pubring_stream,
|
||||||
GCancellable *cancellable,
|
GCancellable *cancellable,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue