From b5f7458344ab77f253e6cddcebe514843f0027d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=80=97=E5=AD=90?= Date: Tue, 12 Nov 2024 03:14:53 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=B8=A6=20i=20=E5=B1=9E=E6=80=A7?= =?UTF-8?q?=E7=9A=84=E6=96=87=E4=BB=B6=E6=97=A0=E6=B3=95=E4=BF=9D=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/apps/rsync/service.go | 6 +++--- pkg/db/postgres.go | 2 +- pkg/io/file.go | 28 +++++++++++++++++++++++----- pkg/io/io_test.go | 2 +- 4 files changed, 28 insertions(+), 10 deletions(-) diff --git a/internal/apps/rsync/service.go b/internal/apps/rsync/service.go index fa50ad5d..0cc0df18 100644 --- a/internal/apps/rsync/service.go +++ b/internal/apps/rsync/service.go @@ -114,11 +114,11 @@ secrets file = /etc/rsyncd.secrets # ` + req.Name + `-END ` - if err = io.WriteAppend("/etc/rsyncd.conf", conf); err != nil { + if err = io.WriteAppend("/etc/rsyncd.conf", conf, 0644); err != nil { service.Error(w, http.StatusInternalServerError, "%v", err) return } - if err = io.WriteAppend("/etc/rsyncd.secrets", fmt.Sprintf(`%s:%s\n`, req.AuthUser, req.Secret)); err != nil { + if err = io.WriteAppend("/etc/rsyncd.secrets", fmt.Sprintf(`%s:%s\n`, req.AuthUser, req.Secret), 0600); err != nil { service.Error(w, http.StatusInternalServerError, "%v", err) return } @@ -216,7 +216,7 @@ secrets file = /etc/rsyncd.secrets service.Error(w, http.StatusInternalServerError, "%v", err) return } - if err = io.WriteAppend("/etc/rsyncd.secrets", fmt.Sprintf(`%s:%s\n`, req.AuthUser, req.Secret)); err != nil { + if err = io.WriteAppend("/etc/rsyncd.secrets", fmt.Sprintf(`%s:%s\n`, req.AuthUser, req.Secret), 0600); err != nil { service.Error(w, http.StatusInternalServerError, "%v", err) return } diff --git a/pkg/db/postgres.go b/pkg/db/postgres.go index a94c2dc1..fd8d26fb 100644 --- a/pkg/db/postgres.go +++ b/pkg/db/postgres.go @@ -136,7 +136,7 @@ func (m *Postgres) PrivilegesRevoke(user, database string) error { func (m *Postgres) HostAdd(database, user, host string) error { config := fmt.Sprintf("host %s %s %s scram-sha-256", database, user, host) - if err := io.WriteAppend(m.hbaFile, config); err != nil { + if err := io.WriteAppend(m.hbaFile, config, 0644); err != nil { return err } diff --git a/pkg/io/file.go b/pkg/io/file.go index 00d118bb..b591a5f3 100644 --- a/pkg/io/file.go +++ b/pkg/io/file.go @@ -14,11 +14,10 @@ func Write(path string, data string, permission os.FileMode) error { return err } - file, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, permission) + file, err := os.OpenFile(path, os.O_RDONLY, permission) if err != nil { return err } - defer file.Close() iFlag, _ := chattr.IsAttr(file, chattr.FS_IMMUTABLE_FL) aFlag, _ := chattr.IsAttr(file, chattr.FS_APPEND_FL) @@ -29,6 +28,16 @@ func Write(path string, data string, permission os.FileMode) error { _ = chattr.UnsetAttr(file, chattr.FS_APPEND_FL) } + // 关闭文件重新以写入方式打开 + if err = file.Close(); err != nil { + return err + } + file, err = os.OpenFile(path, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, permission) + if err != nil { + return err + } + defer file.Close() + _, err = file.WriteString(data) if err != nil { return err @@ -45,18 +54,27 @@ func Write(path string, data string, permission os.FileMode) error { } // WriteAppend 追加写入文件 -func WriteAppend(path string, data string) error { - file, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0644) +func WriteAppend(path string, data string, permission os.FileMode) error { + file, err := os.OpenFile(path, os.O_RDONLY, permission) if err != nil { return err } - defer file.Close() iFlag, _ := chattr.IsAttr(file, chattr.FS_IMMUTABLE_FL) if iFlag { _ = chattr.UnsetAttr(file, chattr.FS_IMMUTABLE_FL) } + // 关闭文件重新以写入方式打开 + if err = file.Close(); err != nil { + return err + } + file, err = os.OpenFile(path, os.O_WRONLY|os.O_CREATE|os.O_APPEND, permission) + if err != nil { + return err + } + defer file.Close() + _, err = file.WriteString(data) if err != nil { return err diff --git a/pkg/io/io_test.go b/pkg/io/io_test.go index bfcb2f49..9aaf4c49 100644 --- a/pkg/io/io_test.go +++ b/pkg/io/io_test.go @@ -45,7 +45,7 @@ func (s *IOTestSuite) TestWriteAppendAppendsToFile() { appendData := ", World!" s.NoError(Write(path, initialData, 0644)) - s.NoError(WriteAppend(path, appendData)) + s.NoError(WriteAppend(path, appendData, 0644)) content, err := Read(path) s.NoError(err)