#! /bin/sh set -e . /usr/share/debconf/confmodule if [ "$1" ]; then export LANG=C # avoid locale errors from perl ROOT="$1" chroot=chroot log='log-output -t user-setup' else ROOT= chroot= log= fi . /usr/lib/user-setup/functions.sh # Set a password, via chpasswd. # Use a heredoc rather than echo, to avoid the password # showing in the process table. (However, this is normally # only called when first installing the system, when root has no # password at all, so that should be an unnecessary precaution). # # Pass in three arguments: the user, the password, and 'true' if the # password has been pre-crypted (by preseeding). setpassword () { local USER PASSWD USER="$1" PASSWD="$2" local VERSION=$($chroot $ROOT dpkg-query -W -f '${Version}\n' passwd) if $chroot $ROOT dpkg --compare-versions "$VERSION" ge "1:4.1.4-1"; then # support for versions with PAM support (Squeeze) if [ "$3" = true ]; then $chroot $ROOT usermod --password=$PASSWD $USER else $chroot $ROOT chpasswd </dev/null || true else $log $chroot $ROOT useradd -c "$RET" -m "$USER" $UIDOPT >/dev/null || true fi # Clear the user password from the database. db_set passwd/user-password-crypted '' db_set passwd/user-password '' db_set passwd/user-password-again '' setpassword "$USER" "$USER_PW" "$USER_PW_CRYPTED" if [ "$HOME_EXISTED" ]; then # The user's home directory already existed before we called # adduser. This often means that a mount point under # /home/$USER was selected in (and thus created by) partman, # and the home directory may have ended up owned by root. $log $chroot $ROOT chown "$USER:$USER" "/home/$USER" >/dev/null || true fi if [ -n "$USER" ]; then db_get passwd/user-default-groups for group in $RET; do $log $chroot $ROOT adduser "$USER" $group >/dev/null 2>&1 || true done fi db_get passwd/root-login if [ "$RET" = false ] && [ -n "$USER" ]; then # Ensure sudo is installed, and set up the user to be able # to use it. if [ ! -e $ROOT/etc/sudoers ]; then # try to work in d-i and out; it's better to # use apt-install in d-i apt-install sudo 2>/dev/null || $log $chroot $ROOT apt-get -q -y install sudo || true fi if [ -e $ROOT/etc/sudoers ]; then # Test if we can add the user to the sudo group # (possible if sudo >= 1.7.2-2 is installed on the target system) # If we can, do it this way, otherwise add the user to sudoers # See #597239 if ! $log $chroot $ROOT adduser "$USER" sudo >/dev/null 2>&1; then echo "$USER ALL=(ALL) ALL" >> $ROOT/etc/sudoers fi else # sudo failed to install, system won't be usable exit 1 fi # Configure gksu to use sudo, via an alternative, if it's # installed and the alternative is registered. if $chroot $ROOT update-alternatives --display libgksu-gconf-defaults >/dev/null 2>&1; then $log $chroot $ROOT update-alternatives --set libgksu-gconf-defaults /usr/share/libgksu/debian/gconf-defaults.libgksu-sudo $log $chroot $ROOT update-gconf-defaults || true fi # Configure aptitude to use sudo. echo 'Aptitude::Get-Root-Command "sudo:/usr/bin/sudo";' > $ROOT/etc/apt/apt.conf.d/00aptitude fi else # Just in case, clear any preseeded user password from the database # anyway. db_set passwd/user-password-crypted '' db_set passwd/user-password '' db_set passwd/user-password-again '' fi exit 0