Coincidentally I have been working on adding globbing support to
include in the httpd config parser. I have only done light testing,
nothing in production yet but the patch provided below has not given
me any trouble in my test environment yet. Any feedback is welcome!
-Matt
Index: parse.y
===================================================================
RCS file: /cvs/src/usr.sbin/httpd/parse.y,v
retrieving revision 1.128
diff -u -p -u -p -r1.128 parse.y
--- parse.y 27 Feb 2022 20:30:30 -0000 1.128
+++ parse.y 2 Jun 2022 20:29:46 -0000
@@ -52,6 +52,7 @@
#include <string.h>
#include <ifaddrs.h>
#include <syslog.h>
+#include <glob.h>
#include "httpd.h"
#include "http.h"
@@ -165,16 +166,21 @@ grammar : /* empty */
include : INCLUDE STRING {
struct file *nfile;
+ glob_t g;
- if ((nfile = pushfile($2, 0)) == NULL) {
- yyerror("failed to include file %s", $2);
- free($2);
- YYERROR;
+ memset(&g, 0, sizeof(g));
+ glob($2, GLOB_NOCHECK, NULL, &g);
+ for(int i = 0; i < g.gl_pathc; ++i) {
+ if ((nfile = pushfile(g.gl_pathv[i], 0)) ==
NULL) {
+ yyerror("failed to include file %s",
g.gl_pathv[i]);
+ free(g.gl_pathv[i]);
+ YYERROR;
+ }
+ file = nfile;
+ lungetc('\n');
}
+ globfree(&g);
free($2);
-
- file = nfile;
- lungetc('\n');
}
;