From be421df77a2b889719906a08b89e3ed09773bf7e Mon Sep 17 00:00:00 2001 From: Sergey Matveev Date: Mon, 7 Nov 2022 17:20:04 +0300 Subject: [PATCH 1/1] 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/@ <&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.44.0