|
|
@@ -0,0 +1,91 @@
|
|
|
+package config
|
|
|
+
|
|
|
+import (
|
|
|
+ "testing"
|
|
|
+
|
|
|
+ "github.com/stretchr/testify/assert"
|
|
|
+ "gopkg.in/jcmturner/gokrb5.v7/test"
|
|
|
+ "gopkg.in/jcmturner/gokrb5.v7/test/testdata"
|
|
|
+)
|
|
|
+
|
|
|
+func TestConfig_GetKDCsUsesConfiguredKDC(t *testing.T) {
|
|
|
+ t.Parallel()
|
|
|
+
|
|
|
+ // This test is meant to cover the fix for
|
|
|
+ // https://github.com/jcmturner/gokrb5/issues/332
|
|
|
+ krb5ConfWithKDCAndDNSLookupKDC := `
|
|
|
+[libdefaults]
|
|
|
+ dns_lookup_kdc = true
|
|
|
+
|
|
|
+[realms]
|
|
|
+ TEST.GOKRB5 = {
|
|
|
+ kdc = kdc2b.test.gokrb5:88
|
|
|
+ }
|
|
|
+`
|
|
|
+
|
|
|
+ c, err := NewConfigFromString(krb5ConfWithKDCAndDNSLookupKDC)
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("Error loading config: %v", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ count, kdcs, err := c.GetKDCs("TEST.GOKRB5", false)
|
|
|
+ if err != nil {
|
|
|
+ t.Fatal(err)
|
|
|
+ }
|
|
|
+ if count != 1 {
|
|
|
+ t.Fatalf("expected 1 but received %d", count)
|
|
|
+ }
|
|
|
+ if kdcs[1] != "kdc2b.test.gokrb5:88" {
|
|
|
+ t.Fatalf("expected kdc2b.test.gokrb5:88 but received %s", kdcs[1])
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func TestResolveKDC(t *testing.T) {
|
|
|
+ test.Privileged(t)
|
|
|
+
|
|
|
+ c, err := NewConfigFromString(testdata.TEST_KRB5CONF)
|
|
|
+ if err != nil {
|
|
|
+ t.Fatal(err)
|
|
|
+ }
|
|
|
+ // Store the original value for realms since we'll use them in our
|
|
|
+ // second test.
|
|
|
+ originalRealms := c.Realms
|
|
|
+
|
|
|
+ // For our first test, let's check that we discover the expected
|
|
|
+ // KDCs when they're not provided and we should be looking them up.
|
|
|
+ c.LibDefaults.DNSLookupKDC = true
|
|
|
+ c.Realms = make([]Realm, 0)
|
|
|
+ count, res, err := c.GetKDCs(c.LibDefaults.DefaultRealm, true)
|
|
|
+ if err != nil {
|
|
|
+ t.Errorf("error resolving KDC via DNS TCP: %v", err)
|
|
|
+ }
|
|
|
+ assert.Equal(t, 5, count, "Number of SRV records not as expected: %v", res)
|
|
|
+ assert.Equal(t, count, len(res), "Map size does not match: %v", res)
|
|
|
+ expected := []string{
|
|
|
+ "kdc.test.gokrb5:88",
|
|
|
+ "kdc1a.test.gokrb5:88",
|
|
|
+ "kdc2a.test.gokrb5:88",
|
|
|
+ "kdc1b.test.gokrb5:88",
|
|
|
+ "kdc2b.test.gokrb5:88",
|
|
|
+ }
|
|
|
+ for _, s := range expected {
|
|
|
+ var found bool
|
|
|
+ for _, v := range res {
|
|
|
+ if s == v {
|
|
|
+ found = true
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ assert.True(t, found, "Record %s not found in results", s)
|
|
|
+ }
|
|
|
+
|
|
|
+ // For our second check, verify that when we shouldn't be looking them up,
|
|
|
+ // we get the expected value.
|
|
|
+ c.LibDefaults.DNSLookupKDC = false
|
|
|
+ c.Realms = originalRealms
|
|
|
+ _, res, err = c.GetKDCs(c.LibDefaults.DefaultRealm, true)
|
|
|
+ if err != nil {
|
|
|
+ t.Errorf("error resolving KDCs from config: %v", err)
|
|
|
+ }
|
|
|
+ assert.Equal(t, "127.0.0.1:88", res[1], "KDC not read from config as expected")
|
|
|
+}
|