diff --git a/src/terminal/ParseConfigFile.hpp b/src/terminal/ParseConfigFile.hpp index 951fc4440..88e5bae58 100644 --- a/src/terminal/ParseConfigFile.hpp +++ b/src/terminal/ParseConfigFile.hpp @@ -6,6 +6,7 @@ // #include // #include +#include #include #include #include @@ -1248,7 +1249,23 @@ static int ssh_config_parse_line(const char *targethost, if (p) { char *filename = ssh_path_expand_tilde(p); if (filename) { - local_parse_file(targethost, options, filename, parsing, seen); + if (strchr(filename, '*') || strchr(filename, '?')) { + std::string dir = fs::path(filename).parent_path().string(); + std::string pattern = fs::path(filename).filename().string(); + std::regex pattern_regex(std::regex_replace( + std::regex_replace(pattern, std::regex(R"(\.)"), R"(\.)"), + std::regex(R"(\*)"), ".*")); + for (const auto &entry : + fs::directory_iterator(dir.empty() ? "." : dir)) { + if (std::regex_match(entry.path().filename().string(), + pattern_regex)) { + local_parse_file(targethost, options, + entry.path().string().c_str(), parsing, seen); + } + } + } else { + local_parse_file(targethost, options, filename, parsing, seen); + } } SAFE_FREE(filename); }