--- loncom/lond	2006/09/05 15:35:14	1.342
+++ loncom/lond	2006/10/13 04:23:02	1.344
@@ -2,7 +2,7 @@
 # The LearningOnline Network
 # lond "LON Daemon" Server (port "LOND" 5663)
 #
-# $Id: lond,v 1.342 2006/09/05 15:35:14 albertel Exp $
+# $Id: lond,v 1.344 2006/10/13 04:23:02 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -59,7 +59,7 @@ my $DEBUG = 0;		       # Non zero to ena
 my $status='';
 my $lastlog='';
 
-my $VERSION='$Revision: 1.342 $'; #' stupid emacs
+my $VERSION='$Revision: 1.344 $'; #' stupid emacs
 my $remoteVERSION;
 my $currenthostid="default";
 my $currentdomainid;
@@ -2123,14 +2123,21 @@ sub token_auth_user_file_handler {
     
     chomp($session);
     my $reply="non_auth\n";
-    if (open(ENVIN,$perlvar{'lonIDsDir'}.'/'.
-	     $session.'.id')) {
+    my $file = $perlvar{'lonIDsDir'}.'/'.$session.'.id';
+    if (open(ENVIN,"$file")) {
 	flock(ENVIN,LOCK_SH);
-	while (my $line=<ENVIN>) {
-	    my ($envname)=split(/=/,$line,2);
-	    $envname=&unescape($envname);
-	    if ($envname=~ m|^userfile\.\Q$fname\E|) { $reply="ok\n"; }
+	tie(my %disk_env,'GDBM_File',"$file",&GDBM_READER(),0640);
+	if (exists($disk_env{"userfile.$fname"})) {
+	    $reply="ok\n";
+	} else {
+	    foreach my $envname (keys(%disk_env)) {
+		if ($envname=~ m|^userfile\.\Q$fname\E|) {
+		    $reply="ok\n";
+		    last;
+		}
+	    }
 	}
+	untie(%disk_env);
 	close(ENVIN);
 	&Reply($client, $reply, "$cmd:$tail");
     } else {
@@ -3350,7 +3357,7 @@ sub dump_course_id_handler {
     my $userinput = "$cmd:$tail";
 
     my ($udom,$since,$description,$instcodefilter,$ownerfilter,$coursefilter,
-        $typefilter) =split(/:/,$tail);
+        $typefilter,$regexp_ok) =split(/:/,$tail);
     if (defined($description)) {
 	$description=&unescape($description);
     } else {
@@ -3387,6 +3394,9 @@ sub dump_course_id_handler {
     } else {
         $typefilter='.';
     }
+    if (defined($regexp_ok)) {
+        $regexp_ok=&unescape($regexp_ok);
+    }
 
     unless (defined($since)) { $since=0; }
     my $qresult='';
@@ -3407,8 +3417,14 @@ sub dump_course_id_handler {
             }
             unless ($instcodefilter eq '.' || !defined($instcodefilter)) {
                 my $unescapeInstcode = &unescape($inst_code);
-                unless (eval('$unescapeInstcode=~/\Q$instcodefilter\E/i')) {
-                    $match = 0;
+                if ($regexp_ok) {
+                    unless (eval('$unescapeInstcode=~/$instcodefilter/')) {
+                        $match = 0;
+                    }
+                } else {
+                    unless (eval('$unescapeInstcode=~/\Q$instcodefilter\E/i')) {
+                        $match = 0;
+                    }
                 }
 	    }
             unless ($ownerfilter eq '.' || !defined($ownerfilter)) {