commit:     6f306b5427a214986062213e35c965ffbc25ebbe
Author:     Fabian Groffen <grobian <AT> gentoo <DOT> org>
AuthorDate: Wed Aug 20 16:44:46 2025 +0000
Commit:     Fabian Groffen <grobian <AT> gentoo <DOT> org>
CommitDate: Wed Aug 20 16:44:46 2025 +0000
URL:        https://gitweb.gentoo.org/proj/portage-utils.git/commit/?id=6f306b54

qpkg: fix cleaning up tmpdir

Signed-off-by: Fabian Groffen <grobian <AT> gentoo.org>

 qpkg.c | 16 +++++++---------
 1 file changed, 7 insertions(+), 9 deletions(-)

diff --git a/qpkg.c b/qpkg.c
index 6b71eed..0c4e2ec 100644
--- a/qpkg.c
+++ b/qpkg.c
@@ -270,7 +270,7 @@ qgpkg_make(tree_pkg_ctx *pkg)
                return -1;
 
        snprintf(tmpdir, sizeof(tmpdir), "%s/qpkg.XXXXXX", qpkg_bindir);
-       mask = umask(0077);
+       mask = umask(S_IRWXG | S_IRWXO);
        i = mkstemp(tmpdir);
        umask(mask);
        if (i == -1)
@@ -290,6 +290,7 @@ qgpkg_make(tree_pkg_ctx *pkg)
                printf("%sFAIL%s\n", RED, NORM);
                return -4;
        }
+       fchmod(mfd, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
 
        /* we first 1. create metadata (vdb), 2. image (actual data) and
         * then 3. the container gpkg image */
@@ -315,8 +316,8 @@ qgpkg_make(tree_pkg_ctx *pkg)
                }
 
                entry = archive_entry_new();
-               snprintf(buf, sizeof(buf), "metadata/%s", files[i]->d_name);
-               archive_entry_set_pathname(entry, buf);
+               snprintf(ename, sizeof(ename), "metadata/%s", files[i]->d_name);
+               archive_entry_set_pathname(entry, ename);
                archive_entry_set_size(entry, st.st_size);
                archive_entry_set_mtime(entry, st.st_mtime, 0);
                archive_entry_set_filetype(entry, AE_IFREG);
@@ -364,8 +365,8 @@ qgpkg_make(tree_pkg_ctx *pkg)
                }
 
                entry = archive_entry_new();
-               snprintf(buf, sizeof(buf), "image/%s", e->name + 1);
-               archive_entry_set_pathname(entry, buf);
+               snprintf(ename, sizeof(ename), "image/%s", e->name + 1);
+               archive_entry_set_pathname(entry, ename);
                archive_entry_set_size(entry, st.st_size);
                archive_entry_set_mtime(entry, st.st_mtime, 0);
                archive_entry_set_filetype(entry, st.st_mode & S_IFMT);
@@ -419,7 +420,6 @@ qgpkg_make(tree_pkg_ctx *pkg)
                close(fd);
                archive_entry_free(entry);
        }
-       unlink(buf);
        /* 3.3 TODO: with gpgme write metadata signature */
        /* 3.4 the filesystem image archive image.tar${comp} */
        snprintf(buf, sizeof(buf), "%s/image.tar%s", tmpdir, filter);
@@ -440,7 +440,6 @@ qgpkg_make(tree_pkg_ctx *pkg)
                close(fd);
                archive_entry_free(entry);
        }
-       unlink(buf);
        /* 3.5 TODO: with gpgme write image signature */
        /* 3.6 the package Manifest data file Manifest (clear-signed when
         * gpgme) */
@@ -462,7 +461,6 @@ qgpkg_make(tree_pkg_ctx *pkg)
                close(fd);
                archive_entry_free(entry);
        }
-       unlink(buf);
        archive_write_close(a);
        archive_write_free(a);
 
@@ -481,7 +479,7 @@ qgpkg_make(tree_pkg_ctx *pkg)
                return 1;
        }
 
-       rmdir(tmpdir);
+       rm_rf(tmpdir);
 
        if (stat(buf, &st) == -1) {
                warnp("could not stat '%s': %s", buf, strerror(errno));

Reply via email to