diff options
author | Junio C Hamano <gitster@pobox.com> | 2011-10-21 16:04:32 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2011-10-21 16:04:32 -0700 |
commit | e75a59adfcc4fd048690e5b25f9a8c31d8011d53 (patch) | |
tree | 81d726bd68ab7d9dc149c82955fc0cc363fa9486 /daemon.c | |
parent | 1ad4b17b069a7b692ab801bda37c5ab35ef0208e (diff) | |
parent | d5570f4d2cb29f3db9f69ff5fcde0a7d54ad2696 (diff) | |
download | git-e75a59adfcc4fd048690e5b25f9a8c31d8011d53.tar.gz |
Merge branch 'jk/daemon-msgs'
* jk/daemon-msgs:
daemon: give friendlier error messages to clients
Conflicts:
daemon.c
Diffstat (limited to 'daemon.c')
-rw-r--r-- | daemon.c | 29 |
1 files changed, 21 insertions, 8 deletions
@@ -20,6 +20,7 @@ static int log_syslog; static int verbose; static int reuseaddr; +static int informative_errors; static const char daemon_usage[] = "git daemon [--verbose] [--syslog] [--export-all]\n" @@ -247,6 +248,14 @@ static int git_daemon_config(const char *var, const char *value, void *cb) return 0; } +static int daemon_error(const char *dir, const char *msg) +{ + if (!informative_errors) + msg = "access denied or repository not exported"; + packet_write(1, "ERR %s: %s", msg, dir); + return -1; +} + static int run_service(char *dir, struct daemon_service *service) { const char *path; @@ -257,11 +266,11 @@ static int run_service(char *dir, struct daemon_service *service) if (!enabled && !service->overridable) { logerror("'%s': service not enabled.", service->name); errno = EACCES; - goto failed; + return daemon_error(dir, "service not enabled"); } if (!(path = path_ok(dir))) - goto failed; + return daemon_error(dir, "no such repository"); /* * Security on the cheap. @@ -277,7 +286,7 @@ static int run_service(char *dir, struct daemon_service *service) if (!export_all_trees && access("git-daemon-export-ok", F_OK)) { logerror("'%s': repository not exported.", path); errno = EACCES; - goto failed; + return daemon_error(dir, "repository not exported"); } if (service->overridable) { @@ -291,7 +300,7 @@ static int run_service(char *dir, struct daemon_service *service) logerror("'%s': service not enabled for '%s'", service->name, path); errno = EACCES; - goto failed; + return daemon_error(dir, "service not enabled"); } /* @@ -301,10 +310,6 @@ static int run_service(char *dir, struct daemon_service *service) signal(SIGTERM, SIG_IGN); return service->fn(); - -failed: - packet_write(1, "ERR %s: access denied", dir); - return -1; } static void copy_to_log(int fd) @@ -1208,6 +1213,14 @@ int main(int argc, char **argv) make_service_overridable(arg + 18, 0); continue; } + if (!prefixcmp(arg, "--informative-errors")) { + informative_errors = 1; + continue; + } + if (!prefixcmp(arg, "--no-informative-errors")) { + informative_errors = 0; + continue; + } if (!strcmp(arg, "--")) { ok_paths = &argv[i+1]; break; |