{"thread":{"id":"1236","subject":"[PATCH] add inetd mode to git daemon","startedAt":"2005-07-14T07:31:33Z","lastAt":"2005-07-14T07:31:33Z","messageCount":1,"participants":["Alexey Nezhdanov"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"6123","messageId":"20050714075726.9004.qmail@penza-gsm.ru","threadId":"1236","inReplyTo":null,"subject":"[PATCH] add inetd mode to git daemon","fromName":"Alexey Nezhdanov","fromEmail":"snake@penza-gsm.ru","sentAt":"2005-07-14T07:31:33Z","receivedAt":"2005-07-14T07:31:33Z","isPatch":true,"sender":{"key":"snake@penza-gsm.ru","avatar":null},"body":"Adds --inetd command line argument that makes server run in inetd mode.\n\nSigned-off-by: Alexey Nezhdanov <snake@penza-gsm.ru>\n---\n\ndiff --git a/daemon.c b/daemon.c\n--- a/daemon.c\n+++ b/daemon.c\n@@ -3,7 +3,7 @@\n #include <sys/socket.h>\n #include <netinet/in.h>\n \n-static const char daemon_usage[] = \"git-daemon [--port=n]\";\n+static const char daemon_usage[] = \"git-daemon [--inetd | --port=n]\";\n \n static int upload(char *dir, int dirlen)\n {\n@@ -37,11 +37,21 @@ static int execute(char *line, int len)\n \treturn -1;\n }\n \n-static void handle(int incoming, struct sockaddr_in *addr, int addrlen)\n+static int handle_stdio()\n {\n \tstatic char line[1000];\n \tint len;\n \n+\tlen = packet_read_line(0, line, sizeof(line));\n+\n+\tif (len && line[len-1] == '\\n')\n+\t\tline[--len] = 0;\n+\n+\treturn execute(line, len);\n+}\n+\n+static void handle(int incoming, struct sockaddr_in *addr, int addrlen)\n+{\n \tif (fork()) {\n \t\tclose(incoming);\n \t\treturn;\n@@ -50,12 +60,8 @@ static void handle(int incoming, struct \n \tdup2(incoming, 0);\n \tdup2(incoming, 1);\n \tclose(incoming);\n-\tlen = packet_read_line(0, line, sizeof(line));\n-\n-\tif (len && line[len-1] == '\\n')\n-\t\tline[--len] = 0;\n \n-\texit(execute(line, len));\n+\texit(handle_stdio());\n }\n \n static int serve(int port)\n@@ -97,6 +103,7 @@ int main(int argc, char **argv)\n {\n \tint port = DEFAULT_GIT_PORT;\n \tint i;\n+\tint inetd_mode = 0;\n \n \tfor (i = 1; i < argc; i++) {\n \t\tchar *arg = argv[i];\n@@ -110,8 +117,17 @@ int main(int argc, char **argv)\n \t\t\t\tcontinue;\n \t\t\t}\n \t\t}\n+\n+\t\tif (!strncmp(arg, \"--inetd\", 7)) {\n+\t\t\tinetd_mode = 1;\n+\t\t\tcontinue;\n+\t\t}\n+\n \t\tusage(daemon_usage);\n \t}\n \n-\treturn serve(port);\n+\tif (inetd_mode)\n+\t\treturn handle_stdio();\n+\telse\n+\t\treturn serve(port);\n }\n"}]}