From c30a8e42231fc257e9afcb745f2ba80c44e36730 Mon Sep 17 00:00:00 2001 From: Arthur Barr Date: Wed, 21 Feb 2018 10:19:29 +0000 Subject: [PATCH] Avoid hard-coded mqm uid/gid --- cmd/runmqserver/crtmqvol.go | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/cmd/runmqserver/crtmqvol.go b/cmd/runmqserver/crtmqvol.go index 350a931..41885f2 100644 --- a/cmd/runmqserver/crtmqvol.go +++ b/cmd/runmqserver/crtmqvol.go @@ -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