@@ -14,8 +14,10 @@ namespace Tests.Kerberos.NET
1414 [ TestClass ]
1515 public class KrbKdcRepTests
1616 {
17- private const string LowerCaseRealm = "realm.com" ;
18- private const string UpperCaseRealm = "REALM.COM" ;
17+ private const string LowerCaseRealm1 = "realm.com" ;
18+ private const string UpperCaseRealm1 = "REALM.COM" ;
19+ private const string LowerCaseRealm2 = "test.com" ;
20+ private const string UpperCaseRealm2 = "TEST.COM" ;
1921
2022 [ TestMethod ]
2123 [ ExpectedException ( typeof ( InvalidOperationException ) ) ]
@@ -72,41 +74,68 @@ public void CreateServiceTicket()
7274 {
7375 var key = KrbEncryptionKey . Generate ( EncryptionType . AES128_CTS_HMAC_SHA1_96 ) . AsKey ( ) ;
7476
75- var ticket = KrbKdcRep . GenerateServiceTicket < KrbTgsRep > ( new ServiceTicketRequest
77+ var tgsRep = KrbKdcRep . GenerateServiceTicket < KrbTgsRep > ( new ServiceTicketRequest
7678 {
7779 EncryptedPartKey = key ,
7880 ServicePrincipal = new FakeKerberosPrincipal ( "blah@blah.com" ) ,
7981 ServicePrincipalKey = key ,
8082 Principal = new FakeKerberosPrincipal ( "blah@blah2.com" ) ,
8183 RealmName = "blah.com" ,
8284 ClientRealmName = "test.com" ,
85+ Compatibility = KerberosCompatibilityFlags . IsolateRealmsConsistently ,
8386 } ) ;
8487
85- Assert . IsNotNull ( ticket ) ;
88+ Assert . IsNotNull ( tgsRep ) ;
89+ Assert . AreEqual ( "blah.com" , tgsRep . Ticket . Realm ) ;
90+ Assert . AreEqual ( "blah@blah.com/blah.com" , tgsRep . Ticket . SName . FullyQualifiedName ) ;
91+ Assert . AreEqual ( "test.com" , tgsRep . CRealm ) ;
92+ Assert . AreEqual ( "blah@blah2.com" , tgsRep . CName . FullyQualifiedName ) ;
93+
94+ var ticketEncPart = tgsRep . Ticket . EncryptedPart . Decrypt ( key , KeyUsage . Ticket , KrbEncTicketPart . DecodeApplication ) ;
95+ Assert . AreEqual ( "test.com" , ticketEncPart . CRealm ) ;
96+ Assert . AreEqual ( "blah@blah2.com" , ticketEncPart . CName . FullyQualifiedName ) ;
8697 }
8798
8899 [ TestMethod ]
89- [ DataRow ( LowerCaseRealm , KerberosCompatibilityFlags . None , LowerCaseRealm ) ]
90- [ DataRow ( LowerCaseRealm , KerberosCompatibilityFlags . NormalizeRealmsUppercase , UpperCaseRealm ) ]
91- [ DataRow ( UpperCaseRealm , KerberosCompatibilityFlags . None , UpperCaseRealm ) ]
92- [ DataRow ( UpperCaseRealm , KerberosCompatibilityFlags . NormalizeRealmsUppercase , UpperCaseRealm ) ]
93- public void CreateServiceTicketOnCompatibilitySetting ( string realm , KerberosCompatibilityFlags compatibilityFlags , string expectedRealm )
100+ // Check that no uppercasing or realm isolation happens by default.
101+ [ DataRow ( LowerCaseRealm1 , LowerCaseRealm2 , KerberosCompatibilityFlags . None , LowerCaseRealm1 , LowerCaseRealm1 ) ]
102+ [ DataRow ( UpperCaseRealm1 , UpperCaseRealm2 , KerberosCompatibilityFlags . None , UpperCaseRealm1 , UpperCaseRealm1 ) ]
103+ // Check that KerberosCompatibilityFlags.NormalizeRealmsUppercase uppercases the realm.
104+ [ DataRow ( LowerCaseRealm1 , LowerCaseRealm2 , KerberosCompatibilityFlags . NormalizeRealmsUppercase , UpperCaseRealm1 , UpperCaseRealm1 ) ]
105+ [ DataRow ( UpperCaseRealm1 , UpperCaseRealm2 , KerberosCompatibilityFlags . NormalizeRealmsUppercase , UpperCaseRealm1 , UpperCaseRealm1 ) ]
106+ // Check that KerberosCompatibilityFlags.IsolateRealmsConsistently does isolate the realm and crealm
107+ [ DataRow ( LowerCaseRealm1 , LowerCaseRealm2 , KerberosCompatibilityFlags . IsolateRealmsConsistently , LowerCaseRealm1 , LowerCaseRealm2 ) ]
108+ [ DataRow ( UpperCaseRealm1 , UpperCaseRealm2 , KerberosCompatibilityFlags . IsolateRealmsConsistently , UpperCaseRealm1 , UpperCaseRealm2 ) ]
109+ // Check that both flags together uppercase and isolate the realms.
110+ [ DataRow ( LowerCaseRealm1 , LowerCaseRealm2 , KerberosCompatibilityFlags . NormalizeRealmsUppercase | KerberosCompatibilityFlags . IsolateRealmsConsistently , UpperCaseRealm1 , UpperCaseRealm2 ) ]
111+ [ DataRow ( UpperCaseRealm1 , UpperCaseRealm2 , KerberosCompatibilityFlags . NormalizeRealmsUppercase | KerberosCompatibilityFlags . IsolateRealmsConsistently , UpperCaseRealm1 , UpperCaseRealm2 ) ]
112+ public void CreateServiceTicketOnCompatibilitySetting (
113+ string realm ,
114+ string crealm ,
115+ KerberosCompatibilityFlags compatibilityFlags ,
116+ string expectedRealm ,
117+ string expectedCRealm
118+ )
94119 {
95120 var key = KrbEncryptionKey . Generate ( EncryptionType . AES128_CTS_HMAC_SHA1_96 ) . AsKey ( ) ;
96121
97- var ticket = KrbKdcRep . GenerateServiceTicket < KrbTgsRep > ( new ServiceTicketRequest
122+ var tgsRep = KrbKdcRep . GenerateServiceTicket < KrbTgsRep > ( new ServiceTicketRequest
98123 {
99124 EncryptedPartKey = key ,
100125 ServicePrincipal = new FakeKerberosPrincipal ( "blah@blah.com" ) ,
101126 ServicePrincipalKey = key ,
102127 Principal = new FakeKerberosPrincipal ( "blah@blah2.com" ) ,
103128 RealmName = realm ,
104- ClientRealmName = realm ,
129+ ClientRealmName = crealm ,
105130 Compatibility = compatibilityFlags ,
106131 } ) ;
107132
108- Assert . IsNotNull ( ticket ) ;
109- Assert . AreEqual ( expectedRealm , ticket . CRealm ) ;
133+ Assert . IsNotNull ( tgsRep ) ;
134+ Assert . AreEqual ( expectedRealm , tgsRep . Ticket . Realm ) ;
135+
136+ var ticketEncPart = tgsRep . Ticket . EncryptedPart . Decrypt ( key , KeyUsage . Ticket , KrbEncTicketPart . DecodeApplication ) ;
137+ Assert . AreEqual ( expectedCRealm , ticketEncPart . CRealm ) ;
138+ Assert . AreEqual ( expectedCRealm , tgsRep . CRealm ) ;
110139 }
111140 }
112141}
0 commit comments