Administration Guide > Pluggable Authentication Modules > Example
 
Example
This is an example of a PAM module that performs a callback.
Manifest-Version: 1.0
cisext-name: example
cisext-annotation: disqualification or callback
cisext-version: 2
cisext-introspectAll: true
 
package com.tibco.cis.pam.example;
 
import java.util.Map;
 
import java.io.IOException;
import com.compositesw.extension.sdk.annotations.CisExtensionProvider;
import javax.security.auth.Subject;
import javax.security.auth.callback.Callback;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.callback.NameCallback;
import javax.security.auth.callback.PasswordCallback;
import javax.security.auth.callback.UnsupportedCallbackException;
import javax.security.auth.login.LoginException;
import javax.security.auth.spi.LoginModule;
import com.compositesw.extension.ds.Logger;
import com.compositesw.extension.ds.impl.LoggerImpl;
 
@CisExtensionProvider(
name = "TDV7CallbackExamplePAM",
annotation = "PAM Module that performs a callback")
public class TDV7CallbackExamplePAM implements LoginModule {
 
protected static Logger logger = LoggerImpl.getLogger(TDV7CallbackExamplePAM.class);
 
private CallbackHandler handler;
private String user;
private String pass;
 
public void initialize(Subject subject, CallbackHandler callbackHandler,
Map<String, ?> sharedState, Map<String, ?> options) {
logger.info("Method: " + this.getClass() + ".initialize() called...");
handler = callbackHandler;
}
 
public boolean abort() throws LoginException {
logger.info("Method: " + this.getClass() + ".abort() called...");
return true;
}
 
public boolean commit() throws LoginException {
logger.info("Method: " + this.getClass() + ".commit() called...");
logger.info("User " + user + " signed on using password: ************");
return true;
}
 
public boolean login() throws LoginException {
logger.info("Method: " + this.getClass() + ".login() called...");
NameCallback nameCallback = new NameCallback(" ");
PasswordCallback passwordCallback = new PasswordCallback(" ", false);
Callback[] callbacks = new Callback[] { nameCallback, passwordCallback };
try {
handler.handle(callbacks);
user = nameCallback.getName();
pass = String.copyValueOf(passwordCallback.getPassword());
pass = "***********"; // mask password
logger.info("Successful PAM login of user: " + user + " - password: " + pass);
} catch (IOException | UnsupportedCallbackException e) {
logger.error("Error during PAM login of user: " + user, e);
throw new LoginException("Error during PAM login of user: " + user);
}
return true;
}
 
public boolean logout() throws LoginException {
logger.info("Method: " + this.getClass() + ".logout() called...");
return true;
}
}