summaryrefslogtreecommitdiffabout
authorLars Hjemli <hjemli@gmail.com>2007-05-15 22:14:51 (UTC)
committer Lars Hjemli <hjemli@gmail.com>2007-05-15 22:16:00 (UTC)
commitb28b105ec172b258ae5d629381a5890697c2f938 (patch) (unidiff)
tree0673dc5ed94c8ce99c714d1204b6582f9ba96fc5
parent47a81c77fdd017227632c4df9a0b7b135b8a738d (diff)
downloadcgit-b28b105ec172b258ae5d629381a5890697c2f938.zip
cgit-b28b105ec172b258ae5d629381a5890697c2f938.tar.gz
cgit-b28b105ec172b258ae5d629381a5890697c2f938.tar.bz2
Enable default value for head parameter
Pages which expect head to be specified in the querystring can now be given a default value, configurable per repository (via repo.defbranch, which defaults to "master"). Currently, only the log page actually works without parameters, but the defbranch is bound to be exploited. This also removes some dead code from shared.c Signed-off-by: Lars Hjemli <hjemli@gmail.com>
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--cgit.c3
-rw-r--r--cgit.h1
-rw-r--r--shared.c17
3 files changed, 7 insertions, 14 deletions
diff --git a/cgit.c b/cgit.c
index 3c11ff0..b282a67 100644
--- a/cgit.c
+++ b/cgit.c
@@ -56,24 +56,27 @@ static int cgit_prepare_cache(struct cacheitem *item)
56 item->ttl = cgit_cache_static_ttl; 56 item->ttl = cgit_cache_static_ttl;
57 else 57 else
58 item->ttl = cgit_cache_repo_ttl; 58 item->ttl = cgit_cache_repo_ttl;
59 } 59 }
60 return 1; 60 return 1;
61} 61}
62 62
63static void cgit_print_repo_page(struct cacheitem *item) 63static void cgit_print_repo_page(struct cacheitem *item)
64{ 64{
65 char *title; 65 char *title;
66 int show_search; 66 int show_search;
67 67
68 if (!cgit_query_head)
69 cgit_query_head = cgit_repo->defbranch;
70
68 if (chdir(cgit_repo->path)) { 71 if (chdir(cgit_repo->path)) {
69 title = fmt("%s - %s", cgit_root_title, "Bad request"); 72 title = fmt("%s - %s", cgit_root_title, "Bad request");
70 cgit_print_docstart(title, item); 73 cgit_print_docstart(title, item);
71 cgit_print_pageheader(title, 0); 74 cgit_print_pageheader(title, 0);
72 cgit_print_error(fmt("Unable to scan repository: %s", 75 cgit_print_error(fmt("Unable to scan repository: %s",
73 strerror(errno))); 76 strerror(errno)));
74 cgit_print_docend(); 77 cgit_print_docend();
75 return; 78 return;
76 } 79 }
77 80
78 title = fmt("%s - %s", cgit_repo->name, cgit_repo->desc); 81 title = fmt("%s - %s", cgit_repo->name, cgit_repo->desc);
79 show_search = 0; 82 show_search = 0;
diff --git a/cgit.h b/cgit.h
index f5906ad..ac710a6 100644
--- a/cgit.h
+++ b/cgit.h
@@ -26,24 +26,25 @@ struct cacheitem {
26 char *name; 26 char *name;
27 struct stat st; 27 struct stat st;
28 int ttl; 28 int ttl;
29 int fd; 29 int fd;
30}; 30};
31 31
32struct repoinfo { 32struct repoinfo {
33 char *url; 33 char *url;
34 char *name; 34 char *name;
35 char *path; 35 char *path;
36 char *desc; 36 char *desc;
37 char *owner; 37 char *owner;
38 char *defbranch;
38 char *module_link; 39 char *module_link;
39 int snapshots; 40 int snapshots;
40}; 41};
41 42
42struct repolist { 43struct repolist {
43 int length; 44 int length;
44 int count; 45 int count;
45 struct repoinfo *repos; 46 struct repoinfo *repos;
46}; 47};
47 48
48struct commitinfo { 49struct commitinfo {
49 struct commit *commit; 50 struct commit *commit;
diff --git a/shared.c b/shared.c
index 8505397..a1e1acd 100644
--- a/shared.c
+++ b/shared.c
@@ -23,28 +23,24 @@ char *cgit_cache_root = "/var/cache/cgit";
23int cgit_nocache = 0; 23int cgit_nocache = 0;
24int cgit_snapshots = 0; 24int cgit_snapshots = 0;
25int cgit_max_lock_attempts = 5; 25int cgit_max_lock_attempts = 5;
26int cgit_cache_root_ttl = 5; 26int cgit_cache_root_ttl = 5;
27int cgit_cache_repo_ttl = 5; 27int cgit_cache_repo_ttl = 5;
28int cgit_cache_dynamic_ttl = 5; 28int cgit_cache_dynamic_ttl = 5;
29int cgit_cache_static_ttl = -1; 29int cgit_cache_static_ttl = -1;
30int cgit_cache_max_create_time = 5; 30int cgit_cache_max_create_time = 5;
31 31
32int cgit_max_msg_len = 60; 32int cgit_max_msg_len = 60;
33int cgit_max_commit_count = 50; 33int cgit_max_commit_count = 50;
34 34
35char *cgit_repo_name = NULL;
36char *cgit_repo_desc = NULL;
37char *cgit_repo_owner = NULL;
38
39int cgit_query_has_symref = 0; 35int cgit_query_has_symref = 0;
40int cgit_query_has_sha1 = 0; 36int cgit_query_has_sha1 = 0;
41 37
42char *cgit_querystring = NULL; 38char *cgit_querystring = NULL;
43char *cgit_query_repo = NULL; 39char *cgit_query_repo = NULL;
44char *cgit_query_page = NULL; 40char *cgit_query_page = NULL;
45char *cgit_query_head = NULL; 41char *cgit_query_head = NULL;
46char *cgit_query_search = NULL; 42char *cgit_query_search = NULL;
47char *cgit_query_sha1 = NULL; 43char *cgit_query_sha1 = NULL;
48char *cgit_query_sha2 = NULL; 44char *cgit_query_sha2 = NULL;
49char *cgit_query_path = NULL; 45char *cgit_query_path = NULL;
50char *cgit_query_name = NULL; 46char *cgit_query_name = NULL;
@@ -77,24 +73,25 @@ struct repoinfo *add_repo(const char *url)
77 cgit_repolist.length *= 2; 73 cgit_repolist.length *= 2;
78 cgit_repolist.repos = xrealloc(cgit_repolist.repos, 74 cgit_repolist.repos = xrealloc(cgit_repolist.repos,
79 cgit_repolist.length * 75 cgit_repolist.length *
80 sizeof(struct repoinfo)); 76 sizeof(struct repoinfo));
81 } 77 }
82 78
83 ret = &cgit_repolist.repos[cgit_repolist.count-1]; 79 ret = &cgit_repolist.repos[cgit_repolist.count-1];
84 ret->url = xstrdup(url); 80 ret->url = xstrdup(url);
85 ret->name = ret->url; 81 ret->name = ret->url;
86 ret->path = NULL; 82 ret->path = NULL;
87 ret->desc = NULL; 83 ret->desc = NULL;
88 ret->owner = NULL; 84 ret->owner = NULL;
85 ret->defbranch = "master";
89 ret->snapshots = cgit_snapshots; 86 ret->snapshots = cgit_snapshots;
90 ret->module_link = cgit_module_link; 87 ret->module_link = cgit_module_link;
91 return ret; 88 return ret;
92} 89}
93 90
94void cgit_global_config_cb(const char *name, const char *value) 91void cgit_global_config_cb(const char *name, const char *value)
95{ 92{
96 if (!strcmp(name, "root-title")) 93 if (!strcmp(name, "root-title"))
97 cgit_root_title = xstrdup(value); 94 cgit_root_title = xstrdup(value);
98 else if (!strcmp(name, "css")) 95 else if (!strcmp(name, "css"))
99 cgit_css = xstrdup(value); 96 cgit_css = xstrdup(value);
100 else if (!strcmp(name, "logo")) 97 else if (!strcmp(name, "logo"))
@@ -124,42 +121,34 @@ void cgit_global_config_cb(const char *name, const char *value)
124 else if (!strcmp(name, "max-commit-count")) 121 else if (!strcmp(name, "max-commit-count"))
125 cgit_max_commit_count = atoi(value); 122 cgit_max_commit_count = atoi(value);
126 else if (!strcmp(name, "repo.url")) 123 else if (!strcmp(name, "repo.url"))
127 cgit_repo = add_repo(value); 124 cgit_repo = add_repo(value);
128 else if (!strcmp(name, "repo.name")) 125 else if (!strcmp(name, "repo.name"))
129 cgit_repo->name = xstrdup(value); 126 cgit_repo->name = xstrdup(value);
130 else if (cgit_repo && !strcmp(name, "repo.path")) 127 else if (cgit_repo && !strcmp(name, "repo.path"))
131 cgit_repo->path = xstrdup(value); 128 cgit_repo->path = xstrdup(value);
132 else if (cgit_repo && !strcmp(name, "repo.desc")) 129 else if (cgit_repo && !strcmp(name, "repo.desc"))
133 cgit_repo->desc = xstrdup(value); 130 cgit_repo->desc = xstrdup(value);
134 else if (cgit_repo && !strcmp(name, "repo.owner")) 131 else if (cgit_repo && !strcmp(name, "repo.owner"))
135 cgit_repo->owner = xstrdup(value); 132 cgit_repo->owner = xstrdup(value);
133 else if (cgit_repo && !strcmp(name, "repo.defbranch"))
134 cgit_repo->defbranch = xstrdup(value);
136 else if (cgit_repo && !strcmp(name, "repo.snapshots")) 135 else if (cgit_repo && !strcmp(name, "repo.snapshots"))
137 cgit_repo->snapshots = atoi(value); 136 cgit_repo->snapshots = atoi(value);
138 else if (cgit_repo && !strcmp(name, "repo.module-link")) 137 else if (cgit_repo && !strcmp(name, "repo.module-link"))
139 cgit_repo->module_link= xstrdup(value); 138 cgit_repo->module_link= xstrdup(value);
140 else if (!strcmp(name, "include")) 139 else if (!strcmp(name, "include"))
141 cgit_read_config(value, cgit_global_config_cb); 140 cgit_read_config(value, cgit_global_config_cb);
142} 141}
143 142
144void cgit_repo_config_cb(const char *name, const char *value)
145{
146 if (!strcmp(name, "name"))
147 cgit_repo_name = xstrdup(value);
148 else if (!strcmp(name, "desc"))
149 cgit_repo_desc = xstrdup(value);
150 else if (!strcmp(name, "owner"))
151 cgit_repo_owner = xstrdup(value);
152}
153
154void cgit_querystring_cb(const char *name, const char *value) 143void cgit_querystring_cb(const char *name, const char *value)
155{ 144{
156 if (!strcmp(name,"r")) { 145 if (!strcmp(name,"r")) {
157 cgit_query_repo = xstrdup(value); 146 cgit_query_repo = xstrdup(value);
158 } else if (!strcmp(name, "p")) { 147 } else if (!strcmp(name, "p")) {
159 cgit_query_page = xstrdup(value); 148 cgit_query_page = xstrdup(value);
160 } else if (!strcmp(name, "q")) { 149 } else if (!strcmp(name, "q")) {
161 cgit_query_search = xstrdup(value); 150 cgit_query_search = xstrdup(value);
162 } else if (!strcmp(name, "h")) { 151 } else if (!strcmp(name, "h")) {
163 cgit_query_head = xstrdup(value); 152 cgit_query_head = xstrdup(value);
164 cgit_query_has_symref = 1; 153 cgit_query_has_symref = 1;
165 } else if (!strcmp(name, "id")) { 154 } else if (!strcmp(name, "id")) {