From 646ec2864f15f07543122ff1debbe3c2addc1ffe Mon Sep 17 00:00:00 2001 From: Bill Thiede Date: Sun, 30 Mar 2014 10:49:14 -0700 Subject: [PATCH] Use original header bytes instead of printing parsed forms. --- cmd/addhashheader/addhashheader.go | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/cmd/addhashheader/addhashheader.go b/cmd/addhashheader/addhashheader.go index feb20b6..305d06f 100644 --- a/cmd/addhashheader/addhashheader.go +++ b/cmd/addhashheader/addhashheader.go @@ -1,6 +1,7 @@ package main import ( + "bytes" "flag" "fmt" "io" @@ -16,7 +17,8 @@ func main() { flag.Parse() defer glog.Flush() - msg, err := mail.ReadMessage(os.Stdin) + hdrBuf := new(bytes.Buffer) + msg, err := mail.ReadMessage(io.TeeReader(os.Stdin, hdrBuf)) if err != nil { glog.Fatal(err) } @@ -25,12 +27,20 @@ func main() { if err != nil { glog.Fatal(err) } - for k, vs := range msg.Header { - for _, v := range vs { - fmt.Printf("%s: %s\n", k, v) - } + // Find end of header in original byte stream. + n := bytes.Index(hdrBuf.Bytes(), []byte("\n\n")) + if n == -1 { + glog.Error("Couldn't find end of headers in hdrBuf") + // Copy the original message untouched. + io.Copy(os.Stdout, hdrBuf) + io.Copy(os.Stdout, os.Stdin) + return } - fmt.Println("X-Xinu-Hash:", h) - fmt.Println() + + // Copy the headers out untouched. + io.CopyN(os.Stdout, hdrBuf, int64(n)) + // Insert our new header. + fmt.Printf("\nX-Xinu-Hash: %s\n\n", h) + // Copy the message body out untouched. io.Copy(os.Stdout, msg.Body) }