1#!/bin/bash 2 3 4function sighandler { 5 echo 6 echo "Interrupting account creation" 7 rm -f $TMPF 8 exit 1 9} 10 11trap sighandler INT TERM 12 13# Fixed parameters 14# 15NAME=`basename $0` 16COUNT=$1 17NODE=$2 18PREFIX="od_test_" 19GROUP_ID=1211 # A group everybody's in 20GROUP_ID2=1212 # A group nobody's in 21GROUP_NAME='od_test_group' 22UID_BASE=5000 23TMPF=/tmp/.${NAME}.$$ 24 25usage () { 26 echo 27 echo "Usage: ${NAME} count nodename" 28 echo 29 echo " ie. ${NAME} 1000 /Local/Default" 30 echo 31 echo " will create users 1000 users (from '${PREFIX}1' to '${PREFIX}1000')" 32 echo " Default password is set to 'test'" 33 echo " User ID starts from 5000" 34 echo " Default group is '${GROUP_NAME}', Group ID 1211" 35 echo 36 echo "This tool assumes user 'diradmin' with password 'admin' for OD admin" 37 echo 38 exit 85 # WRONGARGS 39} 40 41if [ $# -ne 2 ]; then 42 usage 43fi 44 45# if local node we don't need credentials 46if [ $NODE != "/Local/Default" ]; then 47 OD_ADMIN="diradmin" 48 OD_PASS="admin" 49fi 50 51echo "Creating users ${PREFIX}1 to ${PREFIX}$COUNT" 52 53# check to see if od_test_group exist. if not, create one 54# 55result=`dscl $NODE -list Groups/${GROUP_NAME}1 2> /dev/null` 56if [ $? -ne 0 ]; then 57 echo "Group \"${GROUP_NAME}\" does not exist. Creating ${GROUP_NAME}" 58 if [ -n "$OD_ADMIN" ]; then 59 dseditgroup -q -o create -n $NODE -u $OD_ADMIN -P $OD_PASS -i ${GROUP_ID} ${GROUP_NAME}1 60 dseditgroup -q -o create -n $NODE -u $OD_ADMIN -P $OD_PASS -i ${GROUP_ID2} ${GROUP_NAME}2 61 else 62 dseditgroup -q -o create -n $NODE -i ${GROUP_ID} ${GROUP_NAME}1 63 dseditgroup -q -o create -n $NODE -i ${GROUP_ID2} ${GROUP_NAME}2 64 fi 65fi 66 67if [ $? -ne 0 ]; then 68 echo "Failed to create test_group" 69 exit 1 70fi 71 72# using dsimport is faster than using dscl 73i=1 74uid=$UID_BASE 75echo "Writing a temporary import file ..." 76while [ $i -le $COUNT ] 77do 78 result=`dscl $NODE -list Users/${PREFIX}${i} 2> /dev/null` 79 if [ $? -ne 0 ]; then 80 # Uses standard template 81 # RecordName:Password:UniqueID:PrimaryGroupID:DistinguishedName:NFSHomeDirectory:UserShell 82 echo "${PREFIX}${i}:test:${uid}:1211:${PREFIX}${i}:/Users/${PREFIX}${i}:/bin/bash" >> $TMPF 83 printf "\r${PREFIX}${i} / ${COUNT}" 84 else 85 echo "account $PREFIX$i already exist. skipping" 86 fi 87 i=`expr $i + 1` 88 uid=`expr $uid + 1` 89done 90echo 91 92# Now do the real work 93# 94if [[ -f $TMPF ]]; then 95 echo "Running dsimport to create users. Please be patient. This takes a while ..." 96 # assume if admin is provided that slapconfig exists 97 if [ -n "$OD_ADMIN" ]; then 98 if [[ -x "/usr/sbin/slapconfig" ]]; then 99 /usr/sbin/slapconfig -setfullsyncmode no 100 sleep 2 101 fi 102 /usr/bin/time dsimport $TMPF $NODE I --username $OD_ADMIN --password $OD_PASS --template StandardUser 103 sleep 2 104 if [[ -x "/usr/sbin/slapconfig" ]]; then 105 /usr/sbin/slapconfig -setfullsyncmode yes 106 fi 107 else 108 /usr/bin/time dsimport $TMPF $NODE I --template StandardUser 109 sleep 2 110 fi 111 112 # and now delete the temp file 113 # 114 rm -f $TMPF 115else 116 echo "Nothing done. All users already exist" 117fi 118 119echo Create a SACL group for libMicro 120# Create a sample SACL group 121dseditgroup -q -o create -r "libMicro ACL" com.apple.access_libMicro 122i=1 123while [ $i -le $COUNT ]; do 124 dseditgroup -q -o edit -a ${PREFIX}${i} -t user com.apple.access_libMicro 125 i=`expr $i + 1` 126done 127 128echo 'Finished' 129 130