in kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/RemoteAdminClientTool.java [85:170]
public static void main(String[] args) throws Exception {
AdminClient adminClient;
if (args.length < 1) {
System.err.println(USAGE);
System.exit(1);
}
String confDirPath = args[0];
File confFile = new File(confDirPath, "adminClient.conf");
final AdminConfig adminConfig = new AdminConfig();
adminConfig.addKrb5Config(confFile);
KdcConfig tmpKdcConfig = KdcUtil.getKdcConfig(new File(confDirPath));
if (tmpKdcConfig == null) {
tmpKdcConfig = new KdcConfig();
}
try {
Krb5Conf krb5Conf = new Krb5Conf(new File(confDirPath), tmpKdcConfig);
krb5Conf.initKrb5conf();
} catch (IOException e) {
throw new KrbException("Failed to make krb5.conf", e);
}
adminClient = new AdminClient(adminConfig);
File keytabFile = new File(adminConfig.getKeyTabFile());
if (!keytabFile.exists()) {
System.err.println("Need the valid keytab file value in conf file.");
return;
}
String adminRealm = adminConfig.getAdminRealm();
adminClient.setAdminRealm(adminRealm);
adminClient.setAllowTcp(true);
adminClient.setAllowUdp(false);
adminClient.setAdminTcpPort(adminConfig.getAdminPort());
adminClient.init();
System.out.println("admin init successful");
String adminPrincipal = KrbUtil.makeKadminPrincipal(
adminClient.getSetting().getKdcRealm()).getName();
Subject subject = null;
try {
subject = AuthUtil.loginUsingKeytab(adminPrincipal,
new File(adminConfig.getKeyTabFile()));
} catch (LoginException e) {
LOG.error("Fail to login using keytab. " + e);
return;
}
// set login subject, used by SASL negotiation
adminClient.setSubject(subject);
System.out.println("enter \"command\" to see legal commands.");
Completer completer = new StringsCompleter("add_principal", "delete_principal", "rename_principal",
"list_principals", "ktadd", "change_password", "get_principal");
Terminal terminal = null;
try {
terminal = TerminalBuilder.terminal();
} catch (IOException e) {
e.printStackTrace();
}
LineReader lineReader = LineReaderBuilder.builder().completer(completer).terminal(terminal).build();
while (true) {
try {
String line = lineReader.readLine(PROMPT + ": ");
if ("quit".equals(line) || "exit".equals(line) || "q".equals(line)) {
break;
}
execute(adminClient, line);
} catch (UserInterruptException | EndOfFileException ex) {
break;
} catch (KrbException e) {
System.err.println(e.getMessage());
}
}
}