From: Martti Rannanjärvi Date: Thu, 29 Dec 2016 21:32:04 +0000 (+0200) Subject: lib, lib-master: Add error_r to t_binary_abspath X-Git-Tag: 2.3.0.rc1~2210 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d764f67e463b5d8ea3dc9f5c932bf83d76cad1f0;p=thirdparty%2Fdovecot%2Fcore.git lib, lib-master: Add error_r to t_binary_abspath --- diff --git a/src/lib-master/master-service-settings.c b/src/lib-master/master-service-settings.c index b702a2a891..c58de51be8 100644 --- a/src/lib-master/master-service-settings.c +++ b/src/lib-master/master-service-settings.c @@ -108,10 +108,12 @@ master_service_exec_config(struct master_service *service, const struct master_service_settings_input *input) { const char **conf_argv, *binary_path = service->argv[0]; - const char *home = NULL, *user = NULL, *timestamp = NULL; + const char *home = NULL, *user = NULL, *timestamp = NULL, *error = NULL; unsigned int i, argv_max_count; - (void)t_binary_abspath(&binary_path); + if (!t_binary_abspath(&binary_path, &error)) { + i_fatal("t_binary_abspath(%s) failed: %s", binary_path, error); + } if (!service->keep_environment && !input->preserve_environment) { if (input->preserve_home) diff --git a/src/lib/path-util.c b/src/lib/path-util.c index cc1696b810..2c4285be87 100644 --- a/src/lib/path-util.c +++ b/src/lib/path-util.c @@ -334,7 +334,7 @@ int t_readlink(const char *path, const char **dest_r, const char **error_r) return 0; } -bool t_binary_abspath(const char **binpath) +bool t_binary_abspath(const char **binpath, const char **error_r) { const char *path_env, *const *paths; string_t *path; @@ -346,8 +346,8 @@ bool t_binary_abspath(const char **binpath) /* relative to current directory */ const char *error; if (t_abspath(*binpath, binpath, &error) < 0) { - i_error("t_abspath(%s) failed: %s", - *binpath, error); + *error_r = t_strdup_printf("t_abspath(%s) failed: %s", + *binpath, error); return FALSE; } return TRUE; @@ -365,6 +365,10 @@ bool t_binary_abspath(const char **binpath) } str_truncate(path, 0); } + *error_r = "Could not find the wanted executable from PATH"; + return FALSE; + } else { + *error_r = "PATH environment variable undefined"; + return FALSE; } - return FALSE; } diff --git a/src/lib/path-util.h b/src/lib/path-util.h index 6758af8177..8492cf370c 100644 --- a/src/lib/path-util.h +++ b/src/lib/path-util.h @@ -58,11 +58,12 @@ int t_get_working_dir(const char **dir_r, const char **error_r); int t_readlink(const char *path, const char **dest_r, const char **error_r); /* Update binpath to be absolute: - a) begins with '/' -> no change - b) contains '/' -> assume relative to working directory - c) set to first executable that's found from $PATH - - If no usable binary was found, return FALSE. */ -bool t_binary_abspath(const char **binpath); + * a) begins with '/' -> no change + * b) contains '/' -> assume relative to working directory + * c) set to first executable that's found from $PATH + * + * error_r is set on failure, and cannot be NULL. + */ +bool t_binary_abspath(const char **binpath, const char **error_r); #endif