Avoid hard-coded mqm uid/gid
This commit is contained in:
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user