From 1137c70508b8f44a785e0fad51651b0e8347469d Mon Sep 17 00:00:00 2001 From: Philip O'Toole Date: Fri, 23 Feb 2024 07:29:22 -0500 Subject: [PATCH 1/4] Use consistent file perms post Boot --- CHANGELOG.md | 4 ++++ store/store.go | 19 +++++++++++++++---- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c74ba7cb..b0aa94a7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +## 8.21.2 (unreleased) +### Implementation changes and bug fixes +- [PR #1696](https://github.com/rqlite/rqlite/pull/1696): Use consistent file perms post boot. + ## 8.21.1 (February 21st 2024) ### Implementation changes and bug fixes - [PR #1693](https://github.com/rqlite/rqlite/pull/1693): Use built-in `max` function for Commit Index _sync_ check. diff --git a/store/store.go b/store/store.go index 5e51d7df..db4035da 100644 --- a/store/store.go +++ b/store/store.go @@ -1314,7 +1314,7 @@ func (s *Store) Backup(br *proto.BackupRequest, dst io.Writer) (retErr error) { } } - srcFD, err = os.CreateTemp(s.dbDir, backupScatchPattern) + srcFD, err = createTemp(s.dbDir, backupScatchPattern) if err != nil { return err } @@ -1433,7 +1433,7 @@ func (s *Store) ReadFrom(r io.Reader) (int64, error) { } // Write the data to a temporary file. - f, err := os.CreateTemp(s.dbDir, bootScatchPattern) + f, err := createTemp(s.dbDir, bootScatchPattern) if err != nil { return 0, err } @@ -1487,7 +1487,7 @@ func (s *Store) ReadFrom(r io.Reader) (int64, error) { // the temporary file with the existing database file. The database is then // re-opened. func (s *Store) Vacuum() error { - fd, err := os.CreateTemp(s.dbDir, vacuumScatchPattern) + fd, err := createTemp(s.dbDir, vacuumScatchPattern) if err != nil { return err } @@ -2065,7 +2065,7 @@ func (s *Store) fsmRestore(rc io.ReadCloser) (retErr error) { startT := time.Now() // Create a scatch file to write the restore data to it. - tmpFile, err := os.CreateTemp(s.dbDir, restoreScratchPattern) + tmpFile, err := createTemp(s.dbDir, restoreScratchPattern) if err != nil { return fmt.Errorf("error creating temporary file for restore operation: %v", err) } @@ -2360,6 +2360,17 @@ func createOnDisk(path string, fkConstraints, wal bool) (*sql.SwappableDB, error return sql.OpenSwappable(path, fkConstraints, wal) } +func createTemp(dir, pattern string) (*os.File, error) { + fd, err := os.CreateTemp(dir, pattern) + if err != nil { + return nil, err + } + if err := os.Chmod(fd.Name(), 0644); err != nil { + return nil, err + } + return fd, nil +} + func copyFromReaderToFile(path string, r io.Reader) (int64, error) { fd, err := os.Create(path) if err != nil { From 00f54da39fc556f2150cb083c02b8314975db9f3 Mon Sep 17 00:00:00 2001 From: Philip O'Toole Date: Fri, 23 Feb 2024 07:40:22 -0500 Subject: [PATCH 2/4] Replace another use of CreateTemp --- store/command_processor.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/store/command_processor.go b/store/command_processor.go index 0e79f818..31131492 100644 --- a/store/command_processor.go +++ b/store/command_processor.go @@ -77,7 +77,7 @@ func (c *CommandProcessor) Process(data []byte, db *sql.SwappableDB) (*proto.Com } // create a scratch file in the same directory as s.db.Path() - fd, err := os.CreateTemp(filepath.Dir(db.Path()), "rqlilte-load-") + fd, err := createTemp(filepath.Dir(db.Path()), "rqlilte-load-") if err != nil { return cmd, false, &fsmGenericResponse{error: fmt.Errorf("failed to create temporary database file: %s", err)} } From b74455b747b2fb11364a095b94dffc3cd0f1876f Mon Sep 17 00:00:00 2001 From: Philip O'Toole Date: Fri, 23 Feb 2024 07:42:24 -0500 Subject: [PATCH 3/4] More testing of createTemp --- store/store_test.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/store/store_test.go b/store/store_test.go index 5f1d6a6d..c4256fae 100644 --- a/store/store_test.go +++ b/store/store_test.go @@ -177,7 +177,7 @@ func Test_SingleNodeTempFileCleanup(t *testing.T) { backupScatchPattern, bootScatchPattern, } { - f, err := os.CreateTemp(s.dbDir, pattern) + f, err := createTemp(s.dbDir, pattern) if err != nil { t.Fatalf("failed to create temporary file: %s", err.Error()) } @@ -2666,7 +2666,7 @@ func mustNoop(s *Store, id string) { } func mustCreateTempFile() string { - f, err := os.CreateTemp("", "rqlite-temp") + f, err := createTemp("", "rqlite-temp") if err != nil { panic("failed to create temporary file") } @@ -2675,7 +2675,7 @@ func mustCreateTempFile() string { } func mustCreateTempFD() *os.File { - f, err := os.CreateTemp("", "rqlite-temp") + f, err := createTemp("", "rqlite-temp") if err != nil { panic("failed to create temporary file") } From f4ca03695c89f968c6132b0256d88ca5f07ed590 Mon Sep 17 00:00:00 2001 From: Philip O'Toole Date: Fri, 23 Feb 2024 07:43:02 -0500 Subject: [PATCH 4/4] CHANGELOG --- CHANGELOG.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b0aa94a7..d62190a4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ -## 8.21.2 (unreleased) +## 8.21.2 (February 23rd 2024) ### Implementation changes and bug fixes -- [PR #1696](https://github.com/rqlite/rqlite/pull/1696): Use consistent file perms post boot. +- [PR #1696](https://github.com/rqlite/rqlite/pull/1696): Use consistent file perms post Boot. ## 8.21.1 (February 21st 2024) ### Implementation changes and bug fixes