[PATCH] add inetd mode to git daemon
From: Alexey Nezhdanov <hidden>
Date: 2016-06-15 22:42:02
Subsystem:
the rest · Maintainer:
Linus Torvalds
Adds --inetd command line argument that makes server run in inetd mode. Signed-off-by: Alexey Nezhdanov <redacted> ---
diff --git a/daemon.c b/daemon.c
--- a/daemon.c
+++ b/daemon.c@@ -3,7 +3,7 @@ #include <sys/socket.h> #include <netinet/in.h> -static const char daemon_usage[] = "git-daemon [--port=n]"; +static const char daemon_usage[] = "git-daemon [--inetd | --port=n]"; static int upload(char *dir, int dirlen) {
@@ -37,11 +37,21 @@ static int execute(char *line, int len) return -1; } -static void handle(int incoming, struct sockaddr_in *addr, int addrlen) +static int handle_stdio() { static char line[1000]; int len; + len = packet_read_line(0, line, sizeof(line)); + + if (len && line[len-1] == '\n') + line[--len] = 0; + + return execute(line, len); +} + +static void handle(int incoming, struct sockaddr_in *addr, int addrlen) +{ if (fork()) { close(incoming); return;
@@ -50,12 +60,8 @@ static void handle(int incoming, struct dup2(incoming, 0); dup2(incoming, 1); close(incoming); - len = packet_read_line(0, line, sizeof(line)); - - if (len && line[len-1] == '\n') - line[--len] = 0; - exit(execute(line, len)); + exit(handle_stdio()); } static int serve(int port)
@@ -97,6 +103,7 @@ int main(int argc, char **argv) { int port = DEFAULT_GIT_PORT; int i; + int inetd_mode = 0; for (i = 1; i < argc; i++) { char *arg = argv[i];
@@ -110,8 +117,17 @@ int main(int argc, char **argv) continue; } } + + if (!strncmp(arg, "--inetd", 7)) { + inetd_mode = 1; + continue; + } + usage(daemon_usage); } - return serve(port); + if (inetd_mode) + return handle_stdio(); + else + return serve(port); }