in.read();
in.read();
in.read(); // Read answer.
out.println();
Authorization authorization = null;
boolean loginOK = false;
ServiceReference sr = bc
.getServiceReference(PasswdAuthenticator.class.getName());
if (sr == null) {
if (requireUM.booleanValue()) {
log(LogService.LOG_WARNING,
"Failed to get PasswdAuthenticator reference. UM required but not present.");
} else {
loginOK = (DEFAULT_USER_NAME.equals(userName) && DEFAULT_PASSWORD
.equals(password));
}
} else {
PasswdAuthenticator pa = (PasswdAuthenticator) bc
.getService(sr);
if (pa != null) {
PasswdSession ps = pa.createSession();
ps.setUsername(userName);
ps.setPassword(password);
ContextualAuthorization ca = null;
try {
ca = ps.getAuthorization();
} catch (IllegalStateException ex) {
log(LogService.LOG_WARNING,
"UserAdmin service not available.");
}
if (ca != null) {
if (requiredGroup != null && !ca.hasRole(requiredGroup)) {
loginOK = false;
log(
LogService.LOG_INFO,
userName
+ " tried to login, but did not have required role "
+ requiredGroup);
} else if (forbiddenGroup != null
&& ca.hasRole(forbiddenGroup)) {
loginOK = false;
log(
LogService.LOG_INFO,
userName
+ " tried to login, but had forbidden role "
+ forbiddenGroup);
} else {
authorization = ca;
loginOK = true;
out.println("Logged in.");
}
}
} else {
log(LogService.LOG_WARNING,
"Failed to get PasswdAuthenticator service.");
}
bc.ungetService(sr);
}
// Check if login successful:
if (!loginOK) {
out.println("Login failed!");
client.close();
log(LogService.LOG_INFO, "Login failed for " + userName);
return new LoginResult();
}
// Set context:
if (authorization instanceof ContextualAuthorization) {
String authMethod = "passwd"; // TBD
String inputPath = "tcp"; // TBD
((ContextualAuthorization) authorization).setIPAMContext(
inputPath, authMethod);
Dictionary context = ((ContextualAuthorization) authorization)
.getContext();
log(LogService.LOG_INFO, "User " + authorization.getName()
+ " logged in, authentication context is " + context
+ ".");
} else if (authorization == null) {
log(LogService.LOG_INFO, "Default user " + DEFAULT_USER_NAME
+ " logged in.");
} else {
log(LogService.LOG_INFO, "User " + authorization.getName()
+ " logged in.");
}
return new LoginResult(authorization);
}