git-svn-id: https://svn.testnett.uninett.no/radsecproxy/trunk@200
e88ac4ed-0b26-0410-9574-
a7f39faa03bf
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include "debug.h"
#include "util.h"
#include <sys/types.h>
#include "debug.h"
#include "util.h"
+FILE *pushgconffiles(struct gconffile **cf, const char *path) {
+ int i;
+ FILE *f;
+ glob_t globbuf;
+
+ memset(&globbuf, 0, sizeof(glob_t));
+ if (glob(path, 0, NULL, &globbuf)) {
+ debug(DBG_INFO, "could not glob %s", path);
+ return NULL;
+ }
+ for (i = globbuf.gl_pathc - 1; i >= 0; i--) {
+ f = pushgconffile(cf, globbuf.gl_pathv[i]);
+ if (!f)
+ break;
+ }
+ globfree(&globbuf);
+ return f;
+}
+
FILE *popgconffile(struct gconffile **cf) {
int i;
FILE *popgconffile(struct gconffile **cf) {
int i;
/* initialise lots of stuff to avoid stupid compiler warnings */
char *tokens[3], *s, *opt = NULL, *val = NULL, *word, *optval, **str = NULL, ***mstr = NULL;
int type = 0, tcount, conftype = 0, n;
/* initialise lots of stuff to avoid stupid compiler warnings */
char *tokens[3], *s, *opt = NULL, *val = NULL, *word, *optval, **str = NULL, ***mstr = NULL;
int type = 0, tcount, conftype = 0, n;
void (*cbk)(struct gconffile **, char *, char *, char *) = NULL;
if (!cf || !*cf || !(*cf)->file)
void (*cbk)(struct gconffile **, char *, char *, char *) = NULL;
if (!cf || !*cf || !(*cf)->file)
debugx(1, DBG_ERR, "configuration error, option %s needs a non-empty value", opt);
if (conftype == CONF_STR && !strcasecmp(opt, "include")) {
debugx(1, DBG_ERR, "configuration error, option %s needs a non-empty value", opt);
if (conftype == CONF_STR && !strcasecmp(opt, "include")) {
- pushgconffile(cf, val);
+ if (!pushgconffiles(cf, val))
+ debugx(1, DBG_ERR, "failed to include config file %s", val);
void getgenericconfig(struct gconffile **cf, char *block, ...);
FILE *pushgconffile(struct gconffile **cf, const char *path);
void getgenericconfig(struct gconffile **cf, char *block, ...);
FILE *pushgconffile(struct gconffile **cf, const char *path);
+FILE *pushgconffiles(struct gconffile **cf, const char *path);
FILE *popgconffile(struct gconffile **cf);
FILE *popgconffile(struct gconffile **cf);