Skip to content

Commit

Permalink
[PATCH] git-daemon --syslog to log through syslog
Browse files Browse the repository at this point in the history
Well, this makes it even more clear that we need the packet reader and
friends to use the daemon logging code. :/  Therefore, we at least indicate
in the "Disconnect" log message if the child process exitted with an error
code or not.

Idea by Linus.

Signed-off-by: Petr Baudis <pasky@suse.cz>
Signed-off-by: Junio C Hamano <junkio@cox.net>
  • Loading branch information
Petr Baudis authored and Junio C Hamano committed Sep 24, 2005
1 parent b5cf3c8 commit 9048fe1
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 8 deletions.
6 changes: 5 additions & 1 deletion Documentation/git-daemon.txt
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ git-daemon - A really simple server for GIT repositories.

SYNOPSIS
--------
'git-daemon' [--verbose] [--inetd | --port=n]
'git-daemon' [--verbose] [--syslog] [--inetd | --port=n]

DESCRIPTION
-----------
Expand All @@ -32,6 +32,10 @@ OPTIONS
--port::
Listen on an alternative port.

--syslog::
Log to syslog instead of stderr. Note that this option does not imply
--verbose, thus by default only error conditions will be logged.

--verbose::
Log details about the incoming connections and requested files.

Expand Down
34 changes: 27 additions & 7 deletions daemon.c
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,15 @@
#include <netdb.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <syslog.h>

static int log_syslog;
static int verbose;

static const char daemon_usage[] = "git-daemon [--verbose] [--inetd | --port=n]";
static const char daemon_usage[] = "git-daemon [--verbose] [--syslog] [--inetd | --port=n]";


static void logreport(const char *err, va_list params)
static void logreport(int priority, const char *err, va_list params)
{
/* We should do a single write so that it is atomic and output
* of several processes do not get intermingled. */
Expand All @@ -27,6 +29,11 @@ static void logreport(const char *err, va_list params)
maxlen = sizeof(buf) - buflen - 1; /* -1 for our own LF */
msglen = vsnprintf(buf + buflen, maxlen, err, params);

if (log_syslog) {
syslog(priority, "%s", buf);
return;
}

/* maxlen counted our own LF but also counts space given to
* vsnprintf for the terminating NUL. We want to make sure that
* we have space for our own LF and NUL after the "meat" of the
Expand All @@ -48,7 +55,7 @@ void logerror(const char *err, ...)
{
va_list params;
va_start(params, err);
logreport(err, params);
logreport(LOG_ERR, err, params);
va_end(params);
}

Expand All @@ -58,7 +65,7 @@ void lognotice(const char *err, ...)
if (!verbose)
return;
va_start(params, err);
logreport(err, params);
logreport(LOG_INFO, err, params);
va_end(params);
}

Expand Down Expand Up @@ -285,15 +292,23 @@ static void handle(int incoming, struct sockaddr *addr, int addrlen)
static void child_handler(int signo)
{
for (;;) {
pid_t pid = waitpid(-1, NULL, WNOHANG);
int status;
pid_t pid = waitpid(-1, &status, WNOHANG);

if (pid > 0) {
unsigned reaped = children_reaped;
dead_child[reaped % MAX_CHILDREN] = pid;
children_reaped = reaped + 1;
/* XXX: Custom logging, since we don't wanna getpid() */
if (verbose)
fprintf(stderr, "[%d] Disconnected\n", pid);
if (verbose) {
char *dead = "";
if (!WIFEXITED(status) || WEXITSTATUS(status) > 0)
dead = " (with error)";
if (log_syslog)
syslog(LOG_INFO, "[%d] Disconnected%s", pid, dead);
else
fprintf(stderr, "[%d] Disconnected%s\n", pid, dead);
}
continue;
}
break;
Expand Down Expand Up @@ -435,6 +450,11 @@ int main(int argc, char **argv)
verbose = 1;
continue;
}
if (!strcmp(arg, "--syslog")) {
log_syslog = 1;
openlog("git-daemon", 0, LOG_DAEMON);
continue;
}

usage(daemon_usage);
}
Expand Down

0 comments on commit 9048fe1

Please sign in to comment.