tags 363475 + patch fixed-upstream pending
thanks

Martin Michlmayr <[EMAIL PROTECTED]> writes:

> I'd rather end up in $HOME than in / whene the current working dir
> doesn't exist in the chroot:

I committed the following patch to implement this behaviour.  This
only occurs when running a login shell (no command specified).  If
running a command and the CWD does not exist, it now aborts with an
error, to be extra safe.


Regards,
Roger

-- 
Roger Leigh
                Printing on GNU/Linux?  http://gutenprint.sourceforge.net/
                Debian GNU/Linux        http://www.debian.org/
                GPG Public Key: 0x25BFB848.  Please sign and encrypt your mail.
Index: schroot/sbuild-session.cc
===================================================================
--- schroot/sbuild-session.cc	(revision 564)
+++ schroot/sbuild-session.cc	(working copy)
@@ -698,12 +698,38 @@
       exit (EXIT_FAILURE);
     }
 
+  std::string file;
+
+  string_list command(get_command());
+
   /* chdir to current directory */
   if (chdir (cwd.c_str()))
     {
-      log_warning() << format(_("Could not chdir to '%1%': %2%"))
-	% cwd % strerror(errno)
-		 << endl;
+      /* Fall back to home directory, but only for a login shell,
+	 since for a command we require deterministic behaviour. */
+      if (command.empty() ||
+	  command[0].empty()) // No command
+	{
+	  log_warning() << format(_("Could not chdir to '%1%': %2%"))
+	    % cwd % strerror(errno)
+			<< endl;
+
+	  if (chdir (get_home().c_str()))
+	    log_warning() << format(_("Falling back to '%1%'"))
+	      % "/"
+			  << endl;
+	  else
+	    log_warning() << format(_("Falling back to home directory '%1%'"))
+	      % get_home()
+			  << endl;
+	}
+      else
+	{
+	  log_error() << format(_("Could not chdir to '%1%': %2%"))
+	    % cwd % strerror(errno)
+		      << endl;
+	  exit (EXIT_FAILURE);
+	}
     }
 
   /* Set up environment */
@@ -712,10 +738,6 @@
       << "Set environment:\n" << env;
 
   /* Run login shell */
-  std::string file;
-
-  string_list command(get_command());
-
   if (command.empty() ||
       command[0].empty()) // No command
     {
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 565)
+++ ChangeLog	(working copy)
@@ -1,5 +1,14 @@
 2006-04-30  Roger Leigh  <[EMAIL PROTECTED]>
 
+	* NEWS: Document directory behaviour.
+
+	* schroot/sbuild-session.cc (run_child): If the current working
+	directory does not exist inside the chroot, change to the home
+	directory (for login shells), or fail with an error (for commands)
+	where the behaviour must be deterministic.
+
+2006-04-30  Roger Leigh  <[EMAIL PROTECTED]>
+
 	* test/sbuild-parse-value.cc: Update tests.
 
 	* schroot/sbuild-keyfile.h (get_value): Catch exceptions thrown by
Index: NEWS
===================================================================
--- NEWS	(revision 564)
+++ NEWS	(working copy)
@@ -12,6 +12,12 @@
   1) The package now compiles with older compilers, such as GCC 3.3
      and 3.4.
 
+  2) If the current working directory does not exist inside the
+     chroot, the user's home directory ($HOME, home directory in
+     passwd, or /) will be used when running a login shell.  If
+     running a command and the directory does not exist, schroot will
+     exit with an error.
+
 * Major changes in 0.2.8:
 
   Bugfixes only.

Attachment: pgpr09rH10G3G.pgp
Description: PGP signature

Reply via email to