public int authenticate(AuthenticationProtocolServer authentication,
SshMsgUserAuthRequest msg) throws IOException {
NativeAuthenticationProvider authImpl = NativeAuthenticationProvider.getInstance();
if (authImpl == null) {
log.error(
"Cannot perfrom authentication witout native authentication provider");
return AuthenticationProtocolState.FAILED;
}
ByteArrayReader bar = new ByteArrayReader(msg.getRequestData());
boolean changepwd = ((bar.read() == 0) ? false : true);
String password = bar.readString();
String newpassword = null;
if (changepwd) {
newpassword = bar.readString();
try {
if (!authImpl.changePassword(msg.getUsername(), password,
newpassword)) {
return AuthenticationProtocolState.FAILED;
}
if (authImpl.logonUser(msg.getUsername(), newpassword)) {
return AuthenticationProtocolState.COMPLETE;
} else {
return AuthenticationProtocolState.FAILED;
}
} catch (PasswordChangeException ex1) {
return AuthenticationProtocolState.FAILED;
}
} else {
try {
if (authImpl.logonUser(msg.getUsername(), password)) {
log.info(msg.getUsername() +
" has passed password authentication");
return AuthenticationProtocolState.COMPLETE;
} else {
log.info(msg.getUsername() +
" has failed password authentication");
return AuthenticationProtocolState.FAILED;
}
} catch (PasswordChangeException ex) {
SshMsgUserAuthPwdChangeReq reply = new SshMsgUserAuthPwdChangeReq(msg.getUsername() +
" is required to change password", "");
authentication.sendMessage(reply);
return AuthenticationProtocolState.READY;
}
}
}
|