@@ -26,7 +26,7 @@ public static KrbCred GenerateWrappedServiceTicket(
2626            ServiceTicketRequest  request , 
2727            KrbEncryptionKey  sessionKey  =  null , 
2828            IEnumerable < KrbAuthorizationData >  authz  =  null 
29-              ) 
29+         ) 
3030        { 
3131            GenerateServiceTicket < KrbTgsRep > ( 
3232                request , 
@@ -46,8 +46,7 @@ public static T GenerateServiceTicket<T>(
4646            ServiceTicketRequest  request , 
4747            KrbEncryptionKey  encryptionKey  =  null , 
4848            IEnumerable < KrbAuthorizationData >  authz  =  null 
49-             ) 
50-             where  T  :  KrbKdcRep ,  new ( ) 
49+         )  where  T  :  KrbKdcRep ,  new ( ) 
5150        { 
5251            if  ( request . EncryptedPartKey  ==  null ) 
5352            { 
@@ -67,8 +66,14 @@ out MessageType messageType
6766
6867            var  rep  =  new  T 
6968            { 
70-                 CName  =  encTicketPart . CName , 
71-                 CRealm  =  request . RealmName , 
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+ 
7277                MessageType  =  messageType , 
7378                Ticket  =  ticket , 
7479                EncPart  =  KrbEncryptedData . Encrypt ( 
@@ -91,8 +96,7 @@ private static ServiceTicketRequest GenerateServiceTicket<T>(
9196            out  KrbEncKdcRepPart  encKdcRepPart , 
9297            out  KeyUsage  keyUsage , 
9398            out  MessageType  messageType 
94-         ) 
95-             where  T  :  KrbKdcRep ,  new ( ) 
99+         )  where  T  :  KrbKdcRep ,  new ( ) 
96100        { 
97101            if  ( request . Principal  ==  null ) 
98102            { 
@@ -112,17 +116,12 @@ out MessageType messageType
112116            if  ( request . Compatibility . HasFlag ( KerberosCompatibilityFlags . NormalizeRealmsUppercase ) ) 
113117            { 
114118                request . RealmName  =  request . RealmName ? . ToUpperInvariant ( ) ; 
119+                 request . ClientRealmName  =  request . ClientRealmName ? . ToUpperInvariant ( )  ??  throw  new  InvalidOperationException ( "Unknown client realm name" ) ; 
115120            } 
116121
117-             if  ( authz  ==  null ) 
118-             { 
119-                 authz  =  GenerateAuthorizationData ( request ) ; 
120-             } 
122+             authz  ??=  GenerateAuthorizationData ( request ) ; 
121123
122-             if  ( sessionKey  ==  null ) 
123-             { 
124-                 sessionKey  =  KrbEncryptionKey . Generate ( request . PreferredClientEType  ??  request . ServicePrincipalKey . EncryptionType ) ; 
125-             } 
124+             sessionKey  ??=  KrbEncryptionKey . Generate ( request . PreferredClientEType  ??  request . ServicePrincipalKey . EncryptionType ) ; 
126125
127126            encTicketPart  =  CreateEncTicketPart ( request ,  authz . ToArray ( ) ,  sessionKey ) ; 
128127            bool  appendRealm  =  false ; 
@@ -146,6 +145,7 @@ out MessageType messageType
146145                    KeyUsage . Ticket 
147146                ) 
148147            } ; 
148+ 
149149            if  ( typeof ( T )  ==  typeof ( KrbAsRep ) ) 
150150            { 
151151                encKdcRepPart  =  new  KrbEncAsRepPart ( ) ; 
@@ -186,13 +186,15 @@ out MessageType messageType
186186                    } 
187187                } 
188188            } ; 
189+ 
189190            return  request ; 
190191        } 
191192
192193        private  static KrbEncTicketPart  CreateEncTicketPart ( 
193194            ServiceTicketRequest  request , 
194195            KrbAuthorizationData [ ]  authorizationDatas , 
195-             KrbEncryptionKey  sessionKey ) 
196+             KrbEncryptionKey  sessionKey 
197+         ) 
196198        { 
197199            var  cname  =  CreateCNameForTicket ( request ) ; 
198200
@@ -205,19 +207,16 @@ private static KrbEncTicketPart CreateEncTicketPart(
205207
206208            var  addresses  =  request . Addresses ; 
207209
208-             if  ( addresses  ==  null ) 
209-             { 
210-                 addresses  =  Array . Empty < KrbHostAddress > ( ) ; 
211-             } 
210+             addresses  ??=  Array . Empty < KrbHostAddress > ( ) ; 
212211
213212            var  encTicketPart  =  new  KrbEncTicketPart ( ) 
214213            { 
215214                CName  =  cname , 
215+                 CRealm  =  request . ClientRealmName , 
216216                Key  =  sessionKey , 
217217                AuthTime  =  request . Now , 
218218                StartTime  =  request . StartTime , 
219219                EndTime  =  request . EndTime , 
220-                 CRealm  =  request . RealmName , 
221220                Flags  =  flags , 
222221                AuthorizationData  =  authorizationDatas , 
223222                CAddr  =  addresses . ToArray ( ) , 
@@ -238,7 +237,12 @@ private static KrbPrincipalName CreateCNameForTicket(ServiceTicketRequest reques
238237        { 
239238            if  ( string . IsNullOrEmpty ( request . SamAccountName ) ) 
240239            { 
241-                 return  KrbPrincipalName . FromPrincipal ( request . Principal ,  realm :  request . RealmName ) ; 
240+                 return  KrbPrincipalName . FromPrincipal ( 
241+                     request . Principal , 
242+                     realm :  request . Compatibility . HasFlag ( KerberosCompatibilityFlags . IsolateRealmsConsistently )  ? 
243+                         request . ClientRealmName  : 
244+                         request . RealmName 
245+                 ) ; 
242246            } 
243247
244248            return  new  KrbPrincipalName 
0 commit comments