Skip to content

Commit f815b66

Browse files
authored
Merge pull request #100 from fly-apps/fix-lock-perms
Fix lock file perms
2 parents 9096686 + 177f3ac commit f815b66

File tree

3 files changed

+43
-12
lines changed

3 files changed

+43
-12
lines changed

internal/flypg/readonly.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"time"
99

1010
"github.com/fly-apps/postgres-flex/internal/flypg/admin"
11+
"github.com/fly-apps/postgres-flex/internal/utils"
1112
)
1213

1314
const (
@@ -101,6 +102,15 @@ func writeReadOnlyLock() error {
101102
return err
102103
}
103104

105+
pgUID, pgGID, err := utils.SystemUserIDs("postgres")
106+
if err != nil {
107+
return err
108+
}
109+
110+
if err := os.Chown(readOnlyLockFile, pgUID, pgGID); err != nil {
111+
return fmt.Errorf("failed to set readonly.lock owner: %s", err)
112+
}
113+
104114
return nil
105115
}
106116

internal/flypg/zombie.go

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"fmt"
77
"os"
88

9+
"github.com/fly-apps/postgres-flex/internal/utils"
910
"github.com/jackc/pgx/v5"
1011
)
1112

@@ -21,32 +22,43 @@ var (
2122
ErrZombieDiagnosisUndecided = errors.New("unable to confirm we are the true primary")
2223
)
2324

25+
const zombieLockFile = "/data/zombie.lock"
26+
2427
func ZombieLockExists() bool {
25-
_, err := os.Stat("/data/zombie.lock")
28+
_, err := os.Stat(zombieLockFile)
2629
if os.IsNotExist(err) {
2730
return false
2831
}
2932
return true
3033
}
3134

3235
func writeZombieLock(hostname string) error {
33-
if err := os.WriteFile("/data/zombie.lock", []byte(hostname), 0644); err != nil {
36+
if err := os.WriteFile(zombieLockFile, []byte(hostname), 0644); err != nil {
3437
return err
3538
}
3639

40+
pgUID, pgGID, err := utils.SystemUserIDs("postgres")
41+
if err != nil {
42+
return err
43+
}
44+
45+
if err := os.Chown(zombieLockFile, pgUID, pgGID); err != nil {
46+
return fmt.Errorf("failed to set zombie.lock owner: %s", err)
47+
}
48+
3749
return nil
3850
}
3951

4052
func RemoveZombieLock() error {
41-
if err := os.Remove("/data/zombie.lock"); err != nil {
53+
if err := os.Remove(zombieLockFile); err != nil {
4254
return err
4355
}
4456

4557
return nil
4658
}
4759

4860
func ReadZombieLock() (string, error) {
49-
body, err := os.ReadFile("/data/zombie.lock")
61+
body, err := os.ReadFile(zombieLockFile)
5062
if err != nil {
5163
return "", err
5264
}

internal/utils/shell.go

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,22 +8,31 @@ import (
88
)
99

1010
func RunCommand(cmdStr string) error {
11-
pgUser, err := user.Lookup("postgres")
11+
pgUID, pgGID, err := SystemUserIDs("postgres")
1212
if err != nil {
1313
return err
1414
}
15+
16+
cmd := exec.Command("sh", "-c", cmdStr)
17+
cmd.SysProcAttr = &syscall.SysProcAttr{}
18+
cmd.SysProcAttr.Credential = &syscall.Credential{Uid: uint32(pgUID), Gid: uint32(pgGID)}
19+
_, err = cmd.Output()
20+
return err
21+
}
22+
23+
func SystemUserIDs(usr string) (int, int, error) {
24+
pgUser, err := user.Lookup(usr)
25+
if err != nil {
26+
return 0, 0, err
27+
}
1528
pgUID, err := strconv.Atoi(pgUser.Uid)
1629
if err != nil {
17-
return err
30+
return 0, 0, err
1831
}
1932
pgGID, err := strconv.Atoi(pgUser.Gid)
2033
if err != nil {
21-
return err
34+
return 0, 0, err
2235
}
2336

24-
cmd := exec.Command("sh", "-c", cmdStr)
25-
cmd.SysProcAttr = &syscall.SysProcAttr{}
26-
cmd.SysProcAttr.Credential = &syscall.Credential{Uid: uint32(pgUID), Gid: uint32(pgGID)}
27-
_, err = cmd.Output()
28-
return err
37+
return pgUID, pgGID, nil
2938
}

0 commit comments

Comments
 (0)