--- /dev/null
+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
--- /dev/null
+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)
+}