Description: ubuntu template: if a user is bound in, don't define ubuntu user
 It might have a conflicting uid, and isn't needed.  Also put the bound user
 into sudo group.
Author: Serge Hallyn <serge.hallyn@canonical.com>
Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/lxc/+bug/942144
Forwarded: yes

Index: lxc/templates/lxc-ubuntu.in
===================================================================
--- lxc.orig/templates/lxc-ubuntu.in	2012-02-23 16:21:13.750796000 -0600
+++ lxc/templates/lxc-ubuntu.in	2012-02-28 11:54:27.285544110 -0600
@@ -54,11 +54,7 @@
 127.0.0.1 localhost $hostname
 EOF
 
-    if [ "$release" = "precise" ]; then
-        groups="sudo"
-    else
-        groups="sudo admin"
-
+    if [ "$release" != "precise" ]; then
         # suppress log level output for udev
         sed -i "s/=\"err\"/=0/" $rootfs/etc/udev/udev.conf
 
@@ -67,22 +63,40 @@
         rm -f $rootfs/etc/init/tty{5,6}.conf
     fi
 
-    chroot $rootfs useradd --create-home -s /bin/bash ubuntu
-    echo "ubuntu:ubuntu" | chroot $rootfs chpasswd
+    if [ -z "$bindhome" ]; then
+        chroot $rootfs useradd --create-home -s /bin/bash ubuntu
+        echo "ubuntu:ubuntu" | chroot $rootfs chpasswd
+    fi
+
+    return 0
+}
+
+# finish setting up the user in the container by injecting ssh key and
+# adding sudo group membership.
+# passed-in user is either 'ubuntu' or the user to bind in from host.
+finalize_user()
+{
+    user=$1
+
+    if [ "$release" = "precise" ]; then
+        groups="sudo"
+    else
+        groups="sudo admin"
+    fi
 
     for group in $groups; do
         chroot $rootfs groupadd --system $group >/dev/null 2>&1 || true
-        chroot $rootfs adduser ubuntu $group >/dev/null 2>&1 || true
+        chroot $rootfs adduser ${user} $group >/dev/null 2>&1 || true
     done
 
     if [ -n "$auth_key" -a -f "$auth_key" ]; then
-    	u_path="/home/ubuntu/.ssh"
+    	u_path="/home/${user}/.ssh"
     	root_u_path="$rootfs/$u_path"
     	mkdir -p $root_u_path
     	cp $auth_key "$root_u_path/authorized_keys"
-    	chroot $rootfs chown -R ubuntu: "$u_path"
+    	chroot $rootfs chown -R ${user}: "$u_path"
 
-    	echo "Inserted SSH public key from $auth_key into /home/ubuntu/.ssh/authorized_keys"
+    	echo "Inserted SSH public key from $auth_key into /home/${user}/.ssh/authorized_keys"
     fi
     return 0
 }
@@ -518,6 +532,8 @@
 release: lucid | maverick | natty | oneiric | precise
 trim: make a minimal (faster, but not upgrade-safe) container
 bindhome: bind <user>'s home into the container
+          The ubuntu user will not be created, and <user> will have
+	  sudo access.
 arch: amd64 or i386: defaults to host arch
 auth-key: SSH Public key file to inject into container
 EOF
@@ -633,8 +649,12 @@
 fi
 
 post_process $rootfs $release $trim_container
-if [ ! -z $bindhome ]; then
-	do_bindhome $rootfs $bindhome
+
+if [ -n "$bindhome" ]; then
+    do_bindhome $rootfs $bindhome
+    finalize_user $bindhome
+else
+    finalize_user ubuntu
 fi
 
 echo ""
