1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.directory.shared.kerberos.codec.krbCred;
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.krbCred.actions.CheckMsgType;
30 import org.apache.directory.shared.kerberos.codec.krbCred.actions.KrbCredInit;
31 import org.apache.directory.shared.kerberos.codec.krbCred.actions.StoreEncPart;
32 import org.apache.directory.shared.kerberos.codec.krbCred.actions.StorePvno;
33 import org.apache.directory.shared.kerberos.codec.krbCred.actions.StoreTickets;
34 import org.slf4j.Logger;
35 import org.slf4j.LoggerFactory;
36
37
38
39
40
41
42
43
44
45 public final class KrbCredGrammar extends AbstractGrammar<KrbCredContainer>
46 {
47
48 static final Logger LOG = LoggerFactory.getLogger( KrbCredGrammar.class );
49
50
51 static final boolean IS_DEBUG = LOG.isDebugEnabled();
52
53
54 private static Grammar<KrbCredContainer> instance = new KrbCredGrammar();
55
56
57
58
59
60 @SuppressWarnings("unchecked")
61 private KrbCredGrammar()
62 {
63 setName( KrbCredGrammar.class.getName() );
64
65
66 super.transitions = new GrammarTransition[KrbCredStatesEnum.LAST_KRB_CRED_STATE.ordinal()][256];
67
68
69
70
71
72 super.transitions[KrbCredStatesEnum.START_STATE.ordinal()][KerberosConstants.KRB_CRED_TAG] =
73 new GrammarTransition<KrbCredContainer>(
74 KrbCredStatesEnum.START_STATE, KrbCredStatesEnum.KRB_CRED_TAG_STATE, KerberosConstants.KRB_CRED_TAG,
75 new KrbCredInit() );
76
77 super.transitions[KrbCredStatesEnum.KRB_CRED_TAG_STATE.ordinal()][UniversalTag.SEQUENCE.getValue()] =
78 new GrammarTransition<KrbCredContainer>(
79 KrbCredStatesEnum.KRB_CRED_TAG_STATE,
80 KrbCredStatesEnum.KRB_CRED_SEQ_TAG_STATE,
81 UniversalTag.SEQUENCE,
82 new CheckNotNullLength<KrbCredContainer>() );
83
84 super.transitions[KrbCredStatesEnum.KRB_CRED_SEQ_TAG_STATE.ordinal()][KerberosConstants.KRB_CRED_PVNO_TAG] =
85 new GrammarTransition<KrbCredContainer>(
86 KrbCredStatesEnum.KRB_CRED_SEQ_TAG_STATE,
87 KrbCredStatesEnum.KRB_CRED_PVNO_TAG_STATE,
88 KerberosConstants.KRB_CRED_PVNO_TAG,
89 new CheckNotNullLength<KrbCredContainer>() );
90
91 super.transitions[KrbCredStatesEnum.KRB_CRED_PVNO_TAG_STATE.ordinal()][UniversalTag.INTEGER.getValue()] =
92 new GrammarTransition<KrbCredContainer>(
93 KrbCredStatesEnum.KRB_CRED_PVNO_TAG_STATE,
94 KrbCredStatesEnum.KRB_CRED_PVNO_STATE,
95 UniversalTag.INTEGER,
96 new StorePvno() );
97
98 super.transitions[KrbCredStatesEnum.KRB_CRED_PVNO_STATE.ordinal()][KerberosConstants.KRB_CRED_MSGTYPE_TAG] =
99 new GrammarTransition<KrbCredContainer>(
100 KrbCredStatesEnum.KRB_CRED_PVNO_STATE,
101 KrbCredStatesEnum.KRB_CRED_MSGTYPE_TAG_STATE,
102 KerberosConstants.KRB_CRED_MSGTYPE_TAG,
103 new CheckNotNullLength<KrbCredContainer>() );
104
105 super.transitions[KrbCredStatesEnum.KRB_CRED_MSGTYPE_TAG_STATE.ordinal()][UniversalTag.INTEGER.getValue()] =
106 new GrammarTransition<KrbCredContainer>(
107 KrbCredStatesEnum.KRB_CRED_MSGTYPE_TAG_STATE,
108 KrbCredStatesEnum.KRB_CRED_MSGTYPE_STATE,
109 UniversalTag.INTEGER,
110 new CheckMsgType() );
111
112 super.transitions[KrbCredStatesEnum.KRB_CRED_MSGTYPE_STATE.ordinal()][KerberosConstants.KRB_CRED_TICKETS_TAG] =
113 new GrammarTransition<KrbCredContainer>(
114 KrbCredStatesEnum.KRB_CRED_MSGTYPE_STATE,
115 KrbCredStatesEnum.KRB_CRED_TICKETS_TAG_STATE,
116 KerberosConstants.KRB_CRED_TICKETS_TAG,
117 new CheckNotNullLength<KrbCredContainer>() );
118
119 super.transitions[KrbCredStatesEnum.KRB_CRED_TICKETS_TAG_STATE.ordinal()][UniversalTag.SEQUENCE.getValue()] =
120 new GrammarTransition<KrbCredContainer>(
121 KrbCredStatesEnum.KRB_CRED_TICKETS_TAG_STATE,
122 KrbCredStatesEnum.KRB_CRED_TICKETS_STATE,
123 UniversalTag.SEQUENCE,
124 new CheckNotNullLength<KrbCredContainer>() );
125
126 super.transitions[KrbCredStatesEnum.KRB_CRED_TICKETS_STATE.ordinal()][KerberosConstants.TICKET_TAG] =
127 new GrammarTransition<KrbCredContainer>(
128 KrbCredStatesEnum.KRB_CRED_TICKETS_STATE,
129 KrbCredStatesEnum.KRB_CRED_TICKETS_STATE,
130 KerberosConstants.TICKET_TAG,
131 new StoreTickets() );
132
133 super.transitions[KrbCredStatesEnum.KRB_CRED_TICKETS_STATE.ordinal()][KerberosConstants.KRB_CRED_ENCPART_TAG] =
134 new GrammarTransition<KrbCredContainer>(
135 KrbCredStatesEnum.KRB_CRED_TICKETS_STATE,
136 KrbCredStatesEnum.KRB_CRED_ENCPART_TAG_STATE,
137 KerberosConstants.KRB_CRED_ENCPART_TAG,
138 new StoreEncPart() );
139 }
140
141
142
143
144
145
146
147 public static Grammar<KrbCredContainer> getInstance()
148 {
149 return instance;
150 }
151 }