From 3aa46e079385444428d18184863d797f712b4ce9 Mon Sep 17 00:00:00 2001 From: Stephen Marshall Date: Wed, 25 Apr 2018 14:09:23 +0100 Subject: [PATCH] When pushed, this commit will replace hard-coded values with calls to LookupMQM --- cmd/runmqdevserver/keystore.go | 16 ++++++++++++---- cmd/runmqdevserver/template.go | 18 ++++++++++++++---- cmd/runmqdevserver/tls.go | 11 +++++++++-- cmd/runmqserver/crtmqvol.go | 22 +++------------------- cmd/runmqserver/webserver.go | 2 +- internal/command/command.go | 6 +++--- 6 files changed, 42 insertions(+), 33 deletions(-) diff --git a/cmd/runmqdevserver/keystore.go b/cmd/runmqdevserver/keystore.go index 3c9e7e7..7a57b47 100644 --- a/cmd/runmqdevserver/keystore.go +++ b/cmd/runmqdevserver/keystore.go @@ -64,8 +64,12 @@ func (ks *KeyStore) Create() error { } } } - // TODO: Lookup value for MQM user here? - err = os.Chown(ks.Filename, 999, 999) + mqmUID, mqmGID, err := command.LookupMQM() + if err != nil { + log.Error(err) + return err + } + err = os.Chown(ks.Filename, mqmUID, mqmGID) if err != nil { log.Error(err) return err @@ -88,8 +92,12 @@ func (ks *KeyStore) CreateStash() error { } return err } - // TODO: Lookup value for MQM user here? - err = os.Chown(stashFile, 999, 999) + mqmUID, mqmGID, err := command.LookupMQM() + if err != nil { + log.Error(err) + return err + } + err = os.Chown(stashFile, mqmUID, mqmGID) if err != nil { log.Error(err) return err diff --git a/cmd/runmqdevserver/template.go b/cmd/runmqdevserver/template.go index a684c29..7941633 100644 --- a/cmd/runmqdevserver/template.go +++ b/cmd/runmqdevserver/template.go @@ -19,6 +19,8 @@ import ( "os" "path" "text/template" + + "github.com/ibm-messaging/mq-container/internal/command" ) // processTemplateFile takes a Go templateFile, and processes it with the @@ -35,8 +37,12 @@ func processTemplateFile(templateFile, destFile string, data interface{}) error if err != nil { if os.IsNotExist(err) { os.MkdirAll(dir, 0660) - // TODO: Lookup value for MQM user here? - err = os.Chown(dir, 999, 999) + mqmUID, mqmGID, err := command.LookupMQM() + if err != nil { + log.Error(err) + return err + } + err = os.Chown(dir, mqmUID, mqmGID) if err != nil { log.Error(err) return err @@ -52,8 +58,12 @@ func processTemplateFile(templateFile, destFile string, data interface{}) error log.Error(err) return err } - // TODO: Lookup value for MQM user here? - err = os.Chown(destFile, 999, 999) + mqmUID, mqmGID, err := command.LookupMQM() + if err != nil { + log.Error(err) + return err + } + err = os.Chown(destFile, mqmUID, mqmGID) if err != nil { log.Error(err) return err diff --git a/cmd/runmqdevserver/tls.go b/cmd/runmqdevserver/tls.go index 3a3443b..b0aa314 100644 --- a/cmd/runmqdevserver/tls.go +++ b/cmd/runmqdevserver/tls.go @@ -19,6 +19,8 @@ import ( "fmt" "os" "path/filepath" + + "github.com/ibm-messaging/mq-container/internal/command" ) func configureWebTLS(cms *KeyStore) error { @@ -76,9 +78,14 @@ func configureTLS(qmName string, inputFile string, passPhrase string) error { if err != nil { return err } - err = os.Chown(dir, 999, 999) + mqmUID, mqmGID, err := command.LookupMQM() if err != nil { - log.Debug(err) + log.Error(err) + return err + } + err = os.Chown(dir, mqmUID, mqmGID) + if err != nil { + log.Error(err) return err } } else { diff --git a/cmd/runmqserver/crtmqvol.go b/cmd/runmqserver/crtmqvol.go index b3bb7d7..3ff017f 100644 --- a/cmd/runmqserver/crtmqvol.go +++ b/cmd/runmqserver/crtmqvol.go @@ -17,28 +17,12 @@ package main import ( "os" - "os/user" "path/filepath" "runtime" - "strconv" "syscall" -) -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 -} + "github.com/ibm-messaging/mq-container/internal/command" +) func createVolume(path string) error { dataPath := filepath.Join(path, "data") @@ -60,7 +44,7 @@ func createVolume(path string) error { sys := fi.Sys() if sys != nil && runtime.GOOS == "linux" { stat := sys.(*syscall.Stat_t) - mqmUID, mqmGID, err := lookupMQM() + mqmUID, mqmGID, err := command.LookupMQM() if err != nil { return err } diff --git a/cmd/runmqserver/webserver.go b/cmd/runmqserver/webserver.go index e670cb4..f14de88 100644 --- a/cmd/runmqserver/webserver.go +++ b/cmd/runmqserver/webserver.go @@ -78,7 +78,7 @@ func configureWebServer() error { } return err } - uid, gid, err := lookupMQM() + uid, gid, err := command.LookupMQM() if err != nil { return err } diff --git a/internal/command/command.go b/internal/command/command.go index a999d6c..024b877 100644 --- a/internal/command/command.go +++ b/internal/command/command.go @@ -60,7 +60,7 @@ func Run(name string, arg ...string) (string, int, error) { func RunAsMQM(name string, arg ...string) (string, int, error) { cmd := exec.Command(name, arg...) cmd.SysProcAttr = &syscall.SysProcAttr{} - uid, gid, err := lookupMQM() + uid, gid, err := LookupMQM() if err != nil { return "", 0, err } @@ -68,8 +68,8 @@ func RunAsMQM(name string, arg ...string) (string, int, error) { return RunCmd(cmd) } -// TODO: Duplicated code -func lookupMQM() (int, int, error) { +// LookupMQM looks up the UID & GID of the mqm user +func LookupMQM() (int, int, error) { mqm, err := user.Lookup("mqm") if err != nil { return -1, -1, err