From f79dcd208c2d0e09425cda9535c6881ecf22125c Mon Sep 17 00:00:00 2001 From: Xiao-Long Chen Date: Sun, 13 Apr 2014 01:01:44 -0400 Subject: [PATCH 1/2] guest-account: Use cross-distro commands --- debian/guest-account.sh | 41 +++++++++++++++++++++++++++++++++-------- 1 file changed, 33 insertions(+), 8 deletions(-) diff --git a/debian/guest-account.sh b/debian/guest-account.sh index 6da5687..0fc3daa 100644 --- a/debian/guest-account.sh +++ b/debian/guest-account.sh @@ -20,7 +20,12 @@ fi add_account () { - HOME=`mktemp -td guest-XXXXXX` + NEWHOME=`mktemp -td guest-XXXXXX` + # useradd does not accept upper case characters in the username + HOME=`echo $NEWHOME | tr '[A-Z]' '[a-z]'` + if [ "x$NEWHOME" != "x$HOME" ]; then + mv $NEWHOME $HOME + fi USER=`echo $HOME | sed 's/\(.*\)guest/guest/'` # if $USER already exists, it must be a locked system account with no existing @@ -46,7 +51,21 @@ add_account () fi else # does not exist, so create it - adduser --system --no-create-home --home / --gecos $(gettext "Guest") --group --shell /bin/bash $USER || { + # Arch Linux modification: Ubuntu/Debian uses their own adduser package, + # which works differently from the own provided by the shadow package. + # Instead, use useradd, which works in any distro. + # + # Only the syntax is changed + # adduser -> useradd + # --system -> --system + # --no-create-home -> --no-create-home + # --home -> --home-dir + # --gecos -> --comment + # --group -> --user-group + # --shell -> --shell + # + #adduser --system --no-create-home --home / --gecos $(gettext "Guest") --group --shell /bin/bash $USER || { + useradd --system --no-create-home --home-dir / --comment $(gettext "Guest") --user-group --shell /bin/bash $USER || { umount "$HOME" rm -rf "$HOME" exit 1 @@ -128,7 +147,12 @@ remove_account () GUEST_UID=`echo "$PWENT" | cut -f3 -d:` GUEST_HOME=`echo "$PWENT" | cut -f6 -d:` - if [ "$GUEST_UID" -ge 500 ]; then + # deluser is provided by the adduser package on Debian/Ubuntu. useradd + # doesn't have a '--system' parameter, which causes deluser to only delete + # system users, so this will be handled using this script. + SYS_UID_MIN="$(cat /etc/login.defs | grep SYS_UID_MIN | awk '{print $2}')" + SYS_UID_MAX="$(cat /etc/login.defs | grep SYS_UID_MAX | awk '{print $2}')" + if [ "$GUEST_UID" -lt "$SYS_UID_MIN" ] || [ "$GUEST_UID" -gt "$SYS_UID_MAX" ]; then echo "Error: user $GUEST_USER is not a system user." exit 1 fi @@ -150,15 +174,16 @@ remove_account () # remove leftovers in /tmp find /tmp -mindepth 1 -maxdepth 1 -uid "$GUEST_UID" -print0 | xargs -0 rm -rf || true - # remove possible /media/guest-XXXXXX folder - if [ -d /media/"$GUEST_USER" ]; then - for dir in $( find /media/"$GUEST_USER" -mindepth 1 -maxdepth 1 ); do + # remove possible /run/media/guest-XXXXXX folder + if [ -d /run/media/"$GUEST_USER" ]; then + for dir in $( find /run/media/"$GUEST_USER" -mindepth 1 -maxdepth 1 ); do umount "$dir" || true done - rmdir /media/"$GUEST_USER" || true + rmdir /run/media/"$GUEST_USER" || true fi - deluser --system "$GUEST_USER" + #deluser --system "$GUEST_USER" + userdel "$GUEST_USER" } case "$1" in -- 2.3.3