1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one
3 * or more contributor license agreements. See the NOTICE file
4 * distributed with this work for additional information
5 * regarding copyright ownership. The ASF licenses this file
6 * to you under the Apache License, Version 2.0 (the
7 * "License"); you may not use this file except in compliance
8 * with the License. You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing,
13 * software distributed under the License is distributed on an
14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 * KIND, either express or implied. See the License for the
16 * specific language governing permissions and limitations
17 * under the License.
18 *
19 */
20 package org.apache.directory.shared.kerberos.codec.krbError;
21
22
23 import org.apache.directory.api.asn1.actions.CheckNotNullLength;
24 import org.apache.directory.api.asn1.ber.grammar.AbstractGrammar;
25 import org.apache.directory.api.asn1.ber.grammar.Grammar;
26 import org.apache.directory.api.asn1.ber.grammar.GrammarTransition;
27 import org.apache.directory.api.asn1.ber.tlv.UniversalTag;
28 import org.apache.directory.shared.kerberos.KerberosConstants;
29 import org.apache.directory.shared.kerberos.codec.krbError.actions.CheckMsgType;
30 import org.apache.directory.shared.kerberos.codec.krbError.actions.KrbErrorInit;
31 import org.apache.directory.shared.kerberos.codec.krbError.actions.StoreCName;
32 import org.apache.directory.shared.kerberos.codec.krbError.actions.StoreCRealm;
33 import org.apache.directory.shared.kerberos.codec.krbError.actions.StoreCTime;
34 import org.apache.directory.shared.kerberos.codec.krbError.actions.StoreCusec;
35 import org.apache.directory.shared.kerberos.codec.krbError.actions.StoreEData;
36 import org.apache.directory.shared.kerberos.codec.krbError.actions.StoreEText;
37 import org.apache.directory.shared.kerberos.codec.krbError.actions.StoreErrorCode;
38 import org.apache.directory.shared.kerberos.codec.krbError.actions.StorePvno;
39 import org.apache.directory.shared.kerberos.codec.krbError.actions.StoreRealm;
40 import org.apache.directory.shared.kerberos.codec.krbError.actions.StoreSName;
41 import org.apache.directory.shared.kerberos.codec.krbError.actions.StoreSTime;
42 import org.apache.directory.shared.kerberos.codec.krbError.actions.StoreSusec;
43 import org.slf4j.Logger;
44 import org.slf4j.LoggerFactory;
45
46
47 /**
48 * This class implements the KrbError structure. All the actions are declared
49 * in this class. As it is a singleton, these declaration are only done once. If
50 * an action is to be added or modified, this is where the work is to be done !
51 *
52 * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
53 */
54 public final class KrbErrorGrammar extends AbstractGrammar<KrbErrorContainer>
55 {
56 /** The logger */
57 static final Logger LOG = LoggerFactory.getLogger( KrbErrorGrammar.class );
58
59 /** A speedup for logger */
60 static final boolean IS_DEBUG = LOG.isDebugEnabled();
61
62 /** The instance of grammar. KrbErrorGrammar is a singleton */
63 private static Grammar<KrbErrorContainer> instance = new KrbErrorGrammar();
64
65
66 /**
67 * Creates a new KrbErrorGrammar object.
68 */
69 @SuppressWarnings("unchecked")
70 private KrbErrorGrammar()
71 {
72 setName( KrbErrorGrammar.class.getName() );
73
74 // Create the transitions table
75 super.transitions = new GrammarTransition[KrbErrorStatesEnum.LAST_KRB_ERR_STATE.ordinal()][256];
76
77 // ============================================================================================
78 // KrbError
79 // ============================================================================================
80 // --------------------------------------------------------------------------------------------
81 // Transition from KrbError init to KrbError tag
82 // --------------------------------------------------------------------------------------------
83 // KRB-ERROR ::= [APPLICATION 30]
84 super.transitions[KrbErrorStatesEnum.START_STATE.ordinal()][KerberosConstants.KRB_ERROR_TAG] =
85 new GrammarTransition<KrbErrorContainer>(
86 KrbErrorStatesEnum.START_STATE,
87 KrbErrorStatesEnum.KRB_ERR_TAG,
88 KerberosConstants.KRB_ERROR_TAG,
89 new KrbErrorInit() );
90
91 // --------------------------------------------------------------------------------------------
92 // Transition from KrbError tag to KrbError SEQ
93 // --------------------------------------------------------------------------------------------
94 // KRB-ERROR ::= [APPLICATION 30] SEQUENCE {
95 super.transitions[KrbErrorStatesEnum.KRB_ERR_TAG.ordinal()][UniversalTag.SEQUENCE.getValue()] =
96 new GrammarTransition<KrbErrorContainer>(
97 KrbErrorStatesEnum.KRB_ERR_TAG,
98 KrbErrorStatesEnum.KRB_ERR_SEQ_STATE,
99 UniversalTag.SEQUENCE,
100 new CheckNotNullLength<KrbErrorContainer>() );
101
102 // --------------------------------------------------------------------------------------------
103 // Transition from KrbError SEQ to pvno tag
104 // --------------------------------------------------------------------------------------------
105 // KRB-ERROR ::= SEQUENCE {
106 // pvno [0]
107 super.transitions[KrbErrorStatesEnum.KRB_ERR_SEQ_STATE.ordinal()][KerberosConstants.KRB_ERROR_PVNO_TAG] =
108 new GrammarTransition<KrbErrorContainer>(
109 KrbErrorStatesEnum.KRB_ERR_SEQ_STATE,
110 KrbErrorStatesEnum.KRB_ERR_PVNO_TAG_STATE,
111 KerberosConstants.KRB_ERROR_PVNO_TAG,
112 new CheckNotNullLength<KrbErrorContainer>() );
113
114 // --------------------------------------------------------------------------------------------
115 // Transition from pvno tag to pvno value
116 // --------------------------------------------------------------------------------------------
117 // KRB-ERROR ::= SEQUENCE {
118 // pvno [0] INTEGER (5) ,
119 super.transitions[KrbErrorStatesEnum.KRB_ERR_PVNO_TAG_STATE.ordinal()][UniversalTag.INTEGER.getValue()] =
120 new GrammarTransition<KrbErrorContainer>(
121 KrbErrorStatesEnum.KRB_ERR_PVNO_TAG_STATE,
122 KrbErrorStatesEnum.KRB_ERR_PVNO_STATE,
123 UniversalTag.INTEGER.getValue(),
124 new StorePvno() );
125
126 // --------------------------------------------------------------------------------------------
127 // Transition from pvno to msg-type tag
128 // --------------------------------------------------------------------------------------------
129 // msg-type [1]
130 super.transitions[KrbErrorStatesEnum.KRB_ERR_PVNO_STATE.ordinal()][KerberosConstants.KRB_ERROR_MSGTYPE_TAG] =
131 new GrammarTransition<KrbErrorContainer>(
132 KrbErrorStatesEnum.KRB_ERR_PVNO_STATE,
133 KrbErrorStatesEnum.KRB_ERR_MSG_TYPE_TAG_STATE,
134 KerberosConstants.KRB_ERROR_MSGTYPE_TAG,
135 new CheckNotNullLength<KrbErrorContainer>() );
136
137 // --------------------------------------------------------------------------------------------
138 // Transition from msg-type tag to msg-type value
139 // --------------------------------------------------------------------------------------------
140 // msg-type [1] INTEGER (30)
141 super.transitions[KrbErrorStatesEnum.KRB_ERR_MSG_TYPE_TAG_STATE.ordinal()][UniversalTag.INTEGER.getValue()] =
142 new GrammarTransition<KrbErrorContainer>(
143 KrbErrorStatesEnum.KRB_ERR_MSG_TYPE_TAG_STATE,
144 KrbErrorStatesEnum.KRB_ERR_MSG_TYPE_STATE,
145 UniversalTag.INTEGER,
146 new CheckMsgType() );
147
148 // --------------------------------------------------------------------------------------------
149 // Transition from msg-type value to cTime tag
150 // --------------------------------------------------------------------------------------------
151 // ctime [2]
152 super.transitions[KrbErrorStatesEnum.KRB_ERR_MSG_TYPE_STATE.ordinal()][KerberosConstants.KRB_ERROR_CTIME_TAG] =
153 new GrammarTransition<KrbErrorContainer>(
154 KrbErrorStatesEnum.KRB_ERR_MSG_TYPE_STATE,
155 KrbErrorStatesEnum.KRB_ERR_CTIME_TAG_STATE,
156 KerberosConstants.KRB_ERROR_CTIME_TAG,
157 new CheckNotNullLength<KrbErrorContainer>() );
158
159 // --------------------------------------------------------------------------------------------
160 // Transition from cTime tag to cTime value
161 // --------------------------------------------------------------------------------------------
162 // ctime [2] KerberosTime OPTIONAL
163 super.transitions[KrbErrorStatesEnum.KRB_ERR_CTIME_TAG_STATE.ordinal()][UniversalTag.GENERALIZED_TIME
164 .getValue()] =
165 new GrammarTransition<KrbErrorContainer>(
166 KrbErrorStatesEnum.KRB_ERR_CTIME_TAG_STATE,
167 KrbErrorStatesEnum.KRB_ERR_CTIME_STATE,
168 UniversalTag.GENERALIZED_TIME,
169 new StoreCTime() );
170
171 // --------------------------------------------------------------------------------------------
172 // Transition from cTime value to cusec tag
173 // --------------------------------------------------------------------------------------------
174 // cusec [3]
175 super.transitions[KrbErrorStatesEnum.KRB_ERR_CTIME_STATE.ordinal()][KerberosConstants.KRB_ERROR_CUSEC_TAG] =
176 new GrammarTransition<KrbErrorContainer>(
177 KrbErrorStatesEnum.KRB_ERR_CTIME_STATE,
178 KrbErrorStatesEnum.KRB_ERR_CUSEC_TAG_STATE,
179 KerberosConstants.KRB_ERROR_CUSEC_TAG,
180 new CheckNotNullLength<KrbErrorContainer>() );
181
182 // --------------------------------------------------------------------------------------------
183 // Transition from cusec tag to cusec value
184 // --------------------------------------------------------------------------------------------
185 // cusec [3] Microseconds OPTIONAL
186 super.transitions[KrbErrorStatesEnum.KRB_ERR_CUSEC_TAG_STATE.ordinal()][UniversalTag.INTEGER.getValue()] =
187 new GrammarTransition<KrbErrorContainer>(
188 KrbErrorStatesEnum.KRB_ERR_CUSEC_TAG_STATE,
189 KrbErrorStatesEnum.KRB_ERR_CUSEC_STATE,
190 UniversalTag.INTEGER,
191 new StoreCusec() );
192
193 // --------------------------------------------------------------------------------------------
194 // Transition from cusec value to stime tag
195 // --------------------------------------------------------------------------------------------
196 // stime [4]
197 super.transitions[KrbErrorStatesEnum.KRB_ERR_CUSEC_STATE.ordinal()][KerberosConstants.KRB_ERROR_STIME_TAG] =
198 new GrammarTransition<KrbErrorContainer>(
199 KrbErrorStatesEnum.KRB_ERR_CUSEC_STATE, KrbErrorStatesEnum.KRB_ERR_STIME_TAG_STATE,
200 KerberosConstants.KRB_ERROR_STIME_TAG,
201 new CheckNotNullLength<KrbErrorContainer>() );
202
203 // --------------------------------------------------------------------------------------------
204 // Transition from stime tag to stime value
205 // --------------------------------------------------------------------------------------------
206 // stime [4] KerberosTime
207 super.transitions[KrbErrorStatesEnum.KRB_ERR_STIME_TAG_STATE.ordinal()][UniversalTag.GENERALIZED_TIME
208 .getValue()] =
209 new GrammarTransition<KrbErrorContainer>(
210 KrbErrorStatesEnum.KRB_ERR_STIME_TAG_STATE,
211 KrbErrorStatesEnum.KRB_ERR_STIME_STATE,
212 UniversalTag.GENERALIZED_TIME,
213 new StoreSTime() );
214
215 // --------------------------------------------------------------------------------------------
216 // Transition from stime value to susec tag
217 // --------------------------------------------------------------------------------------------
218 // susec [5]
219 super.transitions[KrbErrorStatesEnum.KRB_ERR_STIME_STATE.ordinal()][KerberosConstants.KRB_ERROR_SUSEC_TAG] =
220 new GrammarTransition<KrbErrorContainer>(
221 KrbErrorStatesEnum.KRB_ERR_STIME_STATE,
222 KrbErrorStatesEnum.KRB_ERR_SUSEC_TAG_STATE,
223 KerberosConstants.KRB_ERROR_SUSEC_TAG,
224 new CheckNotNullLength<KrbErrorContainer>() );
225
226 // --------------------------------------------------------------------------------------------
227 // Transition from susec tag to susec value
228 // --------------------------------------------------------------------------------------------
229 // susec [5] Microseconds
230 super.transitions[KrbErrorStatesEnum.KRB_ERR_SUSEC_TAG_STATE.ordinal()][UniversalTag.INTEGER.getValue()] =
231 new GrammarTransition<KrbErrorContainer>(
232 KrbErrorStatesEnum.KRB_ERR_SUSEC_TAG_STATE,
233 KrbErrorStatesEnum.KRB_ERR_SUSEC_STATE,
234 UniversalTag.INTEGER,
235 new StoreSusec() );
236
237 // --------------------------------------------------------------------------------------------
238 // Transition from susec value to error-code tag
239 // --------------------------------------------------------------------------------------------
240 // error-code [6]
241 super.transitions[KrbErrorStatesEnum.KRB_ERR_SUSEC_STATE.ordinal()][KerberosConstants.KRB_ERROR_ERROR_CODE_TAG] =
242 new GrammarTransition<KrbErrorContainer>(
243 KrbErrorStatesEnum.KRB_ERR_SUSEC_STATE,
244 KrbErrorStatesEnum.KRB_ERR_ERROR_CODE_TAG_STATE,
245 KerberosConstants.KRB_ERROR_ERROR_CODE_TAG,
246 new CheckNotNullLength<KrbErrorContainer>() );
247
248 // --------------------------------------------------------------------------------------------
249 // Transition from error-code tag to error-code value
250 // --------------------------------------------------------------------------------------------
251 // error-code [6] Int32
252 super.transitions[KrbErrorStatesEnum.KRB_ERR_ERROR_CODE_TAG_STATE.ordinal()][UniversalTag.INTEGER.getValue()] =
253 new GrammarTransition<KrbErrorContainer>(
254 KrbErrorStatesEnum.KRB_ERR_ERROR_CODE_TAG_STATE,
255 KrbErrorStatesEnum.KRB_ERR_ERROR_CODE_STATE,
256 UniversalTag.INTEGER,
257 new StoreErrorCode() );
258
259 // --------------------------------------------------------------------------------------------
260 // Transition from error-code value to crealm tag
261 // --------------------------------------------------------------------------------------------
262 // crealm [7]
263 super.transitions[KrbErrorStatesEnum.KRB_ERR_ERROR_CODE_STATE.ordinal()][KerberosConstants.KRB_ERROR_CREALM_TAG] =
264 new GrammarTransition<KrbErrorContainer>(
265 KrbErrorStatesEnum.KRB_ERR_ERROR_CODE_STATE,
266 KrbErrorStatesEnum.KRB_ERR_CREALM_TAG_STATE,
267 KerberosConstants.KRB_ERROR_CREALM_TAG,
268 new CheckNotNullLength<KrbErrorContainer>() );
269
270 // --------------------------------------------------------------------------------------------
271 // Transition from crealm tag to crealm value
272 // --------------------------------------------------------------------------------------------
273 // crealm [7] Realm
274 super.transitions[KrbErrorStatesEnum.KRB_ERR_CREALM_TAG_STATE.ordinal()][UniversalTag.GENERAL_STRING.getValue()] =
275 new GrammarTransition<KrbErrorContainer>(
276 KrbErrorStatesEnum.KRB_ERR_CREALM_TAG_STATE,
277 KrbErrorStatesEnum.KRB_ERR_CREALM_STATE,
278 UniversalTag.GENERAL_STRING,
279 new StoreCRealm() );
280
281 // --------------------------------------------------------------------------------------------
282 // Transition from crealm value to cname
283 // --------------------------------------------------------------------------------------------
284 // cname [8] PrincipalName OPTIONAL,
285 super.transitions[KrbErrorStatesEnum.KRB_ERR_CREALM_STATE.ordinal()][KerberosConstants.KRB_ERROR_CNAME_TAG] =
286 new GrammarTransition<KrbErrorContainer>(
287 KrbErrorStatesEnum.KRB_ERR_CREALM_STATE,
288 KrbErrorStatesEnum.KRB_ERR_CNAME_STATE,
289 KerberosConstants.KRB_ERROR_CNAME_TAG,
290 new StoreCName() );
291
292 // --------------------------------------------------------------------------------------------
293 // Transition from cname value to realm tag
294 // --------------------------------------------------------------------------------------------
295 // realm [9]
296 super.transitions[KrbErrorStatesEnum.KRB_ERR_CNAME_STATE.ordinal()][KerberosConstants.KRB_ERROR_REALM_TAG] =
297 new GrammarTransition<KrbErrorContainer>(
298 KrbErrorStatesEnum.KRB_ERR_CNAME_STATE,
299 KrbErrorStatesEnum.KRB_ERR_REALM_TAG_STATE,
300 KerberosConstants.KRB_ERROR_REALM_TAG,
301 new CheckNotNullLength<KrbErrorContainer>() );
302
303 // --------------------------------------------------------------------------------------------
304 // Transition from realm tag to realm value
305 // --------------------------------------------------------------------------------------------
306 // realm [9] Realm
307 super.transitions[KrbErrorStatesEnum.KRB_ERR_REALM_TAG_STATE.ordinal()][UniversalTag.GENERAL_STRING.getValue()] =
308 new GrammarTransition<KrbErrorContainer>(
309 KrbErrorStatesEnum.KRB_ERR_REALM_TAG_STATE,
310 KrbErrorStatesEnum.KRB_ERR_REALM_STATE,
311 UniversalTag.GENERAL_STRING,
312 new StoreRealm() );
313
314 // --------------------------------------------------------------------------------------------
315 // Transition from realm value to sname
316 // --------------------------------------------------------------------------------------------
317 // sname [10] PrincipalName,
318 super.transitions[KrbErrorStatesEnum.KRB_ERR_REALM_STATE.ordinal()][KerberosConstants.KRB_ERROR_SNAME_TAG] =
319 new GrammarTransition<KrbErrorContainer>(
320 KrbErrorStatesEnum.KRB_ERR_REALM_STATE,
321 KrbErrorStatesEnum.KRB_ERR_SNAME_STATE,
322 KerberosConstants.KRB_ERROR_SNAME_TAG,
323 new StoreSName() );
324
325 // --------------------------------------------------------------------------------------------
326 // Transition from sname value to etext tag
327 // --------------------------------------------------------------------------------------------
328 // e-text [11]
329 super.transitions[KrbErrorStatesEnum.KRB_ERR_SNAME_STATE.ordinal()][KerberosConstants.KRB_ERROR_ETEXT_TAG] =
330 new GrammarTransition<KrbErrorContainer>(
331 KrbErrorStatesEnum.KRB_ERR_SNAME_STATE,
332 KrbErrorStatesEnum.KRB_ERR_ETEXT_TAG_STATE,
333 KerberosConstants.KRB_ERROR_ETEXT_TAG,
334 new CheckNotNullLength<KrbErrorContainer>() );
335
336 // --------------------------------------------------------------------------------------------
337 // Transition from etext tag to etext value
338 // --------------------------------------------------------------------------------------------
339 // e-text [11] KerberosString OPTIONAL
340 super.transitions[KrbErrorStatesEnum.KRB_ERR_ETEXT_TAG_STATE.ordinal()][UniversalTag.GENERAL_STRING.getValue()] =
341 new GrammarTransition<KrbErrorContainer>(
342 KrbErrorStatesEnum.KRB_ERR_ETEXT_TAG_STATE,
343 KrbErrorStatesEnum.KRB_ERR_ETEXT_STATE,
344 UniversalTag.GENERAL_STRING,
345 new StoreEText() );
346
347 // --------------------------------------------------------------------------------------------
348 // Transition from etext value to edata tag
349 // --------------------------------------------------------------------------------------------
350 // e-data [12]
351 super.transitions[KrbErrorStatesEnum.KRB_ERR_ETEXT_STATE.ordinal()][KerberosConstants.KRB_ERROR_EDATA_TAG] =
352 new GrammarTransition<KrbErrorContainer>(
353 KrbErrorStatesEnum.KRB_ERR_ETEXT_STATE,
354 KrbErrorStatesEnum.KRB_ERR_EDATA_TAG_STATE,
355 KerberosConstants.KRB_ERROR_EDATA_TAG,
356 new CheckNotNullLength<KrbErrorContainer>() );
357
358 // --------------------------------------------------------------------------------------------
359 // Transition from edata tag to edata value
360 // --------------------------------------------------------------------------------------------
361 // e-data [12] OCTET STRING OPTIONAL
362 super.transitions[KrbErrorStatesEnum.KRB_ERR_EDATA_TAG_STATE.ordinal()][UniversalTag.OCTET_STRING.getValue()] =
363 new GrammarTransition<KrbErrorContainer>(
364 KrbErrorStatesEnum.KRB_ERR_EDATA_TAG_STATE,
365 KrbErrorStatesEnum.KRB_ERR_EDATA_STATE,
366 UniversalTag.OCTET_STRING,
367 new StoreEData() );
368
369 // ----------------------------------------- OPTIONAL transitions -----------------------------------------
370
371 // --------------------------------------------------------------------------------------------
372 // Transition from msg-type value to cusec tag
373 // --------------------------------------------------------------------------------------------
374 // cusec [3]
375 super.transitions[KrbErrorStatesEnum.KRB_ERR_MSG_TYPE_STATE.ordinal()][KerberosConstants.KRB_ERROR_CUSEC_TAG] =
376 new GrammarTransition<KrbErrorContainer>(
377 KrbErrorStatesEnum.KRB_ERR_MSG_TYPE_STATE,
378 KrbErrorStatesEnum.KRB_ERR_CUSEC_TAG_STATE,
379 KerberosConstants.KRB_ERROR_CUSEC_TAG,
380 new CheckNotNullLength<KrbErrorContainer>() );
381
382 // --------------------------------------------------------------------------------------------
383 // Transition from msg-type value to stime tag
384 // --------------------------------------------------------------------------------------------
385 // stime [4]
386 super.transitions[KrbErrorStatesEnum.KRB_ERR_MSG_TYPE_STATE.ordinal()][KerberosConstants.KRB_ERROR_STIME_TAG] =
387 new GrammarTransition<KrbErrorContainer>(
388 KrbErrorStatesEnum.KRB_ERR_MSG_TYPE_STATE,
389 KrbErrorStatesEnum.KRB_ERR_STIME_TAG_STATE,
390 KerberosConstants.KRB_ERROR_STIME_TAG,
391 new CheckNotNullLength<KrbErrorContainer>() );
392
393 // --------------------------------------------------------------------------------------------
394 // Transition from cTime value to stime tag
395 // --------------------------------------------------------------------------------------------
396 // stime [4]
397 super.transitions[KrbErrorStatesEnum.KRB_ERR_CTIME_STATE.ordinal()][KerberosConstants.KRB_ERROR_STIME_TAG] =
398 new GrammarTransition<KrbErrorContainer>(
399 KrbErrorStatesEnum.KRB_ERR_CTIME_STATE,
400 KrbErrorStatesEnum.KRB_ERR_STIME_TAG_STATE,
401 KerberosConstants.KRB_ERROR_STIME_TAG,
402 new CheckNotNullLength<KrbErrorContainer>() );
403
404 // from erro-code to realm
405
406 // --------------------------------------------------------------------------------------------
407 // Transition from error-code value to realm tag
408 // --------------------------------------------------------------------------------------------
409 // realm [9]
410 super.transitions[KrbErrorStatesEnum.KRB_ERR_ERROR_CODE_STATE.ordinal()][KerberosConstants.KRB_ERROR_REALM_TAG] =
411 new GrammarTransition<KrbErrorContainer>(
412 KrbErrorStatesEnum.KRB_ERR_ERROR_CODE_STATE,
413 KrbErrorStatesEnum.KRB_ERR_REALM_TAG_STATE,
414 KerberosConstants.KRB_ERROR_REALM_TAG,
415 new CheckNotNullLength<KrbErrorContainer>() );
416
417 // --------------------------------------------------------------------------------------------
418 // Transition from error-code value to cname
419 // --------------------------------------------------------------------------------------------
420 // cname [8] PrincipalName OPTIONAL,
421 super.transitions[KrbErrorStatesEnum.KRB_ERR_ERROR_CODE_STATE.ordinal()][KerberosConstants.KRB_ERROR_CNAME_TAG] =
422 new GrammarTransition<KrbErrorContainer>(
423 KrbErrorStatesEnum.KRB_ERR_ERROR_CODE_STATE,
424 KrbErrorStatesEnum.KRB_ERR_CNAME_STATE,
425 KerberosConstants.KRB_ERROR_CNAME_TAG,
426 new StoreCName() );
427
428 // --------------------------------------------------------------------------------------------
429 // Transition from crealm value to realm tag
430 // --------------------------------------------------------------------------------------------
431 // realm [9]
432 super.transitions[KrbErrorStatesEnum.KRB_ERR_CREALM_STATE.ordinal()][KerberosConstants.KRB_ERROR_REALM_TAG] =
433 new GrammarTransition<KrbErrorContainer>(
434 KrbErrorStatesEnum.KRB_ERR_CREALM_STATE,
435 KrbErrorStatesEnum.KRB_ERR_REALM_TAG_STATE,
436 KerberosConstants.KRB_ERROR_REALM_TAG,
437 new CheckNotNullLength<KrbErrorContainer>() );
438
439 // --------------------------------------------------------------------------------------------
440 // Transition from sname value to edata tag
441 // --------------------------------------------------------------------------------------------
442 // e-data [12]
443 super.transitions[KrbErrorStatesEnum.KRB_ERR_SNAME_STATE.ordinal()][KerberosConstants.KRB_ERROR_EDATA_TAG] =
444 new GrammarTransition<KrbErrorContainer>(
445 KrbErrorStatesEnum.KRB_ERR_SNAME_STATE,
446 KrbErrorStatesEnum.KRB_ERR_EDATA_TAG_STATE,
447 KerberosConstants.KRB_ERROR_EDATA_TAG,
448 new CheckNotNullLength<KrbErrorContainer>() );
449 }
450
451
452 /**
453 * Get the instance of this grammar
454 *
455 * @return An instance on the KRB-ERROR Grammar
456 */
457 public static Grammar<KrbErrorContainer> getInstance()
458 {
459 return instance;
460 }
461 }