Newsgroup: it.comp.lang.perl
Titolo: Problema con Awstats

Sto provando ad installare Awstats 6.4 su un sistema con Debian Sarge, 
Apache 1.3.33 e Perl 5.8.4.
Quando eseguo "/usr/local/awstats/tools/
awstats_updateall.pl
 now" non 
ottengo alcun errore, ma se cerco di visualizzare le statistiche 
all'inidirizzo 
"
http://www.miosito.com/awstats/awstats.pl?config=myconfig
" ottengo il 
menù di Awstats sulla sinistra, e un "Internal Server Error" sulla destra.
Nel error_log di apache appaiono questi due errori:
Insecure dependency in require while running setuid at 
/usr/local/awstats/wwwroot/cgi-bin/
awstats.pl
 line 1368.
Premature end of script headers: 
/usr/local/awstats/wwwroot/cgi-bin/
awstats.pl
Ho provato a reinstallare Awstats, a controllare i permessi, ma non sono 
riuscito a risolvere il problema...
Qualcuno può aiutarmi?
Grazie mille!
Ciao
Mett

 /usr/local/awstats/wwwroot/cgi-bin/
awstats.pl
Non conosco il software in questione (o meglio lo conosco solo di fama ma 
non l'ho mai usato), ma magari se provi a scriverci cosa c'č nella linea 
"1368" del file 
awstats.pl
 indicato da Apache potremmo avere qualche indizio 
in piů.

 in più.
Si, io purtroppo Perl non lo conosco per nulla...
L'intera funzione all'interno della quale c'è la riga incriminata è la 
seguente:
#------------------------------------------------------------------------------
# Function:     Load the reference databases
# Parameters:   List of files to load
# Input:                $DIR
# Output:               Arrays and Hash tables are defined
# Return:       -
#------------------------------------------------------------------------------
sub Read_Ref_Data {
         # Check lib files in common possible directories :
         # Windows and standard package:                 "$DIR/lib" (lib 
in same dir than 
awstats.pl
)
         # Debian package: 
"/usr/share/awstats/lib"
         my @PossibleLibDir=("$DIR/lib","/usr/share/awstats/lib");
         my %FilePath=(); my %DirAddedInINC=();
         my @FileListToLoad=();
         while (my $file=shift) { push @FileListToLoad, "$
file.pm
"; }
         if ($Debug) { debug("Call to Read_Ref_Data with files to load: 
".(join(',',@FileListToLoad))); }
         foreach my $file (@FileListToLoad) {
                 foreach my $dir (@PossibleLibDir) {
                         my $searchdir=$dir;
                         if ($searchdir && (!($searchdir =~ /\/$/)) && 
(!($searchdir =~ /\\$/)) ) { $searchdir .= "/"; }
                         if (! $FilePath{$file}) {       # To not load 
twice same file in different path
                                 if (-s "${searchdir}${file}") {
 
$FilePath{$file}="${searchdir}${file}";
                                         if ($Debug) { debug("Call to 
Read_Ref_Data [FilePath{$file}=\"$FilePath{$file}\"]"); }
                                         # Note: cygwin perl 5.8 need a 
push + require file
                                         if (! $DirAddedInINC{"$dir"}) {
                                                 push @INC, "$dir";
                                                 $DirAddedInINC{"$dir"}=1;
                                         }
                                         my $loadret=require "$file";
                                         #my $loadret=(require 
"$FilePath{$file}"||require "${file}");
                                 }
                         }
                 }
                 if (! $FilePath{$file}) {
                         my $filetext=$file; $filetext =~ s/\.pm$//; 
$filetext =~ s/_/ /g;
                         warning("Warning: Can't read file \"$file\" 
($filetext detection will not work correctly).\nCheck if file is in 
\"".($PossibleLibDir
                 }
         }
         # Sanity check (if loaded)
         if ((scalar keys %OSHashID) && @OSSearchIDOrder != scalar keys 
%OSHashID) { error("Not same number of records of OSSearchIDOrder 
(".(@OSSearchIDOrde
         if ((scalar keys %SearchEnginesHashID) && 
(@SearchEnginesSearchIDOrder_list1+@SearchEnginesSearchIDOrder_list2+@SearchEnginesSearchIDOrder_listgen)
         if ((scalar keys %BrowsersHashIDLib) && @BrowsersSearchIDOrder 
!= (scalar keys %BrowsersHashIDLib) - 3) { error("Not same number of 
records of Brows
         if ((scalar keys %RobotsHashIDLib) && 
(@RobotsSearchIDOrder_list1+@RobotsSearchIDOrder_list2+@RobotsSearchIDOrder_listgen) 
!= (scalar keys %RobotsHa
}
La riga 1368 è la seguente:
my $loadret=require "$file";
Ciao, grazie!!
Mal.

 my $loadret=require "$file";
Quell'istruzione richiede di includere un certo file (č proprio 
un'inclusione fisica, in pratica il file "required" viene letto e 
interpretato, deve quindi essere un listato Perl).
Da quanto si vede all'inizio a questa funzione vengono passati uno o piů 
nomi di file e lui li cerca in /usr/share/awstats/lib.
Dal tuo messaggio di erore "Insecure dependency in require while running 
setuid at /usr/local/awstats/wwwroot/cgi-bin/
awstats.pl
 line 1368" sembra 
che 
awstats.pl
 cerca di includere un file che non viene ritenuto sicuro.
Controlla innanzitutto la relazione fra l'utente con cui fai girare Apache e 
che diritti ha questo utente su /usr/share/awstats.