Skip to content

Commit fb2eb37

Browse files
committed
smtp: add LOGIN SASL auth directive
1 parent d74f511 commit fb2eb37

2 files changed

Lines changed: 25 additions & 2 deletions

File tree

internal/target/smtp/sasl.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,12 +57,18 @@ func saslAuthDirective(_ *config.Map, node config.Node) (interface{}, error) {
5757
}
5858
return sasl.NewPlainClient("", msgMeta.Conn.AuthUser, msgMeta.Conn.AuthPassword), nil
5959
}, nil
60-
case "plain":
60+
case "plain", "login":
6161
if len(node.Args) != 3 {
6262
return nil, config.NodeErr(node, "two additional arguments are required (username, password)")
6363
}
6464
return func(*module.MsgMetadata) (sasl.Client, error) {
65-
return sasl.NewPlainClient("", node.Args[1], node.Args[2]), nil
65+
if node.Args[0] == "plain" {
66+
return sasl.NewPlainClient("", node.Args[1], node.Args[2]), nil
67+
}
68+
if node.Args[0] == "login" {
69+
return sasl.NewLoginClient(node.Args[1], node.Args[2]), nil
70+
}
71+
return nil, config.NodeErr(node, "unknown authentication mechanism: %s", node.Args[0])
6672
}, nil
6773
case "external":
6874
if len(node.Args) > 1 {

internal/target/smtp/sasl_test.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,23 @@ func TestSASL_Plain_AuthFail(t *testing.T) {
101101
}
102102
}
103103

104+
func TestSASL_Login_Directive(t *testing.T) {
105+
factory := testSaslFactory(t, "login", "test", "testpass")
106+
client, err := factory(nil)
107+
if err != nil {
108+
t.Fatal(err)
109+
}
110+
111+
mech, _, err := client.Start()
112+
if err != nil {
113+
t.Fatal(err)
114+
}
115+
116+
if mech != "LOGIN" {
117+
t.Fatalf("expected LOGIN mechanism, got %q", mech)
118+
}
119+
}
120+
104121
func TestSASL_Forward(t *testing.T) {
105122
be, srv := testutils.SMTPServer(t, "127.0.0.1:"+testPort)
106123
defer func() {

0 commit comments

Comments
 (0)