package kerberos ;
import java.util.HashMap ;
import java.util.Map ;
import javax.security.auth.login.AppConfigurationEntry ;
import javax.security.auth.login.Configuration ;
import org.ietf.jgss.GSSCredential ;
public class LoginConfiguration extends Configuration {
private AppConfigurationEntry configEntry;
//getting credential for keytab
public LoginConfiguration
( String spn,
String keytab,
int GSSCredentialType
) {
parms.put ( "isInitiator" , GSSCredentialType == GSSCredential.ACCEPT_ONLY ? "false" : "true" ) ;
parms.put ( "principal" , spn) ;
parms.put ( "useKeyTab" , "true" ) ;
parms.put ( "storeKey" , "true" ) ;
// parms.put("useTicketCache", "true");
// parms.put("refreshKrb5Config","true");
if ( keytab != null ) {
System .
out .
println ( "Setting the keytab for : " + parms.
get ( "principal" ) ) ; parms.put ( "keyTab" , keytab) ;
System .
out .
println ( "keytab : " + parms.
get ( "keyTab" ) ) ; }
configEntry = new AppConfigurationEntry(
"com.sun.security.auth.module.Krb5LoginModule" ,
AppConfigurationEntry.LoginModuleControlFlag .REQUIRED , parms) ;
System .
out .
println ( "kytab in config is : " + configEntry.
getOptions ( ) .
get ( "keyTab" ) ) ; System .
out .
println ( "principal in config is : " + configEntry.
getOptions ( ) .
get ( "principal" ) ) ; }
//getting credential from password
public LoginConfiguration
( String spn,
int GSSCredentialType
) {
parms.put ( "isInitiator" , GSSCredentialType == GSSCredential.ACCEPT_ONLY ? "false" : "true" ) ;
parms.put ( "principal" , spn) ;
parms.put ( "useKeyTab" , "false" ) ;
parms.put ( "storeKey" , "true" ) ;
parms.put ( "useTicketCache" , "true" ) ;
configEntry = new AppConfigurationEntry(
"com.sun.security.auth.module.Krb5LoginModule" ,
AppConfigurationEntry.LoginModuleControlFlag .REQUIRED , parms) ;
}
public AppConfigurationEntry
[ ] getAppConfigurationEntry
( String name
) { return new AppConfigurationEntry[ ] { configEntry } ;
}
}
cGFja2FnZSBrZXJiZXJvczsKCmltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKaW1wb3J0IGphdmEudXRpbC5NYXA7CgppbXBvcnQgamF2YXguc2VjdXJpdHkuYXV0aC5sb2dpbi5BcHBDb25maWd1cmF0aW9uRW50cnk7CmltcG9ydCBqYXZheC5zZWN1cml0eS5hdXRoLmxvZ2luLkNvbmZpZ3VyYXRpb247CgppbXBvcnQgb3JnLmlldGYuamdzcy5HU1NDcmVkZW50aWFsOwoKcHVibGljIGNsYXNzIExvZ2luQ29uZmlndXJhdGlvbiBleHRlbmRzIENvbmZpZ3VyYXRpb24gewogICAgcHJpdmF0ZSBBcHBDb25maWd1cmF0aW9uRW50cnkgY29uZmlnRW50cnk7CgoJLy9nZXR0aW5nIGNyZWRlbnRpYWwgZm9yIGtleXRhYgoJcHVibGljIExvZ2luQ29uZmlndXJhdGlvbihTdHJpbmcgc3BuLCBTdHJpbmcga2V5dGFiLCBpbnQgR1NTQ3JlZGVudGlhbFR5cGUgKSB7CgkJTWFwPFN0cmluZywgU3RyaW5nPiBwYXJtcyA9IG5ldyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPigpOwoKCQlwYXJtcy5wdXQoImlzSW5pdGlhdG9yIiwgR1NTQ3JlZGVudGlhbFR5cGUgPT0gR1NTQ3JlZGVudGlhbC5BQ0NFUFRfT05MWSA/ICJmYWxzZSIgOiAidHJ1ZSIgKTsKCQlwYXJtcy5wdXQoInByaW5jaXBhbCIsIHNwbik7CgkJcGFybXMucHV0KCJ1c2VLZXlUYWIiLCAidHJ1ZSIpOwoJCXBhcm1zLnB1dCgic3RvcmVLZXkiLCAidHJ1ZSIpOwovLwkJcGFybXMucHV0KCJ1c2VUaWNrZXRDYWNoZSIsICJ0cnVlIik7Ci8vCQlwYXJtcy5wdXQoInJlZnJlc2hLcmI1Q29uZmlnIiwidHJ1ZSIpOwoJCQoJCWlmIChrZXl0YWIgIT0gbnVsbCkgewoJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlNldHRpbmcgdGhlIGtleXRhYiBmb3IgOiAiICsgcGFybXMuZ2V0KCJwcmluY2lwYWwiKSk7CgkJCXBhcm1zLnB1dCgia2V5VGFiIiwga2V5dGFiKTsKCQkJU3lzdGVtLm91dC5wcmludGxuKCJrZXl0YWIgOiAiICsgcGFybXMuZ2V0KCJrZXlUYWIiKSk7CgkJfQoKCQljb25maWdFbnRyeSA9IG5ldyBBcHBDb25maWd1cmF0aW9uRW50cnkoCgkJCQkiY29tLnN1bi5zZWN1cml0eS5hdXRoLm1vZHVsZS5LcmI1TG9naW5Nb2R1bGUiLAoJCQkJQXBwQ29uZmlndXJhdGlvbkVudHJ5LkxvZ2luTW9kdWxlQ29udHJvbEZsYWcuUkVRVUlSRUQsIHBhcm1zKTsKCQlTeXN0ZW0ub3V0LnByaW50bG4oImt5dGFiIGluIGNvbmZpZyBpcyA6ICIgKyBjb25maWdFbnRyeS5nZXRPcHRpb25zKCkuZ2V0KCJrZXlUYWIiKSk7CgkJU3lzdGVtLm91dC5wcmludGxuKCJwcmluY2lwYWwgaW4gY29uZmlnIGlzIDogIiArIGNvbmZpZ0VudHJ5LmdldE9wdGlvbnMoKS5nZXQoInByaW5jaXBhbCIpKTsKCX0KCQoJLy9nZXR0aW5nIGNyZWRlbnRpYWwgZnJvbSBwYXNzd29yZAoJcHVibGljIExvZ2luQ29uZmlndXJhdGlvbihTdHJpbmcgc3BuLCBpbnQgR1NTQ3JlZGVudGlhbFR5cGUgKSB7CgkJTWFwPFN0cmluZywgU3RyaW5nPiBwYXJtcyA9IG5ldyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPigpOwoKCQlwYXJtcy5wdXQoImlzSW5pdGlhdG9yIiwgR1NTQ3JlZGVudGlhbFR5cGUgPT0gR1NTQ3JlZGVudGlhbC5BQ0NFUFRfT05MWSA/ICJmYWxzZSIgOiAidHJ1ZSIgKTsKCQlwYXJtcy5wdXQoInByaW5jaXBhbCIsIHNwbik7CgkJcGFybXMucHV0KCJ1c2VLZXlUYWIiLCAiZmFsc2UiKTsKCQlwYXJtcy5wdXQoInN0b3JlS2V5IiwgInRydWUiKTsKCQlwYXJtcy5wdXQoInVzZVRpY2tldENhY2hlIiwgInRydWUiKTsKCQkKCQljb25maWdFbnRyeSA9IG5ldyBBcHBDb25maWd1cmF0aW9uRW50cnkoCgkJCQkiY29tLnN1bi5zZWN1cml0eS5hdXRoLm1vZHVsZS5LcmI1TG9naW5Nb2R1bGUiLAoJCQkJQXBwQ29uZmlndXJhdGlvbkVudHJ5LkxvZ2luTW9kdWxlQ29udHJvbEZsYWcuUkVRVUlSRUQsIHBhcm1zKTsKCX0KCglwdWJsaWMgQXBwQ29uZmlndXJhdGlvbkVudHJ5W10gZ2V0QXBwQ29uZmlndXJhdGlvbkVudHJ5KFN0cmluZyBuYW1lKSB7CgkJcmV0dXJuIG5ldyBBcHBDb25maWd1cmF0aW9uRW50cnlbXSB7IGNvbmZpZ0VudHJ5IH07Cgl9Cn0K