119 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			119 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
| ##@cooked comments # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
 | |
| ## Outils pour MacOS X
 | |
| ##@cooked nocomments
 | |
| ##@require base
 | |
| ##@require sysinfos
 | |
| ##@require compat
 | |
| uprovide macosx
 | |
| urequire base sysinfos compat
 | |
| 
 | |
| ################################################################################
 | |
| # Gestion des utilisateurs
 | |
| 
 | |
| function local_shellfix() {
 | |
|     # Modifier le compte local $1 pour qu'il utilise bash au lieu de sh
 | |
|     local username="${1:-root}"
 | |
|     local shell="$(dscl localhost read "/Local/Default/Users/$username" UserShell | sed 's/^UserShell: //g')"
 | |
|     if [ "$shell" != "/bin/bash" ]; then
 | |
|         dscl localhost change "/Local/Default/Users/$username" UserShell "$shell" /bin/bash
 | |
|     fi
 | |
| }
 | |
| 
 | |
| function local_usercheck() {
 | |
|     # Vérifier si le user local $1 existe
 | |
|     if check_sysinfos -s macosx -d 10.5+; then
 | |
|         [ -n "$(dscl localhost list /Local/Default/Users | grep "$username")" ]
 | |
|     elif check_sysinfos -s macosx -d 10.4; then
 | |
|         [ -n "$(nicl . -list /users | grep "$username")" ]
 | |
|     else
 | |
|         return 123
 | |
|     fi
 | |
| }
 | |
| 
 | |
| function local_useradd() {
 | |
|     # Créer le user local $1
 | |
|     # USAGE: local_useradd username [gecos [passwd]]
 | |
|     # OPTIONS
 | |
|     #     -s  Créer l'utilisateur avec les droits d'administrateur
 | |
|     #     -m  Créer le home directory
 | |
|     local -a args
 | |
|     local admin create_home
 | |
|     parse_opts "${PRETTYOPTS[@]}" \
 | |
|         -s,--admin admin=1 \
 | |
|         -m,--create-home create_home=1 \
 | |
|         @ args -- "$@" && set -- "${args[@]}" || {
 | |
|         eerror "$args"
 | |
|         return 1
 | |
|     }
 | |
|     local uid gid
 | |
|     local username="$1" gecos="$2" passwd="$3"
 | |
|     [ -n "$passwd" ] || passwd="${username:0:3}+def"
 | |
|     local_usercheck "$username" && {
 | |
|         eerror "$username: ce compte existe déjà"
 | |
|         return 1
 | |
|     }
 | |
| 
 | |
|     if check_sysinfos -s macosx -d 10.5+; then
 | |
|         [ -n "$uid" ] || uid=$(($(dscl localhost list /Local/Default/Users UniqueID | awk '{print $2}' | sort -rn | head -n 1) + 1))
 | |
|         [ -n "$gid" ] || gid=20
 | |
|         echo "\
 | |
| cd /Local/Default/Users
 | |
| create $username UniqueID $uid
 | |
| create $username PrimaryGroupID $gid
 | |
| create $username RealName \"$gecos\"
 | |
| create $username UserShell /bin/bash
 | |
| create $username NFSHomeDirectory /Users/$username
 | |
| create $username _writers_passwd $username
 | |
| passwd $username $passwd
 | |
| ${admin:+
 | |
| cd /Local/Default/Groups
 | |
| merge admin GroupMembership $username
 | |
| }" | dscl -q localhost
 | |
| 
 | |
|     elif check_sysinfos -s macosx -d 10.4; then
 | |
|         local create_group
 | |
|         [ -n "$uid" ] || uid="$(($(nicl . -list /users uid | awk '{print $2}' | sort -rn | head -n 1) + 1))"
 | |
| 
 | |
|         if [ -z "$gid" ]; then
 | |
|             gid="$(($(nicl . -list /groups gid | awk '{print $2}' | sort -rn | head -n 1) + 1))"
 | |
|             [ "$gid" -lt 501 ] && gid=501
 | |
|         fi
 | |
|         [ -z "$(nicl . -list /groups gid | awk '{print $2}' | grep "$gid")" ] && create_group=1 || create_group=
 | |
| 
 | |
|         echo "\
 | |
| ${create_group:+cd /groups
 | |
| create $username gid $gid
 | |
| create $username passwd *
 | |
| }cd /users
 | |
| create $username uid $uid
 | |
| create $username gid $gid
 | |
| ${gecos:+create $username realname \"$gecos\"
 | |
| }create $username shell /bin/bash
 | |
| create $username home /Users/$username
 | |
| create $username _writers_passwd $username
 | |
| ${admin:+
 | |
| cd /groups
 | |
| merge admin users $username
 | |
| }" | nicl -q .
 | |
|         echo 'spawn passwd '"$username"'
 | |
| expect "password:"
 | |
| send "'"$passwd"'\r"
 | |
| expect "password:"
 | |
| send "'"$passwd"'\r"
 | |
| expect eof
 | |
| ' | expect
 | |
| 
 | |
|     else
 | |
|         return 123
 | |
|     fi
 | |
| 
 | |
|     if [ -n "$create_home" ]; then
 | |
|         local homedir="/Users/$username"
 | |
|         ditto "/System/Library/User Template/French.lproj" "$homedir"
 | |
|         chown -R $uid:$gid "$homedir"
 | |
|         chmod 755 "$homedir"
 | |
|     fi
 | |
| 
 | |
|     return 0
 | |
| }
 | 
