Skip to content

Commit 08a2548

Browse files
committed
Fix difference between cleartext and ticket enc cname/crealm
1 parent efaf178 commit 08a2548

2 files changed

Lines changed: 29 additions & 8 deletions

File tree

Kerberos.NET/Entities/Krb/KrbKdcRep.cs

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -66,14 +66,8 @@ out MessageType messageType
6666

6767
var rep = new T
6868
{
69-
CName = request.Compatibility.HasFlag(KerberosCompatibilityFlags.IsolateRealmsConsistently) ?
70-
KrbPrincipalName.FromPrincipal(request.Principal) ?? encTicketPart.CName :
71-
encTicketPart.CName,
72-
73-
CRealm = request.Compatibility.HasFlag(KerberosCompatibilityFlags.IsolateRealmsConsistently) ?
74-
request.ClientRealmName :
75-
request.RealmName,
76-
69+
CName = encTicketPart.CName,
70+
CRealm = encTicketPart.CRealm,
7771
MessageType = messageType,
7872
Ticket = ticket,
7973
EncPart = KrbEncryptedData.Encrypt(

Tests/Tests.Kerberos.NET/Messages/KrbKdcRepTests.cs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)