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