diff options
author | Tobias Brunner <tobias@strongswan.org> | 2011-10-14 15:09:56 +0200 |
---|---|---|
committer | Tobias Brunner <tobias@strongswan.org> | 2011-10-14 17:36:20 +0200 |
commit | 345e5330b5ebfd356a03b293e1fca069d52f17ea (patch) | |
tree | 50a2e5802b1730879ac9ae7756c742e11311c639 /src/pluto | |
parent | 5108d9507daf4d10adad7542d37c0c9b3f18ed13 (diff) | |
download | strongswan-345e5330b5ebfd356a03b293e1fca069d52f17ea.tar.bz2 strongswan-345e5330b5ebfd356a03b293e1fca069d52f17ea.tar.xz |
pluto: Added fallback to ipsec.secrets parser if glob(3) is not available.
Diffstat (limited to 'src/pluto')
-rw-r--r-- | src/pluto/keys.c | 36 |
1 files changed, 24 insertions, 12 deletions
diff --git a/src/pluto/keys.c b/src/pluto/keys.c index 4b0e08791..dfdc6bb34 100644 --- a/src/pluto/keys.c +++ b/src/pluto/keys.c @@ -27,10 +27,12 @@ #include <arpa/nameser.h> /* missing from <resolv.h> on old systems */ #include <sys/queue.h> +#ifdef HAVE_GLOB_H #include <glob.h> #ifndef GLOB_ABORTED # define GLOB_ABORTED GLOB_ABEND /* fix for old versions */ #endif +#endif #include <freeswan.h> @@ -1033,7 +1035,6 @@ static void process_secrets_file(const char *file_pat, int whackfd) { struct file_lex_position pos; char **fnp; - glob_t globbuf; pos.depth = flp == NULL? 0 : flp->depth + 1; @@ -1043,8 +1044,10 @@ static void process_secrets_file(const char *file_pat, int whackfd) return; } +#ifdef HAVE_GLOB_H /* do globbing */ { + glob_t globbuf; int r = glob(file_pat, GLOB_ERR, globugh, &globbuf); if (r != 0) @@ -1066,21 +1069,30 @@ static void process_secrets_file(const char *file_pat, int whackfd) globfree(&globbuf); return; } - } - /* for each file... */ - for (fnp = globbuf.gl_pathv; *fnp != NULL; fnp++) - { - if (lexopen(&pos, *fnp, FALSE)) + /* for each file... */ + for (fnp = globbuf.gl_pathv; *fnp != NULL; fnp++) { - plog("loading secrets from \"%s\"", *fnp); - (void) flushline("file starts with indentation (continuation notation)"); - process_secret_records(whackfd); - lexclose(); + if (lexopen(&pos, *fnp, FALSE)) + { + plog("loading secrets from \"%s\"", *fnp); + (void) flushline("file starts with indentation (continuation notation)"); + process_secret_records(whackfd); + lexclose(); + } } - } - globfree(&globbuf); + globfree(&globbuf); + } +#else /* HAVE_GLOB_H */ + /* if glob(3) is not available, try to load pattern directly */ + if (lexopen(&pos, file_pat, FALSE)) + { + plog("loading secrets from \"%s\"", file_pat); + process_secret_records(whackfd); + lexclose(); + } +#endif /* HAVE_GLOB_H */ } void free_preshared_secrets(void) |