summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohannes Sixt <j.sixt@viscovery.net>2008-02-26 12:00:55 (GMT)
committerJunio C Hamano <gitster@pobox.com>2008-02-27 22:47:36 (GMT)
commit20632071560ad4915f4e620d3c053e5ee3af80f3 (patch)
tree92dff6108921a232c7b9d8618e4f2f968fc8af1b
parent22665bbaab799b1f20a23039a5c759cd35d36939 (diff)
downloadgit-20632071560ad4915f4e620d3c053e5ee3af80f3.zip
git-20632071560ad4915f4e620d3c053e5ee3af80f3.tar.gz
git-20632071560ad4915f4e620d3c053e5ee3af80f3.tar.bz2
daemon: ensure that base-path is an existing directory
Any request to the daemon would fail if base-path (if specified) is not a directory. We now check for this condition early. Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--daemon.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/daemon.c b/daemon.c
index dd0177f..2b4a6f1 100644
--- a/daemon.c
+++ b/daemon.c
@@ -1184,6 +1184,14 @@ int main(int argc, char **argv)
if (strict_paths && (!ok_paths || !*ok_paths))
die("option --strict-paths requires a whitelist");
+ if (base_path) {
+ struct stat st;
+
+ if (stat(base_path, &st) || !S_ISDIR(st.st_mode))
+ die("base-path '%s' does not exist or "
+ "is not a directory", base_path);
+ }
+
if (inetd_mode) {
struct sockaddr_storage ss;
struct sockaddr *peer = (struct sockaddr *)&ss;