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 ( import (
"os" "os"
"os/user"
"path/filepath" "path/filepath"
"runtime" "runtime"
"strconv"
"syscall" "syscall"
log "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus"
) )
const mqmUID uint32 = 999 func lookupMQM() (int, int, error) {
const mqmGID uint32 = 999 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 { func createVolume(path string) error {
dataPath := filepath.Join(path, "data") dataPath := filepath.Join(path, "data")
@@ -47,8 +62,13 @@ func createVolume(path string) error {
sys := fi.Sys() sys := fi.Sys()
if sys != nil && runtime.GOOS == "linux" { if sys != nil && runtime.GOOS == "linux" {
stat := sys.(*syscall.Stat_t) stat := sys.(*syscall.Stat_t)
if stat.Uid != mqmUID || stat.Gid != mqmGID { mqmUID, mqmGID, err := lookupMQM()
err = os.Chown(dataPath, int(mqmUID), int(mqmGID)) 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 { if err != nil {
log.Printf("Error: Unable to change ownership of %v", dataPath) log.Printf("Error: Unable to change ownership of %v", dataPath)
return err return err