]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib, lib-master: Add error_r to t_binary_abspath
authorMartti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
Thu, 29 Dec 2016 21:32:04 +0000 (23:32 +0200)
committerGitLab <gitlab@git.dovecot.net>
Mon, 30 Jan 2017 16:48:15 +0000 (18:48 +0200)
src/lib-master/master-service-settings.c
src/lib/path-util.c
src/lib/path-util.h

index b702a2a8915a8cd80c7d076df6c98c773aa4cfea..c58de51be8dfb4bcc3530cc96ba4d9a2301cd4bb 100644 (file)
@@ -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)
index cc1696b810c7732842349be39afb95b71692c7a7..2c4285be879398c6d8d8b99000b0d18c9f32849e 100644 (file)
@@ -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;
 }
index 6758af8177f8cadaa7edb2c6e6c8ae5e20b4e06d..8492cf370c4ad3770211daa06e989b1d2359fa8f 100644 (file)
@@ -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