[LON-CAPA-cvs] cvs: loncom / lchtmldir

foxr lon-capa-cvs@mail.lon-capa.org
Mon, 06 Dec 2004 12:07:59 -0000


foxr		Mon Dec  6 07:07:59 2004 EDT

  Modified files:              
    /loncom	lchtmldir 
  Log:
  For internal users, fork off the creation of the restore file 
  and permission settings to try to avoid lond timeouts.
  
  
Index: loncom/lchtmldir
diff -u loncom/lchtmldir:1.11 loncom/lchtmldir:1.12
--- loncom/lchtmldir:1.11	Wed Oct 20 05:30:57 2004
+++ loncom/lchtmldir	Mon Dec  6 07:07:59 2004
@@ -69,12 +69,12 @@
 use strict; 
 use Fcntl qw(:mode);
 use DirHandle;
-
+use POSIX;
 
 $ENV{'PATH'} = '/bin:/usr/bin:/usr/local/sbin:/home/httpd/perl';
 delete @ENV{qw{IFS CDPATH ENV BASH_ENV}};
 
-my $DEBUG = 0;                         # .nonzero -> Debug printing enabled.
+my $DEBUG = 1;                         # .nonzero -> Debug printing enabled.
 my $path_sep = "/";		# Unix like operating systems.
 
 
@@ -237,11 +237,28 @@
 	#  user's home directory that can reset ownerships and permissions
 	#  back the way the used to be.
 
-	&write_restore_script($homedir);
-
-	&System("/bin/chown -R root:root ".$homedir);
+	# This can take long enough for lond to time out, so we'll do it
+	# in a separate process that we'll not wait for.
+	#
+	my $fpid = fork;
+	if($fpid) {
+	    &DisableRoot;
+	    exit 0;
+	} else {
+	    print "Forked\n";
+	    POSIX::setsid();	# Disassociate from parent.
+	    print "Separate session\n";
+	    &write_restore_script($homedir);
+	    print "Restore script written\n";
+	    &System("/bin/chown -R root:root ".$homedir);
+	    &System("/bin/chown -R www:www  ".$fulldir);
+	    print "Exiting\n";
+	    exit 0;
+	}
+    } else {
+	&System("/bin/chown -R www:www  ".$fulldir);
     }
-    &System("/bin/chown -R www:www  ".$fulldir);
+
 }
 &DisableRoot;