Huge cgi!Help!

Huge cgi!Help!

am 07.10.2007 10:23:56 von Zazen

Hi dude! I have an orrible trouble with this poor cgi: is a client
pop3 web based gateway.The function "connetti()" never been called and
i don't know why!!The functions in the bottom of the script
load,save,restore the state of the session by save the
user,pass,host,id in a file.if you try to execute the script all stop
when you click on the submit button.I'm italian so i apologize for the
bad english.
I hope there is a good soul who help me.

There is the code:

#!/usr/bin/perl -w

use Mail::POP3Client;
use CGI qw(:all);
#use CGIBook::Error;
#use HTML::Template;

local $MAX_FILES =3D 1000;
local $DATA_DIR =3D 'usr/lib/cgi-bin';

my $q =3D new CGI;
my $this_script_name =3D 'popGem.cgi';
my $id =3D get_id($q);
my $action =3D ( $q->param("action") ) || 'start';

if ( $action eq "start") {

start($q,$id);

}

if ( $action eq "connetti" ) {

connetti($q,$id);

}

sub start {
my ($q ,$id) =3D @_;
print
$q-> header(),
$q-> start_html(-title =3D> "PopGem pop3 web based reader"),
$q-> start_form(-action =3D> $this_script_name ,-method =3D>
"post"),
$q-> table(
{-border =3D> "1"},
$q->caption("PopGem pop3 web based reader!"),
$q->Tr(
$q-> th("Nome Utente:"),
$q-> th( textfield(-name =3D> "user_name",-size
=3D> "30") )
),
$q-> Tr(
$q-> th("Password:"),
$q-> th( password_field(-name =3D> "password",-
size =3D> "30") )
),
$q-> Tr(
$q-> th("Nome Server:"),
$q-> th( textfield(-name =3D> "domain_name",-
size =3D> "30") )
),
$q-> Tr(
$q-> th({-rowspan =3D> "2"},
$q-> submit(-value =3D> "connetti") )
),
$q->hidden(
-name =3D> "id",
-default =3D> $id,
-override =3D> 1
),
$q->hidden(
-name =3D> "action",
-default =3D> "connetti",
-override =3D> 1
)
),
$q-> end_form(),
$q-> end_html();
save_state($q);

}

sub connetti {

my ($q,$id) =3D @_;
my $user_name =3D param('user_name');
my $password =3D param('password');
my $domain_name =3D param('domani_name');
#per ogni messaggio che =E8 presente nella mailbox stampo una riga di
una tabella
#con le informazioni utili: mittente,oggetto,ecc...

my $pop =3D new Mail::POP3Client ( USER =3D> $user_name,
PASSWORD =3D> $password,
HOST =3D> $domain_name,
AUTH_MODE =3D> 'PASS' );

for ($i =3D 1; $i <=3D $pop->Count(); $i++) {

foreach my $message ( $pop->Head($i) ){

my $date =3D ($message =3D~ /^Date:\s+/i);
my $from =3D ($message =3D~ /^From:\s+/i);
my $to =3D ($message =3D~ /^To:\s+/i);
my $subject =3D ($message =3D~ /^Subject:\s+/i);
print $q-> header(),
$q-> start_html(-title =3D> "Ecco i messaggi"),
$q-> table(
{-border =3D> "1"},
$q->caption("Informazioni del messaggio $i:"),
$q->Tr(
$q-> th("Date:"),
$q-> th("From:"),
$q-> th("To:"),
$q-> th("Subject:")
),
$q->Tr(
$q-> th("$date"),
$q-> th("$from"),
$q-> th("$to"),
$q-> th("$subject")
)
),
$q-> end_html();
$q-> save_state($q);

}
}
}

sub get_id {
my $q =3D shift;
my $id;

my $unsafe_id =3D $q->param( "id" ) || '';
$unsafe_id =3D~ s/[^\dA-Fa-f]//g;

if ( $unsafe_id =3D~ /^(.+)$/ ) {
$id =3D $1;
load_state( $q, $id );
}
else {
$id =3D unique_id( );
$q->param( -name =3D> "id", -value =3D> $id );
}

return $id;

}

# Loads the current CGI object's default parameters from the saved
state
sub load_state {
my( $q, $id ) =3D @_;
my $saved =3D get_state( $id ) or return;

foreach ( $saved->param ) {
$q->param( $_ =3D> $saved->param($_) ) unless defined $q-

>param($_);
}
}

# Reads a saved CGI object from disk and returns its params as a hash
ref
sub get_state {
my $id =3D shift;
my $session =3D session_filename( $id );
local *FILE;

-e $session or return;
open FILE, $session or die "Cannot open $session: $!";
my $q_saved =3D new CGI( \*FILE ) or
error( $q, "Unable to restore saved state." );
close FILE;

return $q_saved;

}

# Saves the current CGI object to disk
sub save_state {
my $q =3D shift;
my $session =3D session_filename( $id );
local( *FILE, *DIR );

# Avoid DoS attacks by limiting the number of data files
my $num_files =3D 0;
opendir DIR, $DATA_DIR;
$num_files++ while readdir DIR;
closedir DIR;

# Compare the file count against the max
if ( $num_files > $MAX_FILES ) {
error( $q, "We cannot save your request because the directory
" .
"is full. Please try again later" );
}

# Save the current CGI object to disk
open FILE, ">> $session" or return die "Cannot write to $session:
$!";
$q->save( \*FILE );
close FILE;

}

# Separated from other code in case this changes in the future
sub session_filename {
my $id =3D shift;
return "/$DATA_DIR/$id";

}

sub unique_id {
# Use Apache's mod_unique_id if available
return $ENV{UNIQUE_ID} if exists $ENV{UNIQUE_ID};

require Digest::MD5;

my $md5 =3D new Digest::MD5;
my $remote =3D $ENV{REMOTE_ADDR} . $ENV{REMOTE_PORT};

# Note this is intended to be unique, and not unguessable
# It should not be used for generating keys to sensitive data
my $id =3D $md5->md5_base64( time, $$, $remote );
$id =3D~ tr|+/=3D|-_.|; # Make non-word chars URL-friendly
return $id;

}

Re: Huge cgi!Help!

am 07.10.2007 11:32:10 von Mark Clements

Zazen wrote:
> Hi dude! I have an orrible trouble with this poor cgi: is a client
> pop3 web based gateway.The function "connetti()" never been called and
> i don't know why!!The functions in the bottom of the script
> load,save,restore the state of the session by save the
> user,pass,host,id in a file.if you try to execute the script all stop
> when you click on the submit button.I'm italian so i apologize for the
> bad english.
> I hope there is a good soul who help me.


> my $action = ( $q->param("action") ) || 'start';
>
> if ( $action eq "start") {
>
> start($q,$id);
>
> }
>
> if ( $action eq "connetti" ) {
>
> connetti($q,$id);
>
> }

> $q->hidden(
> -name => "action",
> -default => "connetti",
> -override => 1
> )
Without doing a detailed analysis, you have a field whose name conflicts
with the attribute "action" on the form definition. This has bitten me
in the past. Call your hidden field "action" something else, eg "zaction".

my $action = ( $q->param("zaction") ) || 'start';

.....
$q->hidden(
-name => "zaction",
-default => "connetti",
-override => 1
)

If you need more help with this I suggest you check out the posting
guidelines before posting again - it will maximize your chances of
getting assistance.

Mark

Re: Huge cgi!Help!

am 07.10.2007 12:11:04 von Zazen

I have try...but nothing.The error.log file of apache2 was the follow:

[Sun Oct 07 11:59:23 2007] [error] [client 127.0.0.1] Use of
uninitialized value in join or string at /usr/lib/perl/5.8/IO/Socket/
INET.pm line 83., referer: http://localhost/cgi-bin/popGem.cgi
[Sun Oct 07 11:59:23 2007] [error] [client 127.0.0.1] Use of
uninitialized value in concatenation (.) or string at /usr/local/share/
perl/5.8.8/Mail/POP3Client.pm line 387., referer: http://localhost/cgi-bin/popGem.cgi
[Sun Oct 07 11:59:23 2007] [error] [client 127.0.0.1] Premature end of
script headers: popGem.cgi, referer: http://localhost/cgi-bin/popGem.cgi

I have to go crazy with this poor script...

I don't know why the script don't run that function (the "connetti()"
sub).This is the problem of that "Premature end of script headers".But
about the other two line??

Re: Huge cgi!Help!

am 07.10.2007 12:48:02 von Michele Dondi

On Sun, 07 Oct 2007 11:32:10 +0200, Mark Clements
wrote:

>> $q->hidden(
>> -name => "action",
>> -default => "connetti",
>> -override => 1
>> )
>Without doing a detailed analysis, you have a field whose name conflicts
>with the attribute "action" on the form definition. This has bitten me
>in the past. Call your hidden field "action" something else, eg "zaction".

Or, since he is Italian, "azione". It also will match better
"connetti", which is actually already in Italian.


Michele
--
{$_=pack'B8'x25,unpack'A8'x32,$a^=sub{pop^pop}->(map substr
(($a||=join'',map--$|x$_,(unpack'w',unpack'u','G^ ..'KYU;*EVH[.FHF2W+#"\Z*5TI/ER 256),7,249);s/[^\w,]/ /g;$ \=/^J/?$/:"\r";print,redo}#JAPH,

Re: Huge cgi!Help!

am 07.10.2007 13:05:51 von Mark Clements

Zazen wrote:
> I have try...but nothing.The error.log file of apache2 was the follow:
>
> [Sun Oct 07 11:59:23 2007] [error] [client 127.0.0.1] Use of
> uninitialized value in join or string at /usr/lib/perl/5.8/IO/Socket/
> INET.pm line 83., referer: http://localhost/cgi-bin/popGem.cgi
> [Sun Oct 07 11:59:23 2007] [error] [client 127.0.0.1] Use of
> uninitialized value in concatenation (.) or string at /usr/local/share/
> perl/5.8.8/Mail/POP3Client.pm line 387., referer: http://localhost/cgi-bin/popGem.cgi
> [Sun Oct 07 11:59:23 2007] [error] [client 127.0.0.1] Premature end of
> script headers: popGem.cgi, referer: http://localhost/cgi-bin/popGem.cgi
>
> I have to go crazy with this poor script...
>
> I don't know why the script don't run that function (the "connetti()"
> sub).This is the problem of that "Premature end of script headers".But
> about the other two line??
>
You need to read the group posting guidelines.

However, you can try the following:

put "use strict;" at the top of your script and fix the resulting errors.

run the script from the command-line

put

use CGI::Carp qw(fatalsToBrowser);

at the top of your script. This may help you to better diagnose any
problems.

When I run the script, connetti *is* called, but the pop connection
isn't succeeding and you aren't testing for that. From the perldoc:


*State* The internal state of the connection: DEAD, AUTHORIZATION,
TRANSACTION.

so try checking $pop->State();

Mark

Re: Huge cgi!Help!

am 07.10.2007 21:55:21 von Zazen

Mark wrote:
> You need to read the group posting guidelines.
>
> However, you can try the following:
>
> put "use strict;" at the top of your script and fix the resulting errors.
>
> run the script from the command-line
>
> put
>
> use CGI::Carp qw(fatalsToBrowser);
>
> at the top of your script. This may help you to better diagnose any
> problems.
>
> When I run the script, connetti *is* called, but the pop connection
> isn't succeeding and you aren't testing for that. From the perldoc:
>
> *State* The internal state of the connection: DEAD, AUTHORIZATION,
> TRANSACTION.
>
> so try checking $pop->State();
>
> Mark


Thanks Mark,i begin to find all the things that cause to fall the
script,Thanks a lot!