diff options
-rw-r--r-- | defaults/src/apps/printdefault/printdefault.cpp | 2 | ||||
-rw-r--r-- | defaults/src/main/java/com/yahoo/vespa/defaults/Defaults.java | 23 | ||||
-rw-r--r-- | defaults/src/test/java/com/yahoo/vespa/defaults/DefaultsTestCase.java | 5 | ||||
-rw-r--r-- | defaults/src/vespa/defaults.cpp | 17 | ||||
-rw-r--r-- | defaults/src/vespa/defaults.h | 6 |
5 files changed, 50 insertions, 3 deletions
diff --git a/defaults/src/apps/printdefault/printdefault.cpp b/defaults/src/apps/printdefault/printdefault.cpp index 0419ca9b2dd..8c1e265fff3 100644 --- a/defaults/src/apps/printdefault/printdefault.cpp +++ b/defaults/src/apps/printdefault/printdefault.cpp @@ -12,6 +12,8 @@ int main(int argc, char **argv) { } if (strcmp(argv[1], "home") == 0) { printf("%s\n", vespa::Defaults::vespaHome()); + } else if (strcmp(argv[1], "user") == 0) { + printf("%s\n", vespa::Defaults::vespaUser()); } else if (strcmp(argv[1], "portbase") == 0) { printf("%d\n", vespa::Defaults::vespaPortBase()); } else if (strcmp(argv[1], "configserver_rpc_port") == 0) { diff --git a/defaults/src/main/java/com/yahoo/vespa/defaults/Defaults.java b/defaults/src/main/java/com/yahoo/vespa/defaults/Defaults.java index 060fd3c56cd..97a58fc8440 100644 --- a/defaults/src/main/java/com/yahoo/vespa/defaults/Defaults.java +++ b/defaults/src/main/java/com/yahoo/vespa/defaults/Defaults.java @@ -17,28 +17,39 @@ public class Defaults { private static final Defaults defaults = new Defaults(); private final String vespaHome; + private final String vespaUser; private final int vespaWebServicePort; private final int vespaPortBase; private Defaults() { vespaHome = findVespaHome(); + vespaUser = findVespaUser(); vespaWebServicePort = findVespaWebServicePort(); vespaPortBase = 19000; // TODO } - private String findVespaHome() { + static private String findVespaHome() { Optional<String> vespaHomeEnv = Optional.ofNullable(System.getenv("VESPA_HOME")); if ( ! vespaHomeEnv.isPresent() || vespaHomeEnv.get().trim().isEmpty()) { log.info("VESPA_HOME not set, using /opt/yahoo/vespa/"); return "/opt/yahoo/vespa/"; } - String vespaHome = vespaHomeEnv.get(); + String vespaHome = vespaHomeEnv.get().trim(); if ( ! vespaHome.endsWith("/")) vespaHome = vespaHome + "/"; return vespaHome; } - private int findVespaWebServicePort() { + static private String findVespaUser() { + Optional<String> vespaUserEnv = Optional.ofNullable(System.getenv("VESPA_USER")); + if (! vespaUserEnv.isPresent()) { + log.fine("VESPA_USER not set, using yahoo"); + return "yahoo"; + } + return vespaUserEnv.get().trim(); + } + + static private int findVespaWebServicePort() { Optional<String> vespaWebServicePortString = Optional.ofNullable(System.getenv("VESPA_WEB_SERVICE_PORT")); if ( ! vespaWebServicePortString.isPresent() || vespaWebServicePortString.get().trim().isEmpty()) { log.info("VESPA_WEB_SERVICE_PORT not set, using 8080"); @@ -54,6 +65,12 @@ public class Defaults { } /** + * Get the username to own directories, files and processes + * @return the vespa user name + **/ + public String vespaUser() { return vespaUser; } + + /** * Returns the path to the root under which Vespa should read and write files, ending by "/". * * @return the vespa home directory, ending by "/" diff --git a/defaults/src/test/java/com/yahoo/vespa/defaults/DefaultsTestCase.java b/defaults/src/test/java/com/yahoo/vespa/defaults/DefaultsTestCase.java index ef64b6a252a..99a8421ae54 100644 --- a/defaults/src/test/java/com/yahoo/vespa/defaults/DefaultsTestCase.java +++ b/defaults/src/test/java/com/yahoo/vespa/defaults/DefaultsTestCase.java @@ -17,4 +17,9 @@ public class DefaultsTestCase { assertEquals("./my/explicit/relative/path", Defaults.getDefaults().underVespaHome("./my/explicit/relative/path")); } + @Test + public void testFindVespaUser() { + assertEquals("yahoo", Defaults.getDefaults().vespaUser()); + } + } diff --git a/defaults/src/vespa/defaults.cpp b/defaults/src/vespa/defaults.cpp index 74fc36f1859..9e59fe15802 100644 --- a/defaults/src/vespa/defaults.cpp +++ b/defaults/src/vespa/defaults.cpp @@ -9,11 +9,13 @@ #include <vector> #include <unistd.h> #include <atomic> +#include <pwd.h> namespace { const char *defaultHome = "/opt/yahoo/vespa/"; char computedHome[PATH_MAX]; +const char *defaultUser = "yahoo"; int defaultWebServicePort = 8080; int defaultPortBase = 19000; int defaultPortConfigServerRpc = 19070; @@ -63,6 +65,14 @@ void findDefaults() { fprintf(stderr, "warning\tbad VESPA_HOME '%s' (ignored)\n", env); } } + env = getenv("VESPA_USER"); + if (env != NULL) { + if (*env != '0' && getpwnam(env) == 0) { + fprintf(stderr, "warning\tbad VESPA_USER '%s' (ignored)\n", env); + } else { + defaultUser = env; + } + } long p = getNumFromEnv("VESPA_WEB_SERVICE_PORT"); if (p > 0) { // fprintf(stderr, "debug\tdefault web service port is '%ld'\n", p); @@ -157,6 +167,13 @@ Defaults::vespaHome() return defaultHome; } +const char * +Defaults::vespaUser() +{ + findDefaults(); + return defaultUser; +} + int Defaults::vespaWebServicePort() { diff --git a/defaults/src/vespa/defaults.h b/defaults/src/vespa/defaults.h index ec3f78e1e29..738f70f8b19 100644 --- a/defaults/src/vespa/defaults.h +++ b/defaults/src/vespa/defaults.h @@ -26,6 +26,12 @@ public: static const char *vespaHome(); /** + * Compute the user name to own directories and run processes. + * @return the vespa user name + **/ + static const char *vespaUser(); + + /** * Compute the port number where the Vespa webservice * container should be available. * |