od_account_delete.sh   [plain text]


#!/bin/bash

function sighandler {
  echo 
  echo "Interrupting account creation"
  rm -f $TMPF
  exit 2
}

trap sighandler INT TERM

# Fixed parameters
#
NAME=`basename $0`
COUNT=$1
PREFIX="od_test_"
GROUP_NAME='od_test_group'
TMPF=/tmp/.${NAME}.$$
NODE=$2

usage () {
  echo
  echo "Usage: ${NAME} count nodename"
  echo 
  echo "   ie. ${NAME} 1000 /Local/Default"
  echo
  echo "       will delete ${GROUPNAME} and 1000 users "
  echo "       from '${PREFIX}1' to '${PREFIX}1000'"
  echo
  echo "This tool assumes user 'diradmin' with password 'admin' for OD admin"
  echo "when talking to anything other than /Local/Default"
  exit 85 # WRONGARGS
}

if [ $# -ne 2 ]; then
  usage
fi

# if local node we don't need credentials
if [ $NODE != "/Local/Default" ]; then
  OD_ADMIN="diradmin"
  OD_PASS="admin"
fi

echo "Deleting users ${PREFIX}1 to ${PREFIX}$COUNT"

# Using a script file and feed it into dscl is much faster than
# calling dscl everytime.
# 
i=1
echo "Writing a temporary script ..."
if [ -n "$OD_ADMIN" ]; then
  echo "auth $OD_ADMIN $OD_PASS" >> $TMPF
fi

while [ $i -le $COUNT ]
do
  result=`dscl $NODE -list Users/${PREFIX}${i} 2> /dev/null`
  if [ $? -eq 0 ]; then
    echo "delete Users/${PREFIX}${i}" >> $TMPF
    printf "\r${PREFIX}${i} / ${COUNT}"
  fi
  i=`expr $i + 1` 
done
echo 

echo "Deleting temporary test groups"
if [ -n "$OD_ADMIN" ]; then
  result=`dseditgroup -q -o delete -n $NODE -u $OD_ADMIN -P $OD_PASS ${GROUP_NAME}1 2>&1 /dev/null`
  result=`dseditgroup -q -o delete -n $NODE -u $OD_ADMIN -P $OD_PASS ${GROUP_NAME}2 2>&1 /dev/null`
else
  result=`dseditgroup -q -o delete -n $NODE ${GROUP_NAME}1 2>&1 /dev/null`
  result=`dseditgroup -q -o delete -n $NODE ${GROUP_NAME}2 2>&1 /dev/null`
fi

result=`dseditgroup -q -o delete com.apple.access_libMicro 2>&1 /dev/null`

# Now do the real work
#
if [[ -f $TMPF ]]; then
  echo "Running dscl to delete users. Please be patient. This takes a while ..."
  if [[ -x /usr/sbin/slapconfig ]]; then
    /usr/sbin/slapconfig -setfullsyncmode no
  fi

  /usr/bin/time dscl ${NODE} < $TMPF

  if [[ -x /usr/sbin/slapconfig ]]; then
    /usr/sbin/slapconfig -setfullsyncmode yes
  fi
fi

# and now delete the temp file
#
rm -f $TMPF

echo 'Finished'