--- loncom/lonnet/perl/lonnet.pm	2000/09/25 20:28:54	1.31
+++ loncom/lonnet/perl/lonnet.pm	2000/09/29 14:36:30	1.33
@@ -51,7 +51,7 @@
 # 06/26 Ben Tyszka
 # 06/30,07/15,07/17,07/18,07/20,07/21,07/22,07/25 Gerd Kortemeyer
 # 08/14 Ben Tyszka
-# 08/22,08/28,08/31,09/01,09/02,09/04,09/05,09/25 Gerd Kortemeyer
+# 08/22,08/28,08/31,09/01,09/02,09/04,09/05,09/25,09/28 Gerd Kortemeyer
 
 package Apache::lonnet;
 
@@ -413,10 +413,7 @@ sub store {
     my $symb;
     unless ($symb=escape(&symbread())) { return ''; }
     my $namespace;
-    unless ($namespace=$ENV{'request.course.uri'}) { return ''; }
-    $namespace=~s/\//\_\_/g;
-    $namespace=~s/\./\_/g;
-    $namespace=escape($namespace);
+    unless ($namespace=$ENV{'request.course.id'}) { return ''; }
     my $namevalue='';
     map {
         $namevalue.=escape($_).'='.escape($storehash{$_}).'&';
@@ -433,10 +430,7 @@ sub restore {
     my $symb;
     unless ($symb=escape(&symbread())) { return ''; }
     my $namespace;
-    unless ($namespace=$ENV{'request.course.uri'}) { return ''; }
-    $namespace=~s/\//\_\_/g;
-    $namespace=~s/\./\_/g;
-    $namespace=escape($namespace);
+    unless ($namespace=$ENV{'request.course.id'}) { return ''; }
     my $answer=reply(
               "restore:$ENV{'user.domain'}:$ENV{'user.name'}:$namespace:$symb",
               "$ENV{'user.home'}");
@@ -664,13 +658,13 @@ sub allowed {
 
    } else {
 
-       unless(defined($ENV{'request.course.uri'})) {
+       unless(defined($ENV{'request.course.id'})) {
 	   return '1';
        }
 
 # Get access priviledges for course
 
-       if ($ENV{'user.priv./'.$ENV{'request.course.uri'}}=~/$priv\&([^\:]*)/) {
+       if ($ENV{'user.priv./'.$ENV{'request.course.id'}}=~/$priv\&([^\:]*)/) {
           $thisallowed.=$1;
        }
 
@@ -683,7 +677,7 @@ sub allowed {
        $#uriparts--;
        my $uripath=join('/',@uriparts);
        my $uricond=-1;
-       if ($ENV{'acc.res.'.$ENV{'request.course'}.'.'.$uripath}=~
+       if ($ENV{'acc.res.'.$ENV{'request.course.id'}.'.'.$uripath}=~
 	   /\&$urifile\:(\d+)\&/) {
 	   $uricond=$1;
        } elsif (($fe{$uritype} eq 'emb') || ($fe{$uritype} eq 'img')) {
@@ -694,7 +688,7 @@ sub allowed {
           $urifile=$uriparts[$#uriparts];
           $#uriparts--;
           $uripath=join('/',@uriparts);
-          if ($ENV{'acc.res.'.$ENV{'request.course'}.'.'.$uripath}=~
+          if ($ENV{'acc.res.'.$ENV{'request.course.id'}.'.'.$uripath}=~
 	     /\&$urifile\:(\d+)\&/) {
 	     $uricond=$1;
 	  }
@@ -898,8 +892,8 @@ sub dirlist {
 sub condval {
     my $condidx=shift;
     my $result=0;
-    if ($ENV{'request.course'}) {
-       if (defined($ENV{'acc.cond.'.$ENV{'request.course'}.'.'.$condidx})) {
+    if ($ENV{'request.course.id'}) {
+       if (defined($ENV{'acc.cond.'.$ENV{'request.course.id'}.'.'.$condidx})) {
           my $operand='|';
 	  my @stack;
           map {
@@ -916,14 +910,14 @@ sub condval {
                   $operand=$_;
               } else {
                   my $new=
-                       substr($ENV{'user.state.'.$ENV{'request.course'}},$_,1);
+                    substr($ENV{'user.state.'.$ENV{'request.course.id'}},$_,1);
                   if ($operand eq '&') {
                      $result=$result>$new?$new:$result;
                   } else {
                      $result=$result>$new?$result:$new;
                   }                  
               }
-          } ($ENV{'acc.cond.'.$ENV{'request.course'}.'.'.$condidx}=~
+          } ($ENV{'acc.cond.'.$ENV{'request.course.id'}.'.'.$condidx}=~
              /(\d+|\(|\)|\&|\|)/g);
        }
     }
@@ -996,9 +990,31 @@ sub symbread {
 
 # ---------------------------------------------------------- Return random seed
 
+sub numval {
+    my $txt=shift;
+    $txt=~tr/A-J/0-9/;
+    $txt=~tr/a-j/0-9/;
+    $txt=~tr/K-T/0-9/;
+    $txt=~tr/k-t/0-9/;
+    $txt=~tr/U-Z/0-5/;
+    $txt=~tr/u-z/0-5/;
+    $txt=~s/\D//g;
+    return int($txt);
+}    
+
 sub rndseed {
     my $symb;
     unless ($symb=&symbread()) { return ''; }
+    my $symbchck=unpack("%32C*",$symb);
+    my $symbseed=numval($symb)%$symbchck;
+    my $namechck=unpack("%32C*",$ENV{'user.name'});
+    my $nameseed=numval($ENV{'user.name'})%$namechck;
+    return int( $symbseed
+	       .$nameseed
+               .unpack("%32C*",$ENV{'user.domain'})
+               .unpack("%32C*",$ENV{'request.course.id'})
+               .$namechck
+               .$symbchck);
 }
 
 # ------------------------------------------------------------- Declutters URLs