in kerby-tool/kdc-tool/src/main/java/org/apache/kerby/kerberos/tool/kadmin/KadminTool.java [195:279]
public static void main(String[] args) throws KrbException, IOException {
if (args.length < 2) {
System.err.println(USAGE);
return;
}
LocalKadmin kadmin;
try {
kadmin = new LocalKadminImpl(getConfDir(args));
} catch (KrbException e) {
System.err.println("Failed to init Kadmin due to " + e.getMessage());
return;
}
try {
Krb5Conf krb5Conf = new Krb5Conf(confDir, kadmin.getKdcConfig());
krb5Conf.initKrb5conf();
} catch (IOException e) {
throw new KrbException("Failed to make krb5.conf", e);
}
KOptions kOptions = ToolUtil.parseOptions(args, 1, args.length - 1);
if (kOptions == null) {
System.err.println(USAGE);
return;
}
String kadminPrincipal = kadmin.getKadminPrincipal();
if (kOptions.contains(KadminOption.CCACHE)) {
File ccFile = kOptions.getFileOption(KadminOption.CCACHE);
if (ccFile == null || !ccFile.exists()) {
printUsage("Need the valid credentials cache file.");
return;
}
try {
AuthUtil.loginUsingTicketCache(kadminPrincipal, ccFile);
} catch (LoginException e) {
System.err.println("Could not login with: " + kadminPrincipal
+ " " + e.getMessage());
return;
}
} else if (kOptions.contains(KadminOption.K)) {
File keyTabFile = new File(kOptions.getStringOption(KadminOption.K));
if (!keyTabFile.exists()) {
printUsage("Need the valid keytab file.");
return;
}
try {
AuthUtil.loginUsingKeytab(kadminPrincipal, keyTabFile);
} catch (LoginException e) {
System.err.println("Could not login with: " + kadminPrincipal
+ " " + e.getMessage());
return;
}
} else {
printUsage("No credentials cache file or keytab file for authentication.");
}
// Execute any query that was specified and exit
if (kOptions.contains(KadminOption.QUERY)) {
String query = kOptions.getStringOption(KadminOption.QUERY);
execute(kadmin, query);
} else {
Completer completer = new StringsCompleter("add_principal", "batch_anks", "ktadd", "ktremove",
"delete_principal", "modify_principal", "rename_principal",
"change_password", "list_principals", "get_principal");
Terminal terminal = TerminalBuilder.terminal();
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(kadmin, line);
} catch (UserInterruptException | EndOfFileException ex) {
break;
}
}
}
}