001 /*
002 * Licensed to the Apache Software Foundation (ASF) under one
003 * or more contributor license agreements. See the NOTICE file
004 * distributed with this work for additional information
005 * regarding copyright ownership. The ASF licenses this file
006 * to you under the Apache License, Version 2.0 (the
007 * "License"); you may not use this file except in compliance
008 * with the License. You may obtain a copy of the License at
009 *
010 * http://www.apache.org/licenses/LICENSE-2.0
011 *
012 * Unless required by applicable law or agreed to in writing,
013 * software distributed under the License is distributed on an
014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
015 * KIND, either express or implied. See the License for the
016 * specific language governing permissions and limitations
017 * under the License.
018 *
019 */
020 package org.apache.directory.server.kerberos.shared.messages;
021
022
023 import java.util.Set;
024
025 import javax.security.auth.kerberos.KerberosPrincipal;
026
027 import org.apache.directory.server.kerberos.shared.KerberosMessageType;
028 import org.apache.directory.server.kerberos.shared.crypto.encryption.EncryptionType;
029 import org.apache.directory.server.kerberos.shared.messages.components.Ticket;
030 import org.apache.directory.server.kerberos.shared.messages.value.EncryptedData;
031 import org.apache.directory.server.kerberos.shared.messages.value.HostAddresses;
032 import org.apache.directory.server.kerberos.shared.messages.value.KdcOptions;
033 import org.apache.directory.server.kerberos.shared.messages.value.KerberosTime;
034 import org.apache.directory.server.kerberos.shared.messages.value.PaData;
035 import org.apache.directory.server.kerberos.shared.messages.value.RequestBody;
036
037
038 /**
039 * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
040 * @version $Rev: 590715 $, $Date: 2007-10-31 17:23:32 +0200 (Wed, 31 Oct 2007) $
041 */
042 public class KdcRequest extends KerberosMessage
043 {
044 private PaData[] preAuthData; //optional
045 private RequestBody requestBody;
046 private byte[] bodyBytes;
047
048
049 /**
050 * Creates a new instance of KdcRequest.
051 *
052 * @param pvno
053 * @param messageType
054 * @param preAuthData
055 * @param requestBody
056 */
057 public KdcRequest( int pvno, KerberosMessageType messageType, PaData[] preAuthData, RequestBody requestBody )
058 {
059 super( pvno, messageType );
060 this.preAuthData = preAuthData;
061 this.requestBody = requestBody;
062 }
063
064
065 /**
066 * Creates a new instance of KdcRequest.
067 *
068 * @param pvno
069 * @param messageType
070 * @param preAuthData
071 * @param requestBody
072 * @param bodyBytes
073 */
074 public KdcRequest( int pvno, KerberosMessageType messageType, PaData[] preAuthData, RequestBody requestBody,
075 byte[] bodyBytes )
076 {
077 this( pvno, messageType, preAuthData, requestBody );
078 this.bodyBytes = bodyBytes;
079 }
080
081
082 /**
083 * Returns an array of {@link PaData}s.
084 *
085 * @return The array of {@link PaData}s.
086 */
087 public PaData[] getPreAuthData()
088 {
089 return preAuthData;
090 }
091
092
093 /**
094 * Returns the request body.
095 *
096 * @return The request body.
097 */
098 public RequestBody getRequestBody()
099 {
100 return requestBody;
101 }
102
103
104 /**
105 * Returns the bytes of the body. This is used for verifying checksums in
106 * the Ticket-Granting Service (TGS).
107 *
108 * @return The bytes of the body.
109 */
110 public byte[] getBodyBytes()
111 {
112 return bodyBytes;
113 }
114
115
116 // RequestBody delegate methods
117
118 /**
119 * Returns additional {@link Ticket}s.
120 *
121 * @return The {@link Ticket}s.
122 */
123 public Ticket[] getAdditionalTickets()
124 {
125 return requestBody.getAdditionalTickets();
126 }
127
128
129 /**
130 * Returns the {@link HostAddresses}.
131 *
132 * @return The {@link HostAddresses}.
133 */
134 public HostAddresses getAddresses()
135 {
136 return requestBody.getAddresses();
137 }
138
139
140 /**
141 * Returns the client {@link KerberosPrincipal}.
142 *
143 * @return The client {@link KerberosPrincipal}.
144 */
145 public KerberosPrincipal getClientPrincipal()
146 {
147 return requestBody.getClientPrincipal();
148 }
149
150
151 /**
152 * Returns the realm of the server principal.
153 *
154 * @return The realm.
155 */
156 public String getRealm()
157 {
158 return requestBody.getServerPrincipal().getRealm();
159 }
160
161
162 /**
163 * Returns the {@link EncryptedData}.
164 *
165 * @return The {@link EncryptedData}.
166 */
167 public EncryptedData getEncAuthorizationData()
168 {
169 return requestBody.getEncAuthorizationData();
170 }
171
172
173 /**
174 * Returns an array of requested {@link EncryptionType}s.
175 *
176 * @return The array of {@link EncryptionType}s.
177 */
178 public Set<EncryptionType> getEType()
179 {
180 return requestBody.getEType();
181 }
182
183
184 /**
185 * Returns the from {@link KerberosTime}.
186 *
187 * @return The from {@link KerberosTime}.
188 */
189 public KerberosTime getFrom()
190 {
191 return requestBody.getFrom();
192 }
193
194
195 /**
196 * Returns the {@link KdcOptions}.
197 *
198 * @return The {@link KdcOptions}.
199 */
200 public KdcOptions getKdcOptions()
201 {
202 return requestBody.getKdcOptions();
203 }
204
205
206 /**
207 * Returns the nonce.
208 *
209 * @return The nonce.
210 */
211 public int getNonce()
212 {
213 return requestBody.getNonce();
214 }
215
216
217 /**
218 * Returns the "R" {@link KerberosTime}.
219 *
220 * @return The "R" {@link KerberosTime}.
221 */
222 public KerberosTime getRtime()
223 {
224 return requestBody.getRtime();
225 }
226
227
228 /**
229 * Returns the server {@link KerberosPrincipal}.
230 *
231 * @return The server {@link KerberosPrincipal}.
232 */
233 public KerberosPrincipal getServerPrincipal()
234 {
235 return requestBody.getServerPrincipal();
236 }
237
238
239 /**
240 * Returns the till {@link KerberosTime}.
241 *
242 * @return The till {@link KerberosTime}.
243 */
244 public KerberosTime getTill()
245 {
246 return requestBody.getTill();
247 }
248
249
250 // RequestBody KdcOptions delegate accesors
251
252 /**
253 * Returns the option at the specified index.
254 *
255 * @param option
256 * @return The option.
257 */
258 public boolean getOption( int option )
259 {
260 return requestBody.getKdcOptions().get( option );
261 }
262
263
264 /**
265 * Sets the option at the specified index.
266 *
267 * @param option
268 */
269 public void setOption( int option )
270 {
271 requestBody.getKdcOptions().set( option );
272 }
273
274
275 /**
276 * Clears the option at the specified index.
277 *
278 * @param option
279 */
280 public void clearOption( int option )
281 {
282 requestBody.getKdcOptions().clear( option );
283 }
284 }