summaryrefslogtreecommitdiffstats
path: root/client/go/vespa/find_user.go
diff options
context:
space:
mode:
Diffstat (limited to 'client/go/vespa/find_user.go')
-rw-r--r--client/go/vespa/find_user.go76
1 files changed, 76 insertions, 0 deletions
diff --git a/client/go/vespa/find_user.go b/client/go/vespa/find_user.go
new file mode 100644
index 00000000000..c3f4e32906f
--- /dev/null
+++ b/client/go/vespa/find_user.go
@@ -0,0 +1,76 @@
+// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+// load default environment variables (from $VESPA_HOME/conf/vespa/default-env.txt)
+// Author: arnej
+
+package vespa
+
+import (
+ "os"
+ "os/user"
+ "strconv"
+)
+
+// Which user should vespa services run as? If current user is root,
+// we want to change to some non-privileged user.
+// Should be run after LoadDefaultEnv() which possibly loads VESPA_USER
+// Which user should vespa services run as? If current user is root,
+// we want to change to some non-privileged user.
+// Should be run after LoadDefaultEnv() which possibly loads VESPA_USER
+func FindVespaUser() string {
+ uName := os.Getenv("VESPA_USER")
+ if uName != "" {
+ // no check here, assume valid
+ return uName
+ }
+ if os.Getuid() == 0 {
+ u, err := user.Lookup("vespa")
+ if err == nil {
+ uName = u.Username
+ } else {
+ u, err = user.Lookup("nobody")
+ if err == nil {
+ uName = u.Username
+ }
+ }
+ }
+ if uName == "" {
+ u, err := user.Current()
+ if err == nil {
+ uName = u.Username
+ }
+ }
+ if uName != "" {
+ os.Setenv("VESPA_USER", uName)
+ }
+ return uName
+}
+
+// Which user/group should vespa services run as? If current user is root,
+// we want to change to some non-privileged user.
+// Should be run after LoadDefaultEnv() which possibly loads VESPA_USER
+
+func FindVespaUidAndGid() (userId, groupId int) {
+ userId = -1
+ groupId = -1
+ uName := os.Getenv("VESPA_USER")
+ gName := os.Getenv("VESPA_GROUP")
+ if uName == "" {
+ uName = FindVespaUser()
+ }
+ if uName != "" {
+ u, err := user.Lookup(uName)
+ if err == nil {
+ userId, _ = strconv.Atoi(u.Uid)
+ if gName == "" {
+ groupId, _ = strconv.Atoi(u.Gid)
+ }
+ }
+ }
+ if gName != "" {
+ g, err := user.LookupGroup(gName)
+ if err == nil {
+ groupId, _ = strconv.Atoi(g.Gid)
+ }
+ }
+ return
+}