--- loncom/lonnet/perl/lonnet.pm 2007/10/01 23:54:54 1.910.2.4 +++ loncom/lonnet/perl/lonnet.pm 2007/09/12 03:40:35 1.911 @@ -1,7 +1,7 @@ # The LearningOnline Network # TCP networking package # -# $Id: lonnet.pm,v 1.910.2.4 2007/10/01 23:54:54 albertel Exp $ +# $Id: lonnet.pm,v 1.911 2007/09/12 03:40:35 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -320,10 +320,7 @@ sub convert_and_load_session_env { my ($lonidsdir,$handle)=@_; my @profile; { - my $opened = open(my $idf,'+<',"$lonidsdir/$handle.id"); - if (!$opened) { - return 0; - } + open(my $idf,"$lonidsdir/$handle.id"); flock($idf,LOCK_SH); @profile=<$idf>; close($idf); @@ -362,10 +359,7 @@ sub transfer_profile_to_env { my $convert; { - my $opened = open(my $idf,'+<',"$lonidsdir/$handle.id"); - if (!$opened) { - return; - } + open(my $idf,"$lonidsdir/$handle.id"); flock($idf,LOCK_SH); if (tie(my %disk_env,'GDBM_File',"$lonidsdir/$handle.id", &GDBM_READER(),0640)) { @@ -431,9 +425,8 @@ sub appenv { $env{$key}=$newenv{$key}; } } - my $opened = open(my $env_file,'+<',$env{'user.environment'}); - if ($opened - && &timed_flock($env_file,LOCK_EX) + open(my $env_file,$env{'user.environment'}); + if (&timed_flock($env_file,LOCK_EX) && tie(my %disk_env,'GDBM_File',$env{'user.environment'}, (&GDBM_WRITER()|&GDBM_NOLOCK()),0640)) { @@ -453,17 +446,16 @@ sub delenv { "Attempt to delete from environment ".$delthis); return 'error'; } - my $opened = open(my $env_file,'+<',$env{'user.environment'}); - if ($opened - && &timed_flock($env_file,LOCK_EX) + open(my $env_file,$env{'user.environment'}); + if (&timed_flock($env_file,LOCK_EX) && tie(my %disk_env,'GDBM_File',$env{'user.environment'}, (&GDBM_WRITER()|&GDBM_NOLOCK()),0640)) { foreach my $key (keys(%disk_env)) { if ($key=~/^$delthis/) { - delete($env{$key}); - delete($disk_env{$key}); - } + delete($env{$key}); + delete($disk_env{$key}); + } } untie(%disk_env); } @@ -590,27 +582,6 @@ sub compare_server_load { } return ($spare_server,$lowest_load); } - -# --------------------------- ask offload servers if user already has a session -sub find_existing_session { - my ($udom,$uname) = @_; - foreach my $try_server (@{ $spareid{'primary'} }, - @{ $spareid{'default'} }) { - return $try_server if (&has_user_session($try_server, $udom, $uname)); - } - return; -} - -# -------------------------------- ask if server already has a session for user -sub has_user_session { - my ($lonid,$udom,$uname) = @_; - my $result = &reply(join(':','userhassession', - map {&escape($_)} ($udom,$uname)),$lonid); - return 1 if ($result eq 'ok'); - - return 0; -} - # --------------------------------------------- Try to change a user's password sub changepass { @@ -935,8 +906,8 @@ sub usersearch { if (&host_domain($tryserver) eq $dom) { my $host=&hostname($tryserver); my $queryid= - &reply("querysend:".&escape($query).':'.&escape($dom).':'. - &escape($srch->{'srchby'}).'%%'. + &reply("querysend:".&escape($query).':'. + &escape($srch->{'srchby'}).':'. &escape($srch->{'srchtype'}).':'. &escape($srch->{'srchterm'}),$tryserver); if ($queryid !~/^\Q$host\E\_/) { @@ -953,20 +924,23 @@ sub usersearch { if ( ($reply =~/^timeout/) || ($reply =~/^error/) ) { &logthis('usersrch error: '.$reply.' for '.$dom.' - searching for : '.$srch->{'srchterm'}.' by '.$srch->{'srchby'}.' ('.$srch->{'srchtype'}.') - maxtries: '.$maxtries.' tries: '.$tries); } else { - my @matches = split(/&/,$reply); + my @matches; + if ($reply =~ /\n/) { + @matches = split(/\n/,$reply); + } else { + @matches = split(/\&/,$reply); + } foreach my $match (@matches) { - my @items = split(/:/,$match); my ($uname,$udom,%userhash); - foreach my $entry (@items) { - my ($key,$value) = split(/=/,$entry); - $key = &unescape($key); - $value = &unescape($value); + foreach my $entry (split(/:/,$match)) { + my ($key,$value) = + map {&unescape($_);} split(/=/,$entry); $userhash{$key} = $value; if ($key eq 'username') { $uname = $value; } elsif ($key eq 'domain') { $udom = $value; - } + } } $results{$uname.':'.$udom} = \%userhash; } @@ -7764,9 +7738,6 @@ sub hreflocation { $file=~s-^/home/httpd/lonUsers/($match_domain)/./././($match_name)/userfiles/ -/uploaded/$1/$2/-x; } - if ($file=~ m{^/userfiles/}) { - $file =~ s{^/userfiles/}{/uploaded/}; - } return $file; }