From a6390879d51c8193d1ef59920b7da0d65f191803 Mon Sep 17 00:00:00 2001 From: Tobias Brunner Date: Tue, 22 Mar 2011 19:17:51 +0100 Subject: [PATCH] Make availability of glob(3) optional in settings_t. If glob(3) is not available just try to open the pattern as regular file. The reason for this change is that glob(3) is not available on Android. --- configure.in | 2 +- src/libstrongswan/settings.c | 55 ++++++++++++++++++++++-------------- 2 files changed, 35 insertions(+), 22 deletions(-) diff --git a/configure.in b/configure.in index 2bb79f345..6dcf65c4c 100644 --- a/configure.in +++ b/configure.in @@ -348,7 +348,7 @@ AC_CHECK_FUNCS(prctl) AC_CHECK_FUNCS(mallinfo) -AC_CHECK_HEADERS(sys/sockio.h) +AC_CHECK_HEADERS(sys/sockio.h glob.h) AC_CHECK_HEADERS(net/pfkeyv2.h netipsec/ipsec.h netinet6/ipsec.h linux/udp.h) AC_CHECK_MEMBERS([struct sockaddr.sa_len], [], [], diff --git a/src/libstrongswan/settings.c b/src/libstrongswan/settings.c index ff2973e55..82a24e997 100644 --- a/src/libstrongswan/settings.c +++ b/src/libstrongswan/settings.c @@ -20,12 +20,15 @@ #include #include #include -#include #include #include #include #include +#ifdef HAVE_GLOB_H +#include +#endif /* HAVE_GLOB_H */ + #include "settings.h" #include "debug.h" @@ -969,16 +972,15 @@ static bool parse_file(linked_list_t *contents, char *file, int level, } /** - * Load the files matching "pattern", which is resolved with glob(3). + * Load the files matching "pattern", which is resolved with glob(3), if + * available. * If the pattern is relative, the directory of "file" is used as base. */ static bool parse_files(linked_list_t *contents, char *file, int level, char *pattern, section_t *section) { bool success = TRUE; - int status; - glob_t buf; - char **expanded, pat[PATH_MAX]; + char pat[PATH_MAX]; if (level > MAX_INCLUSION_LEVEL) { @@ -1013,28 +1015,39 @@ static bool parse_files(linked_list_t *contents, char *file, int level, } free(dir); } - status = glob(pat, GLOB_ERR, NULL, &buf); - if (status == GLOB_NOMATCH) +#ifdef HAVE_GLOB_H { - DBG2(DBG_LIB, "no files found matching '%s', ignored", pat); - } - else if (status != 0) - { - DBG1(DBG_LIB, "expanding file pattern '%s' failed", pat); - success = FALSE; - } - else - { - for (expanded = buf.gl_pathv; *expanded != NULL; expanded++) + int status; + glob_t buf; + + status = glob(pat, GLOB_ERR, NULL, &buf); + if (status == GLOB_NOMATCH) { - success &= parse_file(contents, *expanded, level + 1, section); - if (!success) + DBG2(DBG_LIB, "no files found matching '%s', ignored", pat); + } + else if (status != 0) + { + DBG1(DBG_LIB, "expanding file pattern '%s' failed", pat); + success = FALSE; + } + else + { + char **expanded; + for (expanded = buf.gl_pathv; *expanded != NULL; expanded++) { - break; + success &= parse_file(contents, *expanded, level + 1, section); + if (!success) + { + break; + } } } + globfree(&buf); } - globfree(&buf); +#else /* HAVE_GLOB_H */ + /* if glob(3) is not available, try to load pattern directly */ + success = parse_file(contents, pat, level + 1, section); +#endif /* HAVE_GLOB_H */ return success; }