@@ -3,9 +3,7 @@ package main
33import (
44 "fmt"
55 "os"
6- "syscall"
76
8- "github.com/dchest/safefile"
97 "github.com/go-ini/ini"
108)
119
@@ -38,44 +36,25 @@ func iniLoadOrEmpty(filename string) (*ini.File, error) {
3836 return nil , err
3937}
4038
41- // iniSave safely writes the ini file to the named file.
39+ // iniSave writes the ini file to the named file.
4240func iniSave (filename string , iniFile * ini.File ) error {
43- mode := os .FileMode (0644 )
44- uid := - 1
45- gid := - 1
46-
47- finfo , err := os .Stat (filename )
48- if err != nil {
49- if ! os .IsNotExist (err ) {
50- return err
51- }
52- } else {
53- mode = finfo .Mode ()
54- uid = int (finfo .Sys ().(* syscall.Stat_t ).Uid )
55- gid = int (finfo .Sys ().(* syscall.Stat_t ).Gid )
56- }
57-
58- f , err := safefile .Create (filename , mode )
41+ // The third argument, perm, is ignored when the file doesn't exist
42+ // So we can safely set it to '0644', it won't modify the existing permissions
43+ // if the file exists.
44+ f , err := os .OpenFile (filename , os .O_SYNC | os .O_RDWR | os .O_CREATE , os .FileMode (0644 ))
5945 if err != nil {
6046 return err
6147 }
62- // Recover original ownership/permissions
63- if err := os .Chmod (f .File .Name (), mode ); err != nil {
48+ // Clear file content
49+ err = f .Truncate (0 )
50+ if err != nil {
6451 return err
6552 }
66- if os .Geteuid () != uid || os .Getegid () != gid {
67- if err := os .Chown (f .File .Name (), uid , gid ); err != nil {
68- return err
69- }
70- }
71-
72- defer f .Close ()
73-
7453 _ , err = iniFile .WriteTo (f )
7554 if err != nil {
7655 return err
7756 }
78- return f .Commit ()
57+ return f .Close ()
7958}
8059
8160func iniFileGet (file string , s string , key string ) (string , error ) {
@@ -108,7 +87,6 @@ func iniFileSet(file string, s string, key string, value interface{}) error {
10887 default :
10988 return fmt .Errorf ("invalid key type %T" , v )
11089 }
111-
11290 return iniSave (file , iniFile )
11391}
11492
0 commit comments