From be421df77a2b889719906a08b89e3ed09773bf7e Mon Sep 17 00:00:00 2001
From: Sergey Matveev <stargrave@stargrave.org>
Date: Mon, 7 Nov 2022 17:20:04 +0300
Subject: [PATCH] Initial commit

---
 README  | 14 ++++++++++++++
 go.mod  |  3 +++
 main.go | 40 ++++++++++++++++++++++++++++++++++++++++
 3 files changed, 57 insertions(+)
 create mode 100644 README
 create mode 100644 go.mod
 create mode 100644 main.go

diff --git a/README b/README
new file mode 100644
index 0000000..c5096cb
--- /dev/null
+++ b/README
@@ -0,0 +1,14 @@
+Trivial finger service for running as UCSPI-TCP server.
+
+    $ mkdir fingers
+    $ cat > fingers/@ <<EOF
+    Welcome to finger service!
+    EOF
+    $ cat fingers/user <<EOF
+    User information.
+    Bla bla bla
+    EOF
+
+    [run under daemontools'es supervise]
+    # cd fingers
+    # tcpserver -DRH -l 0 ::0 79 setuidgid user timeout 1m gofingerd 2>&1
diff --git a/go.mod b/go.mod
new file mode 100644
index 0000000..0af1698
--- /dev/null
+++ b/go.mod
@@ -0,0 +1,3 @@
+module go.stargrave.org/gofingerd
+
+go 1.19
diff --git a/main.go b/main.go
new file mode 100644
index 0000000..c256017
--- /dev/null
+++ b/main.go
@@ -0,0 +1,40 @@
+package main
+
+import (
+	"bufio"
+	"fmt"
+	"io"
+	"log"
+	"net/textproto"
+	"os"
+	"regexp"
+)
+
+func main() {
+	log.SetFlags(log.Lshortfile)
+	log.SetPrefix(fmt.Sprintf(
+		"[%s]:%s ", os.Getenv("TCPREMOTEIP"), os.Getenv("TCPREMOTEPORT"),
+	))
+	br := bufio.NewReaderSize(os.Stdin, 1<<10)
+	tr := textproto.NewReader(br)
+	q, err := tr.ReadLine()
+	if err != nil {
+		log.Fatalln(err)
+	}
+	if q == "" {
+		q = "@"
+	} else {
+		re := regexp.MustCompile("^[a-z0-9-.]+$")
+		if !re.MatchString(q) {
+			log.Fatalln("bad query")
+		}
+	}
+	fd, err := os.Open(q)
+	if err != nil {
+		log.Fatalln(err)
+	}
+	if _, err = io.Copy(os.Stdout, fd); err != nil {
+		log.Fatalln(err)
+	}
+	log.Print(q)
+}
-- 
2.50.0