From f056ccbd604d63185763f774c5105f3208919306 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Tue, 8 Nov 2022 09:51:20 +0900 Subject: [PATCH v17 1/3] Expand the use of AbsoluteConfigLocation() in hba.c The logic in charge of expanding an include file for database and user names used the same code as AbsoluteConfigLocation() when building the configuration file to include, so simplify this code. While on it, remove the restriction to MAXPGPATH, and switch to the same method as what tokenize_inc_file() used. --- src/backend/libpq/hba.c | 17 ++--------------- src/backend/utils/misc/conffiles.c | 12 ++++++++---- 2 files changed, 10 insertions(+), 19 deletions(-) diff --git a/src/backend/libpq/hba.c b/src/backend/libpq/hba.c index e9fc0af7c9..a9f87ab5bf 100644 --- a/src/backend/libpq/hba.c +++ b/src/backend/libpq/hba.c @@ -41,6 +41,7 @@ #include "storage/fd.h" #include "utils/acl.h" #include "utils/builtins.h" +#include "utils/conffiles.h" #include "utils/guc.h" #include "utils/lsyscache.h" #include "utils/memutils.h" @@ -466,21 +467,7 @@ tokenize_inc_file(List *tokens, ListCell *inc_line; MemoryContext linecxt; - if (is_absolute_path(inc_filename)) - { - /* absolute path is taken as-is */ - inc_fullname = pstrdup(inc_filename); - } - else - { - /* relative path is relative to dir of calling file */ - inc_fullname = (char *) palloc(strlen(outer_filename) + 1 + - strlen(inc_filename) + 1); - strcpy(inc_fullname, outer_filename); - get_parent_directory(inc_fullname); - join_path_components(inc_fullname, inc_fullname, inc_filename); - canonicalize_path(inc_fullname); - } + inc_fullname = AbsoluteConfigLocation(inc_filename, outer_filename); inc_file = AllocateFile(inc_fullname, "r"); if (inc_file == NULL) diff --git a/src/backend/utils/misc/conffiles.c b/src/backend/utils/misc/conffiles.c index 4a99a1961e..35e2a3790b 100644 --- a/src/backend/utils/misc/conffiles.c +++ b/src/backend/utils/misc/conffiles.c @@ -35,15 +35,17 @@ char * AbsoluteConfigLocation(const char *location, const char *calling_file) { - char abs_path[MAXPGPATH]; - if (is_absolute_path(location)) return pstrdup(location); else { + char *abs_path; + if (calling_file != NULL) { - strlcpy(abs_path, calling_file, sizeof(abs_path)); + abs_path = (char *) palloc0(strlen(calling_file) + 1 + + strlen(location) + 1); + strcpy(abs_path, calling_file); get_parent_directory(abs_path); join_path_components(abs_path, abs_path, location); canonicalize_path(abs_path); @@ -51,10 +53,12 @@ AbsoluteConfigLocation(const char *location, const char *calling_file) else { Assert(DataDir); + abs_path = (char *) palloc0(strlen(DataDir) + 1 + + strlen(location) + 1); join_path_components(abs_path, DataDir, location); canonicalize_path(abs_path); } - return pstrdup(abs_path); + return abs_path; } } -- 2.38.1