Я пытаюсь создать класс java для аутентификации пользователей по локальному SASL.Моя конфигурация saslauthd выглядит следующим образом:
$ cat /etc/sysconfig/saslauthd
# Directory in which to place saslauthd's listening socket, pid file, and so
# on. This directory must already exist.
SOCKETDIR=/run/saslauthd
# Mechanism to use when checking passwords. Run "saslauthd -v" to get a list
# of which mechanism your installation was compiled with the ablity to use.
MECH=pam
# Additional flags to pass to saslauthd on the command line. See saslauthd(8)
# for the list of accepted flags.
FLAGS="-t 1"
По сути, он перенаправляет аутентификацию против PAM.Итак, если я делаю, например, такой тест.
testsaslauthd -s login -u <user> -p <password>
0: OK "Success."
Все работает правильно.
Теперь я хочу управлять этим механизмом через Java, поэтому я скомпилировал что-то вроде этого:
import java.util.Arrays;
import java.util.List;
import java.io.*;
public class PamAuthenticator {
public static void main(String args[]) {
String s = null;
try {
Process p = Runtime.getRuntime().exec("testsaslauthd -s "+args[2]+" -u "+args[0]+" -p "+args[1]);
BufferedReader stdInput = new BufferedReader(new
InputStreamReader(p.getInputStream()));
BufferedReader stdError = new BufferedReader(new
InputStreamReader(p.getErrorStream()));
while ((s = stdInput.readLine()) != null) {
System.out.println(s);
}
while ((s = stdError.readLine()) != null) {
System.out.println(s);
}
System.exit(0);
}
catch (IOException e) {
System.out.println("Exception: ");
e.printStackTrace();
System.exit(-1);
}
}
}
Это правильно работает:
$ java -cp .:* PamAuthenticator <user> <password> login
0: OK "Success."
Моя проблема в том, что я не хочу выполнять команду testsaslauthd
, так как это всего лишь тестовая команда.Есть ли что-то лучше и умнее, что я могу сделать, чтобы попробовать аутентификацию против SASL с Java?