#!/bin/ksh # Set (change) a users password to expire in some number of days export TOPDIR=/usr/local/lib/ldap . ${TOPDIR}/etc/vars if [ ! $LDAPDOMAIN ] then LDAPDOMAIN=$DEFAULTLDAPDOMAIN fi DNDOMAIN=`echo $LDAPDOMAIN | sed -e "s/^/dc=/g" -e "s/\./,dc=/g"` if [ $# -lt 2 ] then echo "Usage: $0 user num_of_days_before_expired (1-99999)" exit 1 else USER=$1 NUMDAYS=$2 if [ $NUMDAYS -lt 1 -o -$NUMDAYS -gt 99999 ] then usage fi fi TODAY=`dse` YESTERDAY=`expr $TODAY - 1` # Get current settings PWINFO=/tmp/pwinfo-${USER}.txt getpwinfo.sh $USER > $PWINFO if [ -f $PWINFO ] then if grep "^uid: ${USER}$" $PWINFO > /dev/null 2>&1 then SHADOWLASTCHANGE=`grep "^shadowLastChange: " $PWINFO | awk ' { print $2 } '` if [ $SHADOWLASTCHANGE -lt $TODAY ] then EXPIREDAY=`expr $TODAY + $NUMDAYS` EXPIRENUMDAYS=`expr $EXPIREDAY - $SHADOWLASTCHANGE` if [ $EXPIREDAY = $TODAY ] then echo "Expiration date set to today, use expire.sh" rm $PWINFO exit 1 fi else echo "Expiration date set to today, use a higher number of days or run expire.sh" rm $PWINFO exit 1 fi else echo "Could not obtain shadowExpire attribute info for $USER - see $PWINFO" rm $PWINFO exit 1 fi fi # cat ${LDIFTMPLTDIR}/expire-set.ldif | sed -e "s/UID/${USER}/" -e "s/DNDOMAIN/${DNDOMAIN}/" -e "s/EXPIREDAY/${EXPIREDAY}/" -e "s/EXPIRENUMDAYS/${EXPIRENUMDAYS}/" > ${WORKDIR}/expire-set-${USER}.ldif cat ${LDIFTMPLTDIR}/expire-set.ldif | sed -e "s/UID/${USER}/" -e "s/DNDOMAIN/${DNDOMAIN}/" -e "s/EXPIREDAY/${EXPIREDAY}/" > ${WORKDIR}/expire-set-${USER}.ldif ldapmodify -x -w $DIRMGRPW -D "cn=Directory Manager" -h $LDAPSERVER -f ${WORKDIR}/expire-set-${USER}.ldif if [ $? -eq 0 ] then mv ${WORKDIR}/expire-set-${USER}.ldif ${EXPIREDDIR} rm $PWINFO else echo "Error setting shadowExpire attribute for $USER" rm $PWINFO exit 1 fi