--- loncom/interface/lonindexer.pm 2003/03/19 14:50:32 1.63 +++ loncom/interface/lonindexer.pm 2003/06/16 17:27:33 1.67 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Directory Indexer # -# $Id: lonindexer.pm,v 1.63 2003/03/19 14:50:32 ng Exp $ +# $Id: lonindexer.pm,v 1.67 2003/06/16 17:27:33 matthew Exp $ # # Copyright Michigan State University Board of Trustees # @@ -84,13 +84,13 @@ my @Omit = (); # ----------------------------- Handling routine called via Apache and mod_perl sub handler { my $r = shift; + my $c = $r->connection(); $r->content_type('text/html'); &Apache::loncommon::no_cache($r); $r->send_http_header; return OK if $r->header_only; $fnum=0; $dnum=0; - untie %hash; # Deal with stupid global variables (is there a way around making # these global to this package? It is just so wrong....) @@ -124,9 +124,15 @@ sub handler { $extrafield=''; my $diropendb = - "/home/httpd/perl/tmp/$domain\_$ENV{'user.name'}_indexer.db"; + "/home/httpd/perl/tmp/$ENV{'user.domain'}_$ENV{'user.name'}_indexer.db"; + %hash = (); + my %dbfile; + if (tie(%dbfile,'GDBM_File',$diropendb,&GDBM_WRCREAT(),0640)) { + while(my($key,$value)=each(%dbfile)) { + $hash{$key}=$value; + } + untie(%dbfile); - if (tie(%hash,'GDBM_File',$diropendb,&GDBM_WRCREAT(),0640)) { if ($ENV{'form.launch'} eq '1') { &start_fresh_session(); } @@ -493,18 +499,27 @@ END # --------------------------------------------------- end the output and return $r->print(''."\n"); - untie(%hash); } else { $r->print('Unable to tie hash to db '. 'file'); return OK; } + if(! $c->aborted()) { + if (tie(%dbfile,'GDBM_File',$diropendb,&GDBM_NEWDB(),0640)) { + while (my($key,$value) = each(%hash)) { + $dbfile{$key}=$value; + } + untie(%dbfile); + } + } + return OK; } # ----------------------------------------------- recursive scan of a directory sub scanDir { my ($r,$startdir,$indent,$hashref)=@_; + my $c = $r->connection(); my ($compuri,$curdir); my $dirptr=16384; $indent++; @@ -512,6 +527,7 @@ sub scanDir { my %dupdirs = %dirs; my @list=&get_list($r,$startdir); foreach my $line (@list) { + return if ($c->aborted()); my ($strip,$dom,undef,$testdir,undef)=split(/\&/,$line,5); next if $strip =~ /.*\.meta$/; my (@fileparts) = split(/\./,$strip); @@ -666,6 +682,9 @@ sub display_line { $r->print("Up $tabtag\n"); return OK; } +# Do we have permission to look at this? + + return OK if (!&Apache::lonnet::allowed('bre',$startdir.$filecom[0])); # display domain if ($filecom[1] eq 'domain') { @@ -723,7 +742,6 @@ sub display_line { # display file if ($fnptr == 0 and $filecom[3] ne '') { my $filelink = $startdir.$filecom[0]; - return OK if (!&Apache::lonnet::allowed('bre',$filelink)); my @file_ext = split (/\./,$listname); my $curfext = $file_ext[-1]; if (@Omit) { @@ -946,9 +964,6 @@ sub setvalues { sub cleanup { if (tied(%hash)){ &Apache::lonnet::logthis('Cleanup indexer: hash'); - unless (untie(%hash)) { - &Apache::lonnet::logthis('Failed cleanup indexer: hash'); - } } }