import com.novell.ldap.*;
import java.util.Enumeration;
import java.util.Iterator;
import java.io.UnsupportedEncodingException;
public class GraceLogin
{
public static void main( String[] args )
{
if (args.length != 3) {
System.err.println(
"Usage: java GraceLogin <host Name> <login dn> <password>");
System.err.println(
"Example: java GraceLogin Acme.com \"cn=Admin,o=Acme\" secret");
System.exit(1);
}
int rc;
int ldapVersion = LDAPConnection.LDAP_V3;
int ldapPort = LDAPConnection.DEFAULT_PORT;
String msg;
String ldapHost = args[0];;
String loginDN = args[1];
String password = args[2];
LDAPConnection conn = new LDAPConnection();
LDAPResponseQueue queue = null;
try {
byte[] pw = null;
try {
pw = password.getBytes("UTF8");
} catch( UnsupportedEncodingException ex) {
System.out.println("Error encoding password: " + ex.toString());
System.exit(1);
}
conn.connect( ldapHost, ldapPort );
queue = conn.bind( ldapVersion,
loginDN,
pw,
(LDAPResponseQueue)null );
LDAPResponse rsp = (LDAPResponse)queue.getResponse();
rc = rsp.getResultCode();
msg = rsp.getErrorMessage();
if ( rc == LDAPException.SUCCESS )
System.out.println("Bind is successful.");
else {
System.out.println("Bind failed.");
throw new LDAPException( msg, rc, (String)null );
}
if ( msg != null && msg.length() != 0) {
String messageID = msg.substring(msg.indexOf((int)'-'));
int lastIndex = messageID.length()-1;
while ( true ) {
int charAscii = (int)messageID.charAt(lastIndex);
if ( charAscii >= 48 && charAscii <= 57 )
break;
int len = lastIndex;
lastIndex = lastIndex - 1;
messageID = messageID.substring(0, len);
}
if ( messageID.compareTo( "-223" ) == 0 ) {
System.out.println(
"Password is expired for loginDN: " + loginDN);
System.out.println("Grace login used:");
getGraceLoginInfo(conn, loginDN);
}
}
conn.disconnect();
}
catch( LDAPException e ) {
System.out.println( "Error: " + e.toString() );
System.exit(1);
}
System.exit(0);
}
public static void getGraceLoginInfo( LDAPConnection conn, String dn )
throws LDAPException
{
String attributeName;
String returnAttrs[] = { "loginGraceRemaining", "loginGraceLimit" };
Enumeration allValues;
LDAPAttribute attribute;
LDAPAttributeSet attributeSet;
try {
LDAPEntry graceLogin = conn.read( dn, returnAttrs );
attributeSet = graceLogin.getAttributeSet();
Iterator allAttributes = attributeSet.iterator();
while(allAttributes.hasNext()) {
attribute = (LDAPAttribute)allAttributes.next();
attributeName = attribute.getName();
allValues = attribute.getStringValues();
String attrValue = (String) allValues.nextElement();
System.out.println(" " + attributeName + ": "+ attrValue);
}
}
catch( LDAPException e ) {
System.err.println( "getGraceLoginInfo() Failed.");
System.err.println( "Error: " + e.toString() );
System.exit(1);
}
}
}