1216 // if no DNS TXT records found, try again using sub-realm 1217 } 1218 if (records != null) { 1219 for (int i = 0; i < records.length; i++) { 1220 if (records[i].equalsIgnoreCase(mapRealm)) { 1221 return records[i]; 1222 } 1223 } 1224 } 1225 return null; 1226 } 1227 1228 /** 1229 * Locate KDC using DNS 1230 * 1231 * @param realm the realm for which the master KDC is desired 1232 * @return the KDC 1233 */ 1234 private String getKDCFromDNS(String realm) throws KrbException { 1235 // use DNS to locate KDC 1236 String kdcs = null; 1237 String[] srvs = null; 1238 // locate DNS SRV record using UDP 1239 if (DEBUG) { 1240 System.out.println("getKDCFromDNS using UDP"); 1241 } 1242 srvs = KrbServiceLocator.getKerberosService(realm, "_udp"); 1243 if (srvs == null) { 1244 // locate DNS SRV record using TCP 1245 if (DEBUG) { 1246 System.out.println("getKDCFromDNS using UDP"); 1247 } 1248 srvs = KrbServiceLocator.getKerberosService(realm, "_tcp"); 1249 } 1250 if (srvs == null) { 1251 // no DNS SRV records 1252 throw new KrbException(Krb5.KRB_ERR_GENERIC, 1253 "Unable to locate KDC for realm " + realm); 1254 } 1255 for (int i = 0; i < srvs.length; i++) { 1256 String value = srvs[i]; 1257 for (int j = 0; j < srvs[i].length(); j++) { 1258 // filter the KDC name 1259 if (value.charAt(j) == ':') { 1260 kdcs = (value.substring(0, j)).trim(); 1261 } 1262 } 1263 } 1264 return kdcs; 1265 } 1266 1267 private boolean fileExists(String name) { 1268 return java.security.AccessController.doPrivileged( 1269 new FileExistsAction(name)); 1270 } 1271 1272 static class FileExistsAction 1273 implements java.security.PrivilegedAction<Boolean> { 1274 1275 private String fileName; 1276 1277 public FileExistsAction(String fileName) { 1278 this.fileName = fileName; 1279 } 1280 1281 public Boolean run() { 1282 return new File(fileName).exists(); | 1216 // if no DNS TXT records found, try again using sub-realm 1217 } 1218 if (records != null) { 1219 for (int i = 0; i < records.length; i++) { 1220 if (records[i].equalsIgnoreCase(mapRealm)) { 1221 return records[i]; 1222 } 1223 } 1224 } 1225 return null; 1226 } 1227 1228 /** 1229 * Locate KDC using DNS 1230 * 1231 * @param realm the realm for which the master KDC is desired 1232 * @return the KDC 1233 */ 1234 private String getKDCFromDNS(String realm) throws KrbException { 1235 // use DNS to locate KDC 1236 String kdcs = ""; 1237 String[] srvs = null; 1238 // locate DNS SRV record using UDP 1239 if (DEBUG) { 1240 System.out.println("getKDCFromDNS using UDP"); 1241 } 1242 srvs = KrbServiceLocator.getKerberosService(realm, "_udp"); 1243 if (srvs == null) { 1244 // locate DNS SRV record using TCP 1245 if (DEBUG) { 1246 System.out.println("getKDCFromDNS using TCP"); 1247 } 1248 srvs = KrbServiceLocator.getKerberosService(realm, "_tcp"); 1249 } 1250 if (srvs == null) { 1251 // no DNS SRV records 1252 throw new KrbException(Krb5.KRB_ERR_GENERIC, 1253 "Unable to locate KDC for realm " + realm); 1254 } 1255 for (int i = 0; i < srvs.length; i++) { 1256 String value = srvs[i]; 1257 for (int j = 0; j < srvs[i].length(); j++) { 1258 // filter the KDC name 1259 if (value.charAt(j) == ':') { 1260 kdcs += (value.substring(0, j)).trim() + " "; 1261 } 1262 } 1263 } 1264 kdcs = kdcs.trim(); 1265 if (kdcs.equals("")) { 1266 return null; 1267 } 1268 return kdcs; 1269 } 1270 1271 private boolean fileExists(String name) { 1272 return java.security.AccessController.doPrivileged( 1273 new FileExistsAction(name)); 1274 } 1275 1276 static class FileExistsAction 1277 implements java.security.PrivilegedAction<Boolean> { 1278 1279 private String fileName; 1280 1281 public FileExistsAction(String fileName) { 1282 this.fileName = fileName; 1283 } 1284 1285 public Boolean run() { 1286 return new File(fileName).exists(); |