From 22665bbaab799b1f20a23039a5c759cd35d36939 Mon Sep 17 00:00:00 2001
From: Johannes Sixt <j.sixt@viscovery.net>
Date: Mon, 25 Feb 2008 14:25:20 +0100
Subject: [PATCH 1/2] daemon: send more error messages to the syslog

There were a number of die() calls before the syslog was opened; hence,
these error messages would have been sent to /dev/null in detached mode.
Now we install the daemon-specific die routine before any error message is
generated so that these messages go to the syslog.

Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
 daemon.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/daemon.c b/daemon.c
index 41a60af624a..dd0177f48d3 100644
--- a/daemon.c
+++ b/daemon.c
@@ -1149,6 +1149,11 @@ int main(int argc, char **argv)
 		usage(daemon_usage);
 	}
 
+	if (log_syslog) {
+		openlog("git-daemon", 0, LOG_DAEMON);
+		set_die_routine(daemon_die);
+	}
+
 	if (inetd_mode && (group_name || user_name))
 		die("--user and --group are incompatible with --inetd");
 
@@ -1176,11 +1181,6 @@ int main(int argc, char **argv)
 		}
 	}
 
-	if (log_syslog) {
-		openlog("git-daemon", 0, LOG_DAEMON);
-		set_die_routine(daemon_die);
-	}
-
 	if (strict_paths && (!ok_paths || !*ok_paths))
 		die("option --strict-paths requires a whitelist");
 

From 20632071560ad4915f4e620d3c053e5ee3af80f3 Mon Sep 17 00:00:00 2001
From: Johannes Sixt <j.sixt@viscovery.net>
Date: Tue, 26 Feb 2008 13:00:55 +0100
Subject: [PATCH 2/2] 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>
---
 daemon.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/daemon.c b/daemon.c
index dd0177f48d3..2b4a6f145cc 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;