|
diff --git a/cgitrc b/cgitrc index 019781e..e7e731c 100644 --- a/ cgitrc+++ b/ cgitrc |
|
@@ -63,6 +63,9 @@ |
63 | #cache-root=/var/cache/cgit |
63 | #cache-root=/var/cache/cgit |
64 | |
64 | |
65 | |
65 | |
| |
66 | ## Include another config-file |
| |
67 | #include=/var/cgit/repolist |
| |
68 | |
66 | ## |
69 | ## |
67 | ## Time-To-Live settings: specifies how long (in minutes) different pages |
70 | ## Time-To-Live settings: specifies how long (in minutes) different pages |
68 | ## should be cached (0 for instant expiration, -1 for immortal pages) |
71 | ## should be cached (0 for instant expiration, -1 for immortal pages) |
|
|
diff --git a/parsing.c b/parsing.c index 332d61c..8e15e5a 100644 --- a/ parsing.c+++ b/ parsing.c |
|
@@ -64,19 +64,21 @@ int read_config_line(FILE *f, char *line, const char **value, int bufsize) |
64 | |
64 | |
65 | int cgit_read_config(const char *filename, configfn fn) |
65 | int cgit_read_config(const char *filename, configfn fn) |
66 | { |
66 | { |
67 | int ret = 0, len; |
67 | static int nesting; |
| |
68 | int len; |
68 | char line[256]; |
69 | char line[256]; |
69 | const char *value; |
70 | const char *value; |
70 | FILE *f = fopen(filename, "r"); |
71 | FILE *f; |
71 | |
72 | |
72 | if (!f) |
73 | /* cancel the reading of yet another configfile after 16 invocations */ |
| |
74 | if (nesting++ > 16) |
| |
75 | return -1; |
| |
76 | if (!(f = fopen(filename, "r"))) |
73 | return -1; |
77 | return -1; |
74 | |
| |
75 | while((len = read_config_line(f, line, &value, sizeof(line))) > 0) |
78 | while((len = read_config_line(f, line, &value, sizeof(line))) > 0) |
76 | (*fn)(line, value); |
79 | (*fn)(line, value); |
77 | |
| |
78 | fclose(f); |
80 | fclose(f); |
79 | return ret; |
81 | return 0; |
80 | } |
82 | } |
81 | |
83 | |
82 | char *convert_query_hexchar(char *txt) |
84 | char *convert_query_hexchar(char *txt) |
|
|
diff --git a/shared.c b/shared.c index ffecac8..072bb6d 100644 --- a/ shared.c+++ b/ shared.c |
|
@@ -137,6 +137,8 @@ void cgit_global_config_cb(const char *name, const char *value) |
137 | cgit_repo->snapshots = atoi(value); |
137 | cgit_repo->snapshots = atoi(value); |
138 | else if (cgit_repo && !strcmp(name, "repo.module-link")) |
138 | else if (cgit_repo && !strcmp(name, "repo.module-link")) |
139 | cgit_repo->module_link= xstrdup(value); |
139 | cgit_repo->module_link= xstrdup(value); |
| |
140 | else if (!strcmp(name, "include")) |
| |
141 | cgit_read_config(value, cgit_global_config_cb); |
140 | } |
142 | } |
141 | |
143 | |
142 | void cgit_repo_config_cb(const char *name, const char *value) |
144 | void cgit_repo_config_cb(const char *name, const char *value) |
|