Add a patch to make gotmail work again with newer curl and hotmail layout
Submitted by: Kraig <k.yahoo@xmltok.com> Obtained from: debian
This commit is contained in:
parent
5570099945
commit
1420869a59
Notes:
svn2git
2021-03-31 03:12:20 +00:00
svn path=/head/; revision=136165
2 changed files with 265 additions and 0 deletions
|
@ -7,6 +7,7 @@
|
|||
|
||||
PORTNAME= gotmail
|
||||
PORTVERSION= 0.8.2
|
||||
PORTREVISION= 1
|
||||
CATEGORIES= mail perl5
|
||||
MASTER_SITES= ${MASTER_SITE_SOURCEFORGE}
|
||||
MASTER_SITE_SUBDIR= ${PORTNAME}
|
||||
|
|
264
mail/gotmail/files/patch-gotmail
Normal file
264
mail/gotmail/files/patch-gotmail
Normal file
|
@ -0,0 +1,264 @@
|
|||
--- gotmail.orig Sun Oct 10 19:42:31 2004
|
||||
+++ gotmail Thu May 26 14:28:27 2005
|
||||
@@ -197,7 +197,7 @@
|
||||
# and also to Tim Dijkstra. -pik-
|
||||
|
||||
sub parseConfig {
|
||||
- if ("@ARGV" =~ /(\s|^)(-c|--config-file)\ ([\w\.~\/\-]*)(\s|$)/i) {
|
||||
+ if ("@ARGV" =~ /(\s|^)(-c|--config-file)\ ([\w\.~\/\-\@]*)(\s|$)/i) {
|
||||
$conf_file = $3;
|
||||
if (! -r $conf_file) {
|
||||
die "Config file <$conf_file> is not readable!\n";
|
||||
@@ -578,7 +578,7 @@
|
||||
# Get rid of any trailing space on options.. Just for neatness.
|
||||
$options =~ s/ $//;
|
||||
|
||||
- my($cmdline) = "$conf_curl \"$url\" $options -i -m 600 -D $tmp_headers" .
|
||||
+ my($cmdline) = "$conf_curl \'$url\' $options -i -m 600 -D $tmp_headers" .
|
||||
" -A \"Mozilla/4.73 [en] (Win98; I)\"";
|
||||
|
||||
# Copy output to logfile if necessary
|
||||
@@ -627,25 +627,23 @@
|
||||
{
|
||||
dispText("Getting hotmail index page...\n");
|
||||
my(@index_page); ## This will have the login page.
|
||||
- my($form_label);
|
||||
|
||||
- my(@java_page) = getPage("http://www.hotmail.com/", "", 1, 1, 0);
|
||||
- ## @java_page is now an intermediate page which checks if you
|
||||
- ## have javascript enabled or not!!
|
||||
- my($page) = join("", @java_page);
|
||||
-
|
||||
- my($check_java);
|
||||
- if($page =~ m/<form.*hiddenform.*action=\"(\S+)\".*>/i) {
|
||||
- $check_java = $1;
|
||||
- }
|
||||
- if ($check_java) {
|
||||
+ @index_page = getPage("http://www.hotmail.com/", "", 1, 1, 0);
|
||||
+ my($page) = join("", @index_page);
|
||||
+
|
||||
+ ## @index_page is now an intermediate page which checks if you
|
||||
+ ## have javascript enabled or not!! This code invokes the form
|
||||
+ ## on that page to get you to the login/password page.
|
||||
+ if($page =~ m/<form.*((hiddenform)|(fmHF)).*action=\"(\S+)\".*>/i) {
|
||||
+ my $action = $4;
|
||||
+
|
||||
## This processing happens only for the "new" hotmail structure.
|
||||
dispText("Processing java check....\n");
|
||||
my($inp); ## This var will store all the input fields.
|
||||
- while($page =~ m/<\s*input\s+.*name=\"(\S+)\"\s+value=\"(\S+)\"/) {
|
||||
- $inp .= "$1=$2\&";
|
||||
+ while($page =~ m/<\s*input\s+.*name=\"(\S+)\"(\s+id="\S+")?\s+value=\"(\S*)\"/) {
|
||||
## Get rid of the input field we processed.
|
||||
- $page =~ s/<\s*input/some_weird_unique_value_jsdahf/;
|
||||
+ $page = $';
|
||||
+ $inp .= "$1=" . uri_escape($3) . "\&";
|
||||
}
|
||||
## Get rid of the last "&"
|
||||
$inp =~ s/&$//g;
|
||||
@@ -658,52 +656,100 @@
|
||||
my($params) = "\@$tmp_formdata";
|
||||
|
||||
## Hopefully this should get us to the correct index page.
|
||||
- @index_page = getPage($check_java, $params, 1, 1, 0);
|
||||
- $form_label = "hotmail_com";
|
||||
- }
|
||||
- else {
|
||||
- ## The "old" hotmail page structure
|
||||
- @index_page = @java_page;
|
||||
- $form_label = "";
|
||||
+ @index_page = getPage($action, $params, 1, 1, 0);
|
||||
+ $page = join "", @index_page;
|
||||
}
|
||||
|
||||
# Find the form "ACTION" parameter...
|
||||
- my($login_script) = "";
|
||||
- my($ctnum) = "";
|
||||
+ my($login_script);
|
||||
+ my($login_new) = 0;
|
||||
|
||||
- my $page = join "", @index_page;
|
||||
- if ($page =~ m/<form.*${form_label}.*action=\"(\S+)\".*>/i) {
|
||||
+ # Old - multiple forms for multiple domains
|
||||
+ if ($page =~ m/<form.*hotmail_com.*action=\"(\S+)\".*>/i) {
|
||||
$login_script = $1;
|
||||
}
|
||||
-
|
||||
- if ($page =~ m/ct=([0-9]+)/i) {
|
||||
- $ctnum = uri_escape($1);
|
||||
+ # New - heavy javascript
|
||||
+ elsif ($page =~ m/<form.*f1.*action=\"(\S+)\".*>/i) {
|
||||
+ $login_script = $1;
|
||||
+ $login_new = 1;
|
||||
}
|
||||
-
|
||||
- if ($login_script eq "") {
|
||||
- die "Page doesn't contain any form action field!\n";
|
||||
+ # Very old - simple form
|
||||
+ elsif ($page =~ m/<form.*action=\"(\S+)\".*>/i) {
|
||||
+ $login_script = $1;
|
||||
}
|
||||
+ else {
|
||||
+ die "Page doesn't contain any form action field!\n";
|
||||
+ }
|
||||
|
||||
my($FORMFILE) = new FileHandle "> $tmp_formdata" ||
|
||||
die "Couldn't open formdata file: $!\n";
|
||||
- print $FORMFILE ("login=" . uri_escape($login, "^A-Za-z") .
|
||||
- "\&passwd=" . uri_escape($password, "^A-Za-z") .
|
||||
- "\&svc=mail\&mspp_shared=1" .
|
||||
- "\&domain=" . uri_escape($domain) .
|
||||
- "\&RemoteDAPost=https://login.msnia.passport.com/ppsecure/post.asp" .
|
||||
- "\&sec=share\&curmbox=ACTIVE\&js=yes\&_lang=EN" .
|
||||
- "\&beta=0\&ishotmail=1\&id=2\&fs=1" .
|
||||
- "\&cb=_lang%3dEN%26country%3dUS\&ct=$ctnum");
|
||||
+
|
||||
+ if( $login_new ) {
|
||||
+ dispText("Using New Login...\n");
|
||||
+
|
||||
+ ## The actual action of the form is replace by javascript
|
||||
+ ## (authentication depends on the domain of your user id).
|
||||
+ ## and arguments are appended in javascript
|
||||
+ if( $page =~ m/g_DO\["\Q$domain\E"\]\s*=\s*"([^"]+)\"/ ) {
|
||||
+ $login_script = $1;
|
||||
+ #dispText( "g_DO=$1\n" );
|
||||
+ }
|
||||
+ if( $page =~ m/g_QS\s*=\s*"([^"]+)\"/ ) {
|
||||
+ $login_script .= index($login_script,'?') >= 0 ? '&' : '?';
|
||||
+ $login_script .= $1;
|
||||
+ #dispText( "g_QS=$1\n" );
|
||||
+ }
|
||||
+
|
||||
+ ## Get (or calculate) the hidden fields of the form
|
||||
+ my ( $PPFT, $PPSX, $PwdPad );
|
||||
+ {
|
||||
+ if( $page =~ m/<\s*input\s+.*name=\"PPFT\"(\s+id="\S+")?\s+value=\"(\S*)\"/ ) {
|
||||
+ $PPFT = $2;
|
||||
+ #dispText( "PPFT=$PPFT\n" );
|
||||
+ }
|
||||
+ if( $page =~ m/<\s*input\s+.*name=\"PPSX\"(\s+id="\S+")?\s+value=\"(\S*)\"/ ) {
|
||||
+ $PPSX = $2;
|
||||
+ #dispText( "PPSX=$PPSX\n" );
|
||||
+ }
|
||||
+ {
|
||||
+ my $Padding = "IfYouAreReadingThisYouHaveTooMuchFreeTime";
|
||||
+ $PwdPad = substr( $Padding, 0, length($Padding)-length($password) );
|
||||
+ #dispText( "PwdPad=$PwdPad\n" );
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ print $FORMFILE ("PPSX=$PPSX" .
|
||||
+ "\&PwdPad=$PwdPad" .
|
||||
+ "\&login=" . uri_escape($login . '@' . $domain, "^A-Za-z") .
|
||||
+ "\&passwd=" . uri_escape($password, "^A-Za-z") .
|
||||
+ "\&SI=" . uri_escape( ' Sign In ' ) .
|
||||
+ "\&LoginOptions=3" .
|
||||
+ "\&PPFT=" . uri_escape( $PPFT ) );
|
||||
+ } else {
|
||||
+ dispText("Using Old Login...\n");
|
||||
+ my($ctnum) = "";
|
||||
+ if ($page =~ m/ct=([0-9]+)/i) {
|
||||
+ $ctnum = uri_escape($1);
|
||||
+ }
|
||||
+ print $FORMFILE ("login=" . uri_escape($login, "^A-Za-z") .
|
||||
+ "\&passwd=" . uri_escape($password, "^A-Za-z") .
|
||||
+ "\&svc=mail\&mspp_shared=1" .
|
||||
+ "\&domain=" . uri_escape($domain) .
|
||||
+ "\&RemoteDAPost=https://login.msnia.passport.com/ppsecure/post.asp" .
|
||||
+ "\&sec=share\&curmbox=ACTIVE\&js=yes\&_lang=EN" .
|
||||
+ "\&beta=0\&ishotmail=1\&id=2\&fs=1" .
|
||||
+ "\&cb=_lang%3dEN%26country%3dUS\&ct=$ctnum");
|
||||
+ }
|
||||
|
||||
close $FORMFILE;
|
||||
my($params) = "\@$tmp_formdata";
|
||||
|
||||
dispText("Logging in...\n");
|
||||
my(@login_page) = getPage($login_script, $params, 1, 1, 0);
|
||||
+ $page = join "", @login_page;
|
||||
|
||||
# Find where they are sending us now...
|
||||
my($redirect_location) = "";
|
||||
- $page = join "", @login_page;
|
||||
|
||||
# Now not needed per Chris Ebenezer's comments
|
||||
# if ($domain eq 'msn.com') {
|
||||
@@ -724,8 +770,9 @@
|
||||
|
||||
if ($page =~ m/top\.location\.replace\(\"(.*)\"\);/i) {
|
||||
$redirect_location = $1;
|
||||
- $redirect_location =~ s/\$/\\\$/g;
|
||||
- }
|
||||
+ } elsif ($page =~ m/meta\s*http-equiv="refresh"\s*content="0;\s*URL=([^"]+)"/i ) {
|
||||
+ $redirect_location = $1;
|
||||
+ }
|
||||
|
||||
if ($redirect_location eq "") {
|
||||
die("Hotmail's page structure has changed! (redirloc)\n");
|
||||
@@ -737,30 +784,32 @@
|
||||
if ($redirect_location =~ m/http:\/\/([^\/]+)\/(.*)$/i) {
|
||||
$host = $1;
|
||||
} else {
|
||||
- die ("Could not parse redirect location");
|
||||
+ die ("Could not parse redirect location\n");
|
||||
}
|
||||
|
||||
dispText("Following redirect...\n");
|
||||
my(@redirect_page) = getPage($redirect_location, "", 0, 1, 0);
|
||||
+ $page = join "", @redirect_page;
|
||||
|
||||
# Find where the inbox is located...
|
||||
- my($inbox_location) = "";
|
||||
- $page = join "", @redirect_page;
|
||||
+ my($inbox_location);
|
||||
if ($page =~ m/Location: (\S+)/i) {
|
||||
my $inbox_loc = $1;
|
||||
+ if ($inbox_loc =~ m/\&RedirectLocation=(http[^\&]+)\&/i) {
|
||||
+ $inbox_loc = uri_unescape($1);
|
||||
+ }
|
||||
$inbox_loc =~ /(.+)\/dasp\/ua_info.asp\?pg=browser_limit[^&]*(&.+)/;
|
||||
$inbox_location = "$1\/HoTMail";
|
||||
- dispText("Going to Inbox Page: $inbox_location\n");
|
||||
- my(@redirect_page) = getPage($inbox_location, "", 1, 1, 0);
|
||||
} elsif ($page =~ /unavailable/i) {
|
||||
die("Hotmail is reporting that your account is temporarily " .
|
||||
- "unavailable. Please try again later.");
|
||||
- }
|
||||
-
|
||||
- if ($inbox_location eq "") {
|
||||
+ "unavailable. Please try again later.\n");
|
||||
+ } else {
|
||||
die("Hotmail's page structure has changed! (inboxloc)\n");
|
||||
}
|
||||
|
||||
+ dispText("Going to Inbox Page: $inbox_location\n");
|
||||
+ getPage($inbox_location, "", 1, 1, 0);
|
||||
+
|
||||
return $inbox_location;
|
||||
}
|
||||
|
||||
@@ -1008,7 +1057,7 @@
|
||||
open PR,"|" . $conf_procmail_bin;
|
||||
print PR $output;
|
||||
close PR;
|
||||
- print "Done.\n";
|
||||
+ dispText("Done.\n");
|
||||
}
|
||||
elsif ($resend_address eq "") {
|
||||
my($output) = $Message;
|
||||
@@ -1123,13 +1172,13 @@
|
||||
if ($conf_movespam) {
|
||||
# Figure out the ID of the Spam folder
|
||||
$spam_folder_id = getFolderId($host, $folder_index_url, $conf_movespam);
|
||||
- print "\$spam_folder_id->".$spam_folder_id."\n";
|
||||
+ dispText("\$spam_folder_id->".$spam_folder_id."\n");
|
||||
}
|
||||
|
||||
if ($conf_move_messages_after_download) {
|
||||
# Figure out the ID of the move to folder
|
||||
$move_folder_id = getFolderId($host, $folder_index_url, $conf_move_messages_after_download);
|
||||
- print "\$move_folder_id->".$move_folder_id."\n";
|
||||
+ dispText("\$move_folder_id->".$move_folder_id."\n");
|
||||
}
|
||||
|
||||
# Ok let's get the folder list!
|
Loading…
Reference in a new issue