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
|
|
}
|