initial commit
authorTroy Sankey <sankeytm@linux.ucla.edu>
Tue, 4 Feb 2014 04:38:02 +0000 (20:38 -0800)
committerTroy Sankey <sankeytm@linux.ucla.edu>
Tue, 4 Feb 2014 04:38:02 +0000 (20:38 -0800)
README [new file with mode: 0644]
guest-account [new file with mode: 0644]
guest-account_deb.patch [new file with mode: 0644]

diff --git a/README b/README
new file mode 100644 (file)
index 0000000..8e412fe
--- /dev/null
+++ b/README
@@ -0,0 +1,8 @@
+This repo contains files and resources that LUG@UCLA uses to make guest
+accounts work in Debian 7 (Wheezy).
+
+The "guest-account" script was taken from lightdm 1.8, under
+/debian/guest-account
+
+Direct link: <http://bazaar.launchpad.net/~lightdm-team/lightdm/1.8/view/head:/debian/guest-account>
+
diff --git a/guest-account b/guest-account
new file mode 100644 (file)
index 0000000..d4c119e
--- /dev/null
@@ -0,0 +1,152 @@
+#!/bin/sh -e
+# (C) 2008 Canonical Ltd.
+# Author: Martin Pitt <martin.pitt@ubuntu.com>
+# License: GPL v2 or later
+# modified by David D Lowe and Thomas Detoux
+#
+# Setup user and temporary home directory for guest session.
+# If this succeeds, this script needs to print the username as the last line to
+# stdout.
+
+add_account ()
+{
+  HOME=`mktemp -td guest-XXXXXX`
+  USER=`echo $HOME | sed 's/\(.*\)guest/guest/'`
+
+  # if $USER already exists, it must be a locked system account with no existing
+  # home directory
+  if PWSTAT=`passwd -S "$USER"` 2>/dev/null; then
+    if [ "`echo \"$PWSTAT\" | cut -f2 -d\ `" != "L" ]; then
+      echo "User account $USER already exists and is not locked"
+      exit 1
+    fi
+    PWENT=`getent passwd "$USER"` || {
+      echo "getent passwd $USER failed"
+      exit 1
+    }
+    GUEST_UID=`echo "$PWENT" | cut -f3 -d:`
+    if [ "$GUEST_UID" -ge 500 ]; then
+      echo "Account $USER is not a system user"
+      exit 1
+    fi
+    HOME=`echo "$PWENT" | cut -f6 -d:`
+    if [ "$HOME" != / ] && [ "${HOME#/tmp}" = "$HOME" ] && [ -d "$HOME" ]; then
+      echo "Home directory of $USER already exists"
+      exit 1
+    fi
+  else
+    # does not exist, so create it
+    adduser --system --no-create-home --home / --gecos "Guest" --group --shell /bin/bash $USER || {
+        umount "$HOME"
+        rm -rf "$HOME"
+        exit 1
+    }
+  fi
+
+  # create temporary home directory
+  mount -t tmpfs -o mode=700 none "$HOME" || { rm -rf "$HOME"; exit 1; }
+  chown $USER:$USER "$HOME"
+  gs_skel=/etc/guest-session/skel/
+  if [ -d "$gs_skel" ] && [ -n "`find $gs_skel -type f`" ]; then
+    cp -rT $gs_skel "$HOME"
+  else
+    cp -rT /etc/skel/ "$HOME"
+  fi
+  chown -R $USER:$USER "$HOME"
+  usermod -d "$HOME" "$USER"
+
+  #
+  # setup session
+  #
+
+  # disable some services that are unnecessary for the guest session
+  mkdir --parents "$HOME"/.config/autostart
+  cd /etc/xdg/autostart/
+  services="jockey-kde.desktop jockey-gtk.desktop update-notifier.desktop user-dirs-update-gtk.desktop"
+  for service in $services
+  do
+    if [ -e /etc/xdg/autostart/"$service" ] ; then
+        cp "$service" "$HOME"/.config/autostart
+        echo "X-GNOME-Autostart-enabled=false" >> "$HOME"/.config/autostart/"$service"
+    fi
+  done
+
+  echo "[Desktop Entry]" >> "$HOME"/.config/autostart/screenlocking.desktop
+  echo "Name='Disable screen locking in guest session'" >> "$HOME"/.config/autostart/screenlocking.desktop
+  echo "Type=Application" >> "$HOME"/.config/autostart/screenlocking.desktop
+  echo "Exec=gsettings set org.gnome.desktop.lockdown disable-lock-screen true" >> "$HOME"/.config/autostart/screenlocking.desktop
+
+  mkdir -p "$HOME"/.kde/share/config
+  echo "[Basic Settings]" >> "$HOME"/.kde/share/config/nepomukserverrc
+  echo "Start Nepomuk=false" >> "$HOME"/.kde/share/config/nepomukserverrc
+
+  echo "[Event]" >> "$HOME"/.kde/share/config/notificationhelper
+  echo "hideHookNotifier=true" >> "$HOME"/.kde/share/config/notificationhelper
+  echo "hideInstallNotifier=true" >> "$HOME"/.kde/share/config/notificationhelper
+  echo "hideRestartNotifier=true" >> "$HOME"/.kde/share/config/notificationhelper
+
+  # Load restricted session
+  #dmrc='[Desktop]\nSession=guest-restricted'
+  #/bin/echo -e "$dmrc" > "$HOME"/.dmrc
+
+  chown -R $USER:$USER "$HOME"
+
+  # set possible local guest session preferences
+  if [ -f /etc/guest-session/prefs.sh ]; then
+      . /etc/guest-session/prefs.sh
+  fi
+
+  echo $USER  
+}
+
+remove_account ()
+{
+  USER=$1
+  
+  PWENT=`getent passwd "$USER"` || {
+    echo "Error: invalid user $USER"
+    exit 1
+  }
+  UID=`echo "$PWENT" | cut -f3 -d:`
+  HOME=`echo "$PWENT" | cut -f6 -d:`
+
+  if [ "$UID" -ge 500 ]; then
+    echo "Error: user $USER is not a system user."
+    exit 1
+  fi
+
+  if [ "${HOME}" = "${HOME#/tmp/}" ]; then
+    echo "Error: home directory $HOME is not in /tmp/."
+    exit 1
+  fi
+
+  # kill all remaining processes
+  while ps h -u "$USER" >/dev/null; do 
+    killall -9 -u "$USER" || true
+    sleep 0.2; 
+  done
+
+  umount "$HOME" || umount -l "$HOME" || true
+  rm -rf "$HOME"
+
+  # remove leftovers in /tmp
+  find /tmp -mindepth 1 -maxdepth 1 -uid "$UID" -print0 | xargs -0 rm -rf || true
+
+  deluser --system "$USER"
+}
+
+case "$1" in
+  add)
+    add_account
+    ;;
+  remove)
+    if [ -z $2 ] ; then
+      echo "Usage: $0 remove [account]"
+      exit 1
+    fi
+    remove_account $2
+    ;;
+  *)
+    echo "Usage: $0 add|remove"
+    exit 1
+esac
diff --git a/guest-account_deb.patch b/guest-account_deb.patch
new file mode 100644 (file)
index 0000000..f881d12
--- /dev/null
@@ -0,0 +1,4 @@
+39c39
+<     adduser --system --no-create-home --home / --gecos "Guest" --group --shell /bin/bash $USER || {
+---
+>     adduser --force-badname --system --no-create-home --home / --gecos "Guest" --group --shell /bin/bash $USER || {