import com.novell.ldap.LDAPConnection;
import com.novell.ldap.LDAPAttribute;
import com.novell.ldap.LDAPAttributeSet;
import com.novell.ldap.LDAPEntry;
import com.novell.ldap.LDAPModification;
import com.novell.ldap.LDAPException;
import java.util.Date;
import java.util.Calendar;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.TimeZone;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.text.ParsePosition;
import java.text.ParseException;
import java.io.UnsupportedEncodingException;
public class ModifyTimeStamp
{
public static void main( String[] args )
{
if (args.length != 6) {
System.err.println("Usage: java ModifyTimeStamp <host Name>"
+ " <port number> <login dn> <password>"
+ "\n <user dn> <day extension>");
System.err.println("Example: java ModifyTimeStamp Acme.com 389"
+ " \"cn=Admin,o=Acme\" secret\n"
+ " \"cn=JSmith,ou=sales,o=Acme\""
+ " 90");
System.exit(1);
}
int ldapVersion = LDAPConnection.LDAP_V3;
String ldapHost = args[0];
int ldapPort = Integer.parseInt(args[1]);
String loginDN = args[2];
String password = args[3];
String userDN = args[4];
int days = Integer.parseInt( args[5]);
String expTime = null;
LDAPConnection lc = new LDAPConnection();
try {
lc.connect( ldapHost, ldapPort );
lc.bind( ldapVersion, loginDN, password.getBytes("UTF8") );
System.out.println( "\n Entry DN: " + userDN );
System.out.println( " Day Extension: " + days + "\n" );
if ( (expTime = GetTime( lc, userDN )) == null )
System.out.println("\n passwordExpirationTime was not"
+ " initialized.");
else {
System.out.println( " Current passwordExpirationTime: "
+ expTime + " (UTC)");
printTime(expTime);
String newExpTime = extendTime( expTime, days );
LDAPAttribute pwdExpTime = new LDAPAttribute(
"passwordExpirationTime", newExpTime );
System.out.println( "\n Modifying"
+ " passwordExpirationTime ...");
lc.modify( userDN,
new LDAPModification( LDAPModification.REPLACE, pwdExpTime));
System.out.println( " Successfully modified "
+ " passwordExpiratioTime.");
if ( (newExpTime = GetTime( lc, userDN )) == null )
System.out.println("\n Failed to get"
+ " passwordExpirationTime value.");
else {
System.out.println( "\n New "
+ " passwordExpirationTime: " + newExpTime + " (UTC)");
printTime(newExpTime);
}
}
lc.disconnect();
}
catch( LDAPException e ) {
System.err.println( "ModifyTimeStamp example failed");
System.err.println( "Error: " + e.toString() );
System.exit(1);
}
catch( UnsupportedEncodingException e ) {
System.out.println( "Error: " + e.toString() );
}
System.exit(0);
}
public static String GetTime(LDAPConnection lc, String userDN)
{
Enumeration allValues;
LDAPAttribute attribute;
LDAPAttributeSet attributeSet;
String attrValue = null, attributeName;
String returnAttr[] = { "passwordExpirationTime" };
try {
LDAPEntry entry = lc.read( userDN, returnAttr );
attributeSet = entry.getAttributeSet();
Iterator allAttributes = attributeSet.iterator();
while(allAttributes.hasNext()) {
attribute = (LDAPAttribute)allAttributes.next();
attributeName = attribute.getName();
allValues = attribute.getStringValues();
attrValue = (String) allValues.nextElement();
}
}
catch( LDAPException e ) {
System.out.println( "Failed to read: " + userDN );
System.out.println( "Error: " + e.toString() );
return null;
}
return attrValue;
}
public static void printTime( String utc )
{
DateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss'Z'");
try {
Date date = formatter.parse( utc );
System.out.print( " ");
System.out.println( date + " (UTC)");
}
catch(ParseException pe) {
System.out.println( "\nError: " + pe.toString() );
}
}
public static String extendTime( String utc, int days )
{
int year = Integer.parseInt( utc.substring( 0, 4 ));
int mon = Integer.parseInt( utc.substring( 4, 6 ));
int day = Integer.parseInt( utc.substring( 6, 8 ));
int hour = Integer.parseInt( utc.substring( 8, 10 ));
int minute = Integer.parseInt( utc.substring( 10, 12 ));
int second = Integer.parseInt( utc.substring( 12, 14 ));
Calendar utcTime = Calendar.getInstance();
utcTime.set( year, mon-1 , day, hour, minute, second );
utcTime.add(Calendar.DAY_OF_MONTH, days );
Date date = utcTime.getTime();
DateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss'Z'");
return formatter.format( date );
}
}