|
diff --git a/cgitrc b/cgitrc index 019781e..e7e731c 100644 --- a/ cgitrc+++ b/ cgitrc |
|
@@ -58,28 +58,31 @@ |
58 | ## Number of commits per page in log view |
58 | ## Number of commits per page in log view |
59 | #max-commit-count=50 |
59 | #max-commit-count=50 |
60 | |
60 | |
61 | |
61 | |
62 | ## Root of cached output |
62 | ## Root of cached output |
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) |
69 | ## |
72 | ## |
70 | |
73 | |
71 | ## ttl for root page |
74 | ## ttl for root page |
72 | #cache-root-ttl=5 |
75 | #cache-root-ttl=5 |
73 | |
76 | |
74 | ## ttl for repo summary page |
77 | ## ttl for repo summary page |
75 | #cache-repo-ttl=5 |
78 | #cache-repo-ttl=5 |
76 | |
79 | |
77 | ## ttl for other dynamic pages |
80 | ## ttl for other dynamic pages |
78 | #cache-dynamic-ttl=5 |
81 | #cache-dynamic-ttl=5 |
79 | |
82 | |
80 | ## ttl for static pages (addressed by SHA-1) |
83 | ## ttl for static pages (addressed by SHA-1) |
81 | #cache-static-ttl=-1 |
84 | #cache-static-ttl=-1 |
82 | |
85 | |
83 | |
86 | |
84 | |
87 | |
85 | ## Example repository entry. Required values are repo.url and repo.path (each |
88 | ## Example repository entry. Required values are repo.url and repo.path (each |
|
|
diff --git a/parsing.c b/parsing.c index 332d61c..8e15e5a 100644 --- a/ parsing.c+++ b/ parsing.c |
|
@@ -59,29 +59,31 @@ int read_config_line(FILE *f, char *line, const char **value, int bufsize) |
59 | i++; |
59 | i++; |
60 | } |
60 | } |
61 | line[i+1] = 0; |
61 | line[i+1] = 0; |
62 | return i; |
62 | return i; |
63 | } |
63 | } |
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) |
83 | { |
85 | { |
84 | int d1, d2; |
86 | int d1, d2; |
85 | if (strlen(txt) < 3) { |
87 | if (strlen(txt) < 3) { |
86 | *txt = '\0'; |
88 | *txt = '\0'; |
87 | return txt-1; |
89 | return txt-1; |
|
|
diff --git a/shared.c b/shared.c index ffecac8..072bb6d 100644 --- a/ shared.c+++ b/ shared.c |
|
@@ -132,16 +132,18 @@ void cgit_global_config_cb(const char *name, const char *value) |
132 | else if (cgit_repo && !strcmp(name, "repo.desc")) |
132 | else if (cgit_repo && !strcmp(name, "repo.desc")) |
133 | cgit_repo->desc = xstrdup(value); |
133 | cgit_repo->desc = xstrdup(value); |
134 | else if (cgit_repo && !strcmp(name, "repo.owner")) |
134 | else if (cgit_repo && !strcmp(name, "repo.owner")) |
135 | cgit_repo->owner = xstrdup(value); |
135 | cgit_repo->owner = xstrdup(value); |
136 | else if (cgit_repo && !strcmp(name, "repo.snapshots")) |
136 | else if (cgit_repo && !strcmp(name, "repo.snapshots")) |
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) |
143 | { |
145 | { |
144 | if (!strcmp(name, "name")) |
146 | if (!strcmp(name, "name")) |
145 | cgit_repo_name = xstrdup(value); |
147 | cgit_repo_name = xstrdup(value); |
146 | else if (!strcmp(name, "desc")) |
148 | else if (!strcmp(name, "desc")) |
147 | cgit_repo_desc = xstrdup(value); |
149 | cgit_repo_desc = xstrdup(value); |
|