diff options
| author | Laurent Bercot <ska-skaware@skarnet.org> | 2025-10-05 00:05:59 +0000 |
|---|---|---|
| committer | Laurent Bercot <ska-skaware@skarnet.org> | 2025-10-05 00:05:59 +0000 |
| commit | 399184cad0c0dd63a39de775130a2a73d0325913 (patch) | |
| tree | 978b8c5dc3f494a9627f601bf8728bf6e8324b57 /src/libs6rc/s6rc_repo_sync.c | |
| parent | 92ef99d90574ebd4732c10a0a127945a40271c87 (diff) | |
| download | s6-rc-399184cad0c0dd63a39de775130a2a73d0325913.tar.gz | |
Do not delete old store before the sync succeeds
Diffstat (limited to 'src/libs6rc/s6rc_repo_sync.c')
| -rw-r--r-- | src/libs6rc/s6rc_repo_sync.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/src/libs6rc/s6rc_repo_sync.c b/src/libs6rc/s6rc_repo_sync.c index df462ad..2ec1356 100644 --- a/src/libs6rc/s6rc_repo_sync.c +++ b/src/libs6rc/s6rc_repo_sync.c @@ -9,6 +9,7 @@ #include <errno.h> #include <skalibs/uint16.h> +#include <skalibs/stat.h> #include <skalibs/direntry.h> #include <skalibs/posixplz.h> #include <skalibs/strerr.h> @@ -31,6 +32,7 @@ static inline void cleanup (char const *ato, char const *bun) int s6rc_repo_sync (char const *repo, unsigned int verbosity, char const *fdhuser) { size_t repolen = strlen(repo) ; + mode_t m ; char store[repolen + 13] ; char ato[repolen + 26] ; char bun[repolen + 26] ; @@ -46,14 +48,17 @@ int s6rc_repo_sync (char const *repo, unsigned int verbosity, char const *fdhuse memcpy(ato + repolen, "/sources/..atomics:XXXXXX", 26) ; memcpy(bun, ato, repolen + 26) ; memcpy(bun + repolen + 11, "bundle", 6) ; + m = umask(0) ; if (!mkdtemp(ato)) { strerr_warnfu2sys("mkdtemp ", ato) ; + umask(m) ; return 0 ; } if (chmod(ato, 02755) == -1) { strerr_warnfu2sys("chmod ", ato) ; + umask(m) ; return 0 ; } @@ -61,8 +66,10 @@ int s6rc_repo_sync (char const *repo, unsigned int verbosity, char const *fdhuse { strerr_warnfu2sys("mkdtemp ", bun) ; rmdir(ato) ; + umask(m) ; return 0 ; } + umask(m) ; if (chmod(bun, 02755) == -1) { strerr_warnfu2sys("chmod ", bun) ; |
