author | Alberto Bertogli
<albertito@blitiri.com.ar> 2016-08-01 21:49:27 UTC |
committer | Alberto Bertogli
<albertito@blitiri.com.ar> 2016-09-12 03:06:56 UTC |
parent | 92a88bd06ff7a5a485f2d6a078dca6ce1c8bda12 |
chasquid.go | +15 | -15 |
chasquid_test.go | +1 | -1 |
internal/courier/procmail.go | +2 | -2 |
internal/courier/procmail_test.go | +1 | -1 |
internal/courier/smtp_test.go | +5 | -5 |
internal/queue/queue.go | +2 | -2 |
internal/queue/queue_test.go | +1 | -1 |
internal/systemd/systemd.go | +2 | -2 |
internal/systemd/systemd_test.go | +1 | -1 |
internal/userdb/userdb.go | +5 | -5 |
internal/userdb/userdb_test.go | +2 | -2 |
diff --git a/chasquid.go b/chasquid.go index 7fecaae..dd85229 100644 --- a/chasquid.go +++ b/chasquid.go @@ -325,9 +325,9 @@ type Conn struct { tlsConfig *tls.Config // Envelope. - mail_from string - rcpt_to []string - data []byte + mailFrom string + rcptTo []string + data []byte // Are we using TLS? onTLS bool @@ -536,7 +536,7 @@ func (c *Conn) MAIL(params string) (code int, msg string) { // but that's not according to the RFC. We reset the envelope instead. c.resetEnvelope() - c.mail_from = e.Address + c.mailFrom = e.Address return 250, "You feel like you are being watched" } @@ -557,30 +557,30 @@ func (c *Conn) RCPT(params string) (code int, msg string) { return 501, "malformed address" } - if c.mail_from == "" { + if c.mailFrom == "" { return 503, "sender not yet given" } // RFC says 100 is the minimum limit for this, but it seems excessive. - if len(c.rcpt_to) > 100 { + if len(c.rcptTo) > 100 { return } // TODO: do we allow receivers without a domain? // TODO: check the case: // - local recipient, always ok - // - external recipient, only ok if mail_from is local (needs auth) + // - external recipient, only ok if mailFrom is local (needs auth) - c.rcpt_to = append(c.rcpt_to, e.Address) + c.rcptTo = append(c.rcptTo, e.Address) return 250, "You have an eerie feeling..." } func (c *Conn) DATA(params string, tr *trace.Trace) (code int, msg string) { - if c.mail_from == "" { + if c.mailFrom == "" { return 503, "sender not yet given" } - if len(c.rcpt_to) == 0 { + if len(c.rcptTo) == 0 { return 503, "need an address to send to" } @@ -606,7 +606,7 @@ func (c *Conn) DATA(params string, tr *trace.Trace) (code int, msg string) { // There are no partial failures here: we put it in the queue, and then if // individual deliveries fail, we report via email. - msgID, err := c.queue.Put(c.mail_from, c.rcpt_to, c.data) + msgID, err := c.queue.Put(c.mailFrom, c.rcptTo, c.data) if err != nil { tr.LazyPrintf(" error queueing: %v", err) tr.SetError() @@ -724,14 +724,14 @@ func (c *Conn) AUTH(params string, tr *trace.Trace) (code int, msg string) { c.authDomain = domain c.completedAuth = true return 235, "" - } else { - return 535, "Incorrect user or password" } + + return 535, "Incorrect user or password" } func (c *Conn) resetEnvelope() { - c.mail_from = "" - c.rcpt_to = nil + c.mailFrom = "" + c.rcptTo = nil c.data = nil } diff --git a/chasquid_test.go b/chasquid_test.go index e306dbc..d17770a 100644 --- a/chasquid_test.go +++ b/chasquid_test.go @@ -144,7 +144,7 @@ func TestWrongMailParsing(t *testing.T) { } if err := c.Mail("from@from"); err != nil { - t.Errorf("Mail:", err) + t.Errorf("Mail: %v", err) } for _, addr := range addrs { diff --git a/internal/courier/procmail.go b/internal/courier/procmail.go index ceeebcd..a753754 100644 --- a/internal/courier/procmail.go +++ b/internal/courier/procmail.go @@ -25,7 +25,7 @@ var ( ) var ( - timeoutError = fmt.Errorf("Operation timed out") + errTimeout = fmt.Errorf("Operation timed out") ) // Procmail delivers local mail via procmail. @@ -79,7 +79,7 @@ func (p *Procmail) Deliver(from string, to string, data []byte) error { timedOut := !timer.Stop() if timedOut { - return tr.Error(timeoutError) + return tr.Error(errTimeout) } if err != nil { return tr.Errorf("Procmail failed: %v - %q", err, output.String()) diff --git a/internal/courier/procmail_test.go b/internal/courier/procmail_test.go index 7e69d33..85ddeab 100644 --- a/internal/courier/procmail_test.go +++ b/internal/courier/procmail_test.go @@ -39,7 +39,7 @@ func TestProcmailTimeout(t *testing.T) { p := Procmail{} err := p.Deliver("from", "to@local", []byte("data")) - if err != timeoutError { + if err != errTimeout { t.Errorf("Unexpected error: %v", err) } diff --git a/internal/courier/smtp_test.go b/internal/courier/smtp_test.go index 6a6c3e4..46e21c9 100644 --- a/internal/courier/smtp_test.go +++ b/internal/courier/smtp_test.go @@ -86,19 +86,19 @@ func TestSMTPErrors(t *testing.T) { responses := []map[string]string{ // First test: hang response, should fail due to timeout. - map[string]string{ + { "_welcome": "220 no newline", }, // MAIL FROM not allowed. - map[string]string{ + { "_welcome": "220 mail from not allowed\n", "EHLO localhost": "250 ehlo ok\n", "MAIL FROM:<me@me>": "501 mail error\n", }, // RCPT TO not allowed. - map[string]string{ + { "_welcome": "220 rcpt to not allowed\n", "EHLO localhost": "250 ehlo ok\n", "MAIL FROM:<me@me>": "250 mail ok\n", @@ -106,7 +106,7 @@ func TestSMTPErrors(t *testing.T) { }, // DATA error. - map[string]string{ + { "_welcome": "220 data error\n", "EHLO localhost": "250 ehlo ok\n", "MAIL FROM:<me@me>": "250 mail ok\n", @@ -115,7 +115,7 @@ func TestSMTPErrors(t *testing.T) { }, // DATA response error. - map[string]string{ + { "_welcome": "220 data response error\n", "EHLO localhost": "250 ehlo ok\n", "MAIL FROM:<me@me>": "250 mail ok\n", diff --git a/internal/queue/queue.go b/internal/queue/queue.go index e53bf30..f5450cd 100644 --- a/internal/queue/queue.go +++ b/internal/queue/queue.go @@ -26,7 +26,7 @@ const ( ) var ( - queueFullError = fmt.Errorf("Queue size too big, try again later") + errQueueFull = fmt.Errorf("Queue size too big, try again later") ) // Channel used to get random IDs for items in the queue. @@ -90,7 +90,7 @@ func (q *Queue) Len() int { // Put an envelope in the queue. func (q *Queue) Put(from string, to []string, data []byte) (string, error) { if q.Len() >= maxQueueSize { - return "", queueFullError + return "", errQueueFull } item := &Item{ diff --git a/internal/queue/queue_test.go b/internal/queue/queue_test.go index 735f1d8..a1ac39d 100644 --- a/internal/queue/queue_test.go +++ b/internal/queue/queue_test.go @@ -117,7 +117,7 @@ func TestFullQueue(t *testing.T) { // This one should fail due to the queue being too big. id, err := q.Put("from", []string{"to"}, []byte("data")) - if err != queueFullError { + if err != errQueueFull { t.Errorf("Not failed as expected: %v - %v", id, err) } diff --git a/internal/systemd/systemd.go b/internal/systemd/systemd.go index a6a796c..4cbaf5e 100644 --- a/internal/systemd/systemd.go +++ b/internal/systemd/systemd.go @@ -12,7 +12,7 @@ import ( var ( // Error to return when $LISTEN_PID does not refer to us. - PIDMismatch = errors.New("$LISTEN_PID != our PID") + ErrPIDMismatch = errors.New("$LISTEN_PID != our PID") // First FD for listeners. // It's 3 by definition, but using a variable simplifies testing. @@ -36,7 +36,7 @@ func Listeners() ([]net.Listener, error) { return nil, fmt.Errorf( "error converting $LISTEN_PID=%q: %v", pidStr, err) } else if pid != os.Getpid() { - return nil, PIDMismatch + return nil, ErrPIDMismatch } nfds, err := strconv.Atoi(os.Getenv("LISTEN_FDS")) diff --git a/internal/systemd/systemd_test.go b/internal/systemd/systemd_test.go index 28586fe..34bca4b 100644 --- a/internal/systemd/systemd_test.go +++ b/internal/systemd/systemd_test.go @@ -53,7 +53,7 @@ func TestWrongPID(t *testing.T) { } setenv(strconv.Itoa(pid), "4") - if _, err := Listeners(); err != PIDMismatch { + if _, err := Listeners(); err != ErrPIDMismatch { t.Errorf("Did not fail with PID mismatch: %v", err) } } diff --git a/internal/userdb/userdb.go b/internal/userdb/userdb.go index d73f0e8..bd3a08a 100644 --- a/internal/userdb/userdb.go +++ b/internal/userdb/userdb.go @@ -75,8 +75,8 @@ type DB struct { } var ( - MissingHeaderErr = errors.New("missing '#chasquid-userdb-v1' header") - InvalidUsernameErr = errors.New("username contains invalid characters") + ErrMissingHeader = errors.New("missing '#chasquid-userdb-v1' header") + ErrInvalidUsername = errors.New("username contains invalid characters") ) func New(fname string) *DB { @@ -114,7 +114,7 @@ func Load(fname string) (*DB, []error, error) { scanner := bufio.NewScanner(f) scanner.Scan() if scanner.Text() != "#chasquid-userdb-v1" { - return nil, nil, MissingHeaderErr + return nil, nil, ErrMissingHeader } var warnings []error @@ -194,7 +194,7 @@ func (db *DB) Write() error { // TODO: Sort the usernames, just to be friendlier. for _, user := range db.users { if strings.ContainsAny(user.name, illegalUsernameChars) { - return InvalidUsernameErr + return ErrInvalidUsername } fmt.Fprintf(buf, "%s %s %s\n", user.name, user.scheme.String(), @@ -247,7 +247,7 @@ const illegalUsernameChars = "\t\n\v\f\r \xa0\x85" // Add a user to the database. If the user is already present, override it. func (db *DB) AddUser(name, plainPassword string) error { if !ValidUsername(name) { - return InvalidUsernameErr + return ErrInvalidUsername } s := scryptScheme{ diff --git a/internal/userdb/userdb_test.go b/internal/userdb/userdb_test.go index e3a1ef2..cec6e58 100644 --- a/internal/userdb/userdb_test.go +++ b/internal/userdb/userdb_test.go @@ -86,7 +86,7 @@ func TestLoad(t *testing.T) { {"header \\r\\n", "#chasquid-userdb-v1\r\n", false, nil, false}, {"header EOF", "#chasquid-userdb-v1", false, nil, false}, {"missing header", "this is not the header", - true, MissingHeaderErr, false}, + true, ErrMissingHeader, false}, {"invalid user", "#chasquid-userdb-v1\nnam\xa0e PLAIN pass\n", false, nil, true}, {"too few fields", "#chasquid-userdb-v1\nfield1 field2\n", @@ -131,7 +131,7 @@ func testOneLoad(t *testing.T, desc, content string, fatal bool, fatalErr error, } if db != nil && !dbEquals(db, emptyDB) { - t.Errorf("case %q: DB not empty: %#v", db) + t.Errorf("case %q: DB not empty: %#v", desc, db) } }