From ff4771ab020d56b794f30d38b03a0bfe3e43ec4c Mon Sep 17 00:00:00 2001 From: Ian Barwick Date: Thu, 14 May 2020 15:32:04 +0900 Subject: [PATCH] configuration: reject direct recursion Ensure a configuration file can't include itself. This is the same behaviour as core PostgreSQL. --- configfile-scan.l | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/configfile-scan.l b/configfile-scan.l index b33716ef..d4da6f0f 100644 --- a/configfile-scan.l +++ b/configfile-scan.l @@ -132,7 +132,15 @@ ProcessConfigFile(const char *base_dir, const char *config_file, const char *cal abs_path = AbsoluteConfigLocation(base_dir, config_file, calling_file); - // XXX reject direct recursion. + /* Reject direct recursion */ + if (calling_file && strcmp(abs_path, calling_file) == 0) + { + item_list_append_format(error_list, + _("configuration file recursion in \"%s\""), + calling_file); + pfree(abs_path); + return false; + } fp = fopen(abs_path, "r"); if (!fp) @@ -188,7 +196,8 @@ ProcessConfigFp(FILE *fp, const char *config_file, const char *calling_file, con OK = false; goto cleanup; } - printf("ProcessConfigFp(): base: '%s' file: '%s'; calling: '%s'\n", base_dir, config_file, calling_file); + + //printf("ProcessConfigFp(): base: '%s' file: '%s'; calling: '%s'\n", base_dir, config_file, calling_file); /* * Parse */