From 35d33014fb897cac24f2ae42d8a2d9e005938bd9 Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Wed, 12 Jan 2011 12:06:06 -0600 Subject: Add is_clone flag to available commands This will be used to make these operations configurable via a config option. Signed-off-by: Dan McGee Signed-off-by: Lars Hjemli --- cmd.c | 42 +++++++++++++++++++++--------------------- cmd.h | 3 ++- 2 files changed, 23 insertions(+), 22 deletions(-) diff --git a/cmd.c b/cmd.c index 6dc9f5e..0224ee9 100644 --- a/cmd.c +++ b/cmd.c @@ -129,31 +129,31 @@ static void tree_fn(struct cgit_context *ctx) cgit_print_tree(ctx->qry.sha1, ctx->qry.path); } -#define def_cmd(name, want_repo, want_layout, want_vpath) \ - {#name, name##_fn, want_repo, want_layout, want_vpath} +#define def_cmd(name, want_repo, want_layout, want_vpath, is_clone) \ + {#name, name##_fn, want_repo, want_layout, want_vpath, is_clone} struct cgit_cmd *cgit_get_cmd(struct cgit_context *ctx) { static struct cgit_cmd cmds[] = { - def_cmd(HEAD, 1, 0, 0), - def_cmd(atom, 1, 0, 0), - def_cmd(about, 0, 1, 0), - def_cmd(blob, 1, 0, 0), - def_cmd(commit, 1, 1, 1), - def_cmd(diff, 1, 1, 1), - def_cmd(info, 1, 0, 0), - def_cmd(log, 1, 1, 1), - def_cmd(ls_cache, 0, 0, 0), - def_cmd(objects, 1, 0, 0), - def_cmd(patch, 1, 0, 1), - def_cmd(plain, 1, 0, 0), - def_cmd(refs, 1, 1, 0), - def_cmd(repolist, 0, 0, 0), - def_cmd(snapshot, 1, 0, 0), - def_cmd(stats, 1, 1, 1), - def_cmd(summary, 1, 1, 0), - def_cmd(tag, 1, 1, 0), - def_cmd(tree, 1, 1, 1), + def_cmd(HEAD, 1, 0, 0, 1), + def_cmd(atom, 1, 0, 0, 0), + def_cmd(about, 0, 1, 0, 0), + def_cmd(blob, 1, 0, 0, 0), + def_cmd(commit, 1, 1, 1, 0), + def_cmd(diff, 1, 1, 1, 0), + def_cmd(info, 1, 0, 0, 1), + def_cmd(log, 1, 1, 1, 0), + def_cmd(ls_cache, 0, 0, 0, 0), + def_cmd(objects, 1, 0, 0, 1), + def_cmd(patch, 1, 0, 1, 0), + def_cmd(plain, 1, 0, 0, 0), + def_cmd(refs, 1, 1, 0, 0), + def_cmd(repolist, 0, 0, 0, 0), + def_cmd(snapshot, 1, 0, 0, 0), + def_cmd(stats, 1, 1, 1, 0), + def_cmd(summary, 1, 1, 0, 0), + def_cmd(tag, 1, 1, 0, 0), + def_cmd(tree, 1, 1, 1, 0), }; int i; diff --git a/cmd.h b/cmd.h index 8dc01bd..eb5bc87 100644 --- a/cmd.h +++ b/cmd.h @@ -8,7 +8,8 @@ struct cgit_cmd { cgit_cmd_fn fn; unsigned int want_repo:1, want_layout:1, - want_vpath:1; + want_vpath:1, + is_clone:1; }; extern struct cgit_cmd *cgit_get_cmd(struct cgit_context *ctx); -- cgit v1.2.3-59-g8ed1b From 42231328d3fa1e443566a5d8e6c3ccbce16157b6 Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Wed, 12 Jan 2011 12:06:07 -0600 Subject: Allow disabling of HTTP clone URLs If advertising other URLs to your users, you may not want to make this available through cgit (e.g. if you have the smart HTTP transport set up elsewhere). Allow disabling the three magic commands that simulate the git server, but default it to enabled. Signed-off-by: Dan McGee Signed-off-by: Lars Hjemli --- cgit.c | 8 ++++++++ cgit.h | 1 + cgitrc.5.txt | 5 +++++ 3 files changed, 14 insertions(+) diff --git a/cgit.c b/cgit.c index 412fbf0..65fad7a 100644 --- a/cgit.c +++ b/cgit.c @@ -139,6 +139,8 @@ void config_cb(const char *name, const char *value) ctx.cfg.enable_filter_overrides = atoi(value); else if (!strcmp(name, "enable-gitweb-owner")) ctx.cfg.enable_gitweb_owner = atoi(value); + else if (!strcmp(name, "enable-http-clone")) + ctx.cfg.enable_http_clone = atoi(value); else if (!strcmp(name, "enable-index-links")) ctx.cfg.enable_index_links = atoi(value); else if (!strcmp(name, "enable-log-filecount")) @@ -300,6 +302,7 @@ static void prepare_context(struct cgit_context *ctx) ctx->cfg.logo = "/cgit.png"; ctx->cfg.local_time = 0; ctx->cfg.enable_gitweb_owner = 1; + ctx->cfg.enable_http_clone = 1; ctx->cfg.enable_tree_linenumbers = 1; ctx->cfg.max_repo_count = 50; ctx->cfg.max_commit_count = 50; @@ -453,6 +456,11 @@ static void process_request(void *cbdata) return; } + if (!ctx->cfg.enable_http_clone && cmd->is_clone) { + html_status(404, "Not found", 0); + return; + } + /* If cmd->want_vpath is set, assume ctx->qry.path contains a "virtual" * in-project path limit to be made available at ctx->qry.vpath. * Otherwise, no path limit is in effect (ctx->qry.vpath = NULL). diff --git a/cgit.h b/cgit.h index f5f68ac..c119712 100644 --- a/cgit.h +++ b/cgit.h @@ -187,6 +187,7 @@ struct cgit_config { int embedded; int enable_filter_overrides; int enable_gitweb_owner; + int enable_http_clone; int enable_index_links; int enable_log_filecount; int enable_log_linecount; diff --git a/cgitrc.5.txt b/cgitrc.5.txt index 8e51ca5..b8c69b8 100644 --- a/cgitrc.5.txt +++ b/cgitrc.5.txt @@ -100,6 +100,11 @@ enable-gitweb-owner:: for the git config value "gitweb.owner" to determine the owner. Default value: "1". See also: scan-path. +enable-http-clone:: + If set to "1", cgit will act as an dumb HTTP endpoint for git clones. + If you use an alternate way of serving git repositories, you may wish + to disable this. Default value: "1". + enable-index-links:: Flag which, when set to "1", will make cgit generate extra links for each repo in the repository index (specifically, to the "summary", -- cgit v1.2.3-59-g8ed1b From aae067197f3fff253800359649d1f10014b23ecd Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Wed, 12 Jan 2011 12:06:08 -0600 Subject: Return 404 on command not found We were returning 200 before. Even 404 is questionable in all cases, but 200 was totally wrong. Also match the case of all of the "Not found" status messsages. Signed-off-by: Dan McGee Signed-off-by: Lars Hjemli --- cgit.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cgit.c b/cgit.c index 65fad7a..e0c2d9f 100644 --- a/cgit.c +++ b/cgit.c @@ -429,7 +429,7 @@ static int prepare_repo_cmd(struct cgit_context *ctx) tmp = xstrdup(ctx->qry.head); ctx->qry.head = ctx->repo->defbranch; ctx->page.status = 404; - ctx->page.statusmsg = "not found"; + ctx->page.statusmsg = "Not found"; cgit_print_http_headers(ctx); cgit_print_docstart(ctx); cgit_print_pageheader(ctx); @@ -448,6 +448,8 @@ static void process_request(void *cbdata) cmd = cgit_get_cmd(ctx); if (!cmd) { ctx->page.title = "cgit error"; + ctx->page.status = 404; + ctx->page.statusmsg = "Not found"; cgit_print_http_headers(ctx); cgit_print_docstart(ctx); cgit_print_pageheader(ctx); -- cgit v1.2.3-59-g8ed1b