commit fcd6c934e0a00098016278527c53ea8305e479b6
parent 1d63bfa9303355b61925256bb06169e17e38f4f5
Author: Christoph Lohmann <20h@r-36.net>
Date:   Fri, 14 Aug 2020 00:27:57 +0200
Add favicon.gif support and cake hater denuciation.
Diffstat:
1 file changed, 29 insertions(+), 1 deletion(-)
diff --git a/bitreich-httpd.c b/bitreich-httpd.c
@@ -11,6 +11,8 @@
 #include <sys/stat.h>
 #include <fcntl.h>
 #include <string.h>
+#include <sys/socket.h>
+#include <netdb.h>
 
 void *
 xmalloc(size_t size)
@@ -95,12 +97,27 @@ servefile(char *path, char *ctype, int sock)
 int
 main(int argc, char *argv[])
 {
-	char *wwwbase, *wwwindex, request[512], *ctype, *path;
+	char *wwwbase, *wwwindex, request[512], *ctype, *path,
+	     clienth[NI_MAXHOST], clientp[NI_MAXSERV];
 	int rlen;
+	struct sockaddr_storage clt;
+	socklen_t cltlen = sizeof(clt);
 
 	wwwbase = "/bitreich/www";
 	wwwindex = "index.html";
 
+	if (!getpeername(0, (struct sockaddr *)&clt, &cltlen)) {
+		if (getnameinfo((struct sockaddr *)&clt, cltlen, clienth,
+					sizeof(clienth), clientp, sizeof(clientp),
+					NI_NUMERICHOST|NI_NUMERICSERV)) {
+			clienth[0] = clientp[0] = '\0';
+		}
+		if (!strncmp(clienth, "::ffff:", 7))
+			memmove(clienth, clienth+7, strlen(clienth)-6);
+	} else {
+			clienth[0] = clientp[0] = '\0';
+	}
+
 	rlen = read(0, request, sizeof(request)-1);
 	if (rlen < 0)
 		return 1;
@@ -113,6 +130,17 @@ main(int argc, char *argv[])
 	if (strstr(request, "s/bitreich.sh")) {
 		asprintf(&path, "%s/s/bitreich.sh", wwwbase);
 		ctype = "text/plain";
+	} else if (strstr(request, "favicon.gif")) {
+		asprintf(&path, "%s/s/favicon.gif", wwwbase);
+		ctype = "image/gif";
+	} else if (strstr(request, "dickbutt")) {
+		asprintf(&path,
+			"/home/annna/bin/annna-say -c \"#bitreich-tv\" \"%s:%s cake hater appeared.\"",
+			clienth, clientp);
+		system(path);
+		free(path);
+		asprintf(&path, "%s/s/dickbutt.jpg", wwwbase);
+		ctype = "image/jpeg";
 	} else {
 		asprintf(&path, "%s/%s", wwwbase, wwwindex);
 		ctype = "text/html";