for smtp error responses, add the encrypted cid for easier debugging

This commit is contained in:
Mechiel Lukkien 2023-02-25 13:07:32 +01:00
parent b8fa918d74
commit b80d85fd3f
No known key found for this signature in database

View file

@ -422,7 +422,7 @@ var bufpool = moxio.NewBufpool(8, 2*1024)
func (c *conn) readline() string { func (c *conn) readline() string {
line, err := bufpool.Readline(c.r) line, err := bufpool.Readline(c.r)
if err != nil && errors.Is(err, moxio.ErrLineTooLong) { if err != nil && errors.Is(err, moxio.ErrLineTooLong) {
c.writecodeline(smtp.C500BadSyntax, smtp.SeProto5Other0, "line too line, smtp max is 512, we reached 2048", nil) c.writecodeline(smtp.C500BadSyntax, smtp.SeProto5Other0, "line too long, smtp max is 512, we reached 2048", nil)
panic(fmt.Errorf("%s (%w)", err, errIO)) panic(fmt.Errorf("%s (%w)", err, errIO))
} else if err != nil { } else if err != nil {
panic(fmt.Errorf("%s (%w)", err, errIO)) panic(fmt.Errorf("%s (%w)", err, errIO))
@ -654,7 +654,7 @@ func command(c *conn) {
var serr smtpError var serr smtpError
if errors.As(err, &serr) { if errors.As(err, &serr) {
c.writecodeline(serr.code, serr.secode, serr.err.Error(), serr.err) c.writecodeline(serr.code, serr.secode, fmt.Sprintf("%s (%s)", serr.err, mox.ReceivedID(c.cid)), serr.err)
if serr.printStack { if serr.printStack {
debug.PrintStack() debug.PrintStack()
} }
@ -1443,7 +1443,7 @@ func (c *conn) cmdData(p *parser) {
if n < defaultMaxMsgSize { if n < defaultMaxMsgSize {
ecode = smtp.SeMailbox2MsgLimitExceeded3 ecode = smtp.SeMailbox2MsgLimitExceeded3
} }
c.writecodeline(smtp.C451LocalErr, ecode, "error copying data to file", err) c.writecodeline(smtp.C451LocalErr, ecode, fmt.Sprintf("error copying data to file (%s)", mox.ReceivedID(c.cid)), err)
panic(fmt.Errorf("remote sent too much DATA: %w", errIO)) panic(fmt.Errorf("remote sent too much DATA: %w", errIO))
} }
@ -1453,7 +1453,7 @@ func (c *conn) cmdData(p *parser) {
// available and our write blocks us from reading remaining data, leading to // available and our write blocks us from reading remaining data, leading to
// deadlock. We have a timeout on our connection writes though, so worst case we'll // deadlock. We have a timeout on our connection writes though, so worst case we'll
// abort the connection due to expiration. // abort the connection due to expiration.
c.writecodeline(smtp.C451LocalErr, smtp.SeSys3Other0, "error copying data to file", err) c.writecodeline(smtp.C451LocalErr, smtp.SeSys3Other0, fmt.Sprintf("error copying data to file (%s)", mox.ReceivedID(c.cid)), err)
io.Copy(io.Discard, dr) io.Copy(io.Discard, dr)
return return
} }