|
@@ -4,12 +4,12 @@
|
|
|
package client
|
|
package client
|
|
|
|
|
|
|
|
import (
|
|
import (
|
|
|
- "testing"
|
|
|
|
|
"encoding/hex"
|
|
"encoding/hex"
|
|
|
- "github.com/jcmturner/gokrb5/keytab"
|
|
|
|
|
"github.com/jcmturner/gokrb5/config"
|
|
"github.com/jcmturner/gokrb5/config"
|
|
|
|
|
+ "github.com/jcmturner/gokrb5/keytab"
|
|
|
"github.com/jcmturner/gokrb5/testdata"
|
|
"github.com/jcmturner/gokrb5/testdata"
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
|
+ "testing"
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
func TestClient_SuccessfulLogin(t *testing.T) {
|
|
func TestClient_SuccessfulLogin(t *testing.T) {
|
|
@@ -25,6 +25,32 @@ func TestClient_SuccessfulLogin(t *testing.T) {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+func TestClient_SuccessfulLogin_TCPOnly(t *testing.T) {
|
|
|
|
|
+ b, err := hex.DecodeString(testdata.TESTUSER1_KEYTAB)
|
|
|
|
|
+ kt, _ := keytab.Parse(b)
|
|
|
|
|
+ c, _ := config.NewConfigFromString(testdata.TEST_KRB5CONF_TCP)
|
|
|
|
|
+ cl := NewClientWithKeytab("testuser1", "TEST.GOKRB5", kt)
|
|
|
|
|
+ cl.WithConfig(c)
|
|
|
|
|
+
|
|
|
|
|
+ err = cl.Login()
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ t.Fatalf("Error on login: %v\n", err)
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+func TestClient_SuccessfulLogin_OlderKDC(t *testing.T) {
|
|
|
|
|
+ b, err := hex.DecodeString(testdata.TESTUSER1_KEYTAB)
|
|
|
|
|
+ kt, _ := keytab.Parse(b)
|
|
|
|
|
+ c, _ := config.NewConfigFromString(testdata.TEST_KRB5CONF_OLDERKDC)
|
|
|
|
|
+ cl := NewClientWithKeytab("testuser1", "TEST.GOKRB5", kt)
|
|
|
|
|
+ cl.WithConfig(c)
|
|
|
|
|
+
|
|
|
|
|
+ err = cl.Login()
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ t.Fatalf("Error on login: %v\n", err)
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
func TestClient_FailedLogin(t *testing.T) {
|
|
func TestClient_FailedLogin(t *testing.T) {
|
|
|
b, err := hex.DecodeString(testdata.TESTUSER1_WRONGPASSWD)
|
|
b, err := hex.DecodeString(testdata.TESTUSER1_WRONGPASSWD)
|
|
|
kt, _ := keytab.Parse(b)
|
|
kt, _ := keytab.Parse(b)
|
|
@@ -77,4 +103,32 @@ func TestClient_GetServiceTicket(t *testing.T) {
|
|
|
}
|
|
}
|
|
|
assert.Equal(t, tkt.EncPart.Cipher, tkt2.EncPart.Cipher)
|
|
assert.Equal(t, tkt.EncPart.Cipher, tkt2.EncPart.Cipher)
|
|
|
assert.Equal(t, key.KeyValue, key2.KeyValue)
|
|
assert.Equal(t, key.KeyValue, key2.KeyValue)
|
|
|
-}
|
|
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+func TestClient_GetServiceTicket_OlderKDC(t *testing.T) {
|
|
|
|
|
+ b, err := hex.DecodeString(testdata.TESTUSER1_KEYTAB)
|
|
|
|
|
+ kt, _ := keytab.Parse(b)
|
|
|
|
|
+ c, _ := config.NewConfigFromString(testdata.TEST_KRB5CONF_OLDERKDC)
|
|
|
|
|
+ cl := NewClientWithKeytab("testuser1", "TEST.GOKRB5", kt)
|
|
|
|
|
+ cl.WithConfig(c)
|
|
|
|
|
+
|
|
|
|
|
+ err = cl.Login()
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ t.Fatalf("Error on login: %v\n", err)
|
|
|
|
|
+ }
|
|
|
|
|
+ spn := "HTTP/host.test.gokrb5"
|
|
|
|
|
+ tkt, key, err := cl.GetServiceTicket(spn)
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ t.Fatalf("Error getting service ticket: %v\n", err)
|
|
|
|
|
+ }
|
|
|
|
|
+ assert.Equal(t, spn, tkt.SName.GetPrincipalNameString())
|
|
|
|
|
+ assert.Equal(t, 18, key.KeyType)
|
|
|
|
|
+
|
|
|
|
|
+ //Check cache use - should get the same values back again
|
|
|
|
|
+ tkt2, key2, err := cl.GetServiceTicket(spn)
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ t.Fatalf("Error getting service ticket: %v\n", err)
|
|
|
|
|
+ }
|
|
|
|
|
+ assert.Equal(t, tkt.EncPart.Cipher, tkt2.EncPart.Cipher)
|
|
|
|
|
+ assert.Equal(t, key.KeyValue, key2.KeyValue)
|
|
|
|
|
+}
|