]> Sergey Matveev's repositories - gofingerd.git/commitdiff
Initial commit master v0.1.0
authorSergey Matveev <stargrave@stargrave.org>
Mon, 7 Nov 2022 14:20:04 +0000 (17:20 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Mon, 7 Nov 2022 14:20:04 +0000 (17:20 +0300)
README [new file with mode: 0644]
go.mod [new file with mode: 0644]
main.go [new file with mode: 0644]

diff --git a/README b/README
new file mode 100644 (file)
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 (file)
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 (file)
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)
+}