@@ -96,6 +96,33 @@ public void CreateServiceTicket()
9696 Assert . AreEqual ( "blah@blah2.com" , ticketEncPart . CName . FullyQualifiedName ) ;
9797 }
9898
99+ [ TestMethod ]
100+ public void CreateServiceTicket_ReferralTgtComputerIdentity ( )
101+ {
102+ var key = KrbEncryptionKey . Generate ( EncryptionType . AES128_CTS_HMAC_SHA1_96 ) . AsKey ( ) ;
103+
104+ var tgsRep = KrbKdcRep . GenerateServiceTicket < KrbTgsRep > ( new ServiceTicketRequest
105+ {
106+ EncryptedPartKey = key ,
107+ ServicePrincipal = new FakeKerberosPrincipal ( "blah@blah.com" ) ,
108+ ServicePrincipalKey = key ,
109+ Principal = new FakeKerberosPrincipal ( "computer$" ) ,
110+ RealmName = "blah.com" ,
111+ ClientRealmName = "test.com" ,
112+ Compatibility = KerberosCompatibilityFlags . IsolateRealmsConsistently ,
113+ } ) ;
114+
115+ Assert . IsNotNull ( tgsRep ) ;
116+ Assert . AreEqual ( "blah.com" , tgsRep . Ticket . Realm ) ;
117+ Assert . AreEqual ( "blah@blah.com/blah.com" , tgsRep . Ticket . SName . FullyQualifiedName ) ;
118+ Assert . AreEqual ( "test.com" , tgsRep . CRealm ) ;
119+ Assert . AreEqual ( "computer$@test.com" , tgsRep . CName . FullyQualifiedName ) ;
120+
121+ var ticketEncPart = tgsRep . Ticket . EncryptedPart . Decrypt ( key , KeyUsage . Ticket , KrbEncTicketPart . DecodeApplication ) ;
122+ Assert . AreEqual ( "test.com" , ticketEncPart . CRealm ) ;
123+ Assert . AreEqual ( "computer$@test.com" , ticketEncPart . CName . FullyQualifiedName ) ;
124+ }
125+
99126 [ TestMethod ]
100127 // Check that no uppercasing or realm isolation happens by default.
101128 [ DataRow ( LowerCaseRealm1 , LowerCaseRealm2 , KerberosCompatibilityFlags . None , LowerCaseRealm1 , LowerCaseRealm1 ) ]
0 commit comments