aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorRirisoft <[email protected]>2024-06-08 19:34:18 +0200
committerGitHub <[email protected]>2024-06-08 11:34:18 -0600
commit0bc27e5fb1252716f82c2b5af56189e8b46ead3c (patch)
treee03f961b218b43070d53178136e2f4f269b522c3
parent9be4f194e036dddd4704a851fd15a9682d9e813d (diff)
downloadcaddy-0bc27e5fb1252716f82c2b5af56189e8b46ead3c.tar.gz
caddy-0bc27e5fb1252716f82c2b5af56189e8b46ead3c.zip
logging: fix file mode configuration parsing (#6383)
Commit 101d3e7 introduced file mode setting, but was missing a JSON Marshaller so that CaddyFile can be converted to JSON safely.
-rw-r--r--modules/logging/filewriter.go5
-rw-r--r--modules/logging/filewriter_test.go39
2 files changed, 44 insertions, 0 deletions
diff --git a/modules/logging/filewriter.go b/modules/logging/filewriter.go
index 393228fda..09cea1b4e 100644
--- a/modules/logging/filewriter.go
+++ b/modules/logging/filewriter.go
@@ -59,6 +59,11 @@ func (m *fileMode) UnmarshalJSON(b []byte) error {
return err
}
+// MarshalJSON satisfies json.Marshaler.
+func (m *fileMode) MarshalJSON() ([]byte, error) {
+ return []byte(fmt.Sprintf("\"%04o\"", *m)), nil
+}
+
// parseFileMode parses a file mode string,
// adding support for `chmod` unix command like
// 1 to 4 digital octal values.
diff --git a/modules/logging/filewriter_test.go b/modules/logging/filewriter_test.go
index 2787eeff1..ab403930c 100644
--- a/modules/logging/filewriter_test.go
+++ b/modules/logging/filewriter_test.go
@@ -306,3 +306,42 @@ func TestFileModeJSON(t *testing.T) {
})
}
}
+
+func TestFileModeToJSON(t *testing.T) {
+ tests := []struct {
+ name string
+ mode fileMode
+ want string
+ wantErr bool
+ }{
+ {
+ name: "none zero",
+ mode: 0644,
+ want: `"0644"`,
+ wantErr: false,
+ },
+ {
+ name: "zero mode",
+ mode: 0,
+ want: `"0000"`,
+ wantErr: false,
+ },
+ }
+
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ var b []byte
+ var err error
+
+ if b, err = json.Marshal(&tt.mode); (err != nil) != tt.wantErr {
+ t.Fatalf("MarshalJSON() error = %v, want %v", err, tt.wantErr)
+ }
+
+ got := string(b[:])
+
+ if got != tt.want {
+ t.Errorf("got mode %v, want %v", got, tt.want)
+ }
+ })
+ }
+}