in kerby-kerb/kerb-client/src/main/java/org/apache/kerby/kerberos/kerb/client/impl/DefaultInternalKrbClient.java [65:107]
private void doRequest(KdcRequest request) throws KrbException { //NOPMD
String realm = getSetting().getKdcRealm();
PrincipalName serverPrincipalName = request.getServerPrincipal();
if (serverPrincipalName != null && serverPrincipalName.getRealm() != null) {
realm = serverPrincipalName.getRealm();
}
List<String> kdcList = ClientUtil.getKDCList(realm, getSetting());
// tempKdc may include the port number
Iterator<String> tempKdc = kdcList.iterator();
if (!tempKdc.hasNext()) {
throw new KrbException("Cannot get kdc for realm " + getSetting().getKdcRealm());
}
try {
sendIfPossible(request, tempKdc.next(), getSetting(), false);
LOG.info("Send to kdc success.");
} catch (Exception first) {
boolean ok = false;
while (tempKdc.hasNext()) {
try {
sendIfPossible(request, tempKdc.next(), getSetting(), true);
ok = true;
LOG.info("Send to kdc success.");
break;
} catch (Exception ignore) {
LOG.info("ignore this kdc");
}
}
if (!ok) {
if (first instanceof KrbException) {
throw (KrbException) first;
}
throw new KrbException("The request failed " + first.getMessage(), first);
}
} finally {
if (transport != null) {
transport.release();
}
}
}