--- loncom/lonnet/perl/lonnet.pm	2004/01/12 19:53:54	1.460
+++ loncom/lonnet/perl/lonnet.pm	2004/01/26 21:58:34	1.464
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # TCP networking package
 #
-# $Id: lonnet.pm,v 1.460 2004/01/12 19:53:54 albertel Exp $
+# $Id: lonnet.pm,v 1.464 2004/01/26 21:58:34 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -2127,6 +2127,36 @@ sub coursedescription {
     return %returnhash;
 }
 
+# -------------------------------------------------See if a user is privileged
+
+sub privileged {
+    my ($username,$domain)=@_;
+    my $rolesdump=&reply("dump:$domain:$username:roles",
+			&homeserver($username,$domain));
+    if (($rolesdump eq 'con_lost') || ($rolesdump eq '')) { return 0; }
+    my $now=time;
+    if ($rolesdump ne '') {
+        foreach (split(/&/,$rolesdump)) {
+	    if ($_!~/^rolesdef\&/) {
+		my ($area,$role)=split(/=/,$_);
+		$area=~s/\_\w\w$//;
+		my ($trole,$tend,$tstart)=split(/_/,$role);
+		if (($trole eq 'dc') || ($trole eq 'su')) {
+		    my $active=1;
+		    if ($tend) {
+			if ($tend<$now) { $active=0; }
+		    }
+		    if ($tstart) {
+			if ($tstart>$now) { $active=0; }
+		    }
+		    if ($active) { return 1; }
+		}
+	    }
+	}
+    }
+    return 0;
+}
+
 # -------------------------------------------------------- Get user privileges
 
 sub rolesinit {
@@ -3792,7 +3822,9 @@ sub packages_tab_default {
     foreach my $package (split(/,/,$packages)) {
 	my ($pack_type,$pack_part)=split(/_/,$package,2);
 	if ($pack_part eq $part) {
-	    return $packagetab{"$pack_type&$name&default"};
+	    if (defined($packagetab{"$pack_type&$name&default"})) {
+		return $packagetab{"$pack_type&$name&default"};
+	    }
 	}
     }
     return undef;
@@ -4427,7 +4459,7 @@ sub filelocation {
     $location=$file;
   } else {
     $file=~s/^$perlvar{'lonDocRoot'}//;
-    $file=~s:^/*res::;
+    $file=~s:^/res/:/:;
     if ( !( $file =~ m:^/:) ) {
       $location = $dir. '/'.$file;
     } else {
@@ -4444,13 +4476,14 @@ sub hreflocation {
     unless (($file=~m-^http://-i) || ($file=~m-^/-)) {
 	my $finalpath=filelocation($dir,$file);
 	$finalpath=~s-^/home/httpd/html--;
-	$finalpath=~s-/home/(\w+)/public_html/-/~$1/-;
+	$finalpath=~s-^/home/(\w+)/public_html/-/~$1/-;
 	return $finalpath;
     } elsif ($file=~m-^/home-) {
 	$file=~s-^/home/httpd/html--;
-	$file=~s-/home/(\w+)/public_html/-/~$1/-;
+	$file=~s-^/home/(\w+)/public_html/-/~$1/-;
 	return $file;
     }
+    return $file;
 }
 
 # ------------------------------------------------------------- Declutters URLs