Click here to Skip to main content
15,896,154 members
Home / Discussions / Web Development
   

Web Development

 
GeneralRe: text nodes Pin
llp00na3-Mar-06 4:09
llp00na3-Mar-06 4:09 
GeneralRe: text nodes Pin
Stephen Hewitt3-Mar-06 19:18
Stephen Hewitt3-Mar-06 19:18 
GeneralRe: text nodes Pin
llp00na4-Mar-06 5:41
llp00na4-Mar-06 5:41 
GeneralRe: text nodes Pin
Stephen Hewitt4-Mar-06 15:00
Stephen Hewitt4-Mar-06 15:00 
GeneralRe: text nodes Pin
llp00na5-Mar-06 1:38
llp00na5-Mar-06 1:38 
GeneralRe: text nodes Pin
Stephen Hewitt4-Mar-06 15:56
Stephen Hewitt4-Mar-06 15:56 
GeneralRe: text nodes Pin
llp00na5-Mar-06 6:28
llp00na5-Mar-06 6:28 
Questioncgi mailer ---- giving troubles Pin
deepak11-Mar-06 12:12
deepak11-Mar-06 12:12 
Hi

I have existing website which I have to update. This web uses a cgi mailer. when i try to send email through this page it gives server error. the cgi script is here:

I think that the first 15-20 lines is important.....

START SCRIPT:

#!/usr/bin/perl -wT

BEGIN { $DEBUGGING = 1; }
my $emulate_matts_code= 0;
my $secure = 1;
my $mailprog = '/bin/sendmail -oi -t';
my @referers = qw(fijiamcham.com mail.fijiamcham.com localhost);
my @allow_mail_to = qw(secretariat@fijiamcham.com);
my @recipients = ();
my @valid_ENV = qw(REMOTE_HOST REMOTE_ADDR REMOTE_USER HTTP_USER_AGENT);
my $date_fmt = '%A, %B %d, %Y at %H:%M:%S';
my $style = ''; # '/css/nms.css'; # include your site style sheet here
my $send_confirmation_mail = 0;
my $confirmation_text = <<'END_OF_CONFIRMATION';
From: you@your.com
Subject: form submission

Thankyou for your form submission.

END_OF_CONFIRMATION
#
# USER CONFIGURATION << END >>
# ----------------------------
# (no user serviceable parts beyond here)


# We don't need file uploads or very large POST requests.
# Annoying locution to shut up 'used only once' warning in older perl

$CGI::DISABLE_UPLOADS = $CGI::DISABLE_UPLOADS = 1;
$CGI::POST_MAX = $CGI::POST_MAX = 1000000;


# Merge @allow_mail_to and @recipients into a single list of regexps
push @recipients, map { /\@/ ? "^\Q$_\E\$" : "\@\Q$_\E\$" } @allow_mail_to;

# We need finer control over what gets to the browser and the CGI::Carp
# set_message() is not available everywhere Frown | :(
# This is basically the same as what CGI::Carp does inside but simplified
# for our purposes here.

BEGIN
{
sub fatalsToBrowser
{
my ( $message ) = @_;

if ( $main::DEBUGGING )
{
$message =~ s//>/g;
}
else
{
$message = '';
}

my ( $pack, $file, $line, $sub ) = caller(1);
my ($id ) = $file =~ m%([^/]+)$%;

return undef if $file =~ /^\(eval/;

print "Content-Type: text/html\n\n";

print <<eoerr;
<html>

<title>Error


Application Error



An error has occurred in the program



$message




EOERR
die @_;
};

$SIG{__DIE__} = \&fatalsToBrowser;
}

if ( $emulate_matts_code )
{
$secure = 0; # ;-}
}

my $debug_warnings = '';

# Empty the environment of potentially harmful variables
# This might cause problems if $mail_prog is a shell script Smile | :)

delete @ENV{qw(IFS CDPATH ENV BASH_ENV)};

$ENV{PATH} = '/bin:/usr/bin';

my %valid_ENV;

@valid_ENV{@valid_ENV} = (1) x @valid_ENV;

# Uncomment the following line (and the Unit Tests section)
# to unit test URL checking functions
#
# unitTest();

my $style_element = $style ?
qq%%
: '';

check_url();

my $date = strftime($date_fmt, localtime);

my (%Config, %Form);
my @Field_Order = parse_form();

check_required();

send_mail();

return_html();

sub check_url {
my $check_referer = check_referer(referer());

error('bad_referer') unless $check_referer;
}

sub check_referer
{
my $check_referer;
my ($referer) = @_;

if ($referer && ($referer =~ m!^https?://([^/]*\@)?([^/]+)!i)) {
my $refHost;

if (defined($1) and (! $secure)) {
$refHost = $1;
chop $refHost;
} else {
$refHost = $2;
}

foreach my $test_ref (@referers) {
if ($refHost =~ m|\Q$test_ref\E$|i) {
$check_referer = 1;
last;
}
elsif ( $secure && $test_ref =~ /\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/ ) {
if ( my $ref_host = inet_aton($refHost) ) {
$ref_host = unpack "l", $ref_host;
if ( my $test_ref_ip = inet_aton($test_ref) ) {
$test_ref_ip = unpack "l", $test_ref_ip;
if ( $test_ref_ip == $ref_host ) {
$check_referer = 1;
last;
}
}
}
}
}
} else {
$check_referer = $secure ? 0 : 1;
}

return $check_referer;
};

sub parse_form {

my @fields = qw(
recipient
subject
email
realname
redirect
bgcolor
background
link_color
vlink_color
text_color
alink_color
title
sort
print_config
required
env_report
return_link_title
return_link_url
print_blank_fields
missing_fields_redirect
);

@Config{@fields} = (undef) x @fields; # make it undef rather than empty string

my @field_order;

foreach (param()) {
if (exists $Config{$_}) {
my $val = strip_nonprintable(param($_));
next if /redirect$/ and not check_url_valid($val);
$Config{$_} = $val;
} else {
my @vals = map {strip_nonprintable($_)} param($_);
my $key = strip_nonprintable($_);
$Form{$key} = @vals == 1 ? $vals[0] : [@vals];
push @field_order, $key;
}
}

foreach (qw(required env_report print_config)) {
if ($Config{$_}) {
$Config{$_} =~ s/(\s+|\n)?,(\s+|\n)?/,/g;
$Config{$_} =~ s/(\s+)?\n+(\s+)?//g;
$Config{$_} = [split(/,/, $Config{$_})];
} else {
$Config{$_} = [];
}
}

$Config{env_report} = [ grep { $valid_ENV{$_} } @{$Config{env_report}} ];

return @field_order;
}

sub check_required {
my ($require, @error);

defined $Config{subject} or $Config{subject} = '';
defined $Config{recipient} or $Config{recipient} = '';
if ($Config{subject} =~ /[\n\r]/m ||
$Config{recipient} =~ /[\n\r]/m) {
error('no_recipient');
}

if ($Config{recipient}) {
my @valid;

foreach (split /,/, $Config{recipient}) {
next unless check_email($_);

if (check_recipient($_)) {
push @valid, $_;
}
}

error('no_recipient') unless scalar @valid;
$Config{recipient} = join ',', @valid;

} else {
my @allow = grep {/\@/} @allow_mail_to;
if (scalar @allow > 0 and not $emulate_matts_code) {
$Config{recipient} = $allow[0];
} elsif (%Form) {
error('no_recipient')
} else {
error('bad_referer')
}
}

if ($secure and request_method() ne 'POST') {
error('bad_method');
}

foreach (@{$Config{required}}) {
if ($_ eq 'email' && !check_email($Config{$_})) {
push(@error, $_);
} elsif (defined($Config{$_})) {
push(@error, $_) unless $Config{$_};
} else {
push(@error,$_) unless $Form{$_};
}
}

error('missing_fields', @error) if @error;
}

sub check_recipient {
my ($recip) = @_;

foreach my $r (@recipients) {
if ( ($recip =~ /(?:$r)$/) or $emulate_matts_code and ($recip =~ /$r/i) ) {
return(1);
}
}

warn_bad_email($recip, "script not configured to allow this address");
return(0);
}

sub return_html {
my ($key, $sort_order, $sorted_field);

if ($Config{'redirect'}) {
print redirect $Config{'redirect'};
} else {
print header;

my $title = escape_html( $Config{'title'} || 'Thank You' );
my $recipient = escape_html($Config{'recipient'});
my $attr = body_attributes(); # surely this should be done with CSS

print <<eohtml;
<html>

<title>$title
$style_element

h1.title {
text-align : center;
}


$debug_warnings

$title


Below is what you submitted to $recipient on $date




EOHTML

my @sorted_fields;
if ($Config{'sort'}) {
if ($Config{'sort'} eq 'alphabetic') {
@sorted_fields = sort keys %Form;
} elsif ($Config{'sort'} =~ /^order:.*,.*/) {
$sort_order = $Config{'sort'};
$sort_order =~ s/(\s+|\n)?,(\s+|\n)?/,/g;
$sort_order =~ s/(\s+)?\n+(\s+)?//g;
$sort_order =~ s/order://;
@sorted_fields = split(/,/, $sort_order);
} else {
@sorted_fields = @Field_Order;
}
} else {
@sorted_fields = @Field_Order;
}

foreach (@sorted_fields) {
if ($Config{print_blank_fields} || $Form{$_}) {
print '

', escape_html($_), ': ',
escape_html($Form{$_}), "

\n";
}
}

print qq{


\n};

if ($Config{return_link_url} && $Config{return_link_title}) {
print "\n";
}

print <<end_html_footer;
<hr="" size="1" width="75%">



FormMail
© 2001 London Perl Mongers




END_HTML_FOOTER
}
}

sub send_mail {

my $dashes = '-' x 75;

my $realname = $Config{realname};
if (defined $realname) {
if ($secure) {
# A transform to eliminate some potential problem characters
$realname =~ tr#()\\#{}/#;
$realname =~ s#\s+# #g;
}
$realname = " ($realname)";
} else {
$realname = $Config{realname} = '';
}

my $subject = $Config{subject} || 'WWW Form Submission';

my $email = $Config{email};
unless (defined $email and check_email($email)) {
$email = 'nobody';
}

if ("$Config{recipient}$email$realname$subject" =~ /\r|\n/) {
die 'multiline variable in mail header, unsafe to continue';
}

my $xheader = '';
if ( $secure and defined (my $addr = remote_addr()) ) {
$addr =~ /^([\d\.]+)$/ or die "bad remote addr [$addr]";
$xheader = "X-HTTP-Client: [$1]\n";
}

if ( $send_confirmation_mail ) {
open(CMAIL,"|$mailprog")
|| die "Can't open $mailprog\n";
print CMAIL $xheader, "To: $email$realname\n$confirmation_text";
close CMAIL;
}

open(MAIL,"|$mailprog")
|| die "Can't open $mailprog\n";

print MAIL $xheader, <<eomail;
to: $config{recipient}
from:="" $email$realname
subject:="" $subject

below="" is="" the="" result="" of="" your="" feedback="" form.="" it="" was="" submitted="" by
$config{realname}="" (${\(="" $config{email}||''="" )})="" on="" $date
$dashes


eomail

="" if="" ($config{print_config})="" {
="" foreach="" (@{$config{print_config}})="" print="" mail="" "$_:="" $config{$_}\n\n"="" $config{$_};
="" }
="" }

="" my="" @sorted_keys;
="" ($config{'sort'})="" ($config{'sort'}="" eq="" 'alphabetic')="" @sorted_keys="sort" keys="" %form;
="" }="" elsif="" ^order:.*,.*="" )="" $config{'sort'}="~" s="" (\s+|\n)?,(\s+|\n)?="" ,="" g;
="" (\s+)?\n+(\s+)?="" order:="" ;
="" $config{'sort'});
="" else="" (@sorted_keys)="" ($config{'print_blank_fields'}="" ||="" defined="" $form{$_})="" ",="" (ref="" $form{$_}="" ?="" "@{$form{$_}}"="" :="" $form{$_}),"\n\n";
="" "$dashes\n\n";

="" (@{$config{env_report}})="" $env{$_}\n"="" $env{$_};
="" close="" (mail)="" die="" $!;
}

sub="" check_email="" ($email)="@_;

" return="" 0="" $email="~" ^\s*$="" ;

="" unless="" ($email="~" ^(.+)\@([a-z0-9_\.\-\[\]]+)$="" is)="" warn_bad_email($email,="" "malformed="" email="" address");
="" 0;
="" ($user,="" $host)="($1," $2);

="" ($host="~" \.\.="" "hostname="" $host="" contains="" '..'");
="" ^\.="" starts="" with="" '.'");
="" \.$="" ends="" ($emulate_matts_code="" and="" not="" $secure)="" #="" be="" as="" generous="" possible="" without="" opening="" any="" known="" or="" strongly
="" suspected="" relaying="" holes.
="" ($user="~" ([^a-z0-9_\-\.\#\$\&\'\*\+\="" \="\?\^\`\{\|\}\~\200-\377])/i)" $c="sprintf" '%s="" (ascii="" 0x%.2x)',="" $1,="" unpack('c',$1);
="" "bad="" character="" $c");
="" 1;
="" only="" allow="" reasonable="" addresses.

="" ([^a-z0-9_\-\.\*\+\="])/i)" (length="" $user=""> 100) {
warn_bad_email($email, "username part too long");
return 0;
}

if (length $host > 100) {
warn_bad_email($email, "hostname too long");
return 0;
}
return 1 if $host =~ /^\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]$/;
return 1 if $host =~ /^[a-z0-9\-\.]+$/i;

warn_bad_email($email, "invalid hostname $host");
return 0;
}

# not reached
return 0;
}

sub warn_bad_email {
my ($email, $whybad) = @_;

$debug_warnings .= <<end if="" $debugging;
<p="">
Warning:
The email address ${\( escape_html($email) )} was rejected
for the following reason: ${\( escape_html($whybad) )}


END
}

# check the validity of a URL.

sub check_url_valid {
my $url = shift;

# allow relative URLs with sane values
return 1 if $url =~ m#^[a-z0-9_\-\.\,\+\/]+$#i;

$url =~ m< ^ (?:ftp|http|https):// [\w\-\.]+ (?:\:\d+)?
(?: / [\w\-.!~*'(|);/?\@&=+\$,%#]* )?
$
>x ? 1 : 0;
}

sub strip_nonprintable {
my $text = shift;
$text=~ tr#\011\012\040-\176\200-\377##dc;
return $text;
}

sub body_attributes {
my %attrs = (bgcolor => 'bgcolor',
background => 'background',
link_color => 'link',
vlink_color => 'vlink',
alink_color => 'alink',
text_color => 'text');

my $attr = '';

foreach (keys %attrs) {
next unless $Config{$_};
if (/color$/) {
next unless $Config{$_} =~ /^(?:#[0-9a-z]{6}|[\w\-]{2,50})$/i;
} elsif ($_ eq 'background') {
next unless check_url_valid($Config{$_});
} else {
die "no check defined for body attribute [$_]";
}
$attr .= qq( $attrs{$_}=") . escape_html($Config{$_}) . '"' if $Config{$_};
}

return $attr;
}

sub error {
my ($error, @error_fields) = @_;
my ($host, $missing_field, $missing_field_list);

my ($title, $heading,$error_body);

if ($error eq 'bad_referer') {
my $referer = referer();
$referer = '' if ! defined( $referer );
my $escaped_referer = escape_html($referer);

if ( $referer =~ m|^https?://([\w\.]+)|i) {
$host = $1;
$title = 'Bad Referrer - Access Denied';
$heading = $title;
$error_body =<<eobody;
<p>
The form attempting to use FormMail resides at $escaped_referer,
which is not allowed to access this program.



If you are attempting to configure FormMail to run with this form,
you need to add the following to \@referers, explained in detail in the
README file.



Add '$host' to your \@referers array.


EOBODY
}
else {
$title = 'Formail';
$heading = $title;
$error_body = '

Badness!

';
}
}
elsif ($error eq 'bad_method') {
my $ref = referer();
if (defined $ref and $ref =~ m#^https?://#) {
$ref = 'at ' . escape_html($ref) . '';
} else {
$ref = 'that you just filled in';
}
$title = 'Error: GET request';
$heading = $title;
$error_body =<<eobody;
<p>
The form $ref fails to specify the POST method, so it would not
be correct for this script to take any action in response to
your request.



If you are attempting to configure this form to run with FormMail,
you need to set the request method to POST in the opening form tag,
like this:
<form action="/cgi-bin/FormMail.pl" method="POST">


EOBODY
} elsif ($error eq 'no_recipient') {

my $recipient = escape_html($Config{recipient});
$title = 'Error: Bad or Missing Recipient';
$heading = $title;
$error_body =<<eobody;
<p>
There was no recipient or an invalid recipient specified in the
data sent to FormMail. Please make sure you have filled in the
recipient form field with an e-mail address that has
been configured in \@recipients. More information on
filling in recipient form fields and variables can be
found in the README file.





The recipient was: [ $recipient ]


EOBODY
}
elsif ( $error eq 'missing_fields' ) {
if ( $Config{'missing_fields_redirect'} ) {
print redirect($Config{'missing_fields_redirect'});
exit;
}
else {
my $missing_field_list = join '',
map { '
  • ' . escape_html($_) . "
  • \n" }
    @error_fields;
    $title = 'Error: Blank Fields';
    $heading = $title;
    $error_body =<<eobody;
    <p>
    The following fields were left blank in your submission form:




      $missing_field_list



    These fields must be filled in before you can successfully
    submit the form.




    Please use your back button to return to the form and
    try again.


    EOBODY
    }
    }

    print header();
    print <<end_error_html;
    <!doctype html="" public="" "-="" w3c="" dtd="" xhtml="" 1.0="" transitional="" en"
    ="" "http:="" www.w3.org="" tr="" xhtml1="" xhtml1-transitional.dtd"="">


    <title>$title
    $style_element




    $debug_warnings

    $heading


    $error_body



    FormMail
    © 2001 London Perl Mongers





    END_ERROR_HTML
    exit;
    }

    use vars qw(%escape_html_map);

    BEGIN
    {
    %escape_html_map = ( '&' => '&',
    '<' => '<',
    '>' => '>',
    '"' => '"',
    "'" => ''',
    );
    }

    sub escape_html {
    my $str = shift;

    my $chars = join '', keys %escape_html_map;

    if (defined($str))
    {
    $str =~ s/([\Q$chars\E])/$escape_html_map{$1}/g;
    }

    return $str;
    }



    # begin Unit Tests
    # sub unitTest
    # {
    # recipientTests();
    # refererTests();
    # exit(0);
    # }
    # #
    # sub recipientTests()
    # {
    # recipCheck('you@your.domain', 1, 1);
    # recipCheck('you@your.domain', 1, 0);
    # recipCheck('some.one.else@your.domain', 1, 1);
    # recipCheck('some.one.else@your.domain', 1, 0);
    # recipCheck('anyone@localhost', 1, 1);
    # recipCheck('anyone@localhost', 1, 0);
    # recipCheck('localhost', 0, 1);
    # recipCheck('localhost', 0, 0);
    # recipCheck('user%elsewhere.com@localhost', 0, 1);
    # recipCheck('user%elsewhere.com@localhost', 0, 0);
    # #
    # recipCheck('YOU@your.domain', 1, 1);
    # recipCheck('YOU@your.domain', 0, 0);
    # recipCheck('some.one.else@YOUR.domain', 1, 1);
    # recipCheck('some.one.else@YOUR.domain', 0, 0);
    # recipCheck('anyone@Localhost', 1, 1);
    # recipCheck('anyone@Localhost', 0, 0);
    # #
    # recipCheck('<user@elsewhere.com>your.domain', 0, 0);
    # recipCheck('user@elsewhere.com(your.domain', 0, 0);
    # }
    # #
    # sub recipCheck
    # {
    # my ($recip, $shouldBeGood, $emulate) = @_;
    # my $secureMsg;
    # #
    # $emulate = 0 if ! defined( $emulate );
    # #
    # if ($emulate)
    # {
    # $secure = 0;
    # $emulate_matts_code = 1;
    # $secureMsg = 'insecure';
    # }
    # else
    # {
    # $secure = 1;
    # $emulate_matts_code = 0;
    # $secureMsg = 'secure';
    # }
    # #
    # if ($shouldBeGood)
    # {
    # if ((! check_email($recip)) or (! check_recipient($recip)))
    # {
    # warn "$recip should be good ($secureMsg)";
    # }
    # }
    # else
    # {
    # if (check_email($recip) and check_recipient($recip))
    # {
    # warn "$recip should be bad ($secureMsg)";
    # }
    # }
    # }
    # #
    # sub refererTests
    # {
    # refCheck('xxx.xxx.xxx', 0);
    # refCheck('http://dave.org.uk', 1);
    # refCheck('http://dave.org.uk/', 1);
    # refCheck('http://dave.org.uk/more', 1);
    # refCheck('https://dave.org.uk/', 1);
    # refCheck(undef, 0, 0);
    # refCheck(undef, 1, 1);
    # refCheck('https://dave.org.uk@someplace.else.com', 0);
    # refCheck('https://dave.org.uk@someplace.else.com', 1, 1);
    # refCheck('https://someguy@dave.org.uk', 0, 1);
    # refCheck('https://someguy@dave.org.uk', 1, 0);
    # refCheck('https://someguy@dave.org.uk/more', 1, 0);
    # refCheck('http://209.207.222.64', 1);
    # refCheck('http://localhost/', 1);
    # }
    # #
    # sub refCheck
    # {
    # my ($referer, $shouldBeGood, $emulate) = @_;
    # my $secureMsg;
    # #
    # $emulate = 0 if ! defined( $emulate );
    # #
    # if ($emulate)
    # {
    # $secure = 0;
    # $secureMsg = 'insecure';
    # }
    # else
    # {
    # $secure = 1;
    # $secureMsg = 'secure';
    # }
    # #
    # if ($shouldBeGood)
    # {
    # warn "$referer should be good ($secureMsg)" if ! check_referer($referer);
    # }
    # else
    # {
    # warn "$referer should be bad ($secureMsg)" if check_referer($referer);
    # }
    # }


    END SCRIPT.

    Deepak Anish
    Computer Programmer
    Maxumise Fiji Ltd
    Suva, Fiji
    AnswerRe: cgi mailer ---- giving troubles Pin
    Vasudevan Deepak Kumar2-Mar-06 19:31
    Vasudevan Deepak Kumar2-Mar-06 19:31 
    GeneralRe: cgi mailer ---- giving troubles Pin
    deepak15-Mar-06 9:06
    deepak15-Mar-06 9:06 
    QuestionGetting a list of links in an html file Pin
    imadoki1-Mar-06 9:09
    imadoki1-Mar-06 9:09 
    AnswerRe: Getting a list of links in an html file Pin
    Vasudevan Deepak Kumar1-Mar-06 22:57
    Vasudevan Deepak Kumar1-Mar-06 22:57 
    QuestionNeed javascript code!!Urgent Pin
    Sushant_Mathur1-Mar-06 4:16
    Sushant_Mathur1-Mar-06 4:16 
    QuestionRe: Need javascript code!!Urgent Pin
    nicko1-Mar-06 14:35
    nicko1-Mar-06 14:35 
    AnswerRe: Need javascript code!!Urgent Pin
    Vasudevan Deepak Kumar1-Mar-06 22:56
    Vasudevan Deepak Kumar1-Mar-06 22:56 
    QuestionHow to implement transactions in Biz logic layer in 3 tier arch. Pin
    Ravi_Vaswani28-Feb-06 22:30
    Ravi_Vaswani28-Feb-06 22:30 
    AnswerRe: How to implement transactions in Biz logic layer in 3 tier arch. Pin
    darkelv1-Mar-06 3:49
    darkelv1-Mar-06 3:49 
    AnswerRe: How to implement transactions in Biz logic layer in 3 tier arch. Pin
    JP_Rocks9-May-11 0:28
    JP_Rocks9-May-11 0:28 
    Questionsort image list Pin
    Marc Soleda28-Feb-06 20:05
    Marc Soleda28-Feb-06 20:05 
    AnswerRe: sort image list Pin
    Vasudevan Deepak Kumar2-Mar-06 19:57
    Vasudevan Deepak Kumar2-Mar-06 19:57 
    GeneralRe: sort image list Pin
    Marc Soleda2-Mar-06 20:08
    Marc Soleda2-Mar-06 20:08 
    QuestionAccessing Multiple form. ASP Pin
    panalprasad28-Feb-06 17:28
    panalprasad28-Feb-06 17:28 
    AnswerRe: Accessing Multiple form. ASP Pin
    Vasudevan Deepak Kumar1-Mar-06 22:58
    Vasudevan Deepak Kumar1-Mar-06 22:58 
    Questionweird characters returned in xmlhttp object Pin
    TofuBug2428-Feb-06 13:05
    TofuBug2428-Feb-06 13:05 
    AnswerRe: weird characters returned in xmlhttp object Pin
    Sushant_Mathur28-Feb-06 19:20
    Sushant_Mathur28-Feb-06 19:20 

    General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

    Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.