aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.submodule2
-rw-r--r--src/bind-lex.l17
-rw-r--r--src/grecs.h2
-rw-r--r--src/preproc.c34
-rw-r--r--tests/Makefile.am15
-rw-r--r--tests/bind.conf126
-rw-r--r--tests/bind.dlz33
-rw-r--r--tests/bind.ext.conf25
-rw-r--r--tests/bind.int.conf17
-rw-r--r--tests/bind.keys11
-rw-r--r--tests/gcffmt.c8
-rw-r--r--tests/parser-bind.at95
-rw-r--r--tests/testsuite.at1
13 files changed, 363 insertions, 23 deletions
diff --git a/README.submodule b/README.submodule
index 03428d4..3067e92 100644
--- a/README.submodule
+++ b/README.submodule
@@ -32,7 +32,7 @@ recursively, joining several trees together, reductions, etc.
32 32
331. Install grecs as a submodule: 331. Install grecs as a submodule:
34 34
35 git submodule git.gnu.org.ua/gitroot/grecs.git grecs 35 git submodule git://git.gnu.org.ua/grecs.git grecs
36 36
372. Add a call to GRECS_SETUP to your configure.ac. It can be as 372. Add a call to GRECS_SETUP to your configure.ac. It can be as
38simple as: 38simple as:
diff --git a/src/bind-lex.l b/src/bind-lex.l
index 12dddf7..a5cf644 100644
--- a/src/bind-lex.l
+++ b/src/bind-lex.l
@@ -192,11 +192,24 @@ grecs_bind_new_source(const char *name)
192 grecs_locus_t *loc = grecs_current_locus.file ? 192 grecs_locus_t *loc = grecs_current_locus.file ?
193 &grecs_current_locus : NULL; 193 &grecs_current_locus : NULL;
194 struct stat st; 194 struct stat st;
195 FILE *fp = fopen(name, "r"); 195 FILE *fp;
196
197 if (access(name, F_OK)) {
198 int ec = errno;
199 char *tmp = grecs_find_include_file(name, 0);
200 if (!tmp) {
201 grecs_error(loc, ec, _("cannot open `%s'"), name);
202 return 1;
203 }
204 name = grecs_install_text(tmp);
205 free(tmp);
206 }
207
208 fp = fopen(name, "r");
196 if (!fp) { 209 if (!fp) {
197 grecs_error(loc, errno, _("cannot open `%s'"), name); 210 grecs_error(loc, errno, _("cannot open `%s'"), name);
198 return 1; 211 return 1;
199 } 212 }
200 if (fstat(fileno(fp), &st)) { 213 if (fstat(fileno(fp), &st)) {
201 grecs_error(loc, errno, _("can't state %s"), name); 214 grecs_error(loc, errno, _("can't state %s"), name);
202 fclose(fp); 215 fclose(fp);
diff --git a/src/grecs.h b/src/grecs.h
index b839d71..5eef48d 100644
--- a/src/grecs.h
+++ b/src/grecs.h
@@ -263,6 +263,8 @@ int grecs_preproc_init(const char *name);
263void grecs_preproc_done(void); 263void grecs_preproc_done(void);
264int grecs_preproc_run(const char *config_file, const char *extpp); 264int grecs_preproc_run(const char *config_file, const char *extpp);
265 265
266char *grecs_find_include_file(const char *name, int allow_cwd);
267
266FILE *grecs_preproc_extrn_start(const char *file, pid_t *ppid); 268FILE *grecs_preproc_extrn_start(const char *file, pid_t *ppid);
267void grecs_preproc_extrn_shutdown(pid_t pid); 269void grecs_preproc_extrn_shutdown(pid_t pid);
268 270
diff --git a/src/preproc.c b/src/preproc.c
index 8debdcf..4ab3066 100644
--- a/src/preproc.c
+++ b/src/preproc.c
@@ -472,8 +472,8 @@ pop_source()
472 return 0; 472 return 0;
473} 473}
474 474
475static int 475char *
476try_file(const char *name, int allow_cwd, int err_not_found, char **newp) 476grecs_find_include_file(const char *name, int allow_cwd)
477{ 477{
478 static char *cwd = "."; 478 static char *cwd = ".";
479 struct file_data fd; 479 struct file_data fd;
@@ -495,16 +495,10 @@ try_file(const char *name, int allow_cwd, int err_not_found, char **newp)
495 495
496 if (!fd.found) { 496 if (!fd.found) {
497 pp_list_find(std_include_path, &fd); 497 pp_list_find(std_include_path, &fd);
498 498 if (!fd.found)
499 if (!fd.found && err_not_found) { 499 return NULL;
500 grecs_error(&LOCUS, 0,
501 _("%s: No such file or directory"), name);
502 *newp = NULL;
503 }
504 } 500 }
505 if (fd.found) 501 return fd.buf;
506 *newp = fd.buf;
507 return fd.found;
508} 502}
509 503
510static int 504static int
@@ -535,8 +529,13 @@ parse_include(const char *text, int once)
535 else 529 else
536 allow_cwd = 1; 530 allow_cwd = 1;
537 531
538 if (p[0] != '/' && try_file(p, allow_cwd, 1, &tmp)) 532 if (p[0] != '/') {
539 p = tmp; 533 p = grecs_find_include_file(p, allow_cwd);
534 if (!p)
535 grecs_error(&LOCUS, 0,
536 _("%s: No such file or directory"),
537 p);
538 }
540 } 539 }
541 540
542 if (p) 541 if (p)
@@ -573,18 +572,19 @@ grecs_preproc_run(const char *config_file, const char *extpp)
573 FILE *outfile; 572 FILE *outfile;
574 char *setup_file; 573 char *setup_file;
575 char *cmd = NULL; 574 char *cmd = NULL;
576 575
577 if (try_file("pp-setup", 1, 0, &setup_file)) { 576 setup_file = grecs_find_include_file("pp-setup", 1);
577 if (setup_file) {
578 size_t size = 0; 578 size_t size = 0;
579 if (grecs_asprintf(&cmd, &size, 579 if (grecs_asprintf(&cmd, &size,
580 "%s %s -", extpp, setup_file)) 580 "%s %s -", extpp, setup_file))
581 grecs_alloc_die(); 581 grecs_alloc_die();
582 grecs_free(setup_file); 582 grecs_free(setup_file);
583 } else 583 } else
584 cmd = grecs_strdup (extpp); 584 cmd = grecs_strdup(extpp);
585 /*FIXME_DEBUG_F1 (2, "Running preprocessor: `%s'", cmd);*/ 585 /*FIXME_DEBUG_F1 (2, "Running preprocessor: `%s'", cmd);*/
586 outfile = popen(cmd, "w"); 586 outfile = popen(cmd, "w");
587 if (!outfile){ 587 if (!outfile) {
588 grecs_error(NULL, errno, 588 grecs_error(NULL, errno,
589 _("Unable to start external preprocessor `%s'"), 589 _("Unable to start external preprocessor `%s'"),
590 cmd); 590 cmd);
diff --git a/tests/Makefile.am b/tests/Makefile.am
index f5d1f6f..1b47712 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -14,7 +14,19 @@
14# You should have received a copy of the GNU General Public License 14# You should have received a copy of the GNU General Public License
15# along with Grecs. If not, see <http://www.gnu.org/licenses/>. 15# along with Grecs. If not, see <http://www.gnu.org/licenses/>.
16 16
17EXTRA_DIST = $(TESTSUITE_AT) testsuite package.m4 gcf1.conf meta1.conf git.conf 17EXTRA_DIST = \
18 $(TESTSUITE_AT)\
19 testsuite\
20 package.m4\
21 gcf1.conf\
22 bind.conf\
23 bind.keys\
24 bind.int.conf\
25 bind.ext.conf\
26 bind.dlz\
27 meta1.conf\
28 git.conf
29
18DISTCLEANFILES = atconfig $(check_SCRIPTS) 30DISTCLEANFILES = atconfig $(check_SCRIPTS)
19MAINTAINERCLEANFILES = Makefile.in $(TESTSUITE) 31MAINTAINERCLEANFILES = Makefile.in $(TESTSUITE)
20 32
@@ -51,6 +63,7 @@ TESTSUITE_AT = \
51 glob03.at\ 63 glob03.at\
52 enum.at\ 64 enum.at\
53 join.at\ 65 join.at\
66 parser-bind.at\
54 parser-git.at\ 67 parser-git.at\
55 parser-meta1.at\ 68 parser-meta1.at\
56 peek00.at\ 69 peek00.at\
diff --git a/tests/bind.conf b/tests/bind.conf
new file mode 100644
index 0000000..2579a58
--- /dev/null
+++ b/tests/bind.conf
@@ -0,0 +1,126 @@
1# Sample Bind configuration file for Grecs testsuite.
2# Nothing to copyright, really:)
3
4acl upd-dyn-vpn {
5 key vpn.;
6 10.11.0.1;
7 10.10.0.1;
8};
9
10acl foo-acl {
11 key foo.;
12};
13
14options {
15 version "Grecs testsuite";
16 coresize 0;
17 directory "/etc/namedb";
18 pid-file "/var/log/bind/named.pid";
19 allow-transfer {
20 foo-acl;
21 };
22 allow-query {
23 any;
24 };
25 serial-query-rate 5;
26 max-journal-size 5m;
27 check-names master warn;
28 check-names slave warn;
29 check-names response ignore;
30};
31
32logging {
33 channel default_channel {
34 file "/var/log/bind/named.log" versions 9 size 524288;
35 print-time yes;
36 print-severity yes;
37 };
38 channel debug_channel {
39 file "/var/log/bind/named.run" versions 9 size 524288;
40 print-time yes;
41 print-severity yes;
42 severity dynamic;
43 };
44 channel security_channel {
45