diff --git a/go/cmd/dolt/commands/sqlserver/server_test.go b/go/cmd/dolt/commands/sqlserver/server_test.go index 00f0142606..9dacd076c3 100644 --- a/go/cmd/dolt/commands/sqlserver/server_test.go +++ b/go/cmd/dolt/commands/sqlserver/server_test.go @@ -113,7 +113,7 @@ listener: serverController := NewServerController() go func() { - dEnv.FS.WriteFile("config.yaml", []byte(yamlConfig)) + dEnv.FS.WriteFile("config.yaml", []byte(yamlConfig), os.ModePerm) startServer(context.Background(), "0.0.0", "dolt sql-server", []string{ "--config", "config.yaml", }, dEnv, serverController) diff --git a/go/libraries/doltcore/branch_control/branch_control.go b/go/libraries/doltcore/branch_control/branch_control.go index 9748ec836d..4225f5390f 100644 --- a/go/libraries/doltcore/branch_control/branch_control.go +++ b/go/libraries/doltcore/branch_control/branch_control.go @@ -210,7 +210,7 @@ func (controller *Controller) SaveData(ctx context.Context, fs filesys.Filesys) b.FinishWithFileIdentifier(root, []byte(serial.BranchControlFileID)) data := b.Bytes[b.Head()-serial.MessagePrefixSz:] - err := fs.WriteFile(controller.branchControlFilePath, data) + err := fs.WriteFile(controller.branchControlFilePath, data, 0660) if err != nil { return err } diff --git a/go/libraries/doltcore/env/environment.go b/go/libraries/doltcore/env/environment.go index e4b438d77b..ea667dd9b9 100644 --- a/go/libraries/doltcore/env/environment.go +++ b/go/libraries/doltcore/env/environment.go @@ -20,7 +20,6 @@ import ( "fmt" "os" "path/filepath" - "reflect" "strconv" "strings" "time" @@ -1291,18 +1290,7 @@ func WriteLockfile(fs filesys.Filesys, lock *DBLock) error { portStr = "-" } - if reflect.TypeOf(fs) == reflect.TypeOf(filesys.LocalFS) { - _, err := os.Create(lockFile) - if err != nil { - return err - } - err = os.Chmod(lockFile, 0600) - if err != nil { - return err - } - } - - err = fs.WriteFile(lockFile, []byte(fmt.Sprintf("%d:%s:%s", lock.Pid, portStr, lock.Secret))) + err = fs.WriteFile(lockFile, []byte(fmt.Sprintf("%d:%s:%s", lock.Pid, portStr, lock.Secret)), 0600) if err != nil { return err } diff --git a/go/libraries/doltcore/env/repo_state.go b/go/libraries/doltcore/env/repo_state.go index 052c53c4f9..9364a3c7a6 100644 --- a/go/libraries/doltcore/env/repo_state.go +++ b/go/libraries/doltcore/env/repo_state.go @@ -17,6 +17,7 @@ package env import ( "context" "encoding/json" + "os" "github.com/dolthub/dolt/go/libraries/doltcore/doltdb" "github.com/dolthub/dolt/go/libraries/doltcore/ref" @@ -127,7 +128,7 @@ func (rs *repoStateLegacy) save(fs filesys.ReadWriteFS) error { return err } - return fs.WriteFile(getRepoStateFile(), data) + return fs.WriteFile(getRepoStateFile(), data, os.ModePerm) } // LoadRepoState parses the repo state file from the file system given @@ -199,7 +200,7 @@ func (rs RepoState) Save(fs filesys.ReadWriteFS) error { return err } - return fs.WriteFile(getRepoStateFile(), data) + return fs.WriteFile(getRepoStateFile(), data, os.ModePerm) } func (rs *RepoState) CWBHeadRef() ref.DoltRef { diff --git a/go/libraries/doltcore/mvdata/data_loc_test.go b/go/libraries/doltcore/mvdata/data_loc_test.go index c12fe0bed0..3f45dec282 100644 --- a/go/libraries/doltcore/mvdata/data_loc_test.go +++ b/go/libraries/doltcore/mvdata/data_loc_test.go @@ -59,7 +59,7 @@ func createRootAndFS() (*doltdb.DoltDB, *doltdb.RootValue, filesys.Filesys) { workingDir := "/user/bheni/datasets/states" initialDirs := []string{testHomeDir, workingDir} fs := filesys.NewInMemFS(initialDirs, nil, workingDir) - fs.WriteFile(testSchemaFileName, []byte(testSchema)) + fs.WriteFile(testSchemaFileName, []byte(testSchema), os.ModePerm) ddb, _ := doltdb.LoadDoltDB(context.Background(), types.Format_Default, doltdb.InMemDoltDB, filesys.LocalFS) ddb.WriteEmptyRepo(context.Background(), "master", "billy bob", "bigbillieb@fake.horse") @@ -146,7 +146,7 @@ func TestExists(t *testing.T) { } if fileVal, isFile := loc.(FileDataLocation); isFile { - err := fs.WriteFile(fileVal.Path, []byte("test")) + err := fs.WriteFile(fileVal.Path, []byte("test"), os.ModePerm) assert.NoError(t, err) } @@ -197,7 +197,7 @@ func TestCreateRdWr(t *testing.T) { defer dEnv.DoltDB.Close() root, err := dEnv.WorkingRoot(context.Background()) require.NoError(t, err) - dEnv.FS.WriteFile(testSchemaFileName, []byte(testSchema)) + dEnv.FS.WriteFile(testSchemaFileName, []byte(testSchema), os.ModePerm) mvOpts := &testDataMoverOptions{} diff --git a/go/libraries/doltcore/rowconv/field_mapping_test.go b/go/libraries/doltcore/rowconv/field_mapping_test.go index 87df1744a4..4514766e38 100644 --- a/go/libraries/doltcore/rowconv/field_mapping_test.go +++ b/go/libraries/doltcore/rowconv/field_mapping_test.go @@ -15,6 +15,7 @@ package rowconv import ( + "os" "reflect" "testing" @@ -78,7 +79,7 @@ func TestFieldMapping(t *testing.T) { mappingFile := "" if test.mappingJSON != "" { mappingFile = "mapping.json" - fs.WriteFile(mappingFile, []byte(test.mappingJSON)) + fs.WriteFile(mappingFile, []byte(test.mappingJSON), os.ModePerm) } var mapping *FieldMapping diff --git a/go/libraries/doltcore/table/typed/json/reader_test.go b/go/libraries/doltcore/table/typed/json/reader_test.go index ada236b242..504ef50866 100644 --- a/go/libraries/doltcore/table/typed/json/reader_test.go +++ b/go/libraries/doltcore/table/typed/json/reader_test.go @@ -17,6 +17,7 @@ package json import ( "context" "io" + "os" "testing" "github.com/dolthub/go-mysql-server/enginetest" @@ -49,7 +50,7 @@ func TestReader(t *testing.T) { }` fs := filesys.EmptyInMemFS("/") - require.NoError(t, fs.WriteFile("file.json", []byte(testJSON))) + require.NoError(t, fs.WriteFile("file.json", []byte(testJSON), os.ModePerm)) colColl := schema.NewColCollection( schema.Column{ @@ -132,7 +133,7 @@ func TestReaderBadJson(t *testing.T) { }` fs := filesys.EmptyInMemFS("/") - require.NoError(t, fs.WriteFile("file.json", []byte(testJSON))) + require.NoError(t, fs.WriteFile("file.json", []byte(testJSON), os.ModePerm)) colColl := schema.NewColCollection( schema.Column{ diff --git a/go/libraries/events/file_backed_proc.go b/go/libraries/events/file_backed_proc.go index edcc7648e4..a75ae2df7d 100644 --- a/go/libraries/events/file_backed_proc.go +++ b/go/libraries/events/file_backed_proc.go @@ -134,7 +134,7 @@ func NewFileBackedProc(fs filesys.Filesys, userHomeDir string, doltDir string, n exists, _ := fs.Exists(lp) if !exists { - if err := fs.WriteFile(lp, []byte("lockfile for dolt \n")); err != nil { + if err := fs.WriteFile(lp, []byte("lockfile for dolt \n"), os.ModePerm); err != nil { panic(err) } } diff --git a/go/libraries/utils/config/file_config.go b/go/libraries/utils/config/file_config.go index 28c873a40d..557908c729 100644 --- a/go/libraries/utils/config/file_config.go +++ b/go/libraries/utils/config/file_config.go @@ -17,6 +17,7 @@ package config import ( "encoding/json" "errors" + "os" "path/filepath" "github.com/dolthub/dolt/go/libraries/utils/filesys" @@ -128,7 +129,7 @@ func (fc *FileConfig) write() error { return err } - return fc.fs.WriteFile(fc.Path, data) + return fc.fs.WriteFile(fc.Path, data, os.ModePerm) } // Unset removes a configuration parameter from the config diff --git a/go/libraries/utils/filesys/fs.go b/go/libraries/utils/filesys/fs.go index 33e0ea9126..0f3d2484af 100644 --- a/go/libraries/utils/filesys/fs.go +++ b/go/libraries/utils/filesys/fs.go @@ -55,9 +55,9 @@ type WritableFS interface { // append only to that new file. If file exists, it will append to existing file. OpenForWriteAppend(fp string, perm os.FileMode) (io.WriteCloser, error) - // WriteFile writes the entire data buffer to a given file. The file will be created if it does not exist, + // WriteFileWithPerms writes the entire data buffer to a given file. The file will be created if it does not exist, // and if it does exist it will be overwritten. WriteFile attempts to write the file atomically and durably. - WriteFile(fp string, data []byte) error + WriteFile(fp string, data []byte, perm os.FileMode) error // MkDirs creates a folder and all the parent folders that are necessary to create it. MkDirs(path string) error diff --git a/go/libraries/utils/filesys/fs_test.go b/go/libraries/utils/filesys/fs_test.go index a78463e7cb..0982dd7993 100644 --- a/go/libraries/utils/filesys/fs_test.go +++ b/go/libraries/utils/filesys/fs_test.go @@ -87,7 +87,7 @@ func TestFilesystems(t *testing.T) { data := test.RandomData(256 * 1024) // Test writing file with random data - err = fs.WriteFile(fp, data) + err = fs.WriteFile(fp, data, os.ModePerm) require.NoError(t, err) // Test that the data can be read back and hasn't changed @@ -121,7 +121,7 @@ func TestFilesystems(t *testing.T) { require.NoError(t, wrc.Close()) // Test moving a directory - err = fs.WriteFile(subdirFile, []byte("helloworld")) + err = fs.WriteFile(subdirFile, []byte("helloworld"), os.ModePerm) require.NoError(t, err) err = fs.MkDirs(newLocation) require.NoError(t, err) @@ -147,7 +147,7 @@ func TestFilesystems(t *testing.T) { require.False(t, isDir) // Test writing/reading random data to tmp file - err = fs.WriteFile(fp2, data) + err = fs.WriteFile(fp2, data, os.ModePerm) require.NoError(t, err) dataRead, err = fs.ReadFile(fp2) require.NoError(t, err) @@ -318,7 +318,7 @@ func writeFileAddToExp(expected []string, fs Filesys, root string, pathFromRoot pathElements := append([]string{root}, pathFromRoot...) fp := filepath.Join(pathElements...) - fs.WriteFile(fp, []byte(testString)) + fs.WriteFile(fp, []byte(testString), os.ModePerm) return append(expected, fp) } diff --git a/go/libraries/utils/filesys/inmemfs.go b/go/libraries/utils/filesys/inmemfs.go index 11838b78b6..12c0e9717a 100644 --- a/go/libraries/utils/filesys/inmemfs.go +++ b/go/libraries/utils/filesys/inmemfs.go @@ -360,8 +360,8 @@ func (fs *InMemFS) OpenForWriteAppend(fp string, perm os.FileMode) (io.WriteClos // WriteFile writes the entire data buffer to a given file. The file will be created if it does not exist, // and if it does exist it will be overwritten. -func (fs *InMemFS) WriteFile(fp string, data []byte) error { - w, err := fs.OpenForWrite(fp, os.ModePerm) +func (fs *InMemFS) WriteFile(fp string, data []byte, perm os.FileMode) error { + w, err := fs.OpenForWrite(fp, perm) if err != nil { return err diff --git a/go/libraries/utils/filesys/localfs.go b/go/libraries/utils/filesys/localfs.go index 92f50de757..767aa77a87 100644 --- a/go/libraries/utils/filesys/localfs.go +++ b/go/libraries/utils/filesys/localfs.go @@ -204,7 +204,7 @@ func (fs *localFS) OpenForWriteAppend(fp string, perm os.FileMode) (io.WriteClos // WriteFile writes the entire data buffer to a given file. The file will be created if it does not exist, // and if it does exist it will be overwritten. -func (fs *localFS) WriteFile(fp string, data []byte) error { +func (fs *localFS) WriteFile(fp string, data []byte, perms os.FileMode) error { fullpath, err := fs.Abs(fp) if err != nil { return err @@ -236,7 +236,7 @@ func (fs *localFS) WriteFile(fp string, data []byte) error { return err } - err = os.Chmod(f.Name(), os.ModePerm) + err = os.Chmod(f.Name(), perms) if err != nil { os.Remove(f.Name()) return err