View Javadoc
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.encTicketPart;
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.encTicketPart.actions.EncTicketPartInit;
30  import org.apache.directory.shared.kerberos.codec.encTicketPart.actions.StoreAuthTime;
31  import org.apache.directory.shared.kerberos.codec.encTicketPart.actions.StoreAuthorizationData;
32  import org.apache.directory.shared.kerberos.codec.encTicketPart.actions.StoreCName;
33  import org.apache.directory.shared.kerberos.codec.encTicketPart.actions.StoreCRealm;
34  import org.apache.directory.shared.kerberos.codec.encTicketPart.actions.StoreCaddr;
35  import org.apache.directory.shared.kerberos.codec.encTicketPart.actions.StoreEndTime;
36  import org.apache.directory.shared.kerberos.codec.encTicketPart.actions.StoreFlags;
37  import org.apache.directory.shared.kerberos.codec.encTicketPart.actions.StoreKey;
38  import org.apache.directory.shared.kerberos.codec.encTicketPart.actions.StoreRenewtill;
39  import org.apache.directory.shared.kerberos.codec.encTicketPart.actions.StoreStartTime;
40  import org.apache.directory.shared.kerberos.codec.encTicketPart.actions.StoreTransited;
41  import org.slf4j.Logger;
42  import org.slf4j.LoggerFactory;
43  
44  
45  /**
46   * This class implements the EncTicketPart structure. All the actions are declared
47   * in this class. As it is a singleton, these declaration are only done once. If
48   * an action is to be added or modified, this is where the work is to be done !
49   *
50   * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
51   */
52  public final class EncTicketPartGrammar extends AbstractGrammar<EncTicketPartContainer>
53  {
54      /** The logger */
55      static final Logger LOG = LoggerFactory.getLogger( EncTicketPartGrammar.class );
56  
57      /** A speedup for logger */
58      static final boolean IS_DEBUG = LOG.isDebugEnabled();
59  
60      /** The instance of grammar. EncTicketPartGrammar is a singleton */
61      private static Grammar<EncTicketPartContainer> instance = new EncTicketPartGrammar();
62  
63  
64      /**
65       * Creates a new EncTicketPartGrammar object.
66       */
67      @SuppressWarnings("unchecked")
68      private EncTicketPartGrammar()
69      {
70          setName( EncTicketPartGrammar.class.getName() );
71  
72          // Create the transitions table
73          super.transitions = new GrammarTransition[EncTicketPartStatesEnum.LAST_ENC_TICKET_PART_STATE.ordinal()][256];
74  
75          // ============================================================================================
76          // EncTicketPart
77          // ============================================================================================
78          super.transitions[EncTicketPartStatesEnum.START_STATE.ordinal()][KerberosConstants.ENC_TICKET_PART_TAG] =
79              new GrammarTransition<EncTicketPartContainer>(
80                  EncTicketPartStatesEnum.START_STATE,
81                  EncTicketPartStatesEnum.ENC_TICKET_PART_TAG_STATE,
82                  KerberosConstants.ENC_TICKET_PART_TAG,
83                  new EncTicketPartInit() );
84  
85          super.transitions[EncTicketPartStatesEnum.ENC_TICKET_PART_TAG_STATE.ordinal()][UniversalTag.SEQUENCE.getValue()] =
86              new GrammarTransition<EncTicketPartContainer>(
87                  EncTicketPartStatesEnum.ENC_TICKET_PART_TAG_STATE,
88                  EncTicketPartStatesEnum.ENC_TICKET_PART_SEQ_STATE,
89                  UniversalTag.SEQUENCE,
90                  new CheckNotNullLength<EncTicketPartContainer>() );
91  
92          super.transitions[EncTicketPartStatesEnum.ENC_TICKET_PART_SEQ_STATE.ordinal()][KerberosConstants.ENC_TICKET_PART_FLAGS_TAG] =
93              new GrammarTransition<EncTicketPartContainer>(
94                  EncTicketPartStatesEnum.ENC_TICKET_PART_SEQ_STATE,
95                  EncTicketPartStatesEnum.ENC_TICKET_PART_FLAGS_TAG_STATE,
96                  KerberosConstants.ENC_TICKET_PART_FLAGS_TAG,
97                  new CheckNotNullLength<EncTicketPartContainer>() );
98  
99          super.transitions[EncTicketPartStatesEnum.ENC_TICKET_PART_FLAGS_TAG_STATE.ordinal()][UniversalTag.BIT_STRING
100             .getValue()] =
101             new GrammarTransition<EncTicketPartContainer>(
102                 EncTicketPartStatesEnum.ENC_TICKET_PART_FLAGS_TAG_STATE,
103                 EncTicketPartStatesEnum.ENC_TICKET_PART_FLAGS_STATE,
104                 UniversalTag.BIT_STRING,
105                 new StoreFlags() );
106 
107         super.transitions[EncTicketPartStatesEnum.ENC_TICKET_PART_FLAGS_STATE.ordinal()][KerberosConstants.ENC_TICKET_PART_KEY_TAG] =
108             new GrammarTransition<EncTicketPartContainer>(
109                 EncTicketPartStatesEnum.ENC_TICKET_PART_FLAGS_STATE,
110                 EncTicketPartStatesEnum.ENC_TICKET_PART_KEY_TAG_STATE,
111                 KerberosConstants.ENC_TICKET_PART_KEY_TAG,
112                 new StoreKey() );
113 
114         super.transitions[EncTicketPartStatesEnum.ENC_TICKET_PART_KEY_TAG_STATE.ordinal()][KerberosConstants.ENC_TICKET_PART_CREALM_TAG] =
115             new GrammarTransition<EncTicketPartContainer>(
116                 EncTicketPartStatesEnum.ENC_TICKET_PART_KEY_TAG_STATE,
117                 EncTicketPartStatesEnum.ENC_TICKET_PART_CREALM_TAG_STATE,
118                 KerberosConstants.ENC_TICKET_PART_CREALM_TAG,
119                 new CheckNotNullLength<EncTicketPartContainer>() );
120 
121         super.transitions[EncTicketPartStatesEnum.ENC_TICKET_PART_CREALM_TAG_STATE.ordinal()][UniversalTag.GENERAL_STRING
122             .getValue()] =
123             new GrammarTransition<EncTicketPartContainer>(
124                 EncTicketPartStatesEnum.ENC_TICKET_PART_CREALM_TAG_STATE,
125                 EncTicketPartStatesEnum.ENC_TICKET_PART_CREALM_STATE,
126                 UniversalTag.GENERAL_STRING,
127                 new StoreCRealm() );
128 
129         super.transitions[EncTicketPartStatesEnum.ENC_TICKET_PART_CREALM_STATE.ordinal()][KerberosConstants.ENC_TICKET_PART_CNAME_TAG] =
130             new GrammarTransition<EncTicketPartContainer>(
131                 EncTicketPartStatesEnum.ENC_TICKET_PART_CREALM_STATE,
132                 EncTicketPartStatesEnum.ENC_TICKET_PART_CNAME_TAG_STATE,
133                 KerberosConstants.ENC_TICKET_PART_CNAME_TAG,
134                 new StoreCName() );
135 
136         super.transitions[EncTicketPartStatesEnum.ENC_TICKET_PART_CNAME_TAG_STATE.ordinal()][KerberosConstants.ENC_TICKET_PART_TRANSITED_TAG] =
137             new GrammarTransition<EncTicketPartContainer>(
138                 EncTicketPartStatesEnum.ENC_TICKET_PART_CNAME_TAG_STATE,
139                 EncTicketPartStatesEnum.ENC_TICKET_PART_TRANSITED_TAG_STATE,
140                 KerberosConstants.ENC_TICKET_PART_TRANSITED_TAG,
141                 new StoreTransited() );
142 
143         super.transitions[EncTicketPartStatesEnum.ENC_TICKET_PART_TRANSITED_TAG_STATE.ordinal()][KerberosConstants.ENC_TICKET_PART_AUTHTIME_TAG] =
144             new GrammarTransition<EncTicketPartContainer>(
145                 EncTicketPartStatesEnum.ENC_TICKET_PART_TRANSITED_TAG_STATE,
146                 EncTicketPartStatesEnum.ENC_TICKET_PART_AUTHTIME_TAG_STATE,
147                 KerberosConstants.ENC_TICKET_PART_AUTHTIME_TAG,
148                 new CheckNotNullLength<EncTicketPartContainer>() );
149 
150         super.transitions[EncTicketPartStatesEnum.ENC_TICKET_PART_AUTHTIME_TAG_STATE.ordinal()][UniversalTag.GENERALIZED_TIME
151             .getValue()] =
152             new GrammarTransition<EncTicketPartContainer>(
153                 EncTicketPartStatesEnum.ENC_TICKET_PART_AUTHTIME_TAG_STATE,
154                 EncTicketPartStatesEnum.ENC_TICKET_PART_AUTHTIME_STATE,
155                 UniversalTag.GENERALIZED_TIME,
156                 new StoreAuthTime() );
157 
158         super.transitions[EncTicketPartStatesEnum.ENC_TICKET_PART_AUTHTIME_STATE.ordinal()][KerberosConstants.ENC_TICKET_PART_STARTTIME_TAG] =
159             new GrammarTransition<EncTicketPartContainer>(
160                 EncTicketPartStatesEnum.ENC_TICKET_PART_AUTHTIME_STATE,
161                 EncTicketPartStatesEnum.ENC_TICKET_PART_STARTTIME_TAG_STATE,
162                 KerberosConstants.ENC_TICKET_PART_STARTTIME_TAG,
163                 new CheckNotNullLength<EncTicketPartContainer>() );
164 
165         super.transitions[EncTicketPartStatesEnum.ENC_TICKET_PART_STARTTIME_TAG_STATE.ordinal()][UniversalTag.GENERALIZED_TIME
166             .getValue()] =
167             new GrammarTransition<EncTicketPartContainer>(
168                 EncTicketPartStatesEnum.ENC_TICKET_PART_STARTTIME_TAG_STATE,
169                 EncTicketPartStatesEnum.ENC_TICKET_PART_STARTTIME_STATE,
170                 UniversalTag.GENERALIZED_TIME,
171                 new StoreStartTime() );
172 
173         super.transitions[EncTicketPartStatesEnum.ENC_TICKET_PART_STARTTIME_STATE.ordinal()][KerberosConstants.ENC_TICKET_PART_ENDTIME_TAG] =
174             new GrammarTransition<EncTicketPartContainer>(
175                 EncTicketPartStatesEnum.ENC_TICKET_PART_STARTTIME_STATE,
176                 EncTicketPartStatesEnum.ENC_TICKET_PART_ENDTIME_TAG_STATE,
177                 KerberosConstants.ENC_TICKET_PART_ENDTIME_TAG,
178                 new CheckNotNullLength<EncTicketPartContainer>() );
179 
180         super.transitions[EncTicketPartStatesEnum.ENC_TICKET_PART_ENDTIME_TAG_STATE.ordinal()][UniversalTag.GENERALIZED_TIME
181             .getValue()] =
182             new GrammarTransition<EncTicketPartContainer>(
183                 EncTicketPartStatesEnum.ENC_TICKET_PART_ENDTIME_TAG_STATE,
184                 EncTicketPartStatesEnum.ENC_TICKET_PART_ENDTIME_STATE,
185                 UniversalTag.GENERALIZED_TIME,
186                 new StoreEndTime() );
187 
188         super.transitions[EncTicketPartStatesEnum.ENC_TICKET_PART_ENDTIME_STATE.ordinal()][KerberosConstants.ENC_TICKET_PART_RENEWTILL_TAG] =
189             new GrammarTransition<EncTicketPartContainer>(
190                 EncTicketPartStatesEnum.ENC_TICKET_PART_ENDTIME_STATE,
191                 EncTicketPartStatesEnum.ENC_TICKET_PART_RENEWTILL_TAG_STATE,
192                 KerberosConstants.ENC_TICKET_PART_RENEWTILL_TAG,
193                 new CheckNotNullLength<EncTicketPartContainer>() );
194 
195         super.transitions[EncTicketPartStatesEnum.ENC_TICKET_PART_RENEWTILL_TAG_STATE.ordinal()][UniversalTag.GENERALIZED_TIME
196             .getValue()] =
197             new GrammarTransition<EncTicketPartContainer>(
198                 EncTicketPartStatesEnum.ENC_TICKET_PART_RENEWTILL_TAG_STATE,
199                 EncTicketPartStatesEnum.ENC_TICKET_PART_RENEWTILL_STATE,
200                 UniversalTag.GENERALIZED_TIME,
201                 new StoreRenewtill() );
202 
203         super.transitions[EncTicketPartStatesEnum.ENC_TICKET_PART_RENEWTILL_STATE.ordinal()][KerberosConstants.ENC_TICKET_PART_CADDR_TAG] =
204             new GrammarTransition<EncTicketPartContainer>(
205                 EncTicketPartStatesEnum.ENC_TICKET_PART_RENEWTILL_STATE,
206                 EncTicketPartStatesEnum.ENC_TICKET_PART_CADDR_TAG_STATE,
207                 KerberosConstants.ENC_TICKET_PART_CADDR_TAG,
208                 new StoreCaddr() );
209 
210         super.transitions[EncTicketPartStatesEnum.ENC_TICKET_PART_CADDR_TAG_STATE.ordinal()][KerberosConstants.ENC_TICKET_PART_AUTHORIZATION_DATA_TAG] =
211             new GrammarTransition<EncTicketPartContainer>(
212                 EncTicketPartStatesEnum.ENC_TICKET_PART_CADDR_TAG_STATE,
213                 EncTicketPartStatesEnum.ENC_TICKET_PART_AUTHZ_DATA_TAG_STATE,
214                 KerberosConstants.ENC_TICKET_PART_AUTHORIZATION_DATA_TAG,
215                 new StoreAuthorizationData() );
216 
217         super.transitions[EncTicketPartStatesEnum.ENC_TICKET_PART_AUTHTIME_STATE.ordinal()][KerberosConstants.ENC_TICKET_PART_ENDTIME_TAG] =
218             new GrammarTransition<EncTicketPartContainer>(
219                 EncTicketPartStatesEnum.ENC_TICKET_PART_AUTHTIME_STATE,
220                 EncTicketPartStatesEnum.ENC_TICKET_PART_ENDTIME_TAG_STATE,
221                 KerberosConstants.ENC_TICKET_PART_ENDTIME_TAG,
222                 new CheckNotNullLength<EncTicketPartContainer>() );
223 
224         super.transitions[EncTicketPartStatesEnum.ENC_TICKET_PART_ENDTIME_STATE.ordinal()][KerberosConstants.ENC_TICKET_PART_CADDR_TAG] =
225             new GrammarTransition<EncTicketPartContainer>(
226                 EncTicketPartStatesEnum.ENC_TICKET_PART_ENDTIME_STATE,
227                 EncTicketPartStatesEnum.ENC_TICKET_PART_CADDR_TAG_STATE,
228                 KerberosConstants.ENC_TICKET_PART_CADDR_TAG,
229                 new StoreCaddr() );
230 
231         super.transitions[EncTicketPartStatesEnum.ENC_TICKET_PART_ENDTIME_STATE.ordinal()][KerberosConstants.ENC_TICKET_PART_AUTHORIZATION_DATA_TAG] =
232             new GrammarTransition<EncTicketPartContainer>(
233                 EncTicketPartStatesEnum.ENC_TICKET_PART_ENDTIME_STATE,
234                 EncTicketPartStatesEnum.ENC_TICKET_PART_AUTHZ_DATA_TAG_STATE,
235                 KerberosConstants.ENC_TICKET_PART_AUTHORIZATION_DATA_TAG,
236                 new StoreAuthorizationData() );
237 
238         super.transitions[EncTicketPartStatesEnum.ENC_TICKET_PART_RENEWTILL_STATE.ordinal()][KerberosConstants.ENC_TICKET_PART_AUTHORIZATION_DATA_TAG] =
239             new GrammarTransition<EncTicketPartContainer>(
240                 EncTicketPartStatesEnum.ENC_TICKET_PART_RENEWTILL_STATE,
241                 EncTicketPartStatesEnum.ENC_TICKET_PART_AUTHZ_DATA_TAG_STATE,
242                 KerberosConstants.ENC_TICKET_PART_AUTHORIZATION_DATA_TAG,
243                 new StoreAuthorizationData() );
244     }
245 
246 
247     /**
248      * Get the instance of this grammar
249      *
250      * @return An instance on the EncTicketPart Grammar
251      */
252     public static Grammar<EncTicketPartContainer> getInstance()
253     {
254         return instance;
255     }
256 }