package org.ovirt.engine.core.utils.kerberos;
import static org.ovirt.engine.core.utils.kerberos.KrbConfCreator.DEFAULT_TKT_ENCTYPES_ARCFOUR_HMAC_MD5;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.Scanner;
public class DetectMixedMode {
/**
* Open a krb5.conf file and search a property defining the encryption types used for kerberos ticket negotiation.
* The property is "default_tkt_enctypes = arcfour-hmac-md5".
*
* @param krbConfPath
* @return true - If the property is set and unremarked. false - if the property is remarked or absent
* @throws FileNotFoundException
*/
public boolean detect(String krbConfPath) throws FileNotFoundException {
InputStream sourceFile = new FileInputStream(krbConfPath);
System.out.println("Searching " + krbConfPath + "\n for property " + DEFAULT_TKT_ENCTYPES_ARCFOUR_HMAC_MD5);
Scanner scanner = new Scanner(sourceFile);
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
if (line.matches(DEFAULT_TKT_ENCTYPES_ARCFOUR_HMAC_MD5)) {
// Bingo! mixed-mode flag is there.
return true;
} else if (line.matches("#+" + DEFAULT_TKT_ENCTYPES_ARCFOUR_HMAC_MD5)) {
// Bingo! mixed-mode is remarked, so we have the answer. Leaving the loop.
break;
}
}
return false;
}
public static void main(String[] args) {
if (args.length == 0) {
System.out.println("Error: Missing krb5.conf file argument");
System.out.println("Usage: " + DetectMixedMode.class.getName() + " krb5.conf");
System.exit(1);
}
DetectMixedMode d = new DetectMixedMode();
String krbConfPath = args[0];
try {
System.out.print(d.detect(krbConfPath) ? "yes" : "no");
} catch (FileNotFoundException e) {
System.out.println("Error: file " + krbConfPath + " not found");
System.exit(1);
}
}
}