Jonathan Turner 8 лет назад
Родитель
Сommit
876da8d891
2 измененных файлов с 24 добавлено и 2 удалено
  1. 16 2
      credentials/ccache_integration_test.go
  2. 8 0
      types/PrincipalName.go

+ 16 - 2
credentials/ccache_integration_test.go

@@ -13,12 +13,15 @@ import (
 	"testing"
 
 	"github.com/stretchr/testify/assert"
+	"gopkg.in/jcmturner/gokrb5.v4/iana/nametype"
 	"gopkg.in/jcmturner/gokrb5.v4/testdata"
+	"gopkg.in/jcmturner/gokrb5.v4/types"
 )
 
 const (
 	kinitCmd = "kinit"
 	kvnoCmd  = "kvno"
+	spn      = "HTTP/host.test.gokrb5"
 )
 
 func login() error {
@@ -59,7 +62,7 @@ func login() error {
 }
 
 func getServiceTkt() error {
-	cmd := exec.Command(kvnoCmd, "HTTP/host.test.gokrb5")
+	cmd := exec.Command(kvnoCmd, spn)
 	err := cmd.Start()
 	if err != nil {
 		return fmt.Errorf("could not start %s command: %v", kvnoCmd, err)
@@ -98,5 +101,16 @@ func TestCCacheEntries(t *testing.T) {
 		t.Fatalf("error getting service ticket: %v", err)
 	}
 	c, err := loadCCache()
-	t.Logf("ccache: %+v", c)
+	creds := c.GetEntries()
+	var found bool
+	n := types.NewPrincipalName(nametype.KRB_NT_PRINCIPAL, spn)
+	for _, cred := range creds {
+		if cred.Server.PrincipalName.Equal(n) {
+			found = true
+			break
+		}
+	}
+	if !found {
+		t.Errorf("Entry for %s not found in CCache", spn)
+	}
 }

+ 8 - 0
types/PrincipalName.go

@@ -11,6 +11,14 @@ type PrincipalName struct {
 	NameString []string `asn1:"generalstring,explicit,tag:1"`
 }
 
+// NewPrincipalName creates a new PrincipalName from the name type int32 and name string provided.
+func NewPrincipalName(ntype int32, spn string) PrincipalName {
+	return PrincipalName{
+		NameType:   ntype,
+		NameString: strings.Split(spn, "/"),
+	}
+}
+
 // GetSalt returns a salt derived from the PrincipalName.
 func (pn *PrincipalName) GetSalt(realm string) string {
 	var sb []byte