Avoid hard-coded mqm uid/gid

This commit is contained in:
Arthur Barr
2018-02-21 10:19:29 +00:00
parent 02cce7ab96
commit c30a8e4223

View File

@@ -17,15 +17,30 @@ package main
import (
"os"
"os/user"
"path/filepath"
"runtime"
"strconv"
"syscall"
log "github.com/sirupsen/logrus"
)
const mqmUID uint32 = 999
const mqmGID uint32 = 999
func lookupMQM() (int, int, error) {
mqm, err := user.Lookup("mqm")
if err != nil {
return -1, -1, err
}
mqmUID, err := strconv.Atoi(mqm.Uid)
if err != nil {
return -1, -1, err
}
mqmGID, err := strconv.Atoi(mqm.Gid)
if err != nil {
return -1, -1, err
}
return mqmUID, mqmGID, nil
}
func createVolume(path string) error {
dataPath := filepath.Join(path, "data")
@@ -47,8 +62,13 @@ func createVolume(path string) error {
sys := fi.Sys()
if sys != nil && runtime.GOOS == "linux" {
stat := sys.(*syscall.Stat_t)
if stat.Uid != mqmUID || stat.Gid != mqmGID {
err = os.Chown(dataPath, int(mqmUID), int(mqmGID))
mqmUID, mqmGID, err := lookupMQM()
if err != nil {
return err
}
log.Debugf("mqm user is %v (%v)", mqmUID, mqmGID)
if int(stat.Uid) != mqmUID || int(stat.Gid) != mqmGID {
err = os.Chown(dataPath, mqmUID, mqmGID)
if err != nil {
log.Printf("Error: Unable to change ownership of %v", dataPath)
return err