From 99c5160cb5a1a169f86d334017efde4cef23ead8 Mon Sep 17 00:00:00 2001 From: NoName115 Date: Wed, 25 Oct 2017 14:20:52 +0200 Subject: config: glob support for include with test Signed-off-by: NoName115 Reviewed-by: Andreas Schneider --- src/config.c | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/config.c b/src/config.c index 330fb7ee..cedf34e4 100644 --- a/src/config.c +++ b/src/config.c @@ -27,6 +27,7 @@ #include #include #include +#include #include "libssh/priv.h" #include "libssh/session.h" @@ -316,6 +317,33 @@ static void local_parse_file(ssh_session session, const char *filename, int *par return; } +static void local_parse_glob(ssh_session session, + const char *fileglob, + int *parsing, + int seen[]) +{ + glob_t globbuf = {0}; + int rt; + u_int i; + + rt = glob(fileglob, GLOB_TILDE, NULL, &globbuf); + if (rt == GLOB_NOMATCH) { + globfree(&globbuf); + return; + } else if (rt != 0) { + SSH_LOG(SSH_LOG_RARE, "Glob error: %s", + fileglob); + globfree(&globbuf); + return; + } + + for (i = 0; i < globbuf.gl_pathc; i++) { + local_parse_file(session, globbuf.gl_pathv[i], parsing, seen); + } + + globfree(&globbuf); +} + static int ssh_config_parse_line(ssh_session session, const char *line, unsigned int count, int *parsing, int seen[]) { enum ssh_config_opcode_e opcode; @@ -361,7 +389,7 @@ static int ssh_config_parse_line(ssh_session session, const char *line, p = ssh_config_get_str_tok(&s, NULL); if (p && *parsing) { - local_parse_file(session, p, parsing, seen); + local_parse_glob(session, p, parsing, seen); } break; case SOC_HOST: { -- cgit v1.2.3