From: Timo Sirainen Date: Wed, 6 May 2009 19:22:35 +0000 (-0400) Subject: Fixed running / when building absolute path for doveconf -e. X-Git-Tag: 2.0.alpha1~810 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=8bf9eec2783abd32643578460cc6ba4ab0a647f9;p=thirdparty%2Fdovecot%2Fcore.git Fixed running / when building absolute path for doveconf -e. --HG-- branch : HEAD --- diff --git a/src/lib-master/master-service-settings.c b/src/lib-master/master-service-settings.c index d3a90e1a15..53cec8f697 100644 --- a/src/lib-master/master-service-settings.c +++ b/src/lib-master/master-service-settings.c @@ -56,10 +56,17 @@ static void ATTR_NORETURN master_service_exec_config(struct master_service *service, bool preserve_home) { const char **conf_argv, *path, *const *paths, *binary_path; + char full_path[PATH_MAX]; binary_path = service->argv[0]; - path = getenv("PATH"); - if (*service->argv[0] != '/' && path != NULL) { + if (*service->argv[0] == '/') { + /* already have the path */ + } else if (strchr(service->argv[0], '/') != NULL) { + /* relative to current directory */ + if (realpath(service->argv[0], full_path) == NULL) + i_fatal("realpath(%s) failed: %m", service->argv[0]); + binary_path = full_path; + } else if ((path = getenv("PATH")) != NULL) { /* we have to find our executable from path */ paths = t_strsplit(path, ":"); for (; *paths != NULL; paths++) {