Author: erodriguez
Date: Sun Oct 31 21:21:10 2004
New Revision: 56209
Added:
incubator/directory/kerberos/trunk/source/main/org/apache/kerberos/kdc/KdcConfiguration.java
Log:
Implementation of properties-based KDC configuration.
Added:
incubator/directory/kerberos/trunk/source/main/org/apache/kerberos/kdc/KdcConfiguration.java
==============================================================================
--- (empty file)
+++
incubator/directory/kerberos/trunk/source/main/org/apache/kerberos/kdc/KdcConfiguration.java
Sun Oct 31 21:21:10 2004
@@ -0,0 +1,179 @@
+/*
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.kerberos.kdc;
+
+import org.apache.kerberos.crypto.encryption.*;
+
+import java.io.*;
+import java.util.*;
+
+import javax.security.auth.kerberos.*;
+
+public class KdcConfiguration {
+
+ private static final int DEFAULT_PORT = 88;
+ private static final int BUFFER_SIZE = 1024;
+ private static final int MINUTE = 1000 * 60;
+
+ private Properties _properties = new Properties();
+ private EncryptionType[] _encryptionTypes;
+
+ public KdcConfiguration() {
+ try {
+ _properties.load(new FileInputStream("kerberos.properties"));
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ prepareEncryptionTypes();
+ }
+
+ public String getPrimaryRealm() {
+ String key = "kdc.primary.realm";
+ return (String)_properties.get(key);
+ }
+
+ public KerberosPrincipal getKdcPrincipal() {
+ String key = "kdc.principal";
+ return new KerberosPrincipal((String)_properties.get(key));
+ }
+
+ public String getKerberosKeysLocation() {
+ String key = "kdc.keys.location";
+ return (String)_properties.get(key);
+ }
+
+ public EncryptionType[] getEncryptionTypes() {
+ return _encryptionTypes;
+ }
+
+ public Hashtable getProperties() {
+ // Request that the krb5key value be returned as binary
+ _properties.put("java.naming.ldap.attributes.binary",
"krb5Key");
+
+ return _properties;
+ }
+
+ public long getClockSkew() {
+ String key = "kdc.allowable.clockskew";
+ if (_properties.containsKey(key)) {
+ return MINUTE *
Long.parseLong((String)_properties.get(key));
+ }
+ return MINUTE * 5;
+ }
+
+ public long getMaximumTicketLifetime() {
+ String key = "tgs.maximum.ticket.lifetime";
+ if (_properties.containsKey(key)) {
+ return MINUTE *
Long.parseLong((String)_properties.get(key));
+ }
+ return MINUTE * 1440;
+ }
+
+ public long getMaximumRenewableLifetime() {
+ String key = "tgs.maximum.renewable.lifetime";
+ if (_properties.containsKey(key)) {
+ return MINUTE *
Long.parseLong((String)_properties.get(key));
+ }
+ return MINUTE * 10080;
+ }
+
+ public int getDefaultPort() {
+ String key = "kdc.default.port";
+ if (_properties.containsKey(key)) {
+ return Integer.parseInt((String)_properties.get(key));
+ }
+ return DEFAULT_PORT;
+ }
+
+ public int getBufferSize() {
+ String key = "kdc.buffer.size";
+ if (_properties.containsKey(key)) {
+ return Integer.parseInt((String)_properties.get(key));
+ }
+ return BUFFER_SIZE;
+ }
+
+ public boolean isPaEncTimestampRequired() {
+ String key = "kdc.pa.enc.timestamp.required";
+ if (_properties.containsKey(key)) {
+ return
"true".equalsIgnoreCase((String)_properties.get(key));
+ }
+ return true;
+ }
+
+ public boolean isEmptyAddressesAllowed() {
+ String key = "tgs.empty.addresses.allowed";
+ if (_properties.containsKey(key)) {
+ return
"true".equalsIgnoreCase((String)_properties.get(key));
+ }
+ return true;
+ }
+
+ public boolean isForwardableAllowed() {
+ String key = "tgs.forwardable.allowed";
+ if (_properties.containsKey(key)) {
+ return
"true".equalsIgnoreCase((String)_properties.get(key));
+ }
+ return true;
+ }
+
+ public boolean isProxiableAllowed() {
+ String key = "tgs.proxiable.allowed";
+ if (_properties.containsKey(key)) {
+ return
"true".equalsIgnoreCase((String)_properties.get(key));
+ }
+ return true;
+ }
+
+ public boolean isPostdateAllowed() {
+ String key = "tgs.postdate.allowed";
+ if (_properties.containsKey(key)) {
+ return
"true".equalsIgnoreCase((String)_properties.get(key));
+ }
+ return true;
+ }
+
+ public boolean isRenewableAllowed() {
+ String key = "tgs.renewable.allowed";
+ if (_properties.containsKey(key)) {
+ return
"true".equalsIgnoreCase((String)_properties.get(key));
+ }
+ return true;
+ }
+
+ private void prepareEncryptionTypes() {
+ String key = "kdc.encryption.types";
+ String[] encryptionTypes =
((String)_properties.get(key)).split("\\s");
+
+ List encTypes = new ArrayList();
+
+ for (int i = 0;i < encryptionTypes.length; i++) {
+ String enc = encryptionTypes[i];
+ Iterator it = EncryptionType.VALUES.iterator();
+ while (it.hasNext()) {
+ EncryptionType type = (EncryptionType)it.next();
+ if (type.toString().equalsIgnoreCase(enc)) {
+ encTypes.add(type);
+ }
+ }
+ }
+
+ _encryptionTypes = (EncryptionType[])encTypes.toArray(new
EncryptionType[encTypes.size()]);
+ }
+}
+