summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--common/configuration.c4
-rw-r--r--common/user-list.c7
-rw-r--r--data/apparmor/abstractions/lightdm3
-rw-r--r--data/apparmor/abstractions/lightdm_chromium-browser6
-rw-r--r--data/lightdm.conf6
-rw-r--r--debian/changelog12
-rw-r--r--debian/control1
-rw-r--r--debian/guest-account.sh203
-rw-r--r--debian/guest-session-setup.sh34
-rw-r--r--debian/guest-session-startup.desktop5
-rw-r--r--debian/guest-session.profile1
-rw-r--r--debian/lightdm.install1
-rw-r--r--debian/patches/series1
-rw-r--r--debian/patches/xorg-1.17.patch26
-rw-r--r--debian/po/af.po4
-rw-r--r--debian/po/am.po4
-rw-r--r--debian/po/an.po4
-rw-r--r--debian/po/ar.po4
-rw-r--r--debian/po/ast.po4
-rw-r--r--debian/po/az.po4
-rw-r--r--debian/po/be.po4
-rw-r--r--debian/po/bg.po4
-rw-r--r--debian/po/bn.po4
-rw-r--r--debian/po/bo.po4
-rw-r--r--debian/po/br.po4
-rw-r--r--debian/po/bs.po4
-rw-r--r--debian/po/ca.po4
-rw-r--r--debian/po/ca@valencia.po4
-rw-r--r--debian/po/ce.po4
-rw-r--r--debian/po/ckb.po4
-rw-r--r--debian/po/cs.po4
-rw-r--r--debian/po/cy.po4
-rw-r--r--debian/po/da.po4
-rw-r--r--debian/po/de.po4
-rw-r--r--debian/po/el.po4
-rw-r--r--debian/po/en_AU.po4
-rw-r--r--debian/po/en_CA.po4
-rw-r--r--debian/po/en_GB.po4
-rw-r--r--debian/po/eo.po4
-rw-r--r--debian/po/es.po4
-rw-r--r--debian/po/et.po4
-rw-r--r--debian/po/eu.po4
-rw-r--r--debian/po/fa.po4
-rw-r--r--debian/po/fi.po4
-rw-r--r--debian/po/fo.po4
-rw-r--r--debian/po/fr.po4
-rw-r--r--debian/po/fr_CA.po4
-rw-r--r--debian/po/fy.po4
-rw-r--r--debian/po/ga.po4
-rw-r--r--debian/po/gd.po4
-rw-r--r--debian/po/gl.po4
-rw-r--r--debian/po/gu.po4
-rw-r--r--debian/po/he.po4
-rw-r--r--debian/po/hi.po4
-rw-r--r--debian/po/hr.po4
-rw-r--r--debian/po/ht.po4
-rw-r--r--debian/po/hu.po4
-rw-r--r--debian/po/hy.po4
-rw-r--r--debian/po/ia.po4
-rw-r--r--debian/po/id.po4
-rw-r--r--debian/po/is.po4
-rw-r--r--debian/po/it.po4
-rw-r--r--debian/po/ja.po4
-rw-r--r--debian/po/kk.po4
-rw-r--r--debian/po/kl.po4
-rw-r--r--debian/po/km.po4
-rw-r--r--debian/po/kn.po4
-rw-r--r--debian/po/ko.po4
-rw-r--r--debian/po/ku.po4
-rw-r--r--debian/po/lb.po4
-rw-r--r--debian/po/lt.po4
-rw-r--r--debian/po/lv.po4
-rw-r--r--debian/po/mhr.po4
-rw-r--r--debian/po/mi.po4
-rw-r--r--debian/po/ml.po4
-rw-r--r--debian/po/mr.po4
-rw-r--r--debian/po/ms.po4
-rw-r--r--debian/po/my.po4
-rw-r--r--debian/po/nb.po4
-rw-r--r--debian/po/nl.po4
-rw-r--r--debian/po/nn.po4
-rw-r--r--debian/po/oc.po4
-rw-r--r--debian/po/pa.po4
-rw-r--r--debian/po/pl.po4
-rw-r--r--debian/po/pt.po4
-rw-r--r--debian/po/pt_BR.po4
-rw-r--r--debian/po/ro.po4
-rw-r--r--debian/po/ru.po4
-rw-r--r--debian/po/sc.po4
-rw-r--r--debian/po/sd.po4
-rw-r--r--debian/po/shn.po4
-rw-r--r--debian/po/si.po4
-rw-r--r--debian/po/sk.po4
-rw-r--r--debian/po/sl.po4
-rw-r--r--debian/po/sq.po4
-rw-r--r--debian/po/sr.po4
-rw-r--r--debian/po/sv.po4
-rw-r--r--debian/po/ta.po4
-rw-r--r--debian/po/te.po4
-rw-r--r--debian/po/tg.po4
-rw-r--r--debian/po/th.po4
-rw-r--r--debian/po/tl.po4
-rw-r--r--debian/po/tr.po4
-rw-r--r--debian/po/ug.po4
-rw-r--r--debian/po/uk.po4
-rw-r--r--debian/po/ur.po4
-rw-r--r--debian/po/uz.po4
-rw-r--r--debian/po/vi.po4
-rw-r--r--debian/po/wae.po4
-rw-r--r--debian/po/zh_CN.po4
-rw-r--r--debian/po/zh_HK.po4
-rw-r--r--debian/po/zh_TW.po4
-rwxr-xr-xdebian/rules2
-rw-r--r--liblightdm-gobject/greeter.c3
-rw-r--r--src/accounts.c14
-rw-r--r--src/display-manager.c4
-rw-r--r--src/display-server.c4
-rw-r--r--src/greeter.c7
-rw-r--r--src/lightdm.c3
-rw-r--r--src/login1.c2
-rw-r--r--src/mir-server.c10
-rw-r--r--src/process.c4
-rw-r--r--src/seat-unity.c12
-rw-r--r--src/seat-xdmcp-session.c6
-rw-r--r--src/seat-xvnc.c6
-rw-r--r--src/seat.c141
-rw-r--r--src/session.c25
-rw-r--r--src/shared-data-manager.c19
-rw-r--r--src/unity-system-compositor.c4
-rw-r--r--src/vnc-server.c10
-rw-r--r--src/wayland-session.c4
-rw-r--r--src/x-authority.c4
-rw-r--r--src/x-server-local.c68
-rw-r--r--src/x-server-local.h4
-rw-r--r--src/x-server-xvnc.c10
-rw-r--r--src/x-server.c12
-rw-r--r--src/xdmcp-server.c10
-rw-r--r--src/xdmcp-session.c10
-rw-r--r--tests/Makefile.am20
-rw-r--r--tests/scripts/allow-tcp-xorg-1.16.conf34
-rw-r--r--tests/scripts/allow-tcp-xorg-1.17.conf34
-rw-r--r--tests/scripts/lock-seat-after-vt-switch.conf22
-rw-r--r--tests/scripts/lock-seat-twice.conf75
-rw-r--r--tests/scripts/lock-session-twice.conf77
-rw-r--r--tests/scripts/login-remote-session.conf2
-rw-r--r--tests/scripts/xdmcp-client-xorg-1.16.conf (renamed from tests/scripts/xdmcp-client.conf)7
-rw-r--r--tests/scripts/xdmcp-client-xorg-1.17.conf30
-rw-r--r--tests/scripts/xdmcp-server-autologin.conf2
-rw-r--r--tests/scripts/xdmcp-server-double-login.conf4
-rw-r--r--tests/scripts/xdmcp-server-guest.conf2
-rw-r--r--tests/scripts/xdmcp-server-login.conf2
-rw-r--r--tests/scripts/xdmcp-server-open-file-descriptors.conf2
-rw-r--r--tests/scripts/xremote-autologin.conf30
-rw-r--r--tests/scripts/xremote-login.conf45
-rw-r--r--tests/scripts/xserver-config.conf32
-rw-r--r--tests/src/X.c85
-rwxr-xr-xtests/test-allow-tcp-xorg-1.162
-rwxr-xr-xtests/test-allow-tcp-xorg-1.172
-rwxr-xr-xtests/test-lock-seat-twice2
-rwxr-xr-xtests/test-lock-session-twice2
-rwxr-xr-xtests/test-xdmcp-client2
-rwxr-xr-xtests/test-xdmcp-client-xorg-1.162
-rwxr-xr-xtests/test-xdmcp-client-xorg-1.172
-rwxr-xr-xtests/test-xremote-autologin2
-rwxr-xr-xtests/test-xremote-login2
-rwxr-xr-xtests/test-xserver-config2
166 files changed, 1092 insertions, 533 deletions
diff --git a/common/configuration.c b/common/configuration.c
index 895085e3..dc7831a8 100644
--- a/common/configuration.c
+++ b/common/configuration.c
@@ -331,9 +331,7 @@ config_init (Configuration *config)
static void
config_finalize (GObject *object)
{
- Configuration *self;
-
- self = CONFIGURATION (object);
+ Configuration *self = CONFIGURATION (object);
g_free (self->priv->dir);
g_key_file_free (self->priv->key_file);
diff --git a/common/user-list.c b/common/user-list.c
index 792c6d3a..1b198d1a 100644
--- a/common/user-list.c
+++ b/common/user-list.c
@@ -186,9 +186,7 @@ common_user_list_get_instance (void)
void
common_user_list_cleanup (void)
{
- if (singleton)
- g_object_unref (singleton);
- singleton = NULL;
+ g_clear_object (&singleton);
}
static CommonUser *
@@ -1059,8 +1057,7 @@ common_user_list_finalize (GObject *object)
if (priv->session_removed_signal)
g_dbus_connection_signal_unsubscribe (priv->bus, priv->session_removed_signal);
g_object_unref (priv->bus);
- if (priv->passwd_monitor)
- g_object_unref (priv->passwd_monitor);
+ g_clear_object (&priv->passwd_monitor);
G_OBJECT_CLASS (common_user_list_parent_class)->finalize (object);
}
diff --git a/data/apparmor/abstractions/lightdm b/data/apparmor/abstractions/lightdm
index 17e32e22..656381f0 100644
--- a/data/apparmor/abstractions/lightdm
+++ b/data/apparmor/abstractions/lightdm
@@ -45,6 +45,8 @@
/opt/** rmixk,
@{PROC}/ r,
@{PROC}/* rm,
+ @{PROC}/[0-9]*/net/ r,
+ @{PROC}/[0-9]*/net/dev r,
@{PROC}/asound rm,
@{PROC}/asound/** rm,
@{PROC}/ati rm,
@@ -73,6 +75,7 @@
/{,var/}run/ r,
# necessary for writing to sockets, etc.
/{,var/}run/** rmkix,
+ /{,var/}run/screen/** wl,
/{,var/}run/shm/** wl,
/{,var/}run/uuidd/request w,
# libpam-xdg-support/logind
diff --git a/data/apparmor/abstractions/lightdm_chromium-browser b/data/apparmor/abstractions/lightdm_chromium-browser
index 99089693..930c87e7 100644
--- a/data/apparmor/abstractions/lightdm_chromium-browser
+++ b/data/apparmor/abstractions/lightdm_chromium-browser
@@ -51,7 +51,7 @@
# Allow us to receive and send signals from processes in the
# lightdm-guest-session
- signal (receive, send) set=("exists") peer=/usr/lib/lightdm/lightdm-guest-session,
+ signal (receive, send) set=("exists", "term") peer=/usr/lib/lightdm/lightdm-guest-session,
# Allow us to receive and send on unix sockets from processes in the
# lightdm-guest-session
@@ -62,6 +62,10 @@
@{PROC}/[0-9]*/statm r, # sandbox wants these
@{PROC}/[0-9]*/task/[0-9]*/stat r, # sandbox wants these
+ owner @{PROC}/@{pid}/setgroups w,
+ owner @{PROC}/@{pid}/uid_map w,
+ owner @{PROC}/@{pid}/gid_map w,
+
/selinux/ r,
/usr/lib/chromium-browser/chromium-browser-sandbox ix,
diff --git a/data/lightdm.conf b/data/lightdm.conf
index 03381d68..8284081b 100644
--- a/data/lightdm.conf
+++ b/data/lightdm.conf
@@ -40,14 +40,14 @@
# [Seat:seat0] matches the seat named "seat0".
# [Seat:seat-thin-client*] matches all seats that have names that start with "seat-thin-client".
#
-# type = Seat type (xlocal, xremote)
+# type = Seat type (xlocal, xremote, unity)
# pam-service = PAM service to use for login
# pam-autologin-service = PAM service to use for autologin
# pam-greeter-service = PAM service to use for greeters
# xserver-command = X server command to run (can also contain arguments e.g. X -special-option)
# xmir-command = Xmir server command to run (can also contain arguments e.g. Xmir -special-option)
-# xserver-layout = Layout to pass to X server
# xserver-config = Config file to pass to X server
+# xserver-layout = Layout to pass to X server
# xserver-allow-tcp = True if TCP/IP connections are allowed to this X server
# xserver-share = True if the X server is shared for both greeter and session
# xserver-hostname = Hostname of X server (only for type=xremote)
@@ -88,8 +88,8 @@
#pam-greeter-service=lightdm-greeter
#xserver-command=X
#xmir-command=Xmir
-#xserver-layout=
#xserver-config=
+#xserver-layout=
#xserver-allow-tcp=false
#xserver-share=true
#xserver-hostname=
diff --git a/debian/changelog b/debian/changelog
index 640b9b21..36f20f84 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,15 @@
+lightdm (1.17.0-0ubuntu1) UNRELEASED; urgency=medium
+
+ * New upstream release:
+ - ...
+ * Build with multi-arch
+ * debian/patches/xorg-1.17.patch:
+ - Fix xserver-allow-tcp=true option not working with X.org 1.17
+ * data/apparmor/abstractions/lightdm_chromium-browser: cgroups support for
+ guest sessions. (LP: #1504049, LP: #1464958)
+
+ -- Robert Ancell <robert.ancell@canonical.com> Mon, 12 Oct 2015 14:57:47 +0100
+
lightdm (1.16.0-0ubuntu1) wily; urgency=medium
* New upstream release:
diff --git a/debian/control b/debian/control
index d12b24c0..7698de17 100644
--- a/debian/control
+++ b/debian/control
@@ -47,6 +47,7 @@ Depends: ${misc:Depends},
bash (>= 4.3),
Recommends: xserver-xorg,
unity-greeter | lightdm-greeter | lightdm-kde-greeter,
+Suggests: bindfs
Conflicts: liblightdm-gobject-0-0,
liblightdm-qt-0-0,
Provides: x-display-manager
diff --git a/debian/guest-account.sh b/debian/guest-account.sh
index 6da56878..ffc44eb5 100644
--- a/debian/guest-account.sh
+++ b/debian/guest-account.sh
@@ -20,159 +20,166 @@ fi
add_account ()
{
- HOME=`mktemp -td guest-XXXXXX`
- USER=`echo $HOME | sed 's/\(.*\)guest/guest/'`
+ 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
+ # 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"
+ 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"
+ 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"
+ 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"
+ 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 $(gettext "Guest") --group --shell /bin/bash $USER || {
- umount "$HOME"
- rm -rf "$HOME"
- exit 1
+ adduser --system --no-create-home --home / --gecos $(gettext "Guest") --group --shell /bin/bash ${USER} || {
+ umount ${HOME}
+ rm -rf ${HOME}
+ exit 1
}
fi
+ dist_gs=/usr/share/lightdm/guest-session
+ site_gs=/etc/guest-session
+
# 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"
+ mount -t tmpfs -o mode=700,uid=${USER} none ${HOME} || {
+ rm -rf ${HOME}
+ exit 1
+ }
- #
- # 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"
+ if [ -d ${site_gs}/skel ] && [ -n $(find ${site_gs}/skel -type f) ]; then
+ # Only perform union-mounting if BindFS is available
+ if [ -x /usr/bin/bindfs ]; then
+ bindfs_mount=true
+
+ # Try OverlayFS first
+ if modinfo -n overlay >/dev/null 2>&1; then
+ mkdir ${HOME}/upper ${HOME}/work
+ chown ${USER}:${USER} ${HOME}/upper ${HOME}/work
+ mount -t overlay -o lowerdir=${dist_gs}/skel:${site_gs}/skel,upperdir=${HOME}/upper,workdir=${HOME}/work overlay ${HOME} || {
+ umount ${HOME}
+ rm -rf ${HOME}
+ exit 1
+ }
+ # If OverlayFS is not available, try AuFS
+ elif [ -x /sbin/mount.aufs ]; then
+ mount -t aufs -o br=${HOME}:${dist_gs}/skel:${site_gs}/skel none ${HOME} || {
+ umount ${HOME}
+ rm -rf ${HOME}
+ exit 1
+ }
+ # If none of them is available, fall back to copy over
+ else
+ cp -rT ${site_gs}/skel/ ${HOME}
+ cp -rT ${dist_gs}/skel/ ${HOME}
+ chown -R ${USER}:${USER} ${HOME}
+ bindfs_mount=false
+ fi
+
+ if ${bindfs_mount}; then
+ # Wrap ${HOME} in a BindFS mount, so that
+ # ${USER} will be seen as the owner of ${HOME}'s contents.
+ bindfs -u ${USER} -g ${USER} ${HOME} ${HOME} || {
+ umount ${HOME} # union mount
+ umount ${HOME} # tmpfs mount
+ rm -rf ${HOME}
+ exit 1
+ }
+ fi
+ # If BindFS is not available, just fall back to copy over
+ else
+ cp -rT ${site_gs}/skel/ ${HOME}
+ cp -rT ${dist_gs}/skel/ ${HOME}
+ chown -R ${USER}:${USER} ${HOME}
fi
- done
-
- # disable Unity shortcut hint
- mkdir -p "$HOME"/.cache/unity
- touch "$HOME"/.cache/unity/first_run.stamp
-
- STARTUP="$HOME"/.config/autostart/startup-commands.desktop
- echo "[Desktop Entry]" > $STARTUP
- echo "Name=Startup commands" >> $STARTUP
- echo "Type=Application" >> $STARTUP
- echo "NoDisplay=true" >> $STARTUP
- echo "Exec=/usr/lib/lightdm/guest-session-auto.sh" >> $STARTUP
-
- echo "export DIALOG_SLEEP=4" >> "$HOME"/.profile
-
- 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
-
- # set possible local guest session preferences
- if [ -f /etc/guest-session/prefs.sh ]; then
- . /etc/guest-session/prefs.sh
+ else
+ cp -rT /etc/skel/ ${HOME}
+ cp -rT ${dist_gs}/skel/ ${HOME}
+ chown -R ${USER}:${USER} ${HOME}
fi
- chown -R $USER:$USER "$HOME"
+ usermod -d ${HOME} ${USER}
+
+ # setup session
+ su ${USER} -c "env HOME=${HOME} site_gs=${site_gs} ${dist_gs}/setup.sh"
- echo $USER
+ echo ${USER}
}
remove_account ()
{
- GUEST_USER=$1
+ GUEST_USER=${1}
- PWENT=`getent passwd "$GUEST_USER"` || {
- echo "Error: invalid user $GUEST_USER"
+ PWENT=$(getent passwd ${GUEST_USER}) || {
+ echo "Error: invalid user ${GUEST_USER}"
exit 1
}
- GUEST_UID=`echo "$PWENT" | cut -f3 -d:`
- GUEST_HOME=`echo "$PWENT" | cut -f6 -d:`
+ GUEST_UID=$(echo ${PWENT} | cut -f3 -d:)
+ GUEST_HOME=$(echo ${PWENT} | cut -f6 -d:)
- if [ "$GUEST_UID" -ge 500 ]; then
- echo "Error: user $GUEST_USER is not a system user."
+ if [ ${GUEST_UID} -ge 500 ]; then
+ echo "Error: user ${GUEST_USER} is not a system user."
exit 1
fi
- if [ "${GUEST_HOME}" = "${GUEST_HOME#/tmp/}" ]; then
- echo "Error: home directory $GUEST_HOME is not in /tmp/."
+ if [ ${GUEST_HOME} = ${GUEST_HOME#/tmp/} ]; then
+ echo "Error: home directory ${GUEST_HOME} is not in /tmp/."
exit 1
fi
# kill all remaining processes
- while ps h -u "$GUEST_USER" >/dev/null; do
- killall -9 -u "$GUEST_USER" || true
+ while ps h -u ${GUEST_USER} >/dev/null; do
+ killall -9 -u ${GUEST_USER} || true
sleep 0.2;
done
- umount "$GUEST_HOME" || umount -l "$GUEST_HOME" || true
- rm -rf "$GUEST_HOME"
+ umount ${GUEST_HOME} || umount -l ${GUEST_HOME} || true # BindFS mount
+ umount ${GUEST_HOME} || umount -l ${GUEST_HOME} || true # union mount
+ umount ${GUEST_HOME} || umount -l ${GUEST_HOME} || true # tmpfs mount
+ rm -rf ${GUEST_HOME}
# remove leftovers in /tmp
- find /tmp -mindepth 1 -maxdepth 1 -uid "$GUEST_UID" -print0 | xargs -0 rm -rf || true
+ 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
- umount "$dir" || true
+ if [ -d /media/${GUEST_USER} ]; then
+ for dir in $(find /media/${GUEST_USER} -mindepth 1 -maxdepth 1); do
+ umount ${dir} || true
done
- rmdir /media/"$GUEST_USER" || true
+
+ rmdir /media/${GUEST_USER} || true
fi
- deluser --system "$GUEST_USER"
+ deluser --system ${GUEST_USER}
}
-case "$1" in
+case ${1} in
add)
add_account
;;
remove)
- if [ -z $2 ] ; then
- echo "Usage: $0 remove [account]"
+ if [ -z ${2} ] ; then
+ echo "Usage: ${0} remove [account]"
exit 1
fi
- remove_account $2
+ remove_account ${2}
;;
*)
- echo "Usage: $0 add|remove"
+ echo "Usage: ${0} add|remove"
exit 1
esac
diff --git a/debian/guest-session-setup.sh b/debian/guest-session-setup.sh
new file mode 100644
index 00000000..9e1300db
--- /dev/null
+++ b/debian/guest-session-setup.sh
@@ -0,0 +1,34 @@
+#!/bin/sh
+
+HOME=${HOME:-$(getent passwd $(whoami) | cut -f6 -d:)}
+site_gs=${site_gs:-/etc/guest-session}
+
+# disable some services that are unnecessary for the guest session
+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
+ [ -f ${HOME}/.config/autostart/${service} ] || cp /etc/xdg/autostart/${service} ${HOME}/.config/autostart
+ echo "X-GNOME-Autostart-enabled=false" >> ${HOME}/.config/autostart/${service}
+ fi
+done
+
+# disable Unity shortcut hint
+[ -d ${HOME}/.cache/unity ] || mkdir -p ${HOME}/.cache/unity
+touch ${HOME}/.cache/unity/first_run.stamp
+
+[ -d ${HOME}/.kde/share/config ] || 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
+
+# set possible local guest session preferences
+[ -f ${site_gs}/prefs.sh ] && . ${site_gs}/prefs.sh
diff --git a/debian/guest-session-startup.desktop b/debian/guest-session-startup.desktop
new file mode 100644
index 00000000..676d72e6
--- /dev/null
+++ b/debian/guest-session-startup.desktop
@@ -0,0 +1,5 @@
+[Desktop Entry]
+Name=Custom startup commands for LightDM guest session
+Type=Application
+NoDisplay=true
+Exec=/usr/lib/lightdm/guest-session-auto.sh
diff --git a/debian/guest-session.profile b/debian/guest-session.profile
new file mode 100644
index 00000000..38d441c9
--- /dev/null
+++ b/debian/guest-session.profile
@@ -0,0 +1 @@
+DIALOG_SLEEP=4
diff --git a/debian/lightdm.install b/debian/lightdm.install
index 53becd25..01ce61ac 100644
--- a/debian/lightdm.install
+++ b/debian/lightdm.install
@@ -12,6 +12,7 @@ etc/apparmor.d
debian/lightdm-session usr/sbin
debian/config-error-dialog.sh usr/lib/lightdm
debian/guest-session-auto.sh usr/lib/lightdm
+debian/guest-session-startup.desktop usr/share/lightdm/guest-session/skel/.config/autostart
debian/lightdm-greeter-session usr/lib/lightdm
debian/source_lightdm.py usr/share/apport/package-hooks
debian/50-xserver-command.conf usr/share/lightdm/lightdm.conf.d
diff --git a/debian/patches/series b/debian/patches/series
index d3ba2550..7f14c0ad 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1,3 +1,4 @@
04_language_handling.patch
05_translate_debian_files.patch
autologin-session-workaround.patch
+xorg-1.17.patch
diff --git a/debian/patches/xorg-1.17.patch b/debian/patches/xorg-1.17.patch
new file mode 100644
index 00000000..9f7ecfd2
--- /dev/null
+++ b/debian/patches/xorg-1.17.patch
@@ -0,0 +1,26 @@
+Description: The X.org X server 1.17 doesn't listen on TCP by default, we need to pass -listen to enable it
+Author: Robert Ancell <robert.ancell@canonical.com>
+Bug: https://bugs.launchpad.net/bugs/1449282
+
+=== modified file 'src/x-server-local.c'
+Index: 1.16/src/x-server-local.c
+===================================================================
+--- 1.16.orig/src/x-server-local.c
++++ 1.16/src/x-server-local.c
+@@ -477,6 +477,7 @@ x_server_local_start (DisplayServer *dis
+ /* Connect to a remote server using XDMCP */
+ if (server->priv->xdmcp_server != NULL)
+ {
++ g_string_append (command, " -listen tcp");
+ if (server->priv->xdmcp_port != 0)
+ g_string_append_printf (command, " -port %d", server->priv->xdmcp_port);
+ g_string_append_printf (command, " -query %s", server->priv->xdmcp_server);
+@@ -485,6 +486,8 @@ x_server_local_start (DisplayServer *dis
+ }
+ else if (!server->priv->allow_tcp)
+ g_string_append (command, " -nolisten tcp");
++ else
++ g_string_append (command, " -listen tcp");
+
+ if (server->priv->vt >= 0)
+ g_string_append_printf (command, " vt%d -novtswitch", server->priv->vt);
diff --git a/debian/po/af.po b/debian/po/af.po
index 322ba5e6..4b4383a6 100644
--- a/debian/po/af.po
+++ b/debian/po/af.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/am.po b/debian/po/am.po
index 28f38a1f..c7f4a3a5 100644
--- a/debian/po/am.po
+++ b/debian/po/am.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/an.po b/debian/po/an.po
index 8e161b74..37324a82 100644
--- a/debian/po/an.po
+++ b/debian/po/an.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/ar.po b/debian/po/ar.po
index fbebcbdb..13ff227c 100644
--- a/debian/po/ar.po
+++ b/debian/po/ar.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/ast.po b/debian/po/ast.po
index af51fd73..15d94659 100644
--- a/debian/po/ast.po
+++ b/debian/po/ast.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/az.po b/debian/po/az.po
index 6e42a4f4..978c9a29 100644
--- a/debian/po/az.po
+++ b/debian/po/az.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/be.po b/debian/po/be.po
index bc349981..a698d7df 100644
--- a/debian/po/be.po
+++ b/debian/po/be.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/bg.po b/debian/po/bg.po
index e1b4d536..7032f784 100644
--- a/debian/po/bg.po
+++ b/debian/po/bg.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/bn.po b/debian/po/bn.po
index 6df0aa99..c2483039 100644
--- a/debian/po/bn.po
+++ b/debian/po/bn.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/bo.po b/debian/po/bo.po
index 8c361d57..eaf0ef52 100644
--- a/debian/po/bo.po
+++ b/debian/po/bo.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:25+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/br.po b/debian/po/br.po
index c0aa2c1a..8ecdbc08 100644
--- a/debian/po/br.po
+++ b/debian/po/br.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/bs.po b/debian/po/bs.po
index b6a648f3..3abde833 100644
--- a/debian/po/bs.po
+++ b/debian/po/bs.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/ca.po b/debian/po/ca.po
index c9caae15..fe55a727 100644
--- a/debian/po/ca.po
+++ b/debian/po/ca.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/ca@valencia.po b/debian/po/ca@valencia.po
index e2c3d711..b7416f8f 100644
--- a/debian/po/ca@valencia.po
+++ b/debian/po/ca@valencia.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:25+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/ce.po b/debian/po/ce.po
index 26f7be6f..036f291f 100644
--- a/debian/po/ce.po
+++ b/debian/po/ce.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/ckb.po b/debian/po/ckb.po
index 51ce6680..ddbea225 100644
--- a/debian/po/ckb.po
+++ b/debian/po/ckb.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:25+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/cs.po b/debian/po/cs.po
index 4d40b82f..4f01c06d 100644
--- a/debian/po/cs.po
+++ b/debian/po/cs.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/cy.po b/debian/po/cy.po
index 8e1aea31..25de143d 100644
--- a/debian/po/cy.po
+++ b/debian/po/cy.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:25+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/da.po b/debian/po/da.po
index 2097ea26..16a02611 100644
--- a/debian/po/da.po
+++ b/debian/po/da.po
@@ -15,8 +15,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/de.po b/debian/po/de.po
index 88b99b47..e52bd4b5 100644
--- a/debian/po/de.po
+++ b/debian/po/de.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/el.po b/debian/po/el.po
index cdd0cbdb..26e5aa7a 100644
--- a/debian/po/el.po
+++ b/debian/po/el.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/en_AU.po b/debian/po/en_AU.po
index 246c89ac..678dbf5c 100644
--- a/debian/po/en_AU.po
+++ b/debian/po/en_AU.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:25+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/en_CA.po b/debian/po/en_CA.po
index f7b56336..b3553b26 100644
--- a/debian/po/en_CA.po
+++ b/debian/po/en_CA.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:25+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/en_GB.po b/debian/po/en_GB.po
index c13ff48b..b34ef9fe 100644
--- a/debian/po/en_GB.po
+++ b/debian/po/en_GB.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:25+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/eo.po b/debian/po/eo.po
index ef246bca..632cf1e8 100644
--- a/debian/po/eo.po
+++ b/debian/po/eo.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/es.po b/debian/po/es.po
index dc509f08..d15d8763 100644
--- a/debian/po/es.po
+++ b/debian/po/es.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:25+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/et.po b/debian/po/et.po
index 0a1a58e6..d3677eb8 100644
--- a/debian/po/et.po
+++ b/debian/po/et.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/eu.po b/debian/po/eu.po
index 8a3d3900..3fcefd17 100644
--- a/debian/po/eu.po
+++ b/debian/po/eu.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/fa.po b/debian/po/fa.po
index a2aaf59c..b072b22b 100644
--- a/debian/po/fa.po
+++ b/debian/po/fa.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/fi.po b/debian/po/fi.po
index 4f1c5f14..b7cb7b80 100644
--- a/debian/po/fi.po
+++ b/debian/po/fi.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/fo.po b/debian/po/fo.po
index 46a35762..a3e88228 100644
--- a/debian/po/fo.po
+++ b/debian/po/fo.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/fr.po b/debian/po/fr.po
index 55c2439c..d3b4b8ac 100644
--- a/debian/po/fr.po
+++ b/debian/po/fr.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/fr_CA.po b/debian/po/fr_CA.po
index 50bf3eff..2c0d0050 100644
--- a/debian/po/fr_CA.po
+++ b/debian/po/fr_CA.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:25+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/fy.po b/debian/po/fy.po
index 75da8a35..fe0ede4c 100644
--- a/debian/po/fy.po
+++ b/debian/po/fy.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/ga.po b/debian/po/ga.po
index 4c50a0f3..b9360263 100644
--- a/debian/po/ga.po
+++ b/debian/po/ga.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/gd.po b/debian/po/gd.po
index 0439ad15..72873884 100644
--- a/debian/po/gd.po
+++ b/debian/po/gd.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/gl.po b/debian/po/gl.po
index c5bfe390..f66e76ab 100644
--- a/debian/po/gl.po
+++ b/debian/po/gl.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/gu.po b/debian/po/gu.po
index 9d5d93e5..9e33a6a2 100644
--- a/debian/po/gu.po
+++ b/debian/po/gu.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/he.po b/debian/po/he.po
index 65e57432..f826c3a4 100644
--- a/debian/po/he.po
+++ b/debian/po/he.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/hi.po b/debian/po/hi.po
index ee4511ec..68b838d4 100644
--- a/debian/po/hi.po
+++ b/debian/po/hi.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/hr.po b/debian/po/hr.po
index 7e3b58a9..ac067545 100644
--- a/debian/po/hr.po
+++ b/debian/po/hr.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/ht.po b/debian/po/ht.po
index e514c77a..e5ab3787 100644
--- a/debian/po/ht.po
+++ b/debian/po/ht.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/hu.po b/debian/po/hu.po
index f944a654..44ac2025 100644
--- a/debian/po/hu.po
+++ b/debian/po/hu.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/hy.po b/debian/po/hy.po
index 3d45cbd6..9521e9c7 100644
--- a/debian/po/hy.po
+++ b/debian/po/hy.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/ia.po b/debian/po/ia.po
index e296ed4b..f5c74dfd 100644
--- a/debian/po/ia.po
+++ b/debian/po/ia.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/id.po b/debian/po/id.po
index f3b5c342..be7ca443 100644
--- a/debian/po/id.po
+++ b/debian/po/id.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/is.po b/debian/po/is.po
index d7dc1e82..201293b2 100644
--- a/debian/po/is.po
+++ b/debian/po/is.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/it.po b/debian/po/it.po
index 7646b572..3ba671e3 100644
--- a/debian/po/it.po
+++ b/debian/po/it.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/ja.po b/debian/po/ja.po
index 21622dbc..070b4f6d 100644
--- a/debian/po/ja.po
+++ b/debian/po/ja.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/kk.po b/debian/po/kk.po
index dd4831e7..eed2b214 100644
--- a/debian/po/kk.po
+++ b/debian/po/kk.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/kl.po b/debian/po/kl.po
index f062aae2..8e4b90af 100644
--- a/debian/po/kl.po
+++ b/debian/po/kl.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/km.po b/debian/po/km.po
index 0290f642..aaa87fef 100644
--- a/debian/po/km.po
+++ b/debian/po/km.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/kn.po b/debian/po/kn.po
index 321f973e..aa4e8aaf 100644
--- a/debian/po/kn.po
+++ b/debian/po/kn.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/ko.po b/debian/po/ko.po
index 1b2b798c..9ecd974a 100644
--- a/debian/po/ko.po
+++ b/debian/po/ko.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/ku.po b/debian/po/ku.po
index a15c8fac..7584b2e0 100644
--- a/debian/po/ku.po
+++ b/debian/po/ku.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/lb.po b/debian/po/lb.po
index 560b8341..d69962d9 100644
--- a/debian/po/lb.po
+++ b/debian/po/lb.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/lt.po b/debian/po/lt.po
index b9077850..4faae6d3 100644
--- a/debian/po/lt.po
+++ b/debian/po/lt.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/lv.po b/debian/po/lv.po
index a5ab06b3..4702ba00 100644
--- a/debian/po/lv.po
+++ b/debian/po/lv.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/mhr.po b/debian/po/mhr.po
index 9ccca723..7aa0000f 100644
--- a/debian/po/mhr.po
+++ b/debian/po/mhr.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:25+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/mi.po b/debian/po/mi.po
index 103d53fe..ca4d7dfd 100644
--- a/debian/po/mi.po
+++ b/debian/po/mi.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/ml.po b/debian/po/ml.po
index 010a85b3..1c5b5d6a 100644
--- a/debian/po/ml.po
+++ b/debian/po/ml.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/mr.po b/debian/po/mr.po
index bf1e0912..f0be3099 100644
--- a/debian/po/mr.po
+++ b/debian/po/mr.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/ms.po b/debian/po/ms.po
index 6312dd20..1ac1759f 100644
--- a/debian/po/ms.po
+++ b/debian/po/ms.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/my.po b/debian/po/my.po
index 944bb7f8..3a3debd2 100644
--- a/debian/po/my.po
+++ b/debian/po/my.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/nb.po b/debian/po/nb.po
index a73b1203..f47e8a2a 100644
--- a/debian/po/nb.po
+++ b/debian/po/nb.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/nl.po b/debian/po/nl.po
index d873779d..a8ef677f 100644
--- a/debian/po/nl.po
+++ b/debian/po/nl.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/nn.po b/debian/po/nn.po
index e790bfb9..be820fbe 100644
--- a/debian/po/nn.po
+++ b/debian/po/nn.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/oc.po b/debian/po/oc.po
index badeaac1..0653e574 100644
--- a/debian/po/oc.po
+++ b/debian/po/oc.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/pa.po b/debian/po/pa.po
index 13b452b6..9b259d38 100644
--- a/debian/po/pa.po
+++ b/debian/po/pa.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/pl.po b/debian/po/pl.po
index b8e89a9f..98f58c7e 100644
--- a/debian/po/pl.po
+++ b/debian/po/pl.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/pt.po b/debian/po/pt.po
index d1869fb3..15e21075 100644
--- a/debian/po/pt.po
+++ b/debian/po/pt.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/pt_BR.po b/debian/po/pt_BR.po
index 0f89bb86..6433cfc8 100644
--- a/debian/po/pt_BR.po
+++ b/debian/po/pt_BR.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:25+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/ro.po b/debian/po/ro.po
index f7fd8118..4a40f527 100644
--- a/debian/po/ro.po
+++ b/debian/po/ro.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/ru.po b/debian/po/ru.po
index d692b1ea..a9ff6aad 100644
--- a/debian/po/ru.po
+++ b/debian/po/ru.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/sc.po b/debian/po/sc.po
index 4d3a85b4..853c86c3 100644
--- a/debian/po/sc.po
+++ b/debian/po/sc.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:25+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/sd.po b/debian/po/sd.po
index 8ed94234..9f07fcbe 100644
--- a/debian/po/sd.po
+++ b/debian/po/sd.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/shn.po b/debian/po/shn.po
index 94d249e9..69e3a9dc 100644
--- a/debian/po/shn.po
+++ b/debian/po/shn.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/si.po b/debian/po/si.po
index fada85db..8b8fbdb6 100644
--- a/debian/po/si.po
+++ b/debian/po/si.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/sk.po b/debian/po/sk.po
index 4e16b2be..470a55a5 100644
--- a/debian/po/sk.po
+++ b/debian/po/sk.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/sl.po b/debian/po/sl.po
index bfeeee7c..70860dd0 100644
--- a/debian/po/sl.po
+++ b/debian/po/sl.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/sq.po b/debian/po/sq.po
index 23d3d5f9..86d47a65 100644
--- a/debian/po/sq.po
+++ b/debian/po/sq.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/sr.po b/debian/po/sr.po
index 5af216fe..adec62d5 100644
--- a/debian/po/sr.po
+++ b/debian/po/sr.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:24+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
"Language: sr\n"
#. Type: select
diff --git a/debian/po/sv.po b/debian/po/sv.po
index 681878be..9d13accf 100644
--- a/debian/po/sv.po
+++ b/debian/po/sv.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:25+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/ta.po b/debian/po/ta.po
index 2d3286d1..9e2a094e 100644
--- a/debian/po/ta.po
+++ b/debian/po/ta.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:25+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/te.po b/debian/po/te.po
index 1829912e..27373db1 100644
--- a/debian/po/te.po
+++ b/debian/po/te.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:25+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/tg.po b/debian/po/tg.po
index b0d497b8..3354ebbc 100644
--- a/debian/po/tg.po
+++ b/debian/po/tg.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:25+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/th.po b/debian/po/th.po
index 065628d7..ca3161ab 100644
--- a/debian/po/th.po
+++ b/debian/po/th.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:25+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/tl.po b/debian/po/tl.po
index 9981de00..3b0fff82 100644
--- a/debian/po/tl.po
+++ b/debian/po/tl.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:25+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/tr.po b/debian/po/tr.po
index c8911c70..a7fb9f22 100644
--- a/debian/po/tr.po
+++ b/debian/po/tr.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:25+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/ug.po b/debian/po/ug.po
index 5224aa2b..3612470c 100644
--- a/debian/po/ug.po
+++ b/debian/po/ug.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:25+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/uk.po b/debian/po/uk.po
index d3be1a4e..7b7ecc34 100644
--- a/debian/po/uk.po
+++ b/debian/po/uk.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:25+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/ur.po b/debian/po/ur.po
index 5208615d..cf3c941f 100644
--- a/debian/po/ur.po
+++ b/debian/po/ur.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:25+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/uz.po b/debian/po/uz.po
index 9ce04ba8..08b71f8a 100644
--- a/debian/po/uz.po
+++ b/debian/po/uz.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:25+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/vi.po b/debian/po/vi.po
index 2fdfed6c..84cabd29 100644
--- a/debian/po/vi.po
+++ b/debian/po/vi.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:25+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/wae.po b/debian/po/wae.po
index 7d238654..4a53215a 100644
--- a/debian/po/wae.po
+++ b/debian/po/wae.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:25+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/zh_CN.po b/debian/po/zh_CN.po
index 2502d1a7..7a10fa26 100644
--- a/debian/po/zh_CN.po
+++ b/debian/po/zh_CN.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:25+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/zh_HK.po b/debian/po/zh_HK.po
index c7757aa2..1ad69526 100644
--- a/debian/po/zh_HK.po
+++ b/debian/po/zh_HK.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:25+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/po/zh_TW.po b/debian/po/zh_TW.po
index 4dcb12e1..026f0904 100644
--- a/debian/po/zh_TW.po
+++ b/debian/po/zh_TW.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2015-10-05 05:25+0000\n"
-"X-Generator: Launchpad (build 17783)\n"
+"X-Launchpad-Export-Date: 2015-10-18 05:17+0000\n"
+"X-Generator: Launchpad (build 17812)\n"
#. Type: select
#. Description
diff --git a/debian/rules b/debian/rules
index d4ee0c17..921ca716 100755
--- a/debian/rules
+++ b/debian/rules
@@ -27,6 +27,8 @@ override_dh_install:
# we do install pam through installpam and init through installinit
dh_install -X.a -X.la -Xpam.d -X'etc/init/lightdm.conf' --fail-missing
install -D debian/guest-account.sh debian/lightdm/usr/sbin/guest-account
+ install -D -m 755 debian/guest-session-setup.sh debian/lightdm/usr/share/lightdm/guest-session/setup.sh
+ install -D debian/guest-session.profile debian/lightdm/usr/share/lightdm/guest-session/skel/.profile
chmod +x debian/lightdm/usr/lib/lightdm/lightdm-greeter-session
chmod +x debian/lightdm/usr/lib/lightdm/guest-session-auto.sh
diff --git a/liblightdm-gobject/greeter.c b/liblightdm-gobject/greeter.c
index bcddf154..e507b654 100644
--- a/liblightdm-gobject/greeter.c
+++ b/liblightdm-gobject/greeter.c
@@ -1952,8 +1952,7 @@ request_finalize (GObject *object)
Request *request = REQUEST (object);
g_free (request->dir);
- if (request->cancellable)
- g_object_unref (request->cancellable);
+ g_clear_object (&request->cancellable);
G_OBJECT_CLASS (request_parent_class)->finalize (object);
}
diff --git a/src/accounts.c b/src/accounts.c
index d4d54a2e..77cfdf5e 100644
--- a/src/accounts.c
+++ b/src/accounts.c
@@ -122,17 +122,13 @@ user_init (User *user)
}
static void
-user_dispose (GObject *object)
+user_finalize (GObject *object)
{
- User *self;
+ User *self = USER (object);
- self = USER (object);
+ g_clear_object (&self->priv->common_user);
- if (self->priv->common_user)
- g_object_unref (self->priv->common_user);
- self->priv->common_user = NULL;
-
- G_OBJECT_CLASS (user_parent_class)->dispose (object);
+ G_OBJECT_CLASS (user_parent_class)->finalize (object);
}
static void
@@ -140,7 +136,7 @@ user_class_init (UserClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
- object_class->dispose = user_dispose;
+ object_class->finalize = user_finalize;
g_type_class_add_private (klass, sizeof (UserPrivate));
}
diff --git a/src/display-manager.c b/src/display-manager.c
index b683fdaa..af9f43a4 100644
--- a/src/display-manager.c
+++ b/src/display-manager.c
@@ -170,11 +170,9 @@ display_manager_init (DisplayManager *manager)
static void
display_manager_finalize (GObject *object)
{
- DisplayManager *self;
+ DisplayManager *self = DISPLAY_MANAGER (object);
GList *link;
- self = DISPLAY_MANAGER (object);
-
for (link = self->priv->seats; link; link = link->next)
{
Seat *seat = link->data;
diff --git a/src/display-server.c b/src/display-server.c
index 336a6eed..7821b6ab 100644
--- a/src/display-server.c
+++ b/src/display-server.c
@@ -154,9 +154,7 @@ display_server_init (DisplayServer *server)
static void
display_server_finalize (GObject *object)
{
- DisplayServer *self;
-
- self = DISPLAY_SERVER (object);
+ DisplayServer *self = DISPLAY_SERVER (object);
g_free (self->priv->name);
diff --git a/src/greeter.c b/src/greeter.c
index b9f4f55a..db52a43d 100644
--- a/src/greeter.c
+++ b/src/greeter.c
@@ -412,8 +412,7 @@ reset_session (Greeter *greeter)
{
g_signal_handlers_disconnect_matched (greeter->priv->authentication_session, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, greeter);
session_stop (greeter->priv->authentication_session);
- g_object_unref (greeter->priv->authentication_session);
- greeter->priv->authentication_session = NULL;
+ g_clear_object (&greeter->priv->authentication_session);
}
greeter->priv->guest_account_authenticated = FALSE;
@@ -1043,9 +1042,7 @@ greeter_init (Greeter *greeter)
static void
greeter_finalize (GObject *object)
{
- Greeter *self;
-
- self = GREETER (object);
+ Greeter *self = GREETER (object);
g_free (self->priv->pam_service);
g_free (self->priv->autologin_pam_service);
diff --git a/src/lightdm.c b/src/lightdm.c
index 72f7eb0c..d9ec9aff 100644
--- a/src/lightdm.c
+++ b/src/lightdm.c
@@ -1539,8 +1539,7 @@ main (int argc, char **argv)
common_user_list_cleanup ();
/* Clean up display manager */
- g_object_unref (display_manager);
- display_manager = NULL;
+ g_clear_object (&display_manager);
/* Remove D-Bus interface */
g_dbus_connection_unregister_object (bus, reg_id);
diff --git a/src/login1.c b/src/login1.c
index af8e8a8e..dc60a492 100644
--- a/src/login1.c
+++ b/src/login1.c
@@ -450,7 +450,7 @@ login1_service_finalize (GObject *object)
g_list_free_full (self->priv->seats, g_object_unref);
g_dbus_connection_signal_unsubscribe (self->priv->connection, self->priv->signal_id);
- g_object_unref (self->priv->connection);
+ g_clear_object (&self->priv->connection);
G_OBJECT_CLASS (login1_service_parent_class)->finalize (object);
}
diff --git a/src/mir-server.c b/src/mir-server.c
index 36e0e770..303f3d56 100644
--- a/src/mir-server.c
+++ b/src/mir-server.c
@@ -99,13 +99,11 @@ mir_server_init (MirServer *server)
static void
mir_server_finalize (GObject *object)
{
- MirServer *server;
-
- server = MIR_SERVER (object);
+ MirServer *self = MIR_SERVER (object);
- if (server->priv->vt > 0)
- vt_unref (server->priv->vt);
- g_free (server->priv->parent_socket);
+ if (self->priv->vt > 0)
+ vt_unref (self->priv->vt);
+ g_free (self->priv->parent_socket);
G_OBJECT_CLASS (mir_server_parent_class)->finalize (object);
}
diff --git a/src/process.c b/src/process.c
index 50c0a9b0..ebd12743 100644
--- a/src/process.c
+++ b/src/process.c
@@ -359,9 +359,7 @@ process_stopped (Process *process)
static void
process_finalize (GObject *object)
{
- Process *self;
-
- self = PROCESS (object);
+ Process *self = PROCESS (object);
if (self->priv->pid > 0)
g_hash_table_remove (processes, GINT_TO_POINTER (self->priv->pid));
diff --git a/src/seat-unity.c b/src/seat-unity.c
index 642be0aa..409c0a46 100644
--- a/src/seat-unity.c
+++ b/src/seat-unity.c
@@ -140,8 +140,7 @@ compositor_stopped_cb (UnitySystemCompositor *compositor, SeatUnity *seat)
{
l_debug (seat, "Compositor stopped");
- g_object_unref (seat->priv->compositor);
- seat->priv->compositor = NULL;
+ g_clear_object (&seat->priv->compositor);
if (seat_get_is_stopping (SEAT (seat)))
check_stopped (seat);
@@ -421,17 +420,14 @@ seat_unity_finalize (GObject *object)
{
SeatUnity *seat = SEAT_UNITY (object);
- if (seat->priv->compositor)
- g_object_unref (seat->priv->compositor);
+ g_clear_object (&seat->priv->compositor);
if (seat->priv->xdmcp_x_server)
{
g_signal_handlers_disconnect_matched (seat->priv->xdmcp_x_server, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, seat);
g_object_unref (seat->priv->xdmcp_x_server);
}
- if (seat->priv->active_session)
- g_object_unref (seat->priv->active_session);
- if (seat->priv->active_display_server)
- g_object_unref (seat->priv->active_display_server);
+ g_clear_object (&seat->priv->active_session);
+ g_clear_object (&seat->priv->active_display_server);
G_OBJECT_CLASS (seat_unity_parent_class)->finalize (object);
}
diff --git a/src/seat-xdmcp-session.c b/src/seat-xdmcp-session.c
index 7621a97b..41998279 100644
--- a/src/seat-xdmcp-session.c
+++ b/src/seat-xdmcp-session.c
@@ -60,11 +60,9 @@ seat_xdmcp_session_init (SeatXDMCPSession *seat)
static void
seat_xdmcp_session_finalize (GObject *object)
{
- SeatXDMCPSession *self;
+ SeatXDMCPSession *self = SEAT_XDMCP_SESSION (object);
- self = SEAT_XDMCP_SESSION (object);
-
- g_object_unref (self->priv->session);
+ g_clear_object (&self->priv->session);
G_OBJECT_CLASS (seat_xdmcp_session_parent_class)->finalize (object);
}
diff --git a/src/seat-xvnc.c b/src/seat-xvnc.c
index 00f5f693..93e0e13f 100644
--- a/src/seat-xvnc.c
+++ b/src/seat-xvnc.c
@@ -101,11 +101,9 @@ seat_xvnc_init (SeatXVNC *seat)
static void
seat_xdmcp_session_finalize (GObject *object)
{
- SeatXVNC *self;
+ SeatXVNC *self = SEAT_XVNC (object);
- self = SEAT_XVNC (object);
-
- g_object_unref (self->priv->connection);
+ g_clear_object (&self->priv->connection);
G_OBJECT_CLASS (seat_xvnc_parent_class)->finalize (object);
}
diff --git a/src/seat.c b/src/seat.c
index 33b73152..2e2afd0a 100644
--- a/src/seat.c
+++ b/src/seat.c
@@ -65,6 +65,9 @@ struct SeatPrivate
/* TRUE if stopped */
gboolean stopped;
+
+ /* The greeter to be started to replace the current one */
+ Greeter *replacement_greeter;
};
static void seat_logger_iface_init (LoggerInterface *iface);
@@ -244,14 +247,11 @@ seat_set_active_session (Seat *seat, Session *session)
}
/* Lock previous sessions */
- if (seat->priv->active_session)
- {
- if (session != seat->priv->active_session && !IS_GREETER (seat->priv->active_session))
- session_lock (seat->priv->active_session);
- g_object_unref (seat->priv->active_session);
- }
+ if (seat->priv->active_session && session != seat->priv->active_session && !IS_GREETER (seat->priv->active_session))
+ session_lock (seat->priv->active_session);
session_activate (session);
+ g_clear_object (&seat->priv->active_session);
seat->priv->active_session = g_object_ref (session);
}
@@ -297,8 +297,7 @@ void
seat_set_externally_activated_session (Seat *seat, Session *session)
{
g_return_if_fail (seat != NULL);
- if (seat->priv->active_session)
- g_object_unref (seat->priv->active_session);
+ g_clear_object (&seat->priv->active_session);
seat->priv->active_session = g_object_ref (session);
}
@@ -565,8 +564,7 @@ switch_to_greeter_from_failed_session (Seat *seat, Session *session)
}
else
{
- if (seat->priv->session_to_activate)
- g_object_unref (seat->priv->session_to_activate);
+ g_clear_object (&seat->priv->session_to_activate);
seat->priv->session_to_activate = g_object_ref (greeter_session);
if (can_share_display_server (seat, session_get_display_server (session)))
@@ -651,8 +649,7 @@ run_session (Seat *seat, Session *session)
if (session == seat->priv->session_to_activate)
{
seat_set_active_session (seat, session);
- g_object_unref (seat->priv->session_to_activate);
- seat->priv->session_to_activate = NULL;
+ g_clear_object (&seat->priv->session_to_activate);
}
else if (seat->priv->active_session)
{
@@ -696,8 +693,7 @@ greeter_active_username_changed_cb (Greeter *greeter, GParamSpec *pspec, Seat *s
session = find_user_session (seat, greeter_get_active_username (greeter), seat->priv->active_session);
- if (seat->priv->next_session)
- g_object_unref (seat->priv->next_session);
+ g_clear_object (&seat->priv->next_session);
seat->priv->next_session = session ? g_object_ref (session) : NULL;
SEAT_GET_CLASS (seat)->set_next_session (seat, session);
@@ -745,20 +741,11 @@ session_stopped_cb (Session *session, Seat *seat)
g_signal_handlers_disconnect_matched (session, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, seat);
seat->priv->sessions = g_list_remove (seat->priv->sessions, session);
if (session == seat->priv->active_session)
- {
- g_object_unref (seat->priv->active_session);
- seat->priv->active_session = NULL;
- }
+ g_clear_object (&seat->priv->active_session);
if (session == seat->priv->next_session)
- {
- g_object_unref (seat->priv->next_session);
- seat->priv->next_session = NULL;
- }
+ g_clear_object (&seat->priv->next_session);
if (session == seat->priv->session_to_activate)
- {
- g_object_unref (seat->priv->session_to_activate);
- seat->priv->session_to_activate = NULL;
- }
+ g_clear_object (&seat->priv->session_to_activate);
display_server = session_get_display_server (session);
if (!display_server)
@@ -779,10 +766,7 @@ session_stopped_cb (Session *session, Seat *seat)
/* We were waiting for this session, but it didn't start :( */
// FIXME: Start a greeter on this?
if (session == seat->priv->session_to_activate)
- {
- g_object_unref (seat->priv->session_to_activate);
- seat->priv->session_to_activate = NULL;
- }
+ g_clear_object (&seat->priv->session_to_activate);
if (seat->priv->stopping)
{
@@ -790,9 +774,28 @@ session_stopped_cb (Session *session, Seat *seat)
g_object_unref (session);
return;
}
+
+ /* If there is a pending replacement greeter, start it */
+ if (IS_GREETER (session) && seat->priv->replacement_greeter)
+ {
+ Greeter *replacement_greeter = seat->priv->replacement_greeter;
+ seat->priv->replacement_greeter = NULL;
+
+ if (session_get_is_authenticated (SESSION (replacement_greeter)))
+ {
+ l_debug (seat, "Greeter stopped, running session");
+ run_session (seat, SESSION (replacement_greeter));
+ }
+ else
+ {
+ l_debug (seat, "Greeter stopped, starting session authentication");
+ start_session (seat, SESSION (replacement_greeter));
+ }
+ g_object_unref (replacement_greeter);
+ }
/* If this is the greeter session then re-use this display server */
- if (IS_GREETER (session) &&
+ else if (IS_GREETER (session) &&
can_share_display_server (seat, display_server) &&
greeter_get_start_session (GREETER (session)))
{
@@ -1200,8 +1203,7 @@ greeter_start_session_cb (Greeter *greeter, SessionType type, const gchar *sessi
}
/* Switch to this session when it is ready */
- if (seat->priv->session_to_activate)
- g_object_unref (seat->priv->session_to_activate);
+ g_clear_object (&seat->priv->session_to_activate);
seat->priv->session_to_activate = g_object_ref (session);
/* Return to existing session if it is open */
@@ -1432,8 +1434,7 @@ seat_switch_to_greeter (Seat *seat)
if (!greeter_session)
return FALSE;
- if (seat->priv->session_to_activate)
- g_object_unref (seat->priv->session_to_activate);
+ g_clear_object (&seat->priv->session_to_activate);
seat->priv->session_to_activate = g_object_ref (greeter_session);
display_server = create_display_server (seat, SESSION (greeter_session));
@@ -1465,8 +1466,7 @@ switch_authentication_complete_cb (Session *session, Seat *seat)
else
{
l_debug (seat, "Session authenticated, starting display server");
- if (seat->priv->session_to_activate)
- g_object_unref (seat->priv->session_to_activate);
+ g_clear_object (&seat->priv->session_to_activate);
seat->priv->session_to_activate = g_object_ref (session);
display_server = create_display_server (seat, session);
session_set_display_server (session, display_server);
@@ -1504,8 +1504,7 @@ switch_authentication_complete_cb (Session *session, Seat *seat)
}
else
{
- if (seat->priv->session_to_activate)
- g_object_unref (seat->priv->session_to_activate);
+ g_clear_object (&seat->priv->session_to_activate);
seat->priv->session_to_activate = g_object_ref (greeter_session);
display_server = create_display_server (seat, SESSION (greeter_session));
@@ -1581,8 +1580,7 @@ seat_switch_to_guest (Seat *seat, const gchar *session_name)
display_server = create_display_server (seat, session);
- if (seat->priv->session_to_activate)
- g_object_unref (seat->priv->session_to_activate);
+ g_clear_object (&seat->priv->session_to_activate);
seat->priv->session_to_activate = g_object_ref (session);
session_set_pam_service (session, seat_get_string_property (seat, "pam-autologin-service"));
session_set_display_server (session, display_server);
@@ -1594,14 +1592,17 @@ gboolean
seat_lock (Seat *seat, const gchar *username)
{
Greeter *greeter_session;
- DisplayServer *display_server;
- gboolean existing = FALSE;
+ DisplayServer *display_server = NULL;
+ gboolean reset_existing = FALSE;
+ gboolean reuse_xserver = FALSE;
g_return_val_if_fail (seat != NULL, FALSE);
if (!seat_get_can_switch (seat))
return FALSE;
+ // FIXME: If already locked then don't bother...
+
l_debug (seat, "Locking");
/* Switch to greeter we can reuse */
@@ -1610,10 +1611,23 @@ seat_lock (Seat *seat, const gchar *username)
{
l_debug (seat, "Switching to existing greeter");
set_greeter_hints (seat, greeter_session);
- existing = TRUE;
+ reset_existing = TRUE;
}
else
{
+ /* If the existing greeter can't be reused, stop it and reuse its display server */
+ greeter_session = find_greeter_session (seat);
+ if (greeter_session)
+ {
+ display_server = session_get_display_server (SESSION (greeter_session));
+ if (!session_get_is_stopping (SESSION (greeter_session)))
+ {
+ l_debug (seat, "Stopping session");
+ session_stop (SESSION (greeter_session));
+ }
+ reuse_xserver = TRUE;
+ }
+
greeter_session = create_greeter_session (seat);
if (!greeter_session)
return FALSE;
@@ -1623,7 +1637,7 @@ seat_lock (Seat *seat, const gchar *username)
if (username)
greeter_set_hint (greeter_session, "select-user", username);
- if (existing)
+ if (reset_existing)
{
greeter_reset (greeter_session);
seat_set_active_session (seat, SESSION (greeter_session));
@@ -1631,14 +1645,21 @@ seat_lock (Seat *seat, const gchar *username)
}
else
{
- display_server = create_display_server (seat, SESSION (greeter_session));
+ if (!reuse_xserver)
+ display_server = create_display_server (seat, SESSION (greeter_session));
+ session_set_display_server (SESSION (greeter_session), display_server);
- if (seat->priv->session_to_activate)
- g_object_unref (seat->priv->session_to_activate);
+ g_clear_object (&seat->priv->session_to_activate);
seat->priv->session_to_activate = g_object_ref (greeter_session);
- session_set_display_server (SESSION (greeter_session), display_server);
- return display_server_start (display_server);
+ if (reuse_xserver)
+ {
+ g_clear_object (&seat->priv->replacement_greeter);
+ seat->priv->replacement_greeter = g_object_ref (greeter_session);
+ return TRUE;
+ }
+ else
+ return display_server_start (display_server);
}
}
@@ -1706,8 +1727,7 @@ seat_real_start (Seat *seat)
{
DisplayServer *display_server;
- if (seat->priv->session_to_activate)
- g_object_unref (seat->priv->session_to_activate);
+ g_clear_object (&seat->priv->session_to_activate);
seat->priv->session_to_activate = g_object_ref (session);
display_server = create_display_server (seat, session);
@@ -1736,8 +1756,7 @@ seat_real_start (Seat *seat)
return FALSE;
}
- if (seat->priv->session_to_activate)
- g_object_unref (seat->priv->session_to_activate);
+ g_clear_object (&seat->priv->session_to_activate);
seat->priv->session_to_activate = g_object_ref (greeter_session);
session = SESSION (greeter_session);
@@ -1852,11 +1871,9 @@ seat_init (Seat *seat)
static void
seat_finalize (GObject *object)
{
- Seat *self;
+ Seat *self = SEAT (object);
GList *link;
- self = SEAT (object);
-
g_free (self->priv->name);
g_hash_table_unref (self->priv->properties);
for (link = self->priv->display_servers; link; link = link->next)
@@ -1871,12 +1888,10 @@ seat_finalize (GObject *object)
g_signal_handlers_disconnect_matched (session, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, self);
}
g_list_free_full (self->priv->sessions, g_object_unref);
- if (self->priv->active_session)
- g_object_unref (self->priv->active_session);
- if (self->priv->next_session)
- g_object_unref (self->priv->next_session);
- if (self->priv->session_to_activate)
- g_object_unref (self->priv->session_to_activate);
+ g_clear_object (&self->priv->active_session);
+ g_clear_object (&self->priv->next_session);
+ g_clear_object (&self->priv->session_to_activate);
+ g_clear_object (&self->priv->replacement_greeter);
G_OBJECT_CLASS (seat_parent_class)->finalize (object);
}
diff --git a/src/session.c b/src/session.c
index e25a69a5..f7f4ac09 100644
--- a/src/session.c
+++ b/src/session.c
@@ -135,8 +135,7 @@ session_set_config (Session *session, SessionConfig *config)
{
g_return_if_fail (session != NULL);
- if (session->priv->config)
- g_object_unref (session->priv->config);
+ g_clear_object (&session->priv->config);
session->priv->config = g_object_ref (config);
}
@@ -246,11 +245,7 @@ void
session_set_x_authority (Session *session, XAuthority *authority, gboolean use_system_location)
{
g_return_if_fail (session != NULL);
- if (session->priv->x_authority)
- {
- g_object_unref (session->priv->x_authority);
- session->priv->x_authority = NULL;
- }
+ g_clear_object (&session->priv->x_authority);
if (authority)
session->priv->x_authority = g_object_ref (authority);
session->priv->x_authority_use_system_location = use_system_location;
@@ -484,9 +479,7 @@ from_child_cb (GIOChannel *source, GIOCondition condition, gpointer data)
{
g_free (session->priv->username);
session->priv->username = username;
- if (session->priv->user)
- g_object_unref (session->priv->user);
- session->priv->user = NULL;
+ g_clear_object (&session->priv->user);
}
else
g_free (username);
@@ -920,10 +913,8 @@ session_finalize (GObject *object)
Session *self = SESSION (object);
int i;
- if (self->priv->config)
- g_object_unref (self->priv->config);
- if (self->priv->display_server)
- g_object_unref (self->priv->display_server);
+ g_clear_object (&self->priv->config);
+ g_clear_object (&self->priv->display_server);
if (self->priv->pid)
kill (self->priv->pid, SIGKILL);
close (self->priv->to_child_input);
@@ -935,8 +926,7 @@ session_finalize (GObject *object)
if (self->priv->child_watch)
g_source_remove (self->priv->child_watch);
g_free (self->priv->username);
- if (self->priv->user)
- g_object_unref (self->priv->user);
+ g_clear_object (&self->priv->user);
g_free (self->priv->pam_service);
for (i = 0; i < self->priv->messages_length; i++)
g_free ((char *) self->priv->messages[i].msg);
@@ -945,8 +935,7 @@ session_finalize (GObject *object)
g_free (self->priv->log_filename);
g_free (self->priv->tty);
g_free (self->priv->xdisplay);
- if (self->priv->x_authority)
- g_object_unref (self->priv->x_authority);
+ g_clear_object (&self->priv->x_authority);
g_free (self->priv->remote_host_name);
g_free (self->priv->login1_session_id);
g_free (self->priv->console_kit_cookie);
diff --git a/src/shared-data-manager.c b/src/shared-data-manager.c
index 47f1c10d..fd7427e3 100644
--- a/src/shared-data-manager.c
+++ b/src/shared-data-manager.c
@@ -49,11 +49,7 @@ shared_data_manager_get_instance (void)
void
shared_data_manager_cleanup (void)
{
- if (singleton)
- {
- g_object_unref (singleton);
- singleton = NULL;
- }
+ g_clear_object (&singleton);
}
static void
@@ -245,22 +241,14 @@ shared_data_manager_init (SharedDataManager *manager)
}
static void
-shared_data_manager_dispose (GObject *object)
+shared_data_manager_finalize (GObject *object)
{
SharedDataManager *self = SHARED_DATA_MANAGER (object);
-
+
/* Should also cancel outstanding GIO operations, but whatever, let them do their thing. */
g_signal_handlers_disconnect_by_data (common_user_list_get_instance (), self);
- G_OBJECT_CLASS (shared_data_manager_parent_class)->dispose (object);
-}
-
-static void
-shared_data_manager_finalize (GObject *object)
-{
- SharedDataManager *self = SHARED_DATA_MANAGER (object);
-
if (self->priv->starting_dirs)
g_hash_table_destroy (self->priv->starting_dirs);
@@ -274,7 +262,6 @@ shared_data_manager_class_init (SharedDataManagerClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
- object_class->dispose = shared_data_manager_dispose;
object_class->finalize = shared_data_manager_finalize;
g_type_class_add_private (klass, sizeof (SharedDataManagerPrivate));
diff --git a/src/unity-system-compositor.c b/src/unity-system-compositor.c
index f4b74eb1..0b89d2c2 100644
--- a/src/unity-system-compositor.c
+++ b/src/unity-system-compositor.c
@@ -482,9 +482,7 @@ unity_system_compositor_init (UnitySystemCompositor *compositor)
static void
unity_system_compositor_finalize (GObject *object)
{
- UnitySystemCompositor *self;
-
- self = UNITY_SYSTEM_COMPOSITOR (object);
+ UnitySystemCompositor *self = UNITY_SYSTEM_COMPOSITOR (object);
if (self->priv->process)
{
diff --git a/src/vnc-server.c b/src/vnc-server.c
index d4e6e9d9..914a5ebd 100644
--- a/src/vnc-server.c
+++ b/src/vnc-server.c
@@ -179,15 +179,11 @@ vnc_server_init (VNCServer *server)
static void
vnc_server_finalize (GObject *object)
{
- VNCServer *self;
-
- self = VNC_SERVER (object);
+ VNCServer *self = VNC_SERVER (object);
g_free (self->priv->listen_address);
- if (self->priv->socket)
- g_object_unref (self->priv->socket);
- if (self->priv->socket6)
- g_object_unref (self->priv->socket6);
+ g_clear_object (&self->priv->socket);
+ g_clear_object (&self->priv->socket6);
G_OBJECT_CLASS (vnc_server_parent_class)->finalize (object);
}
diff --git a/src/wayland-session.c b/src/wayland-session.c
index 19a50aa5..639893ea 100644
--- a/src/wayland-session.c
+++ b/src/wayland-session.c
@@ -81,9 +81,7 @@ wayland_session_init (WaylandSession *session)
static void
wayland_session_finalize (GObject *object)
{
- WaylandSession *self;
-
- self = WAYLAND_SESSION (object);
+ WaylandSession *self = WAYLAND_SESSION (object);
if (self->priv->have_vt_ref)
vt_unref (self->priv->vt);
diff --git a/src/x-authority.c b/src/x-authority.c
index 25f66438..6e08d12e 100644
--- a/src/x-authority.c
+++ b/src/x-authority.c
@@ -372,9 +372,7 @@ x_authority_init (XAuthority *auth)
static void
x_authority_finalize (GObject *object)
{
- XAuthority *self;
-
- self = X_AUTHORITY (object);
+ XAuthority *self = X_AUTHORITY (object);
g_free (self->priv->address);
g_free (self->priv->number);
diff --git a/src/x-server-local.c b/src/x-server-local.c
index caff9b46..dcbfbc0a 100644
--- a/src/x-server-local.c
+++ b/src/x-server-local.c
@@ -74,8 +74,65 @@ struct XServerLocalPrivate
G_DEFINE_TYPE (XServerLocal, x_server_local, X_SERVER_TYPE);
+static gchar *version = NULL;
+static guint version_major = 0, version_minor = 0;
static GList *display_numbers = NULL;
+#define XORG_VERSION_PREFIX "X.Org X Server "
+
+static gchar *
+find_version (const gchar *line)
+{
+ if (!g_str_has_prefix (line, XORG_VERSION_PREFIX))
+ return NULL;
+
+ return g_strdup (line + strlen (XORG_VERSION_PREFIX));
+}
+
+const gchar *
+x_server_local_get_version (void)
+{
+ gchar *stderr_text;
+ gint exit_status;
+ gchar **tokens;
+ guint n_tokens;
+
+ if (version)
+ return version;
+
+ if (!g_spawn_command_line_sync ("X -version", NULL, &stderr_text, &exit_status, NULL))
+ return NULL;
+ if (exit_status == EXIT_SUCCESS)
+ {
+ gchar **lines;
+ int i;
+
+ lines = g_strsplit (stderr_text, "\n", -1);
+ for (i = 0; lines[i] && !version; i++)
+ version = find_version (lines[i]);
+ g_strfreev (lines);
+ }
+ g_free (stderr_text);
+
+ tokens = g_strsplit (version, ".", 3);
+ n_tokens = g_strv_length (tokens);
+ version_major = n_tokens > 0 ? atoi (tokens[0]) : 0;
+ version_minor = n_tokens > 1 ? atoi (tokens[1]) : 0;
+ g_strfreev (tokens);
+
+ return version;
+}
+
+gint
+x_server_local_version_compare (guint major, guint minor)
+{
+ x_server_local_get_version ();
+ if (major == version_major)
+ return version_minor - minor;
+ else
+ return version_major - major;
+}
+
static gboolean
display_number_in_use (guint display_number)
{
@@ -483,7 +540,12 @@ x_server_local_start (DisplayServer *display_server)
if (server->priv->xdmcp_key)
g_string_append_printf (command, " -cookie %s", server->priv->xdmcp_key);
}
- else if (!server->priv->allow_tcp)
+ else if (server->priv->allow_tcp)
+ {
+ if (x_server_local_version_compare (1, 17) >= 0)
+ g_string_append (command, " -listen tcp");
+ }
+ else
g_string_append (command, " -nolisten tcp");
if (server->priv->vt >= 0)
@@ -548,9 +610,7 @@ x_server_local_init (XServerLocal *server)
static void
x_server_local_finalize (GObject *object)
{
- XServerLocal *self;
-
- self = X_SERVER_LOCAL (object);
+ XServerLocal *self = X_SERVER_LOCAL (object);
if (self->priv->x_server_process)
{
diff --git a/src/x-server-local.h b/src/x-server-local.h
index 7ed5732c..e20a86cd 100644
--- a/src/x-server-local.h
+++ b/src/x-server-local.h
@@ -33,6 +33,10 @@ typedef struct
XServerClass parent_class;
} XServerLocalClass;
+const gchar *x_server_local_get_version (void);
+
+gint x_server_local_version_compare (guint major, guint minor);
+
guint x_server_local_get_unused_display_number (void);
void x_server_local_release_display_number (guint display_number);
diff --git a/src/x-server-xvnc.c b/src/x-server-xvnc.c
index a48290e5..aea28177 100644
--- a/src/x-server-xvnc.c
+++ b/src/x-server-xvnc.c
@@ -158,8 +158,7 @@ stopped_cb (Process *process, XServerXVNC *server)
{
l_debug (server, "Xvnc server stopped");
- g_object_unref (server->priv->x_server_process);
- server->priv->x_server_process = NULL;
+ g_clear_object (&server->priv->x_server_process);
x_server_local_release_display_number (x_server_get_display_number (X_SERVER (server)));
@@ -291,12 +290,9 @@ x_server_xvnc_init (XServerXVNC *server)
static void
x_server_xvnc_finalize (GObject *object)
{
- XServerXVNC *self;
+ XServerXVNC *self = X_SERVER_XVNC (object);
- self = X_SERVER_XVNC (object);
-
- if (self->priv->x_server_process)
- g_object_unref (self->priv->x_server_process);
+ g_clear_object (&self->priv->x_server_process);
g_free (self->priv->command);
g_free (self->priv->authority_file);
diff --git a/src/x-server.c b/src/x-server.c
index 10ba903a..d0260bef 100644
--- a/src/x-server.c
+++ b/src/x-server.c
@@ -90,12 +90,9 @@ x_server_set_authority (XServer *server, XAuthority *authority)
{
g_return_if_fail (server != NULL);
- if (server->priv->authority)
- g_object_unref (server->priv->authority);
+ g_clear_object (&server->priv->authority);
if (authority)
server->priv->authority = g_object_ref (authority);
- else
- server->priv->authority = NULL;
}
XAuthority *
@@ -204,14 +201,11 @@ x_server_init (XServer *server)
static void
x_server_finalize (GObject *object)
{
- XServer *self;
-
- self = X_SERVER (object);
+ XServer *self = X_SERVER (object);
g_free (self->priv->hostname);
g_free (self->priv->address);
- if (self->priv->authority)
- g_object_unref (self->priv->authority);
+ g_clear_object (&self->priv->authority);
if (self->priv->connection)
xcb_disconnect (self->priv->connection);
diff --git a/src/xdmcp-server.c b/src/xdmcp-server.c
index 197dbc11..4761b7b0 100644
--- a/src/xdmcp-server.c
+++ b/src/xdmcp-server.c
@@ -743,14 +743,10 @@ xdmcp_server_init (XDMCPServer *server)
static void
xdmcp_server_finalize (GObject *object)
{
- XDMCPServer *self;
+ XDMCPServer *self = XDMCP_SERVER (object);
- self = XDMCP_SERVER (object);
-
- if (self->priv->socket)
- g_object_unref (self->priv->socket);
- if (self->priv->socket6)
- g_object_unref (self->priv->socket6);
+ g_clear_object (&self->priv->socket);
+ g_clear_object (&self->priv->socket6);
g_free (self->priv->listen_address);
g_free (self->priv->hostname);
g_free (self->priv->status);
diff --git a/src/xdmcp-session.c b/src/xdmcp-session.c
index 71c5704d..bb78ac66 100644
--- a/src/xdmcp-session.c
+++ b/src/xdmcp-session.c
@@ -77,15 +77,11 @@ xdmcp_session_init (XDMCPSession *session)
static void
xdmcp_session_finalize (GObject *object)
{
- XDMCPSession *self;
-
- self = XDMCP_SESSION (object);
+ XDMCPSession *self = XDMCP_SESSION (object);
g_free (self->priv->manufacturer_display_id);
- if (self->priv->address)
- g_object_unref (self->priv->address);
- if (self->priv->authority)
- g_object_unref (self->priv->authority);
+ g_clear_object (&self->priv->address);
+ g_clear_object (&self->priv->authority);
g_free (self->priv->display_class);
G_OBJECT_CLASS (xdmcp_session_parent_class)->finalize (object);
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 11c97287..27b6b538 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -34,6 +34,9 @@ TESTS = \
test-autologin-new-authtok \
test-autologin-timeout-gobject \
test-autologin-guest-timeout-gobject \
+ test-xserver-config \
+ test-allow-tcp-xorg-1.16 \
+ test-allow-tcp-xorg-1.17 \
test-change-authentication \
test-restart-authentication \
test-cancel-authentication-gobject \
@@ -131,9 +134,11 @@ TESTS = \
test-dbus \
test-lock-seat \
test-lock-seat-after-vt-switch \
+ test-lock-seat-twice \
test-lock-seat-resettable \
test-lock-seat-return-session \
test-lock-session \
+ test-lock-session-twice \
test-lock-session-no-password \
test-lock-session-resettable \
test-lock-session-return-session \
@@ -166,7 +171,10 @@ TESTS = \
test-vnc-dimensions \
test-vnc-open-file-descriptors \
test-vnc-guest \
- test-xdmcp-client \
+ test-xremote-autologin \
+ test-xremote-login \
+ test-xdmcp-client-xorg-1.16 \
+ test-xdmcp-client-xorg-1.17 \
test-xdmcp-server-autologin \
test-xdmcp-server-login \
test-xdmcp-server-double-login \
@@ -367,6 +375,8 @@ EXTRA_DIST = \
scripts/additional-config-priority.conf \
scripts/additional-system-config.conf \
scripts/additional-system-config-priority.conf \
+ scripts/allow-tcp-xorg-1.16.conf \
+ scripts/allow-tcp-xorg-1.17.conf \
scripts/audit-autologin.conf \
scripts/autologin.conf \
scripts/autologin-guest.conf \
@@ -427,10 +437,12 @@ EXTRA_DIST = \
scripts/lock-seat-resettable.conf \
scripts/lock-seat-return-session.conf \
scripts/lock-seat-return-session-console-kit.conf \
+ scripts/lock-seat-twice.conf \
scripts/lock-session.conf \
scripts/lock-session-no-password.conf \
scripts/lock-session-resettable.conf \
scripts/lock-session-return-session.conf \
+ scripts/lock-session-twice.conf \
scripts/login.conf \
scripts/login-crash-authenticate.conf \
scripts/login-guest.conf \
@@ -580,12 +592,16 @@ EXTRA_DIST = \
scripts/xauthority.conf \
scripts/xdg-current-desktop.conf \
scripts/xdg-current-desktop-legacy.conf \
- scripts/xdmcp-client.conf \
+ scripts/xdmcp-client-xorg-1.16.conf \
+ scripts/xdmcp-client-xorg-1.17.conf \
scripts/xdmcp-server-autologin.conf \
scripts/xdmcp-server-double-login.conf \
scripts/xdmcp-server-guest.conf \
scripts/xdmcp-server-login.conf \
scripts/xdmcp-server-open-file-descriptors.conf \
+ scripts/xremote-autologin.conf \
+ scripts/xremote-login.conf \
+ scripts/xserver-config.conf \
scripts/xserver-fail-start.conf \
scripts/xserver-no-share.conf \
scripts/seatdefaults-still-supported.conf
diff --git a/tests/scripts/allow-tcp-xorg-1.16.conf b/tests/scripts/allow-tcp-xorg-1.16.conf
new file mode 100644
index 00000000..bd6341ae
--- /dev/null
+++ b/tests/scripts/allow-tcp-xorg-1.16.conf
@@ -0,0 +1,34 @@
+#
+# Check can enable TCP listening in X.Org < 1.17 (default is listening enabled)
+#
+
+[test-xserver-config]
+version=1.16.0
+
+[Seat:*]
+autologin-user=have-password1
+user-session=default
+xserver-allow-tcp=true
+
+#?*START-DAEMON
+#?RUNNER DAEMON-START
+
+# X server starts
+#?XSERVER-0 START VT=7 LISTEN-TCP SEAT=seat0
+
+# Daemon connects when X server is ready
+#?*XSERVER-0 INDICATE-READY
+#?XSERVER-0 INDICATE-READY
+#?XSERVER-0 ACCEPT-CONNECT
+
+# Session starts
+#?SESSION-X-0 START XDG_SEAT=seat0 XDG_VTNR=7 XDG_GREETER_DATA_DIR=.*/have-password1 XDG_SESSION_TYPE=x11 XDG_SESSION_DESKTOP=default USER=have-password1
+#?LOGIN1 ACTIVATE-SESSION SESSION=c0
+#?XSERVER-0 ACCEPT-CONNECT
+#?SESSION-X-0 CONNECT-XSERVER
+
+# Cleanup
+#?*STOP-DAEMON
+#?SESSION-X-0 TERMINATE SIGNAL=15
+#?XSERVER-0 TERMINATE SIGNAL=15
+#?RUNNER DAEMON-EXIT STATUS=0
diff --git a/tests/scripts/allow-tcp-xorg-1.17.conf b/tests/scripts/allow-tcp-xorg-1.17.conf
new file mode 100644
index 00000000..14b59151
--- /dev/null
+++ b/tests/scripts/allow-tcp-xorg-1.17.conf
@@ -0,0 +1,34 @@
+#
+# Check can enable TCP listening in X.Org >= 1.17 (default is listening disabled)
+#
+
+[test-xserver-config]
+version=1.17.0
+
+[Seat:*]
+autologin-user=have-password1
+user-session=default
+xserver-allow-tcp=true
+
+#?*START-DAEMON
+#?RUNNER DAEMON-START
+
+# X server starts
+#?XSERVER-0 START VT=7 LISTEN-TCP SEAT=seat0
+
+# Daemon connects when X server is ready
+#?*XSERVER-0 INDICATE-READY
+#?XSERVER-0 INDICATE-READY
+#?XSERVER-0 ACCEPT-CONNECT
+
+# Session starts
+#?SESSION-X-0 START XDG_SEAT=seat0 XDG_VTNR=7 XDG_GREETER_DATA_DIR=.*/have-password1 XDG_SESSION_TYPE=x11 XDG_SESSION_DESKTOP=default USER=have-password1
+#?LOGIN1 ACTIVATE-SESSION SESSION=c0
+#?XSERVER-0 ACCEPT-CONNECT
+#?SESSION-X-0 CONNECT-XSERVER
+
+# Cleanup
+#?*STOP-DAEMON
+#?SESSION-X-0 TERMINATE SIGNAL=15
+#?XSERVER-0 TERMINATE SIGNAL=15
+#?RUNNER DAEMON-EXIT STATUS=0
diff --git a/tests/scripts/lock-seat-after-vt-switch.conf b/tests/scripts/lock-seat-after-vt-switch.conf
index 4a20ea19..d9cb9ccb 100644
--- a/tests/scripts/lock-seat-after-vt-switch.conf
+++ b/tests/scripts/lock-seat-after-vt-switch.conf
@@ -61,21 +61,19 @@ user-session=default
# Lock the seat again
#?*SESSION-X-0 LOCK-SEAT
#?SESSION-X-0 LOCK-SEAT
-
-# New X server starts (this is a "bug")
-#?XSERVER-2 START VT=9 SEAT=seat0
-#?*XSERVER-2 INDICATE-READY
-#?XSERVER-2 INDICATE-READY
-#?XSERVER-2 ACCEPT-CONNECT
-
-# Session is locked
#?LOGIN1 LOCK-SESSION SESSION=c0
-# Session is switched to greeter
-#?LOGIN1 ACTIVATE-SESSION SESSION=c1
+# Old greeter is stopped
+#?GREETER-X-1 TERMINATE SIGNAL=15
-# The unnecessary X server is killed
-#?XSERVER-2 TERMINATE SIGNAL=15
+# A new greeter is started and activated on the same X server
+#?LOGIN1 ACTIVATE-SESSION SESSION=c2
+#?GREETER-X-1 START XDG_SEAT=seat0 XDG_VTNR=8 XDG_SESSION_CLASS=greeter
+#?XSERVER-1 ACCEPT-CONNECT
+#?GREETER-X-1 CONNECT-XSERVER
+#?GREETER-X-1 CONNECT-TO-DAEMON
+#?GREETER-X-1 CONNECTED-TO-DAEMON
+#?GREETER-X-1 LOCK-HINT
# Cleanup
#?*STOP-DAEMON
diff --git a/tests/scripts/lock-seat-twice.conf b/tests/scripts/lock-seat-twice.conf
new file mode 100644
index 00000000..c8d6dc8e
--- /dev/null
+++ b/tests/scripts/lock-seat-twice.conf
@@ -0,0 +1,75 @@
+#
+# Check locking a seat twice doesn't spawn two greeters
+#
+
+[SeatDefaults]
+autologin-user=have-password1
+user-session=default
+
+#?*START-DAEMON
+#?RUNNER DAEMON-START
+
+# X server starts
+#?XSERVER-0 START VT=7 SEAT=seat0
+
+# Daemon connects when X server is ready
+#?*XSERVER-0 INDICATE-READY
+#?XSERVER-0 INDICATE-READY
+#?XSERVER-0 ACCEPT-CONNECT
+
+# Session starts
+#?SESSION-X-0 START XDG_SEAT=seat0 XDG_VTNR=7 XDG_GREETER_DATA_DIR=.*/have-password1 XDG_SESSION_TYPE=x11 XDG_SESSION_DESKTOP=default USER=have-password1
+#?LOGIN1 ACTIVATE-SESSION SESSION=c0
+#?XSERVER-0 ACCEPT-CONNECT
+#?SESSION-X-0 CONNECT-XSERVER
+
+# Lock the seat
+#?*SESSION-X-0 LOCK-SEAT
+#?SESSION-X-0 LOCK-SEAT
+
+# New X server starts
+#?XSERVER-1 START VT=8 SEAT=seat0
+
+# Daemon connects when X server is ready
+#?*XSERVER-1 INDICATE-READY
+#?XSERVER-1 INDICATE-READY
+#?XSERVER-1 ACCEPT-CONNECT
+
+# Session is locked
+#?LOGIN1 LOCK-SESSION SESSION=c0
+
+# Greeter starts
+#?GREETER-X-1 START XDG_SEAT=seat0 XDG_VTNR=8 XDG_SESSION_CLASS=greeter
+#?XSERVER-1 ACCEPT-CONNECT
+#?GREETER-X-1 CONNECT-XSERVER
+#?GREETER-X-1 CONNECT-TO-DAEMON
+#?GREETER-X-1 CONNECTED-TO-DAEMON
+#?GREETER-X-1 LOCK-HINT
+
+# Switch to greeter
+#?LOGIN1 ACTIVATE-SESSION SESSION=c1
+#?VT ACTIVATE VT=8
+
+# Lock the seat again
+#?*SESSION-X-0 LOCK-SEAT
+#?SESSION-X-0 LOCK-SEAT
+
+# Old greeter is stopped
+#?GREETER-X-1 TERMINATE SIGNAL=15
+
+# A new greeter is started and activated on the same X server
+#?LOGIN1 ACTIVATE-SESSION SESSION=c2
+#?GREETER-X-1 START XDG_SEAT=seat0 XDG_VTNR=8 XDG_SESSION_CLASS=greeter
+#?XSERVER-1 ACCEPT-CONNECT
+#?GREETER-X-1 CONNECT-XSERVER
+#?GREETER-X-1 CONNECT-TO-DAEMON
+#?GREETER-X-1 CONNECTED-TO-DAEMON
+#?GREETER-X-1 LOCK-HINT
+
+# Cleanup
+#?*STOP-DAEMON
+#?SESSION-X-0 TERMINATE SIGNAL=15
+#?XSERVER-0 TERMINATE SIGNAL=15
+#?GREETER-X-1 TERMINATE SIGNAL=15
+#?XSERVER-1 TERMINATE SIGNAL=15
+#?RUNNER DAEMON-EXIT STATUS=0
diff --git a/tests/scripts/lock-session-twice.conf b/tests/scripts/lock-session-twice.conf
new file mode 100644
index 00000000..e7f20c3d
--- /dev/null
+++ b/tests/scripts/lock-session-twice.conf
@@ -0,0 +1,77 @@
+#
+# Check locking a session twice doesn't spawn two greeters
+#
+
+[SeatDefaults]
+autologin-user=have-password1
+user-session=default
+
+#?*START-DAEMON
+#?RUNNER DAEMON-START
+
+# X server starts
+#?XSERVER-0 START VT=7 SEAT=seat0
+
+# Daemon connects when X server is ready
+#?*XSERVER-0 INDICATE-READY
+#?XSERVER-0 INDICATE-READY
+#?XSERVER-0 ACCEPT-CONNECT
+
+# Session starts
+#?SESSION-X-0 START XDG_SEAT=seat0 XDG_VTNR=7 XDG_GREETER_DATA_DIR=.*/have-password1 XDG_SESSION_TYPE=x11 XDG_SESSION_DESKTOP=default USER=have-password1
+#?LOGIN1 ACTIVATE-SESSION SESSION=c0
+#?XSERVER-0 ACCEPT-CONNECT
+#?SESSION-X-0 CONNECT-XSERVER
+
+# Lock the session
+#?*SESSION-X-0 LOCK-SESSION
+#?SESSION-X-0 LOCK-SESSION
+
+# New X server starts
+#?XSERVER-1 START VT=8 SEAT=seat0
+
+# Daemon connects when X server is ready
+#?*XSERVER-1 INDICATE-READY
+#?XSERVER-1 INDICATE-READY
+#?XSERVER-1 ACCEPT-CONNECT
+
+# Session is locked
+#?LOGIN1 LOCK-SESSION SESSION=c0
+
+# Greeter starts with session user selected
+#?GREETER-X-1 START XDG_SEAT=seat0 XDG_VTNR=8 XDG_SESSION_CLASS=greeter
+#?XSERVER-1 ACCEPT-CONNECT
+#?GREETER-X-1 CONNECT-XSERVER
+#?GREETER-X-1 CONNECT-TO-DAEMON
+#?GREETER-X-1 CONNECTED-TO-DAEMON
+#?GREETER-X-1 SELECT-USER-HINT USERNAME=have-password1
+#?GREETER-X-1 LOCK-HINT
+
+# Switch to greeter
+#?LOGIN1 ACTIVATE-SESSION SESSION=c1
+#?VT ACTIVATE VT=8
+
+# Lock the session again
+#?*SESSION-X-0 LOCK-SESSION
+#?SESSION-X-0 LOCK-SESSION
+
+# Old greeter is stopped
+#?GREETER-X-1 TERMINATE SIGNAL=15
+#?LOGIN1 ACTIVATE-SESSION SESSION=c2
+
+# A new greeter is started and activated on the same X server
+#?GREETER-X-1 START XDG_SEAT=seat0 XDG_VTNR=8 XDG_SESSION_CLASS=greeter
+#?XSERVER-1 ACCEPT-CONNECT
+#?GREETER-X-1 CONNECT-XSERVER
+#?GREETER-X-1 CONNECT-TO-DAEMON
+#?GREETER-X-1 CONNECTED-TO-DAEMON
+#?GREETER-X-1 SELECT-USER-HINT USERNAME=have-password1
+#?GREETER-X-1 LOCK-HINT
+
+# Cleanup
+#?*STOP-DAEMON
+#?SESSION-X-0 TERMINATE SIGNAL=15
+#?XSERVER-0 TERMINATE SIGNAL=15
+#?GREETER-X-1 TERMINATE SIGNAL=15
+#?XSERVER-1 TERMINATE SIGNAL=15
+#?RUNNER DAEMON-EXIT STATUS=0
diff --git a/tests/scripts/login-remote-session.conf b/tests/scripts/login-remote-session.conf
index d1e248b1..303eb6db 100644
--- a/tests/scripts/login-remote-session.conf
+++ b/tests/scripts/login-remote-session.conf
@@ -1,5 +1,5 @@
#
-# Check can login without a username, and is prompted for one
+# Check can remotely authenticate for a session
#
#?*START-DAEMON
diff --git a/tests/scripts/xdmcp-client.conf b/tests/scripts/xdmcp-client-xorg-1.16.conf
index b24860a9..c41cb13e 100644
--- a/tests/scripts/xdmcp-client.conf
+++ b/tests/scripts/xdmcp-client-xorg-1.16.conf
@@ -1,7 +1,10 @@
#
-# Check can run a local XDMCP client
+# Check can run a local XDMCP client in X.Org < 1.17 (default is listening enabled)
#
+[test-xserver-config]
+version=1.16.0
+
[Seat:*]
xdmcp-manager=127.0.0.1
@@ -9,7 +12,7 @@ xdmcp-manager=127.0.0.1
#?RUNNER DAEMON-START
# X server starts
-#?XSERVER-0 START VT=7 SEAT=seat0
+#?XSERVER-0 START VT=7 LISTEN-TCP SEAT=seat0
#?*XSERVER-0 INDICATE-READY
#?XSERVER-0 INDICATE-READY
#?XSERVER-0 ACCEPT-CONNECT
diff --git a/tests/scripts/xdmcp-client-xorg-1.17.conf b/tests/scripts/xdmcp-client-xorg-1.17.conf
new file mode 100644
index 00000000..584004e6
--- /dev/null
+++ b/tests/scripts/xdmcp-client-xorg-1.17.conf
@@ -0,0 +1,30 @@
+#
+# Check can run a local XDMCP client in X.Org >= 1.17 (default is listening disabled)
+#
+
+[test-xserver-config]
+version=1.17.0
+
+[Seat:*]
+xdmcp-manager=127.0.0.1
+
+#?*START-DAEMON
+#?RUNNER DAEMON-START
+
+# X server starts
+#?XSERVER-0 START VT=7 LISTEN-TCP SEAT=seat0
+#?*XSERVER-0 INDICATE-READY
+#?XSERVER-0 INDICATE-READY
+#?XSERVER-0 ACCEPT-CONNECT
+
+# Starts sending XDMCP queries
+#?*XSERVER-0 START-XDMCP
+#?XSERVER-0 SEND-QUERY
+
+# Wait to check a greeter is not started
+#?*WAIT
+
+# Cleanup
+#?*STOP-DAEMON
+#?XSERVER-0 TERMINATE SIGNAL=15
+#?RUNNER DAEMON-EXIT STATUS=0
diff --git a/tests/scripts/xdmcp-server-autologin.conf b/tests/scripts/xdmcp-server-autologin.conf
index dd7a9502..92a45f1d 100644
--- a/tests/scripts/xdmcp-server-autologin.conf
+++ b/tests/scripts/xdmcp-server-autologin.conf
@@ -18,7 +18,7 @@ autologin-user=have-password1
# Start a remote X server to log in with XDMCP
#?*START-XSERVER ARGS=":98 -query 127.0.0.1 -nolisten unix"
-#?XSERVER-98 START
+#?XSERVER-98 START LISTEN-TCP NO-LISTEN-UNIX
# Start sending XDMCP queries
#?*XSERVER-98 START-XDMCP
diff --git a/tests/scripts/xdmcp-server-double-login.conf b/tests/scripts/xdmcp-server-double-login.conf
index 552f4be7..bc3acdbe 100644
--- a/tests/scripts/xdmcp-server-double-login.conf
+++ b/tests/scripts/xdmcp-server-double-login.conf
@@ -17,7 +17,7 @@ user-session=default
# Start a remote X server to log in with XDMCP
#?*START-XSERVER ARGS=":98 -query 127.0.0.1 -nolisten unix"
-#?XSERVER-98 START
+#?XSERVER-98 START LISTEN-TCP NO-LISTEN-UNIX
# Start sending XDMCP queries
#?*XSERVER-98 START-XDMCP
@@ -56,7 +56,7 @@ user-session=default
# Start a second remote X server to log in with XDMCP
#?*START-XSERVER ARGS=":99 -query 127.0.0.1 -nolisten unix"
-#?XSERVER-99 START
+#?XSERVER-99 START LISTEN-TCP NO-LISTEN-UNIX
# Start sending XDMCP queries
#?*XSERVER-99 START-XDMCP
diff --git a/tests/scripts/xdmcp-server-guest.conf b/tests/scripts/xdmcp-server-guest.conf
index 1fb8869f..6f5301de 100644
--- a/tests/scripts/xdmcp-server-guest.conf
+++ b/tests/scripts/xdmcp-server-guest.conf
@@ -17,7 +17,7 @@ user-session=default
# Start a remote X server to log in with XDMCP
#?*START-XSERVER ARGS=":98 -query 127.0.0.1 -nolisten unix"
-#?XSERVER-98 START
+#?XSERVER-98 START LISTEN-TCP NO-LISTEN-UNIX
# Start sending XDMCP queries
#?*XSERVER-98 START-XDMCP
diff --git a/tests/scripts/xdmcp-server-login.conf b/tests/scripts/xdmcp-server-login.conf
index c73f855d..fb3f8090 100644
--- a/tests/scripts/xdmcp-server-login.conf
+++ b/tests/scripts/xdmcp-server-login.conf
@@ -17,7 +17,7 @@ user-session=default
# Start a remote X server to log in with XDMCP
#?*START-XSERVER ARGS=":98 -query 127.0.0.1 -nolisten unix"
-#?XSERVER-98 START
+#?XSERVER-98 START LISTEN-TCP NO-LISTEN-UNIX
# Start sending XDMCP queries
#?*XSERVER-98 START-XDMCP
diff --git a/tests/scripts/xdmcp-server-open-file-descriptors.conf b/tests/scripts/xdmcp-server-open-file-descriptors.conf
index 28719e7c..c0c89f4a 100644
--- a/tests/scripts/xdmcp-server-open-file-descriptors.conf
+++ b/tests/scripts/xdmcp-server-open-file-descriptors.conf
@@ -17,7 +17,7 @@ user-session=default
# Start a remote X server to log in with XDMCP
#?*START-XSERVER ARGS=":98 -query 127.0.0.1 -nolisten unix"
-#?XSERVER-98 START
+#?XSERVER-98 START LISTEN-TCP NO-LISTEN-UNIX
# Start sending XDMCP queries
#?*XSERVER-98 START-XDMCP
diff --git a/tests/scripts/xremote-autologin.conf b/tests/scripts/xremote-autologin.conf
new file mode 100644
index 00000000..251a418c
--- /dev/null
+++ b/tests/scripts/xremote-autologin.conf
@@ -0,0 +1,30 @@
+#
+# Check can automatically log into a remote X server
+#
+
+[Seat:*]
+type=xremote
+autologin-user=have-password1
+user-session=default
+xserver-display-number=98
+
+# Start a remote X server to use
+#?*START-XSERVER ARGS=":98"
+#?XSERVER-98 START LISTEN-TCP
+
+#?*START-DAEMON
+#?RUNNER DAEMON-START
+
+# LightDM connects to X server
+#?XSERVER-98 ACCEPT-CONNECT
+
+# Session starts
+#?SESSION-X-127.0.0.1:98 START XDG_SEAT=seat0 XDG_SESSION_TYPE=x11 XDG_SESSION_DESKTOP=default USER=have-password1
+#?LOGIN1 ACTIVATE-SESSION SESSION=c0
+#?XSERVER-98 ACCEPT-CONNECT
+#?SESSION-X-127.0.0.1:98 CONNECT-XSERVER
+
+# Cleanup
+#?*STOP-DAEMON
+#?SESSION-X-127.0.0.1:98 TERMINATE SIGNAL=15
+#?RUNNER DAEMON-EXIT STATUS=0
diff --git a/tests/scripts/xremote-login.conf b/tests/scripts/xremote-login.conf
new file mode 100644
index 00000000..bdc81a91
--- /dev/null
+++ b/tests/scripts/xremote-login.conf
@@ -0,0 +1,45 @@
+#
+# Check can log into a remote X server
+#
+
+[Seat:*]
+type=xremote
+user-session=default
+xserver-display-number=98
+
+# Start a remote X server to use
+#?*START-XSERVER ARGS=":98"
+#?XSERVER-98 START LISTEN-TCP
+
+#?*START-DAEMON
+#?RUNNER DAEMON-START
+
+# LightDM connects to X server
+#?XSERVER-98 ACCEPT-CONNECT
+
+# Greeter starts
+#?GREETER-X-127.0.0.1:98 START XDG_SEAT=seat0 XDG_SESSION_CLASS=greeter
+#?LOGIN1 ACTIVATE-SESSION SESSION=c0
+#?XSERVER-98 ACCEPT-CONNECT
+#?GREETER-X-127.0.0.1:98 CONNECT-XSERVER
+#?GREETER-X-127.0.0.1:98 CONNECT-TO-DAEMON
+#?GREETER-X-127.0.0.1:98 CONNECTED-TO-DAEMON
+
+# Log into account with a password
+#?*GREETER-X-127.0.0.1:98 AUTHENTICATE USERNAME=have-password1
+#?GREETER-X-127.0.0.1:98 SHOW-PROMPT TEXT="Password:"
+#?*GREETER-X-127.0.0.1:98 RESPOND TEXT="password"
+#?GREETER-X-127.0.0.1:98 AUTHENTICATION-COMPLETE USERNAME=have-password1 AUTHENTICATED=TRUE
+#?*GREETER-X-127.0.0.1:98 START-SESSION
+#?GREETER-X-127.0.0.1:98 TERMINATE SIGNAL=15
+
+# Session starts
+#?SESSION-X-127.0.0.1:98 START XDG_SEAT=seat0 XDG_SESSION_TYPE=x11 XDG_SESSION_DESKTOP=default USER=have-password1
+#?LOGIN1 ACTIVATE-SESSION SESSION=c1
+#?XSERVER-98 ACCEPT-CONNECT
+#?SESSION-X-127.0.0.1:98 CONNECT-XSERVER
+
+# Cleanup
+#?*STOP-DAEMON
+#?SESSION-X-127.0.0.1:98 TERMINATE SIGNAL=15
+#?RUNNER DAEMON-EXIT STATUS=0
diff --git a/tests/scripts/xserver-config.conf b/tests/scripts/xserver-config.conf
new file mode 100644
index 00000000..673a011f
--- /dev/null
+++ b/tests/scripts/xserver-config.conf
@@ -0,0 +1,32 @@
+#
+# Check can set X server configuration
+#
+
+[Seat:*]
+autologin-user=have-password1
+user-session=default
+xserver-config=custom.conf
+xserver-layout=custom
+
+#?*START-DAEMON
+#?RUNNER DAEMON-START
+
+# X server starts
+#?XSERVER-0 START CONFIG=custom.conf LAYOUT=custom VT=7 SEAT=seat0
+
+# Daemon connects when X server is ready
+#?*XSERVER-0 INDICATE-READY
+#?XSERVER-0 INDICATE-READY
+#?XSERVER-0 ACCEPT-CONNECT
+
+# Session starts
+#?SESSION-X-0 START XDG_SEAT=seat0 XDG_VTNR=7 XDG_GREETER_DATA_DIR=.*/have-password1 XDG_SESSION_TYPE=x11 XDG_SESSION_DESKTOP=default USER=have-password1
+#?LOGIN1 ACTIVATE-SESSION SESSION=c0
+#?XSERVER-0 ACCEPT-CONNECT
+#?SESSION-X-0 CONNECT-XSERVER
+
+# Cleanup
+#?*STOP-DAEMON
+#?SESSION-X-0 TERMINATE SIGNAL=15
+#?XSERVER-0 TERMINATE SIGNAL=15
+#?RUNNER DAEMON-EXIT STATUS=0
diff --git a/tests/src/X.c b/tests/src/X.c
index c8865af9..cd4511b8 100644
--- a/tests/src/X.c
+++ b/tests/src/X.c
@@ -18,9 +18,25 @@ static int exit_status = EXIT_SUCCESS;
static GKeyFile *config;
+/* Version to pretend to be */
+static gchar *xorg_version;
+static gint xorg_version_major, xorg_version_minor;
+
/* Path to lock file */
static gchar *lock_path = NULL;
+/* TRUE if we allow TCP connections */
+static gboolean listen_tcp = TRUE;
+
+/* TRUE if we allow Unix connections */
+static gboolean listen_unix = TRUE;
+
+/* Configuration to use */
+static gchar *config_file = NULL;
+
+/* Configuration layout to use */
+static gchar *layout = NULL;
+
/* Path to authority database to use */
static gchar *auth_path = NULL;
@@ -194,10 +210,20 @@ request_cb (const gchar *name, GHashTable *params)
}
}
+static int
+version_compare (int major, int minor)
+{
+ if (major == xorg_version_major)
+ return xorg_version_minor - minor;
+ else
+ return xorg_version_major - major;
+}
+
int
main (int argc, char **argv)
{
int i;
+ gchar **tokens;
char *pid_string;
gboolean do_xdmcp = FALSE;
guint xdmcp_port = 0;
@@ -218,6 +244,20 @@ main (int argc, char **argv)
g_unix_signal_add (SIGTERM, sigterm_cb, NULL);
g_unix_signal_add (SIGHUP, sighup_cb, NULL);
+ config = g_key_file_new ();
+ g_key_file_load_from_file (config, g_build_filename (g_getenv ("LIGHTDM_TEST_ROOT"), "script", NULL), G_KEY_FILE_NONE, NULL);
+
+ xorg_version = g_key_file_get_string (config, "test-xserver-config", "version", NULL);
+ if (!xorg_version)
+ xorg_version = g_strdup ("1.16.0");
+ tokens = g_strsplit (xorg_version, ".", -1);
+ xorg_version_major = g_strv_length (tokens) > 0 ? atoi (tokens[0]) : 0;
+ xorg_version_minor = g_strv_length (tokens) > 1 ? atoi (tokens[1]) : 0;
+ g_strfreev (tokens);
+
+ /* TCP listening default changed in 1.17.0 */
+ listen_tcp = version_compare (1, 17) < 0;
+
for (i = 1; i < argc; i++)
{
char *arg = argv[i];
@@ -226,19 +266,38 @@ main (int argc, char **argv)
{
display_number = atoi (arg + 1);
}
+ else if (strcmp (arg, "-config") == 0)
+ {
+ config_file = argv[i+1];
+ i++;
+ }
+ else if (strcmp (arg, "-layout") == 0)
+ {
+ layout = argv[i+1];
+ i++;
+ }
else if (strcmp (arg, "-auth") == 0)
{
auth_path = argv[i+1];
i++;
}
+ else if (strcmp (arg, "-listen") == 0 && version_compare (1, 17) >= 0)
+ {
+ char *protocol = argv[i+1];
+ i++;
+ if (strcmp (protocol, "tcp") == 0)
+ listen_tcp = TRUE;
+ else if (strcmp (protocol, "unix") == 0)
+ listen_unix = TRUE;
+ }
else if (strcmp (arg, "-nolisten") == 0)
{
char *protocol = argv[i+1];
i++;
if (strcmp (protocol, "tcp") == 0)
- ;//listen_tcp = FALSE;
+ listen_tcp = FALSE;
else if (strcmp (protocol, "unix") == 0)
- ;//listen_unix = FALSE;
+ listen_unix = FALSE;
}
else if (strcmp (arg, "-nr") == 0)
{
@@ -257,11 +316,13 @@ main (int argc, char **argv)
{
do_xdmcp = TRUE;
xdmcp_host = argv[i+1];
+ listen_tcp = TRUE;
i++;
}
else if (strcmp (arg, "-broadcast") == 0)
{
do_xdmcp = TRUE;
+ listen_tcp = TRUE;
}
else if (g_str_has_prefix (arg, "vt"))
{
@@ -286,12 +347,20 @@ main (int argc, char **argv)
/* FIXME */
i++;
}
+ else if (strcmp (arg, "-version") == 0)
+ {
+ fprintf (stderr, "\nX.Org X Server %s\nBlah blah blah\n", xorg_version);
+ return EXIT_SUCCESS;
+ }
else
{
g_printerr ("Unrecognized option: %s\n"
"Use: %s [:<display>] [option]\n"
+ "-config file Specify a configuration file\n"
+ "-layout name Specify the ServerLayout section name\n"
"-auth file Select authorization file\n"
"-nolisten protocol Don't listen on protocol\n"
+ "-listen protocol Listen on protocol\n"
"-background [none] Create root window with no background\n"
"-nr (Ubuntu-specific) Synonym for -background none\n"
"-query host-name Contact named host for XDMCP\n"
@@ -300,6 +369,7 @@ main (int argc, char **argv)
"-seat string seat to run on\n"
"-mir id Mir ID to use\n"
"-mirSocket name Mir socket to use\n"
+ "-version show the server version\n"
"vtxx Use virtual terminal xx instead of the next available\n",
arg, argv[0]);
return EXIT_FAILURE;
@@ -316,8 +386,16 @@ main (int argc, char **argv)
status_text = g_string_new ("");
g_string_printf (status_text, "%s START", id);
+ if (config_file)
+ g_string_append_printf (status_text, " CONFIG=%s", config_file);
+ if (layout)
+ g_string_append_printf (status_text, " LAYOUT=%s", layout);
if (vt_number >= 0)
g_string_append_printf (status_text, " VT=%d", vt_number);
+ if (listen_tcp)
+ g_string_append (status_text, " LISTEN-TCP");
+ if (!listen_unix)
+ g_string_append (status_text, " NO-LISTEN-UNIX");
if (seat != NULL)
g_string_append_printf (status_text, " SEAT=%s", seat);
if (mir_id != NULL)
@@ -325,9 +403,6 @@ main (int argc, char **argv)
status_notify ("%s", status_text->str);
g_string_free (status_text, TRUE);
- config = g_key_file_new ();
- g_key_file_load_from_file (config, g_build_filename (g_getenv ("LIGHTDM_TEST_ROOT"), "script", NULL), G_KEY_FILE_NONE, NULL);
-
if (g_key_file_has_key (config, "test-xserver-config", "return-value", NULL))
{
int return_value = g_key_file_get_integer (config, "test-xserver-config", "return-value", NULL);
diff --git a/tests/test-allow-tcp-xorg-1.16 b/tests/test-allow-tcp-xorg-1.16
new file mode 100755
index 00000000..08c07744
--- /dev/null
+++ b/tests/test-allow-tcp-xorg-1.16
@@ -0,0 +1,2 @@
+#!/bin/sh
+./src/dbus-env ./src/test-runner allow-tcp-xorg-1.16 test-gobject-greeter
diff --git a/tests/test-allow-tcp-xorg-1.17 b/tests/test-allow-tcp-xorg-1.17
new file mode 100755
index 00000000..db2a80b1
--- /dev/null
+++ b/tests/test-allow-tcp-xorg-1.17
@@ -0,0 +1,2 @@
+#!/bin/sh
+./src/dbus-env ./src/test-runner allow-tcp-xorg-1.17 test-gobject-greeter
diff --git a/tests/test-lock-seat-twice b/tests/test-lock-seat-twice
new file mode 100755
index 00000000..d39c9855
--- /dev/null
+++ b/tests/test-lock-seat-twice
@@ -0,0 +1,2 @@
+#!/bin/sh
+./src/dbus-env ./src/test-runner lock-seat-twice test-gobject-greeter
diff --git a/tests/test-lock-session-twice b/tests/test-lock-session-twice
new file mode 100755
index 00000000..61b09d1f
--- /dev/null
+++ b/tests/test-lock-session-twice
@@ -0,0 +1,2 @@
+#!/bin/sh
+./src/dbus-env ./src/test-runner lock-session-twice test-gobject-greeter
diff --git a/tests/test-xdmcp-client b/tests/test-xdmcp-client
deleted file mode 100755
index fe34787e..00000000
--- a/tests/test-xdmcp-client
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/bin/sh
-./src/dbus-env ./src/test-runner xdmcp-client test-gobject-greeter
diff --git a/tests/test-xdmcp-client-xorg-1.16 b/tests/test-xdmcp-client-xorg-1.16
new file mode 100755
index 00000000..d6e2f56e
--- /dev/null
+++ b/tests/test-xdmcp-client-xorg-1.16
@@ -0,0 +1,2 @@
+#!/bin/sh
+./src/dbus-env ./src/test-runner xdmcp-client-xorg-1.16 test-gobject-greeter
diff --git a/tests/test-xdmcp-client-xorg-1.17 b/tests/test-xdmcp-client-xorg-1.17
new file mode 100755
index 00000000..b3d41fc7
--- /dev/null
+++ b/tests/test-xdmcp-client-xorg-1.17
@@ -0,0 +1,2 @@
+#!/bin/sh
+./src/dbus-env ./src/test-runner xdmcp-client-xorg-1.17 test-gobject-greeter
diff --git a/tests/test-xremote-autologin b/tests/test-xremote-autologin
new file mode 100755
index 00000000..4cf9f4cf
--- /dev/null
+++ b/tests/test-xremote-autologin
@@ -0,0 +1,2 @@
+#!/bin/sh
+./src/dbus-env ./src/test-runner xremote-autologin test-gobject-greeter
diff --git a/tests/test-xremote-login b/tests/test-xremote-login
new file mode 100755
index 00000000..cab0b5bd
--- /dev/null
+++ b/tests/test-xremote-login
@@ -0,0 +1,2 @@
+#!/bin/sh
+./src/dbus-env ./src/test-runner xremote-login test-gobject-greeter
diff --git a/tests/test-xserver-config b/tests/test-xserver-config
new file mode 100755
index 00000000..9b531dd2
--- /dev/null
+++ b/tests/test-xserver-config
@@ -0,0 +1,2 @@
+#!/bin/sh
+./src/dbus-env ./src/test-runner xserver-config test-gobject-greeter