--- loncom/lonnet/perl/lonnet.pm	2007/07/26 15:43:35	1.901
+++ loncom/lonnet/perl/lonnet.pm	2007/08/08 22:24:34	1.904
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # TCP networking package
 #
-# $Id: lonnet.pm,v 1.901 2007/07/26 15:43:35 albertel Exp $
+# $Id: lonnet.pm,v 1.904 2007/08/08 22:24:34 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -862,16 +862,28 @@ sub inst_directory_query {
     my %results;
     my $homeserver = &domain($udom,'primary');
     if ($homeserver ne '') {
-        my $response=&reply("instdirsrch:$udom".':'.
-                            &escape($srch->{'srchby'}).':'.
-                            &escape($srch->{'srchterm'}).':'.
-                            $srch->{'srchtype'},$homeserver);
-        if ($response ne 'refused') {
-            my @matches = split(/&/,$response);
+	my $queryid=&reply("querysend:instdirsearch:".
+			   &escape($srch->{'srchby'}).':'.
+			   &escape($srch->{'srchterm'}).':'.
+			   &escape($srch->{'srchtype'}),$homeserver);
+	my $host=&hostname($homeserver);
+	if ($queryid !~/^\Q$host\E\_/) {
+	    &logthis('instituional directory search invalid queryid: '.$queryid.' for host: '.$homeserver.'in domain '.$udom);
+	    return;
+	}
+	my $response = &get_query_reply($queryid);
+	my $maxtries = 5;
+	my $tries = 1;
+	while (($response=~/^timeout/) && ($tries < $maxtries)) {
+	    $response = &get_query_reply($queryid);
+	    $tries ++;
+	}
+
+        if (!&error($response) && $response ne 'refused') {
+            my @matches = split(/\n/,$response);
             foreach my $match (@matches) {
                 my ($key,$value) = split(/=/,$match);
-                my %userhash = &str2hash(&unescape($value));
-                $results{&unescape($key).':'.$udom} = \%userhash;
+                $results{&unescape($key).':'.$udom} = &thaw_unescape($value);
             }
         }
     }
@@ -894,7 +906,7 @@ sub usersearch {
                        &escape($srch->{'srchterm'}),$tryserver);
             if ($queryid !~/^\Q$host\E\_/) {
                 &logthis('usersearch: invalid queryid: '.$queryid.' for host: '.$host.'in domain '.$dom.' and server: '.$tryserver);
-                return 'error: '.$queryid;
+                next;
             }
             my $reply = &get_query_reply($queryid);
             my $maxtries = 1;
@@ -2203,7 +2215,6 @@ sub userrolelog {
          {$trole.':'.$username.':'.$domain.':'.$runame.':'.$rudom.':'.$rsec}
                     = $tend.':'.$tstart;
     }
-    &flushcourselogs();
 }
 
 sub get_course_adv_roles {
@@ -4542,8 +4553,8 @@ sub get_query_reply {
 	sleep 2;
         if (-e $replyfile.'.end') {
 	    if (open(my $fh,$replyfile)) {
-               $reply.=<$fh>;
-               close($fh);
+		$reply = join('',<$fh>);
+		close($fh);
 	   } else { return 'error: reply_file_error'; }
            return &unescape($reply);
 	}