This commit is contained in:
Nick Bebout 2012-04-16 17:26:18 -05:00
parent 1b3773e80f
commit 1cb5bee328
98 changed files with 1701 additions and 597 deletions

10
CREDITS
View file

@ -1,5 +1,5 @@
#!/bin/cat #!/bin/cat
# $Id: CREDITS,v 1.160 2011/07/11 01:30:09 gilles Exp gilles $ # $Id: CREDITS,v 1.162 2011/09/21 20:21:14 gilles Exp gilles $
If you want to make a donation to the author, Gilles LAMIRAL, If you want to make a donation to the author, Gilles LAMIRAL,
use any of the following ways: use any of the following ways:
@ -30,10 +30,16 @@ I thank very much all of these people.
I thank also very much all people who bought imapsync from the homepage I thank also very much all people who bought imapsync from the homepage
but I don't cite them here. but I don't cite them here.
Klaus Franken
Patch to avoid useless warning "Use of uninitialized value $uid1 in exists"
Charles H Deling
Contributed by giving the book
13.59 "The Twitter Book"
Paulo Victor Fernandes da Silva Paulo Victor Fernandes da Silva
Contributed by giving money 1 USD Contributed by giving money 1 USD
Daniel Rohde Daniel Rohde
Bugfix. Solaris 10. ps -o vsz -p @PID Bugfix. Solaris 10. ps -o vsz -p @PID

View file

@ -1,17 +1,46 @@
RCS file: RCS/imapsync,v RCS file: RCS/imapsync,v
Working file: imapsync Working file: imapsync
head: 1.456 head: 1.463
branch: branch:
locks: strict locks: strict
gilles: 1.456 gilles: 1.463
access list: access list:
symbolic names: symbolic names:
keyword substitution: kv keyword substitution: kv
total revisions: 456; selected revisions: 456 total revisions: 463; selected revisions: 463
description: description:
---------------------------- ----------------------------
revision 1.456 locked by: gilles; revision 1.463 locked by: gilles;
date: 2011/11/12 21:58:52; author: gilles; state: Exp; lines: +9 -7
--subscribe is on by defaut.
----------------------------
revision 1.462
date: 2011/10/16 23:48:58; author: gilles; state: Exp; lines: +14 -11
Added --nocacheaftercopy to avoid bad uids in cache with --useuid or --usecache and strange uid generator like dbmail 2.2.17
----------------------------
revision 1.461
date: 2011/10/07 21:02:15; author: gilles; state: Exp; lines: +8 -8
MailEnable
Mirapoint
----------------------------
revision 1.460
date: 2011/09/21 20:19:46; author: gilles; state: Exp; lines: +8 -8
Avoid Perl warning 'Use of uninitialized value $uid1 in exists'. Thanks to Klaus Franken
----------------------------
revision 1.459
date: 2011/09/21 20:10:38; author: gilles; state: Exp; lines: +7 -7
Kerio 7.2.0 Patch 1 as host2
----------------------------
revision 1.458
date: 2011/08/24 22:26:20; author: gilles; state: Exp; lines: +7 -6
Yahoo host1 success.
----------------------------
revision 1.457
date: 2011/08/24 21:55:56; author: gilles; state: Exp; lines: +10 -10
Renamed file.csv to file.txt
----------------------------
revision 1.456
date: 2011/08/24 04:21:30; author: gilles; state: Exp; lines: +15 -13 date: 2011/08/24 04:21:30; author: gilles; state: Exp; lines: +15 -13
Help message on --sep when namespace separator is NIL. Yahoo case. Help message on --sep when namespace separator is NIL. Yahoo case.
---------------------------- ----------------------------

53
FAQ
View file

@ -1,11 +1,14 @@
#!/bin/cat #!/bin/cat
# $Id: FAQ,v 1.92 2011/08/24 06:50:17 gilles Exp gilles $ # $Id: FAQ,v 1.95 2011/11/12 23:41:20 gilles Exp gilles $
+------------------+ +------------------+
| FAQ for imapsync | | FAQ for imapsync |
+------------------+ +------------------+
Unix versus Windows syntax. Unix versus Windows syntax.
A) \ versus ^
On Unix shells you can write a single command on multiple lines On Unix shells you can write a single command on multiple lines
by using the escape character \ at the end of each line by using the escape character \ at the end of each line
(except the last one). On Windows this character is ^ (except the last one). On Windows this character is ^
@ -31,6 +34,14 @@ better, no truncation, pretty print. It's just sugar.
In this FAQ I use \ for examples. Transcript to ^ if In this FAQ I use \ for examples. Transcript to ^ if
you're on a Windows system. you're on a Windows system.
B) ' versus "
On Windows the single quote character ' doesn't work
like on Unix so in the examples of this FAQ the
command containing single quotes ' will fail on Windows.
To fix it just replace single quotes ' by double quotes "
======================================================================= =======================================================================
Q. How to install imapsync? Q. How to install imapsync?
@ -81,11 +92,11 @@ Thank you for your participation.
Q. I need to migrate hundred accounts, how can I do? Q. I need to migrate hundred accounts, how can I do?
R. If you have many mailboxes to migrate think about a little R. If you have many mailboxes to migrate think about a little
shell program. Write a file called file.csv (for example) shell program. Write a file called file.txt (for example)
containing users and passwords. containing users and passwords.
The separator used in this example is ';' The separator used in this example is ';'
The file.csv file contains: The file.txt file contains:
user001_1;password001_1;user001_2;password001_2 user001_1;password001_1;user001_2;password001_2
user002_1;password002_1;user002_2;password002_2 user002_1;password002_1;user002_2;password002_2
@ -99,11 +110,11 @@ On Unix the shell program can be:
{ while IFS=';' read u1 p1 u2 p2; do { while IFS=';' read u1 p1 u2 p2; do
imapsync --host1 imap.side1.org --user1 "$u1" --password1 "$p1" \ imapsync --host1 imap.side1.org --user1 "$u1" --password1 "$p1" \
--host2 imap.side2.org --user2 "$u2" --password2 "$p2" ... --host2 imap.side2.org --user2 "$u2" --password2 "$p2" ...
done ; } < file.csv done ; } < file.txt
On Windows the batch program can be: On Windows the batch program can be:
FOR /F "tokens=1,2,3,4 delims=; eol=#" %%G IN (file.csv) DO imapsync ^ FOR /F "tokens=1,2,3,4 delims=; eol=#" %%G IN (file.txt) DO imapsync ^
--host1 imap.side1.org --user1 %%G --password1 %%H ^ --host1 imap.side1.org --user1 %%G --password1 %%H ^
--host2 imap.side2.org --user2 %%I --password2 %%J ... --host2 imap.side2.org --user2 %%I --password2 %%J ...
@ -128,10 +139,15 @@ R. - Download latest Mail::IMAPClient 3.xx at
- run imapsync with perl and -I option tailing to use the perl - run imapsync with perl and -I option tailing to use the perl
module Mail-IMAPClient-3.xx. Example: module Mail-IMAPClient-3.xx. Example:
perl -I./Mail-IMAPClient-3.23/lib ./imapsync ... perl -I./Mail-IMAPClient-3.30/lib ./imapsync ...
or if imapsync is in directory /path/ or if imapsync is in directory /path/
perl -I./Mail-IMAPClient-3.23/lib /path/imapsync ... perl -I./Mail-IMAPClient-3.30/lib /path/imapsync ...
- Look at the script named i3 in the tarball, it can be used to
run imapsync with included Mail-IMAPClient-3.30/ wherever you
unpacked the imapsync tarball
======================================================================= =======================================================================
Q. How can I use imapsync with Mail::IMAPClient 2.2.9 perl module? Q. How can I use imapsync with Mail::IMAPClient 2.2.9 perl module?
@ -148,6 +164,11 @@ R. - Download Mail::IMAPClient 2.2.9 at
or if imapsync is in directory /path/ or if imapsync is in directory /path/
perl -I./Mail-IMAPClient-2.2.9 /path/imapsync [...] perl -I./Mail-IMAPClient-2.2.9 /path/imapsync [...]
- Look at the script named i2 in the tarball, it can be used to
run imapsync with included Mail-IMAPClient-2.2.9/ wherever you
unpacked the imapsync tarball
======================================================================= =======================================================================
Q. Can I use imapsync to migrate emails from pop3 server to imap server? Q. Can I use imapsync to migrate emails from pop3 server to imap server?
@ -322,7 +343,7 @@ Q. How to convert flags?
R. use --regexflag R. use --regexflag
For example to convert flag IMPORTANT to flag CANWAIT For example to convert flag IMPORTANT to flag CANWAIT
imapsync ... --regexflag 's/IMPORTANT/CANWAIT/g' --debugflags imapsync ... --regexflag "s/IMPORTANT/CANWAIT/g" --debugflags
option --debugflags is usefull to see in details what imapsync option --debugflags is usefull to see in details what imapsync
does with flags. does with flags.
@ -1014,6 +1035,22 @@ http://www.linux-france.org/prj/imapsync_list/msg00639.html
http://biasecurities.com/blog/2009/migrate-email-from-gmail-to-google-apps/ http://biasecurities.com/blog/2009/migrate-email-from-gmail-to-google-apps/
http://www.thamtech.com/blog/2008/03/29/gmail-to-google-apps-email-migration/ http://www.thamtech.com/blog/2008/03/29/gmail-to-google-apps-email-migration/
=======================================================================
Q. Synchronising from Yahoo to XXX
R. Use --host1 imap.mail.yahoo.com --sep1 '/'
./imapsync \
--host1 imap.mail.yahoo.com \
--user1 billy \
--password1 secret \
--host2 XXX \
--user2 billy \
--password2 secret \
--sep1 '/'
Can also add --ssl1 to gain encrypted transfer from yahoo.
======================================================================= =======================================================================
Q. from Microsoft's Exchange 2007 to Google Apps for your Domain Q. from Microsoft's Exchange 2007 to Google Apps for your Domain
(GAFYD) (GAFYD)

View file

@ -5,7 +5,49 @@ Changes from 2.99_01 to 3.16 made by Mark Overmeer
Changes from 0.09 to 2.99_01 made by David Kernen Changes from 0.09 to 2.99_01 made by David Kernen
- Potential compatibility issues from 3.17+ highlighted with '*' - Potential compatibility issues from 3.17+ highlighted with '*'
version 3.28_04: Fri Mar 4 00:17:38 EST 2011 version 3.30: Fri Nov 11 09:37:00 EST 2011
- rt.cpan.org#72347: Starttls array ref argument dereferenced twice
[Jonathan Buhacoff]
- during connect(): Port now defaults 143 or 993 if $self->Ssl
[Kodi Arfer]
- stop reconnect deep recursion if server disconnects on login
[Luca Ferrario]
- reconnect() now returns 1 on success; on error undef or 0=recursive
- handle EBADF from syswrite in _send_bytes
- rt.cpan.org#67263: add RFC4978 IMAP COMPRESS Extension support
[SDIZ]
+ new method: compress()
+ new attributes: Compress Readmoremethod
- general code cleanup:
+ new() now always returns $self or undef (never $sock any more)
+ Socket() now always return a socket or undef
+ login() now always return $self or undef
+ _read_more() will now use Readmoremethod if set
- missing second arg '' for encode_base64 causing AUTHENTICATE
PLAIN to fail on lines longer than 76 characters
[Yoshiho Yoshida]
version 3.29: Tue Aug 9 00:33:52 EDT 2011
- rt.cpan.org#69876: ENVELOPE as part of fetch_hash convenience method
[Chris Huttman]
+ added Mail::IMAPClient::BodyStructure::Envelope->parse_string($str)
convenience method for handling ENVELOPE data from fetch_hash
- rt.cpan.org#68310: folders() should not call exists()/STATUS
[Gilles Lamiral]
- affects folders() and subscribed() methods
+ use selectable() instead of exists() in call
- consider removing extra call to folders()/subscribed()
+ ensure separator is set properly in folders()
+ selectable now properly checks for \Noselect flag
+ update folders() POD to match implementation behavior
- rt.cpan.org#68648: [patch]: CAPABILITY after authenticate
[Stef Simoens]
+ delete cache after State set to Authenticate
- State() is no longer an auto-generated method
- rt.cpan.org#68755: provided socket loses blocking in 3.19-3.28
[Martin Schmitt]
version 3.28: Fri Mar 4 00:17:38 EST 2011
- rt.cpan.org#66004: internaldate() return undef if no internaldate in reply - rt.cpan.org#66004: internaldate() return undef if no internaldate in reply
[Jason Long] [Jason Long]
- rt.cpan.org#66367: fetch_hash uses Escaped_results() in 3.26/3.27 - rt.cpan.org#66367: fetch_hash uses Escaped_results() in 3.26/3.27

View file

@ -1,6 +1,6 @@
--- #YAML:1.0 --- #YAML:1.0
name: Mail-IMAPClient name: Mail-IMAPClient
version: 3.28 version: 3.30
abstract: IMAP4 client library abstract: IMAP4 client library
author: author:
- Phil Pearl (Lobbes) <phil@zimbra.com> - Phil Pearl (Lobbes) <phil@zimbra.com>

View file

@ -8,6 +8,7 @@ my @missing;
my %optional = ( my %optional = (
"Authen::NTLM" => { for => "Authmechanism 'NTLM'" }, "Authen::NTLM" => { for => "Authmechanism 'NTLM'" },
"Authen::SASL" => { for => "Authmechanism 'DIGEST-MD5'" }, "Authen::SASL" => { for => "Authmechanism 'DIGEST-MD5'" },
"Compress::Zlib" => { for => "COMPRESS DEFLATE support" },
"Digest::HMAC_MD5" => { for => "Authmechanism 'CRAM-MD5'" }, "Digest::HMAC_MD5" => { for => "Authmechanism 'CRAM-MD5'" },
"Digest::MD5" => { for => "Authmechanism 'DIGEST-MD5'" }, "Digest::MD5" => { for => "Authmechanism 'DIGEST-MD5'" },
"IO::Socket::SSL" => { for => "SSL enabled connections (Ssl => 1)" }, "IO::Socket::SSL" => { for => "SSL enabled connections (Ssl => 1)" },

View file

@ -18,6 +18,7 @@ The following are the minimum requirements for using Mail::IMAPClient:
Optional: Optional:
Authen::NTLM Authen::NTLM
Authen::SASL Authen::SASL
Compress::Zlib
Digest::HMAC_MD5 Digest::HMAC_MD5
Digest::MD5 Digest::MD5
IO::Socket::SSL IO::Socket::SSL

View file

@ -7,7 +7,7 @@ use strict;
use warnings; use warnings;
package Mail::IMAPClient; package Mail::IMAPClient;
our $VERSION = '3.28'; our $VERSION = '3.30';
use Mail::IMAPClient::MessageSet; use Mail::IMAPClient::MessageSet;
@ -16,7 +16,7 @@ use IO::Select ();
use Carp qw(carp); #local $SIG{__WARN__} = \&Carp::cluck; #DEBUG use Carp qw(carp); #local $SIG{__WARN__} = \&Carp::cluck; #DEBUG
use Fcntl qw(F_GETFL F_SETFL O_NONBLOCK); use Fcntl qw(F_GETFL F_SETFL O_NONBLOCK);
use Errno qw(EAGAIN EPIPE ECONNRESET); use Errno qw(EAGAIN EBADF ECONNRESET EPIPE);
use List::Util qw(first min max sum); use List::Util qw(first min max sum);
use MIME::Base64 qw(encode_base64 decode_base64); use MIME::Base64 qw(encode_base64 decode_base64);
use File::Spec (); use File::Spec ();
@ -47,6 +47,7 @@ my %SEARCH_KEYS = map { ( $_ => 1 ) } qw(
# modules require(d) during runtime when applicable # modules require(d) during runtime when applicable
my %Load_Module = ( my %Load_Module = (
"Compress-Zlib" => "Compress::Zlib",
"SSL" => "IO::Socket::SSL", "SSL" => "IO::Socket::SSL",
"BodyStructure" => "Mail::IMAPClient::BodyStructure", "BodyStructure" => "Mail::IMAPClient::BodyStructure",
"Envelope" => "Mail::IMAPClient::BodyStructure::Envelope", "Envelope" => "Mail::IMAPClient::BodyStructure::Envelope",
@ -83,11 +84,11 @@ BEGIN {
# set-up accessors # set-up accessors
foreach my $datum ( foreach my $datum (
qw(Authcallback Authmechanism Authuser Buffer Count Debug qw(Authcallback Authmechanism Authuser Buffer Count Compress
Debug_fh Domain Folder Ignoresizeerrors Keepalive Debug Debug_fh Domain Folder Ignoresizeerrors Keepalive
Maxappendstringlength Maxcommandlength Maxtemperrors Maxappendstringlength Maxcommandlength Maxtemperrors
Password Peek Port Prewritemethod Proxy Ranges Readmethod Password Peek Port Prewritemethod Proxy Ranges Readmethod
Reconnectretry Server Showcredentials Ssl Starttls State Readmoremethod Reconnectretry Server Showcredentials Ssl Starttls
Supportedflags Timeout Uid User) Supportedflags Timeout Uid User)
) )
{ {
@ -256,7 +257,6 @@ sub new {
LastError => "", LastError => "",
Uid => 1, Uid => 1,
Count => 0, Count => 0,
Fast_io => 1,
Clear => 2, Clear => 2,
Keepalive => 0, Keepalive => 0,
Maxappendstringlength => 1024**2, Maxappendstringlength => 1024**2,
@ -264,7 +264,6 @@ sub new {
Maxtemperrors => undef, Maxtemperrors => undef,
State => Unconnected, State => Unconnected,
Authmechanism => 'LOGIN', Authmechanism => 'LOGIN',
Port => 143,
Timeout => 600, Timeout => 600,
History => {}, History => {},
}; };
@ -275,6 +274,12 @@ sub new {
} }
bless $self, ref($class) || $class; bless $self, ref($class) || $class;
# Fast_io is enabled by default when not given a socket
unless ( exists $self->{Fast_io} || $self->{Socket} || $self->{Rawsocket} )
{
$self->{Fast_io} = 1;
}
if ( my $sup = $self->{Supportedflags} ) { # unpack into case-less HASH if ( my $sup = $self->{Supportedflags} ) { # unpack into case-less HASH
my %sup = map { m/^\\?(\S+)/ ? lc $1 : () } @$sup; my %sup = map { m/^\\?(\S+)/ ? lc $1 : () } @$sup;
$self->{Supportedflags} = \%sup; $self->{Supportedflags} = \%sup;
@ -299,7 +304,10 @@ sub new {
$self->RawSocket($sock) unless $self->{Socket}; $self->RawSocket($sock) unless $self->{Socket};
} }
!$self->{Socket} && $self->{Server} ? $self->connect : $self; if ( !$self->{Socket} && $self->{Server} ) {
$self->connect or return undef;
}
return $self;
} }
sub connect(@) { sub connect(@) {
@ -309,7 +317,7 @@ sub connect(@) {
%$self = ( %$self, @_ ) if @_; %$self = ( %$self, @_ ) if @_;
my $server = $self->Server; my $server = $self->Server;
my $port = $self->Port; my $port = $self->Port || $self->Port( $self->Ssl ? "993" : "143" );
my @timeout = $self->Timeout ? ( Timeout => $self->Timeout ) : (); my @timeout = $self->Timeout ? ( Timeout => $self->Timeout ) : ();
my $sock; my $sock;
@ -323,27 +331,28 @@ sub connect(@) {
} }
else { else {
my $ioclass = "IO::Socket::INET"; my $ioclass = "IO::Socket::INET";
if ( $self->Ssl ) { $ioclass = $self->_load_module("SSL") if ( $self->Ssl );
$ioclass = $self->_load_module("SSL") or return undef;
}
$self->_debug("Connecting via $ioclass to $server:$port @timeout"); if ($ioclass) {
$sock = $ioclass->new( $self->_debug("Connecting via $ioclass to $server:$port @timeout");
PeerAddr => $server, $sock = $ioclass->new(
PeerPort => $port, PeerAddr => $server,
Proto => 'tcp', PeerPort => $port,
Debug => $self->Debug, Proto => 'tcp',
@timeout Debug => $self->Debug,
); @timeout
);
}
} }
unless ($sock) { if ($sock) {
$self->_debug( "Connected to $server" . ( $! ? " errno($!)" : "" ) );
return $self->Socket($sock);
}
else {
$self->LastError("Unable to connect to $server: $@"); $self->LastError("Unable to connect to $server: $@");
return undef; return undef;
} }
$self->_debug( "Connected to $server" . ( $! ? " errno($!)" : "" ) );
$self->Socket($sock);
} }
sub RawSocket(;$) { sub RawSocket(;$) {
@ -357,7 +366,7 @@ sub RawSocket(;$) {
delete $self->{_fcntl}; delete $self->{_fcntl};
$self->Fast_io( $self->Fast_io ); $self->Fast_io( $self->Fast_io );
$sock; return $sock;
} }
sub Socket($) { sub Socket($) {
@ -387,7 +396,11 @@ sub Socket($) {
$self->starttls or return undef; $self->starttls or return undef;
} }
$self->User && $self->Password ? $self->login : $self; if ( defined $self->User && defined $self->Password ) {
$self->login or return undef;
}
return $self->{Socket};
} }
# RFC2595 section 3.1 # RFC2595 section 3.1
@ -418,7 +431,7 @@ sub starttls {
# give caller control of args to start_SSL if desired # give caller control of args to start_SSL if desired
my @sslargs = my @sslargs =
( $self->Starttls and ref( $self->Starttls ) eq "ARRAY" ) ( $self->Starttls and ref( $self->Starttls ) eq "ARRAY" )
? ( @${ $self->Starttls } ) ? ( @{ $self->Starttls } )
: ( Timeout => 30 ); : ( Timeout => 30 );
unless ( $ioclass->start_SSL( $sock, @sslargs ) ) { unless ( $ioclass->start_SSL( $sock, @sslargs ) ) {
@ -432,30 +445,129 @@ sub starttls {
return $self; return $self;
} }
# RFC4978 COMPRESS
sub compress {
my ($self) = @_;
# BUG? strict check on capability commented out for now...
#my $can = $self->has_capability("COMPRESS")
#return undef unless $can and $can eq "DEFLATE";
$self->_imap_command("COMPRESS DEFLATE") or return undef;
my $zcl = $self->_load_module("Compress-Zlib") or return undef;
# give caller control of args if desired
$self->Compress(
[
-WindowBits => -$zcl->MAX_WBITS(),
-Level => $zcl->Z_BEST_SPEED()
]
) unless ( $self->Compress and ref( $self->Compress ) eq "ARRAY" );
my ( $rc, $do, $io );
( $do, $rc ) = Compress::Zlib::deflateInit( @{ $self->Compress } );
unless ( $rc == $zcl->Z_OK ) {
$self->LastError("deflateInit failed (rc=$rc)");
return undef;
}
( $io, $rc ) =
Compress::Zlib::inflateInit( -WindowBits => -$zcl->MAX_WBITS() );
unless ( $rc == $zcl->Z_OK ) {
$self->LastError("inflateInit failed (rc=$rc)");
return undef;
}
$self->{Prewritemethod} = sub {
my ( $imap, $string ) = @_;
my ( $rc, $out1, $out2 );
( $out1, $rc ) = $do->deflate($string);
( $out2, $rc ) = $do->flush( $zcl->Z_PARTIAL_FLUSH() )
unless ( $rc != $zcl->Z_OK );
unless ( $rc == $zcl->Z_OK ) {
$self->LastError("deflate/flush failed (rc=$rc)");
return undef;
}
return $out1 . $out2;
};
# need to retain some state for Readmoremethod/Readmethod calls
my ( $Zbuf, $Ibuf ) = ( "", "" );
$self->{Readmoremethod} = sub {
my $self = shift;
return 1 if ( length($Zbuf) || length($Ibuf) );
$self->__read_more(@_);
};
$self->{Readmethod} = sub {
my ( $imap, $fh, $buf, $len, $off ) = @_;
# get more data, but empty $Ibuf first if any data is left
my ( $lz, $li ) = ( length $Zbuf, length $Ibuf );
if ( $lz || !$li ) {
my $ret = sysread( $fh, $Zbuf, $len, length $Zbuf );
$lz = length $Zbuf;
return $ret if ( !$ret && !$lz ); # $ret is undef or 0
}
# accummulate inflated data in $Ibuf
if ($lz) {
my ( $tbuf, $rc ) = $io->inflate( \$Zbuf );
unless ( $rc == $zcl->Z_OK ) {
$self->LastError("inflate failed (rc=$rc)");
return undef;
}
$Ibuf .= $tbuf;
}
# pull desired length of data from $Ibuf
my $tbuf = substr( $Ibuf, 0, $len );
substr( $Ibuf, 0, $len ) = "";
substr( $$buf, $off ) = $tbuf;
return length $tbuf;
};
return $self;
}
sub login { sub login {
my $self = shift; my $self = shift;
my $auth = $self->Authmechanism; my $auth = $self->Authmechanism;
return $self->authenticate( $auth, $self->Authcallback )
if $auth && $auth ne 'LOGIN';
my $passwd = $self->Password; if ( $auth && $auth ne 'LOGIN' ) {
my $id = $self->User; $self->authenticate( $auth, $self->Authcallback )
or return undef;
}
else {
my $passwd = $self->Password;
my $id = $self->User;
return undef unless ( defined($passwd) and defined($id) ); return undef unless ( defined($passwd) and defined($id) );
# BUG: should use Quote() with $passwd and $id # BUG: should use Quote() with $passwd and $id
if ( $passwd eq "" or $passwd =~ m/\W/ ) { if ( $passwd eq "" or $passwd =~ m/\W/ ) {
$passwd =~ s/(["\\])/\\$1/g; $passwd =~ s/(["\\])/\\$1/g;
$passwd = qq("$passwd"); $passwd = qq("$passwd");
}
$id = qq("$id") if $id !~ /^".*"$/;
$self->_imap_command("LOGIN $id $passwd")
or return undef;
} }
$id = qq("$id") if $id !~ /^".*"$/;
$self->_imap_command("LOGIN $id $passwd")
or return undef;
$self->State(Authenticated); $self->State(Authenticated);
$self; if ( $self->Compress ) {
$self->compress or return undef;
}
return $self;
} }
sub noop { sub noop {
@ -557,7 +669,7 @@ sub _folders_or_subscribed {
{ {
my @list; my @list;
if ($what) { if ($what) {
my $sep = $self->separator($what); my $sep = $self->separator($what) || $self->separator(undef);
last unless defined $sep; last unless defined $sep;
my $whatsub = $what =~ m/\Q${sep}\E$/ ? "$what*" : "$what$sep*"; my $whatsub = $what =~ m/\Q${sep}\E$/ ? "$what*" : "$what$sep*";
@ -566,8 +678,10 @@ sub _folders_or_subscribed {
shift @$tref; # remove command shift @$tref; # remove command
push @list, @$tref; push @list, @$tref;
my $exists = $self->exists($what) or last; # BUG?: this behavior has been around since 2.x, why?
if ($exists) { my $cansel = $self->selectable($what);
last unless defined $cansel;
if ($cansel) {
$tref = $self->$method( undef, $what ) or last; $tref = $self->$method( undef, $what ) or last;
shift @$tref; # remove command shift @$tref; # remove command
push @list, @$tref; push @list, @$tref;
@ -1051,16 +1165,32 @@ sub reconnect {
if ( $self->IsAuthenticated ) { if ( $self->IsAuthenticated ) {
$self->_debug("reconnect called but already authenticated"); $self->_debug("reconnect called but already authenticated");
return $self; return 1;
}
# safeguard from deep recursion via connect
if ( $self->{_doing_reconnect} ) {
$self->_debug("recursive call to reconnect, returning 0\n");
$self->LastError("unexpected reconnect recursion")
unless $self->LastError;
return 0;
} }
my $einfo = $self->LastError || ""; my $einfo = $self->LastError || "";
$self->_debug( "reconnecting to ", $self->Server, ", last error: $einfo" ); $self->_debug( "reconnecting to ", $self->Server, ", last error: $einfo" );
$self->{_doing_reconnect} = 1;
# reconnect and select appropriate folder # reconnect and select appropriate folder
$self->connect or return undef; my $ret;
if ( $self->connect ) {
$ret = 1;
if ( defined $self->Folder ) {
$ret = defined( $self->select( $self->Folder ) ) ? 1 : undef;
}
}
return ( defined $self->Folder ) ? $self->select( $self->Folder ) : $self; delete $self->{_doing_reconnect};
return $ret ? 1 : $ret;
} }
# wrapper for _imap_command_do to enable retrying on lost connections # wrapper for _imap_command_do to enable retrying on lost connections
@ -1091,11 +1221,15 @@ sub _imap_command {
# BUG? reconnect if caller ignored/missed earlier errors? # BUG? reconnect if caller ignored/missed earlier errors?
# or $self->LastError =~ /NO not connected/ # or $self->LastError =~ /NO not connected/
); );
if ( $self->reconnect ) { my $ret = $self->reconnect;
$self->_debug("reconnect successful on try #$tries"); if ($ret) {
$self->_debug("reconnect success($ret) on try #$tries/$retry");
}
elsif ( defined $ret and $ret == 0 ) { # escaping recursion
return undef;
} }
else { else {
$self->_debug("reconnect failed on try #$tries"); $self->_debug("reconnect failure on try #$tries/$retry");
push( @err, $self->LastError ) if $self->LastError; push( @err, $self->LastError ) if $self->LastError;
} }
} }
@ -1340,10 +1474,10 @@ sub _send_bytes($) {
local $SIG{PIPE} = 'IGNORE'; # handle SIGPIPE as normal error local $SIG{PIPE} = 'IGNORE'; # handle SIGPIPE as normal error
my $socket = $self->Socket;
while ( $total < length $$byteref ) { while ( $total < length $$byteref ) {
my $written = my $written =
syswrite( $self->Socket, $$byteref, length($$byteref) - $total, syswrite( $socket, $$byteref, length($$byteref) - $total, $total );
$total );
if ( defined $written ) { if ( defined $written ) {
$temperrs = 0; $temperrs = 0;
@ -1364,7 +1498,8 @@ sub _send_bytes($) {
# Unconnected might be apropos for more than just these? # Unconnected might be apropos for more than just these?
my $emsg = $! ? "$!" : "no error caught"; my $emsg = $! ? "$!" : "no error caught";
$self->State(Unconnected) if ( $! == EPIPE or $! == ECONNRESET ); $self->State(Unconnected)
if ( $! == EPIPE or $! == ECONNRESET or $! == EBADF );
$self->LastError("Write failed '$emsg'"); $self->LastError("Write failed '$emsg'");
return undef; # no luck return undef; # no luck
@ -1620,6 +1755,12 @@ sub _sysread {
} }
sub _read_more { sub _read_more {
my $self = shift;
my $rm = $self->Readmoremethod;
$rm ? $rm->( $self, @_ ) : $self->__read_more(@_);
}
sub __read_more {
my $self = shift; my $self = shift;
my $opt = ref( $_[0] ) eq "HASH" ? shift : {}; my $opt = ref( $_[0] ) eq "HASH" ? shift : {};
my ( $socket, $timeout ) = @_; my ( $socket, $timeout ) = @_;
@ -1756,7 +1897,7 @@ sub _disconnect {
local ($@); # avoid stomping on global $@ local ($@); # avoid stomping on global $@
eval { $sock->close }; eval { $sock->close };
} }
$self; return $self;
} }
# LIST/XLIST/LSUB Response # LIST/XLIST/LSUB Response
@ -2710,8 +2851,8 @@ sub is_parent {
sub selectable { sub selectable {
my ( $self, $f ) = @_; my ( $self, $f ) = @_;
my $info = $self->list( "", $f ); my $info = $self->list( "", $f ) or return undef;
defined $info ? not( grep /NoSelect/i, @$info ) : undef; return not( grep /\b\\Noselect\b/i, @$info );
} }
# append( $self, $folder, $text [, $optmsg] ) # append( $self, $folder, $text [, $optmsg] )
@ -2992,6 +3133,7 @@ sub authenticate {
: ( "", $client->User ), : ( "", $client->User ),
defined $client->Password ? $client->Password : "", defined $client->Password ? $client->Password : "",
), ),
''
); );
}; };
} }
@ -3250,6 +3392,19 @@ sub unseen_count {
return $r; return $r;
} }
sub State($) {
my ( $self, $state ) = @_;
if ( defined $state ) {
$self->{State} = $state;
# discard cached capability info after authentication
delete $self->{CAPABILITY} if ( $state == Authenticated );
}
return defined( $self->{State} ) ? $self->{State} : Unconnected;
}
sub Status { shift->State } sub Status { shift->State }
sub IsUnconnected { shift->State == Unconnected } sub IsUnconnected { shift->State == Unconnected }
sub IsConnected { shift->State >= Connected } sub IsConnected { shift->State >= Connected }

View file

@ -649,7 +649,11 @@ The B<capability> method returns an array of capabilities as returned
by the CAPABILITY IMAP Client command, or a reference to an array of by the CAPABILITY IMAP Client command, or a reference to an array of
capabilities if called in scalar context. If the CAPABILITY IMAP capabilities if called in scalar context. If the CAPABILITY IMAP
Client command fails for any reason then the B<capability> method will Client command fails for any reason then the B<capability> method will
return C<undef>. return C<undef>. Supported capabilities are cached by the client,
however, this cache is deleted after a connection is set to
I<Authenticated> and when L</starttls> is called.
See also L</has_capability>.
=head2 close =head2 close
@ -668,6 +672,18 @@ Note: this closes the currently selected folder, not the IMAP session.
See also L</delete_message>, L</expunge>, and RFC3501. See also L</delete_message>, L</expunge>, and RFC3501.
=head2 compress
Example:
$imap->compress or die "Could not enable RFC4978 compression: $@\n";
The B<compress> method accepts no arguments. This method is used to
instruct the server to use the DEFLATE (RFC1951) compression
extension. See the L</Compress> attribute for how to specify arguments for use during the the initialization process.
Version note: method added in Mail::IMAPClient 3.30
=head2 connect =head2 connect
Example: Example:
@ -1142,9 +1158,12 @@ For example:
# Prints: # Prints:
# Projects/Completed, Projects/Ongoing # Projects/Completed, Projects/Ongoing
Notice that if you just want to list a folder's subfolders (and not Please note that documentation previously suggested that if you just
the folder itself), then you need to include the hierarchy separator want to list a folder's subfolders (and not the folder itself), then
character (as returned by the L</separator> method). you need to include the hierarchy separator character (as returned by
the L</separator> method). However, this does not match the behavior
of the existing implementation, so you will need to manually exclude
the parent folder from the results.
=head2 xlist_folders =head2 xlist_folders
@ -1458,6 +1477,8 @@ and $@ is set. The methods L</new>, L</connect>, and L</Socket> may
automatically invoke B<login> see the documentation of each method for automatically invoke B<login> see the documentation of each method for
details. details.
If the L</Compress> parameter is set, the L</compress> method will automatically be called after successful authentication.
See also L</proxyauth> and L</Proxy> for additional information See also L</proxyauth> and L</Proxy> for additional information
regarding ways of authenticating with a server via SASL and/or regarding ways of authenticating with a server via SASL and/or
PROXYAUTH. PROXYAUTH.
@ -2834,6 +2855,22 @@ will (except of course for that inevitable last transaction).
The default I<Clear> value is set to five (5) in order to conserve The default I<Clear> value is set to five (5) in order to conserve
memory. memory.
=head2 Compress
If set, Mail::IMAPClient attempts to enable use of the RFC4978
COMPRESS DEFLATE extension. This requires that the server supports
this CAPABILITY. This attribute can be set to a true value to enable
or an ARRAYREF to control the arguments used in the call to
Compress::Zlib::deflateInit().
Mail::IMAPClient will automatically use L<Compress::Zlib> to
deflate/inflate the data to/from the server. This attribute is used
in the L</login> method.
See also L</compress> and L</capability>.
Version note: attribute added in Mail::IMAPClient 3.30
=head2 Debug =head2 Debug
Example: Example:
@ -2914,20 +2951,12 @@ Example:
# or: # or:
$imap->Fast_io($true_or_false); $imap->Fast_io($true_or_false);
The I<Fast_io> parameter controls whether or not your The I<Fast_io> parameter controls whether or not the Mail::IMAPClient
Mail::IMAPClient object will attempt to use buffered (i.e. "Fast") object will attempt to use non-blocking I/O on the IMAP socket. It is
I/O. It is turned on by default. If you turn it off you will turned on by default (unless the caller provides the socket to be
definitely slow down your program, often to a painful degree. used).
However, if you are experience problems you may want to try this just
to see if it helps. If it does then that means you have found a bug
and should report it immediately (by following the instructions in the
section on L</"REPORTING BUGS">). Even if it doesn't fix the problem,
testing with both I<Fast_io> turned on and with it turned off will
often aid in identifying the source of the problem. (If it doesn't
help you, it may help me when you report it!)
Lately there have not been any bugs associated with I<Fast_io> so this See also L</Buffer>.
parameter may become deprecated in the future.
=head2 Folder =head2 Folder
@ -3056,10 +3085,11 @@ Example:
# or: # or:
$imap->Port($new_value); $imap->Port($new_value);
Specifies the port on which the IMAP server is listening. The default Specifies the port on which the IMAP server is listening. A default
is 143, which is the standard IMAP port. Can be supplied with the value of 993 (if L</Ssl> is true) or 143 is set during a call to
L</new> method call or separately by calling the L</Port> object L</connect> if no value is provided by the caller. This argument can
method. be supplied with the L</new> method call or separately by calling the
L</Port> object method.
=head2 Prewritemethod =head2 Prewritemethod
@ -3186,6 +3216,18 @@ object itself.
See also L</Prewritemethod>. See also L</Prewritemethod>.
=head2 Readmoremethod
B<Readmoremethod> should contain a reference to a subroutine that will
replace/enhance the behavior of the internal _read_more() method. The
subroutine will be passed the following arguments: first the used
Mail::IMAPClient object. Second, a reference to a socket. Third, a
timeout value which is used as the timeout value for CORE::select() by
default. Depending upon changes/features introduced by Readmethod
changes may be required here.
Version note: attribute added in Mail::IMAPClient 3.30
=head2 Reconnectretry =head2 Reconnectretry
If an IMAP connection sits idle too long, the connection may be closed If an IMAP connection sits idle too long, the connection may be closed

View file

@ -164,6 +164,12 @@ sub new
$parser->envelope($envelope); $parser->envelope($envelope);
} }
sub parse_string
{ my ($class, $envelope) = @_;
$envelope = "(" . $envelope . ")" unless ( $envelope =~ /^\(/ );
$parser->envelopestruct($envelope);
}
sub from_addresses { shift->_addresses(from => 1) } sub from_addresses { shift->_addresses(from => 1) }
sub sender_addresses { shift->_addresses(sender => 1) } sub sender_addresses { shift->_addresses(sender => 1) }
sub replyto_addresses { shift->_addresses(replyto => 1) } sub replyto_addresses { shift->_addresses(replyto => 1) }

View file

@ -2,7 +2,7 @@
use strict; use strict;
use warnings; use warnings;
use Test::More tests => 27; use Test::More tests => 41;
BEGIN { use_ok('Mail::IMAPClient::BodyStructure') or exit; } BEGIN { use_ok('Mail::IMAPClient::BodyStructure') or exit; }
@ -115,3 +115,37 @@ is_deeply( [ $bsobj->parts ], \@exp, 'bs9 parts' )
my $to = $env->to_addresses; my $to = $env->to_addresses;
is_deeply( $to, [ '<phil+to@dom.loc>' ], "to_addresses" ); is_deeply( $to, [ '<phil+to@dom.loc>' ], "to_addresses" );
} }
# envelope: parse_string
# date, subject, from, sender, reply-to, to, cc, bcc, in-reply-to, message-id
{
my $str = q{"Mon, 29 Nov 2010 18:28:23 +0200" "subj" (("Phil Pearl" NIL "phil+from" "dom.loc")) (("Phil Pearl" NIL "phil+sender" "dom.loc")) () ((NIL NIL "phil+to" "dom.loc")) NIL NIL NIL "<msgid>"};
my $env = Mail::IMAPClient::BodyStructure::Envelope->parse_string($str);
is( $env->subject, "subj", "subject" );
is( $env->inreplyto, "NIL", "inreplyto" );
is( $env->messageid, "<msgid>", "messageid" );
is( $env->bcc, "NIL", "bcc" );
is( $env->cc, "NIL", "cc" );
is( $env->replyto, "NIL", "replyto" );
# personalname mailboxname hostname sourcename
my $to = $env->to_addresses;
is_deeply( $to, [ '<phil+to@dom.loc>' ], "to_addresses" );
}
# envelope: parse_string
# date, subject, from, sender, reply-to, to, cc, bcc, in-reply-to, message-id
{
my $str = q{("Mon, 29 Nov 2010 18:28:23 +0200" "subj" (("Phil Pearl" NIL "phil+from" "dom.loc")) (("Phil Pearl" NIL "phil+sender" "dom.loc")) () ((NIL NIL "phil+to" "dom.loc")) NIL NIL NIL "<msgid>")};
my $env = Mail::IMAPClient::BodyStructure::Envelope->parse_string($str);
is( $env->subject, "subj", "subject" );
is( $env->inreplyto, "NIL", "inreplyto" );
is( $env->messageid, "<msgid>", "messageid" );
is( $env->bcc, "NIL", "bcc" );
is( $env->cc, "NIL", "cc" );
is( $env->replyto, "NIL", "replyto" );
# personalname mailboxname hostname sourcename
my $to = $env->to_addresses;
is_deeply( $to, [ '<phil+to@dom.loc>' ], "to_addresses" );
}

View file

@ -1,5 +1,5 @@
# $Id: Makefile,v 1.84 2011/07/29 03:02:01 gilles Exp gilles $ # $Id: Makefile,v 1.89 2011/11/13 08:53:12 gilles Exp gilles $
.PHONY: help usage all .PHONY: help usage all
@ -20,21 +20,27 @@ usage:
@echo "make upload_ks" @echo "make upload_ks"
@echo "make imapsync.exe" @echo "make imapsync.exe"
@echo "make imapsync_elf_x86.bin" @echo "make imapsync_elf_x86.bin"
@echo "make publish"
DIST_NAME=imapsync-$(VERSION) DIST_NAME=imapsync-$(VERSION)
DIST_FILE=$(DIST_NAME).tgz DIST_FILE=$(DIST_NAME).tgz
DEB_FILE=$(DIST_NAME).deb DEB_FILE=$(DIST_NAME).deb
VERSION=$(shell perl -I./Mail-IMAPClient-2.2.9 ./imapsync --version)
VERSION=$(shell perl -I$(IMAPClient) ./imapsync --version)
VERSION_EXE=$(shell cat ./VERSION_EXE) VERSION_EXE=$(shell cat ./VERSION_EXE)
HELLO=$(shell date;uname -a) HELLO=$(shell date;uname -a)
IMAPClient_2xx=./Mail-IMAPClient-2.2.9
IMAPClient_3xx=./Mail-IMAPClient-3.30/lib
IMAPClient=$(IMAPClient_3xx)
hello: hello:
echo "$(HELLO)" echo "$(VERSION)"
echo "$(IMAPClient)"
all: ChangeLog README VERSION all: ChangeLog README VERSION imapsync_elf_x86.bin
testp : testp :
@ -47,7 +53,7 @@ README: imapsync
perldoc -t imapsync > README perldoc -t imapsync > README
VERSION: imapsync VERSION: imapsync
perl -I./Mail-IMAPClient-2.2.9 ./imapsync --version > VERSION perl -I./$(IMAPClient) ./imapsync --version > VERSION
.PHONY: clean clean_tilde clean_test .PHONY: clean clean_tilde clean_test
@ -90,22 +96,23 @@ cidone:
############### ###############
.PHONY: test tests testp testf test3xx .PHONY: test tests testp testf test3xx testv2 testv3
test_quick : test_quick_3xx test_quick_229 test_quick : test_quick_3xx test_quick_229
test_quick_229: imapsync tests.sh test_quick_229: imapsync tests.sh
CMD_PERL='perl -I./Mail-IMAPClient-2.2.9' /usr/bin/time sh -x tests.sh locallocal CMD_PERL='perl -I./$(IMAPClient_2xx)' /usr/bin/time sh -x tests.sh locallocal
test_quick_3xx: imapsync tests.sh test_quick_3xx: imapsync tests.sh
CMD_PERL='perl -I./Mail-IMAPClient-3.28/lib' /usr/bin/time sh -x tests.sh locallocal CMD_PERL='perl -I./$(IMAPClient_3xx)' /usr/bin/time sh -x tests.sh locallocal
testv2: testv2: .test_229
CMD_PERL='perl -I./Mail-IMAPClient-2.2.9' /usr/bin/time sh tests.sh CMD_PERL='perl -I./$(IMAPClient_2xx) /usr/bin/time sh tests.sh
touch .test_229 touch .test_229
testv3: testv3:.test_3xx
CMD_PERL='perl -I./Mail-IMAPClient-3.28/lib' sh -x tests.sh CMD_PERL='perl -I./$(IMAPClient_3xx)' sh -x tests.sh
touch .test_3xx
test: .test_229 .test_3xx test: .test_229 .test_3xx
@ -116,11 +123,11 @@ test3xx: .test_3xx
test229: .test_229 test229: .test_229
.test_229: imapsync tests.sh .test_229: imapsync tests.sh
CMD_PERL='perl -I./Mail-IMAPClient-2.2.9' /usr/bin/time sh tests.sh 1>/dev/null CMD_PERL='perl -I./$(IMAPClient_2xx)' /usr/bin/time sh tests.sh 1>/dev/null
touch .test_229 touch .test_229
.test_3xx: imapsync tests.sh .test_3xx: imapsync tests.sh
CMD_PERL='perl -I./Mail-IMAPClient-3.28/lib' /usr/bin/time sh tests.sh 1>/dev/null CMD_PERL='perl -I./$(IMAPClient_3xx)' /usr/bin/time sh tests.sh 1>/dev/null
touch .test_3xx touch .test_3xx
testf: clean_test test testf: clean_test test
@ -145,7 +152,7 @@ tests_win32: dosify_bat
# ssh Admin@c 'tasklist /NH /FO CSV' # ssh Admin@c 'tasklist /NH /FO CSV'
tests_win32_dev: dosify_bat tests_win32_dev: dosify_bat
scp imapsync file.csv test2.bat Admin@c:'C:/msys/1.0/home/Admin/imapsync/' scp imapsync file.txt test2.bat Admin@c:'C:/msys/1.0/home/Admin/imapsync/'
ssh Admin@c 'C:/msys/1.0/home/Admin/imapsync/test2.bat' ssh Admin@c 'C:/msys/1.0/home/Admin/imapsync/test2.bat'
test_imapsync_exe: dosify_bat test_imapsync_exe: dosify_bat
@ -171,23 +178,24 @@ imapsync.exe: imapsync build_exe.bat .dosify_bat
imapsync_elf_x86.bin: imapsync imapsync_elf_x86.bin: imapsync
rcsdiff imapsync rcsdiff imapsync
{ test 'vadrouille' = "`hostname`" && \ { test 'vadrouille' = "`hostname`" && \
pp -o imapsync_elf_x86.bin -I Mail-IMAPClient-3.28/lib \ pp -o imapsync_elf_x86.bin -I $(IMAPClient_3xx) \
-M Mail::IMAPClient -M IO::Socket -M IO::Socket::SSL \ -M Mail::IMAPClient -M IO::Socket -M IO::Socket::SSL \
-M Digest::MD5 -M Digest::HMAC_MD5 -M Term::ReadKey \ -M Digest::MD5 -M Digest::HMAC_MD5 -M Term::ReadKey \
-M Authen::NTLM \ -M Authen::NTLM \
imapsync ; \ imapsync ; \
} || : } || :
{ test 'petite' = "`hostname`" && \ { test 'petite' = "`hostname`" && \
pp -o imapsync_elf_x86.bin -I Mail-IMAPClient-3.28/lib \ pp -o imapsync_elf_x86.bin -I $(IMAPClient_3xx) \
-I NTLM-1.09/blib/lib \
-M Mail::IMAPClient -M IO::Socket -M IO::Socket::SSL \ -M Mail::IMAPClient -M IO::Socket -M IO::Socket::SSL \
-M Digest::MD5 -M Digest::HMAC_MD5 -M Term::ReadKey \ -M Digest::MD5 -M Digest::HMAC_MD5 -M Term::ReadKey \
-M Authen::NTLM \ -M Authen::NTLM \
-M Tie::Hash::NamedCapture \ -M Tie::Hash::NamedCapture \
-a '/usr/lib/perl/5.10.0/auto/POSIX/SigAction;auto/POSIX/SigAction' \ -a '/usr/lib/perl/5.10.1/auto/POSIX/SigAction;auto/POSIX/SigAction' \
imapsync ; \ imapsync ; \
} || : } || :
{ test 'ks200821.kimsufi.com' = "`hostname`" && \ { test 'ks200821.kimsufi.com' = "`hostname`" && \
pp -o imapsync_elf_x86.bin -I Mail-IMAPClient-3.28/lib \ pp -o imapsync_elf_x86.bin -I $(IMAPClient_3xx) \
-M Mail::IMAPClient -M IO::Socket -M IO::Socket::SSL \ -M Mail::IMAPClient -M IO::Socket -M IO::Socket::SSL \
-M Digest::MD5 -M Digest::HMAC_MD5 -M Term::ReadKey \ -M Digest::MD5 -M Digest::HMAC_MD5 -M Term::ReadKey \
-M Authen::NTLM \ -M Authen::NTLM \
@ -244,18 +252,19 @@ dist_prepa_exe: imapsync.exe
#cd $(DIST_PATH)/ && md5sum -c ./imapsync.exe.md5.txt #cd $(DIST_PATH)/ && md5sum -c ./imapsync.exe.md5.txt
.PHONY: publish upload_ks ks
ks: ks:
rsync -avz --delete --exclude imapsync.exe \ rsync -avz --delete --exclude imapsync.exe \
. imapsync@ks.lamiral.info:public_html/imapsync/ . imapsync@ks.lamiral.info:public_html/imapsync/
publish: upload_ks ks
PUBLIC_FILES = ./ChangeLog ./COPYING ./CREDITS ./FAQ \ PUBLIC_FILES = ./ChangeLog ./COPYING ./CREDITS ./FAQ \
./index.shtml ./INSTALL ./TIME \ ./index.shtml ./INSTALL ./TIME \
./logo_imapsync.png ./logo_imapsync_s.png \ ./logo_imapsync.png ./logo_imapsync_s.png \
./paypal.shtml ./paypal_return.shtml ./paypal_return_support.shtml \ ./paypal.shtml ./paypal_return.shtml ./paypal_return_support.shtml \
./README ./style.css ./TODO ./VERSION ./VERSION_EXE ./memo ./README ./style.css ./TODO ./VERSION ./VERSION_EXE ./memo ./file.txt
upload_ks: upload_ks:
rsync -lptvHzP $(PUBLIC_FILES) \ rsync -lptvHzP $(PUBLIC_FILES) \

View file

@ -1,65 +0,0 @@
NTLM Authentication Scheme
==========================
This module implements the NTLM authentication mechanism. It can be
used to perform NTLM style authentication for any desired protocol.
The module works well with the Mail::IMAPClient module in the
"authenticate" method, however I had to make a change to that method
for it to work. The following line (2511 in version 2.1.4):
($code) = $o->[DATA] =~ /^\+ (.*)$/ ;
needed to be changed to:
($code) = $o->[DATA] =~ /^\+(.*)$/ ;
as the initial NTLM challenge is empty.
This module also works well with LWP::Authen::Ntlm , allowing LWP::UserAgent
and/or WWW::Mechanise to automate/browse/fetch/etc remote Microsoft Windows
servers running NTLM authentication.
Example use is like this(note the fact that NTLM.pm is NOT explicitly used!):
use WWW::Mechanize;
$mech = WWW::Mechanize->new(keep_alive=>1);
$mech->no_proxy('my.server');
$mech->credentials('my.server:80', '', "my_domain\\my_user", my_pass);
$response = $mech->get( $url );
INSTALLATION
To install this application:
perl Makefile.PL
make
make test
make install
DEPENDENCIES
This module requires the MIME::Base64 module, and Digest::HMAC_MD5
COPYRIGHT AND LICENCE
This application is free software. This code is distributed in the hope that
it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. You may freely use,
copy and distribute this software as long as all copyright notices, including
this notice, remain intact and that you do not try to claim it as your own or
try to sell it. You may alter the code as long as you send me any diffs (this
will ensure that you have an easier time of it when you upgrade ;).
Parts of this code Copyright (C) 2007 David (Buzz) Bussenschutt.
<davidbuzz@gmail.com>
Perl port of this code is Copyright (C) 2001 Mark Bush.
<Mark.Bush@bushnet.demon.co.uk>
The code is originally based on fetchmail code which is Copyright (C) 1997 Eric
S. Raymond.
Fetchmail uses SMB/Netbios code from samba which is Copyright (C)
Andrew Tridgell 1992-1998 with modifications from Jeremy Allison.

127
NTLM-1.09/COPYING-Artistic Normal file
View file

@ -0,0 +1,127 @@
The "Artistic License"
Preamble
The intent of this document is to state the conditions under which a
Package may be copied, such that the Copyright Holder maintains some
semblance of artistic control over the development of the package,
while giving the users of the package the right to use and distribute
the Package in a more-or-less customary fashion, plus the right to make
reasonable modifications.
Definitions:
"Package" refers to the collection of files distributed by the
Copyright Holder, and derivatives of that collection of files
created through textual modification.
"Standard Version" refers to such a Package if it has not been
modified, or has been modified in accordance with the wishes
of the Copyright Holder as specified below.
"Copyright Holder" is whoever is named in the copyright or
copyrights for the package.
"You" is you, if you're thinking about copying or distributing
this Package.
"Reasonable copying fee" is whatever you can justify on the
basis of media cost, duplication charges, time of people involved,
and so on. (You will not be required to justify it to the
Copyright Holder, but only to the computing community at large
as a market that must bear the fee.)
"Freely Available" means that no fee is charged for the item
itself, though there may be fees involved in handling the item.
It also means that recipients of the item may redistribute it
under the same conditions they received it.
1. You may make and give away verbatim copies of the source form of the
Standard Version of this Package without restriction, provided that you
duplicate all of the original copyright notices and associated disclaimers.
2. You may apply bug fixes, portability fixes and other modifications
derived from the Public Domain or from the Copyright Holder. A Package
modified in such a way shall still be considered the Standard Version.
3. You may otherwise modify your copy of this Package in any way, provided
that you insert a prominent notice in each changed file stating how and
when you changed that file, and provided that you do at least ONE of the
following:
a) place your modifications in the Public Domain or otherwise make them
Freely Available, such as by posting said modifications to Usenet or
an equivalent medium, or placing the modifications on a major archive
site such as uunet.uu.net, or by allowing the Copyright Holder to include
your modifications in the Standard Version of the Package.
b) use the modified Package only within your corporation or organization.
c) rename any non-standard executables so the names do not conflict
with standard executables, which must also be provided, and provide
a separate manual page for each non-standard executable that clearly
documents how it differs from the Standard Version.
d) make other distribution arrangements with the Copyright Holder.
4. You may distribute the programs of this Package in object code or
executable form, provided that you do at least ONE of the following:
a) distribute a Standard Version of the executables and library files,
together with instructions (in the manual page or equivalent) on where
to get the Standard Version.
b) accompany the distribution with the machine-readable source of
the Package with your modifications.
c) give non-standard executables non-standard names, and clearly
document the differences in manual pages (or equivalent), together
with instructions on where to get the Standard Version.
d) make other distribution arrangements with the Copyright Holder.
5. You may charge a reasonable copying fee for any distribution of this
Package. You may charge any fee you choose for support of this
Package. You may not charge a fee for this Package itself. However,
you may distribute this Package in aggregate with other (possibly
commercial) programs as part of a larger (possibly commercial) software
distribution provided that you do not advertise this Package as a
product of your own. You may embed this Package's interpreter within
an executable of yours (by linking); this shall be construed as a mere
form of aggregation, provided that the complete Standard Version of the
interpreter is so embedded.
6. The scripts and library files supplied as input to or produced as
output from the programs of this Package do not automatically fall
under the copyright of this Package, but belong to whoever generated
them, and may be sold commercially, and may be aggregated with this
Package. If such scripts or library files are aggregated with this
Package via the so-called "undump" or "unexec" methods of producing a
binary executable image, then distribution of such an image shall
neither be construed as a distribution of this Package nor shall it
fall under the restrictions of Paragraphs 3 and 4, provided that you do
not represent such an executable image as a Standard Version of this
Package.
7. C subroutines (or comparably compiled subroutines in other
languages) supplied by you and linked into this Package in order to
emulate subroutines and variables of the language defined by this
Package shall not be considered part of this Package, but are the
equivalent of input as in Paragraph 6, provided these subroutines do
not change the language in any way that would cause it to fail the
regression tests for the language.
8. Aggregation of this Package with a commercial distribution is always
permitted provided that the use of this Package is embedded; that is,
when no overt attempt is made to make this Package's interfaces visible
to the end user of the commercial distribution. Such use shall not be
construed as a distribution of this Package.
9. The name of the Copyright Holder may not be used to endorse or promote
products derived from this software without specific prior written permission.
10. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
The End

250
NTLM-1.09/COPYING-GPL Normal file
View file

@ -0,0 +1,250 @@
GNU GENERAL PUBLIC LICENSE
Version 1, February 1989
Copyright (C) 1989 Free Software Foundation, Inc.
51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The license agreements of most software companies try to keep users
at the mercy of those companies. By contrast, our General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. The
General Public License applies to the Free Software Foundation's
software and to any other program whose authors commit to using it.
You can use it for your programs, too.
When we speak of free software, we are referring to freedom, not
price. Specifically, the General Public License is designed to make
sure that you have the freedom to give away or sell copies of free
software, that you receive source code or can get it if you want it,
that you can change the software or use pieces of it in new free
programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of a such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must tell them their rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License Agreement applies to any program or other work which
contains a notice placed by the copyright holder saying it may be
distributed under the terms of this General Public License. The
"Program", below, refers to any such program or work, and a "work based
on the Program" means either the Program or any work containing the
Program or a portion of it, either verbatim or with modifications. Each
licensee is addressed as "you".
1. You may copy and distribute verbatim copies of the Program's source
code as you receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice and
disclaimer of warranty; keep intact all the notices that refer to this
General Public License and to the absence of any warranty; and give any
other recipients of the Program a copy of this General Public License
along with the Program. You may charge a fee for the physical act of
transferring a copy.
2. You may modify your copy or copies of the Program or any portion of
it, and copy and distribute such modifications under the terms of Paragraph
1 above, provided that you also do the following:
a) cause the modified files to carry prominent notices stating that
you changed the files and the date of any change; and
b) cause the whole of any work that you distribute or publish, that
in whole or in part contains the Program or any part thereof, either
with or without modifications, to be licensed at no charge to all
third parties under the terms of this General Public License (except
that you may choose to grant warranty protection to some or all
third parties, at your option).
c) If the modified program normally reads commands interactively when
run, you must cause it, when started running for such interactive use
in the simplest and most usual way, to print or display an
announcement including an appropriate copyright notice and a notice
that there is no warranty (or else, saying that you provide a
warranty) and that users may redistribute the program under these
conditions, and telling the user how to view a copy of this General
Public License.
d) You may charge a fee for the physical act of transferring a
copy, and you may at your option offer warranty protection in
exchange for a fee.
Mere aggregation of another independent work with the Program (or its
derivative) on a volume of a storage or distribution medium does not bring
the other work under the scope of these terms.
3. You may copy and distribute the Program (or a portion or derivative of
it, under Paragraph 2) in object code or executable form under the terms of
Paragraphs 1 and 2 above provided that you also do one of the following:
a) accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of
Paragraphs 1 and 2 above; or,
b) accompany it with a written offer, valid for at least three
years, to give any third party free (except for a nominal charge
for the cost of distribution) a complete machine-readable copy of the
corresponding source code, to be distributed under the terms of
Paragraphs 1 and 2 above; or,
c) accompany it with the information you received as to where the
corresponding source code may be obtained. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form alone.)
Source code for a work means the preferred form of the work for making
modifications to it. For an executable file, complete source code means
all the source code for all modules it contains; but, as a special
exception, it need not include source code for modules which are standard
libraries that accompany the operating system on which the executable
file runs, or for standard header files or definitions files that
accompany that operating system.
4. You may not copy, modify, sublicense, distribute or transfer the
Program except as expressly provided under this General Public License.
Any attempt otherwise to copy, modify, sublicense, distribute or transfer
the Program is void, and will automatically terminate your rights to use
the Program under this License. However, parties who have received
copies, or rights to use copies, from you under this General Public
License will not have their licenses terminated so long as such parties
remain in full compliance.
5. By copying, distributing or modifying the Program (or any work based
on the Program) you indicate your acceptance of this license to do so,
and all its terms and conditions.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the original
licensor to copy, distribute or modify the Program subject to these
terms and conditions. You may not impose any further restrictions on the
recipients' exercise of the rights granted herein.
7. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of the license which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
the license, you may choose any version ever published by the Free Software
Foundation.
8. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
Appendix: How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to humanity, the best way to achieve this is to make it
free software which everyone can redistribute and change under these
terms.
To do so, attach the following notices to the program. It is safest to
attach them to the start of each source file to most effectively convey
the exclusion of warranty; and each file should have at least the
"copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) 19yy <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 1, or (at your option)
any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) 19xx name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the
appropriate parts of the General Public License. Of course, the
commands you use may be called something other than `show w' and `show
c'; they could even be mouse-clicks or menu items--whatever suits your
program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the
program `Gnomovision' (a program to direct compilers to make passes
at assemblers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
That's all there is to it!

View file

@ -1,5 +1,16 @@
Revision history for Perl NTLM authentication suite Revision history for Perl NTLM authentication suite
1.09 8 Sep 2011
- fix CPAN ticket # 70703
1.08 6 Apr 2011
- fix CPAN ticket # 39925
1.07 - not released
1.06 24 Mar 2011
- relicense as GPL+ or Artistic
1.05 19 Jun 2008 1.05 19 Jun 2008
- implement OO interface - thanks to Dmitry Karasik <dmitry@karasik.eu.org> - implement OO interface - thanks to Dmitry Karasik <dmitry@karasik.eu.org>
- fix minor bug in last release - thanks to Dmitry Karasik <dmitry@karasik.eu.org> - fix minor bug in last release - thanks to Dmitry Karasik <dmitry@karasik.eu.org>

View file

@ -1,17 +1,20 @@
# This Makefile is for the Authen::NTLM::DES extension to perl. # This Makefile is for the Authen::NTLM::DES extension to perl.
# #
# It was generated automatically by MakeMaker version # It was generated automatically by MakeMaker version
# 6.30_01 (Revision: Revision: 4535 ) from the contents of # 6.55_02 (Revision: 65502) from the contents of
# Makefile.PL. Don't edit this file, edit Makefile.PL instead. # Makefile.PL. Don't edit this file, edit Makefile.PL instead.
# #
# ANY CHANGES MADE HERE WILL BE LOST! # ANY CHANGES MADE HERE WILL BE LOST!
# #
# MakeMaker ARGV: () # MakeMaker ARGV: ()
# #
# MakeMaker Parameters: # MakeMaker Parameters:
# AUTHOR => q[David (Buzz) Bussenschutt <davidbuzz@gmail.com>, Mark Bush <Mark.Bush@bushnet.demon.co.uk>] # AUTHOR => q[David (Buzz) Bussenschutt <davidbuzz@gmail.com>, Mark Bush <Mark.Bush@bushnet.demon.co.uk>]
# BUILD_REQUIRES => { }
# NAME => q[Authen::NTLM::DES] # NAME => q[Authen::NTLM::DES]
# PREREQ_PM => { }
# VERSION_FROM => q[DES.pm] # VERSION_FROM => q[DES.pm]
# --- MakeMaker post_initialize section: # --- MakeMaker post_initialize section:
@ -19,29 +22,28 @@
# --- MakeMaker const_config section: # --- MakeMaker const_config section:
# These definitions are from config.sh (via /usr/lib/perl/5.8/Config.pm) # These definitions are from config.sh (via /usr/lib/perl/5.10/Config.pm).
# They may have been overridden via Makefile.PL or on the command line.
# They may have been overridden via Makefile.PL or on the command line
AR = ar AR = ar
CC = cc CC = cc
CCCDLFLAGS = -fPIC CCCDLFLAGS = -fPIC
CCDLFLAGS = -Wl,-E CCDLFLAGS = -Wl,-E
DLEXT = so DLEXT = so
DLSRC = dl_dlopen.xs DLSRC = dl_dlopen.xs
EXE_EXT =
FULL_AR = /usr/bin/ar
LD = cc LD = cc
LDDLFLAGS = -shared -L/usr/local/lib LDDLFLAGS = -shared -O2 -g -L/usr/local/lib -fstack-protector
LDFLAGS = -L/usr/local/lib LDFLAGS = -fstack-protector -L/usr/local/lib
LIBC = /lib/libc-2.7.so LIBC = /lib/libc-2.11.1.so
LIB_EXT = .a LIB_EXT = .a
OBJ_EXT = .o OBJ_EXT = .o
OSNAME = linux OSNAME = linux
OSVERS = 2.6.24-19-server OSVERS = 2.6.24-28-server
RANLIB = : RANLIB = :
SITELIBEXP = /usr/local/share/perl/5.8.8 SITELIBEXP = /usr/local/share/perl/5.10.1
SITEARCHEXP = /usr/local/lib/perl/5.8.8 SITEARCHEXP = /usr/local/lib/perl/5.10.1
SO = so SO = so
EXE_EXT =
FULL_AR = /usr/bin/ar
VENDORARCHEXP = /usr/lib/perl5 VENDORARCHEXP = /usr/lib/perl5
VENDORLIBEXP = /usr/share/perl5 VENDORLIBEXP = /usr/share/perl5
@ -73,15 +75,15 @@ PREFIX = /usr
PERLPREFIX = $(PREFIX) PERLPREFIX = $(PREFIX)
SITEPREFIX = $(PREFIX)/local SITEPREFIX = $(PREFIX)/local
VENDORPREFIX = $(PREFIX) VENDORPREFIX = $(PREFIX)
INSTALLPRIVLIB = $(PERLPREFIX)/share/perl/5.8 INSTALLPRIVLIB = $(PERLPREFIX)/share/perl/5.10
DESTINSTALLPRIVLIB = $(DESTDIR)$(INSTALLPRIVLIB) DESTINSTALLPRIVLIB = $(DESTDIR)$(INSTALLPRIVLIB)
INSTALLSITELIB = $(SITEPREFIX)/share/perl/5.8.8 INSTALLSITELIB = $(SITEPREFIX)/share/perl/5.10.1
DESTINSTALLSITELIB = $(DESTDIR)$(INSTALLSITELIB) DESTINSTALLSITELIB = $(DESTDIR)$(INSTALLSITELIB)
INSTALLVENDORLIB = $(VENDORPREFIX)/share/perl5 INSTALLVENDORLIB = $(VENDORPREFIX)/share/perl5
DESTINSTALLVENDORLIB = $(DESTDIR)$(INSTALLVENDORLIB) DESTINSTALLVENDORLIB = $(DESTDIR)$(INSTALLVENDORLIB)
INSTALLARCHLIB = $(PERLPREFIX)/lib/perl/5.8 INSTALLARCHLIB = $(PERLPREFIX)/lib/perl/5.10
DESTINSTALLARCHLIB = $(DESTDIR)$(INSTALLARCHLIB) DESTINSTALLARCHLIB = $(DESTDIR)$(INSTALLARCHLIB)
INSTALLSITEARCH = $(SITEPREFIX)/lib/perl/5.8.8 INSTALLSITEARCH = $(SITEPREFIX)/lib/perl/5.10.1
DESTINSTALLSITEARCH = $(DESTDIR)$(INSTALLSITEARCH) DESTINSTALLSITEARCH = $(DESTDIR)$(INSTALLSITEARCH)
INSTALLVENDORARCH = $(VENDORPREFIX)/lib/perl5 INSTALLVENDORARCH = $(VENDORPREFIX)/lib/perl5
DESTINSTALLVENDORARCH = $(DESTDIR)$(INSTALLVENDORARCH) DESTINSTALLVENDORARCH = $(DESTDIR)$(INSTALLVENDORARCH)
@ -109,14 +111,14 @@ INSTALLSITEMAN3DIR = $(SITEPREFIX)/man/man3
DESTINSTALLSITEMAN3DIR = $(DESTDIR)$(INSTALLSITEMAN3DIR) DESTINSTALLSITEMAN3DIR = $(DESTDIR)$(INSTALLSITEMAN3DIR)
INSTALLVENDORMAN3DIR = $(VENDORPREFIX)/share/man/man3 INSTALLVENDORMAN3DIR = $(VENDORPREFIX)/share/man/man3
DESTINSTALLVENDORMAN3DIR = $(DESTDIR)$(INSTALLVENDORMAN3DIR) DESTINSTALLVENDORMAN3DIR = $(DESTDIR)$(INSTALLVENDORMAN3DIR)
PERL_LIB = /usr/share/perl/5.8 PERL_LIB = /usr/share/perl/5.10
PERL_ARCHLIB = /usr/lib/perl/5.8 PERL_ARCHLIB = /usr/lib/perl/5.10
LIBPERL_A = libperl.a LIBPERL_A = libperl.a
FIRST_MAKEFILE = Makefile FIRST_MAKEFILE = Makefile
MAKEFILE_OLD = Makefile.old MAKEFILE_OLD = Makefile.old
MAKE_APERL_FILE = Makefile.aperl MAKE_APERL_FILE = Makefile.aperl
PERLMAINCC = $(CC) PERLMAINCC = $(CC)
PERL_INC = /usr/lib/perl/5.8/CORE PERL_INC = /usr/lib/perl/5.10/CORE
PERL = /usr/bin/perl PERL = /usr/bin/perl
FULLPERL = /usr/bin/perl FULLPERL = /usr/bin/perl
ABSPERL = $(PERL) ABSPERL = $(PERL)
@ -127,17 +129,19 @@ PERLRUNINST = $(PERLRUN) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)"
FULLPERLRUNINST = $(FULLPERLRUN) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)" FULLPERLRUNINST = $(FULLPERLRUN) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)"
ABSPERLRUNINST = $(ABSPERLRUN) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)" ABSPERLRUNINST = $(ABSPERLRUN) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)"
PERL_CORE = 0 PERL_CORE = 0
PERM_DIR = 755
PERM_RW = 644 PERM_RW = 644
PERM_RWX = 755 PERM_RWX = 755
MAKEMAKER = /usr/share/perl/5.8/ExtUtils/MakeMaker.pm MAKEMAKER = /usr/share/perl/5.10/ExtUtils/MakeMaker.pm
MM_VERSION = 6.30_01 MM_VERSION = 6.55_02
MM_REVISION = Revision: 4535 MM_REVISION = 65502
# FULLEXT = Pathname for extension directory (eg Foo/Bar/Oracle). # FULLEXT = Pathname for extension directory (eg Foo/Bar/Oracle).
# BASEEXT = Basename part of FULLEXT. May be just equal FULLEXT. (eg Oracle) # BASEEXT = Basename part of FULLEXT. May be just equal FULLEXT. (eg Oracle)
# PARENT_NAME = NAME without BASEEXT and no trailing :: (eg Foo::Bar) # PARENT_NAME = NAME without BASEEXT and no trailing :: (eg Foo::Bar)
# DLBASE = Basename part of dynamic library. May be just equal BASEEXT. # DLBASE = Basename part of dynamic library. May be just equal BASEEXT.
MAKE = make
FULLEXT = Authen/NTLM/DES FULLEXT = Authen/NTLM/DES
BASEEXT = DES BASEEXT = DES
PARENT_NAME = Authen::NTLM PARENT_NAME = Authen::NTLM
@ -183,13 +187,13 @@ PM_TO_BLIB = DES.pm \
# --- MakeMaker platform_constants section: # --- MakeMaker platform_constants section:
MM_Unix_VERSION = 1.50_01 MM_Unix_VERSION = 6.55_02
PERL_MALLOC_DEF = -DPERL_EXTMALLOC_DEF -Dmalloc=Perl_malloc -Dfree=Perl_mfree -Drealloc=Perl_realloc -Dcalloc=Perl_calloc PERL_MALLOC_DEF = -DPERL_EXTMALLOC_DEF -Dmalloc=Perl_malloc -Dfree=Perl_mfree -Drealloc=Perl_realloc -Dcalloc=Perl_calloc
# --- MakeMaker tool_autosplit section: # --- MakeMaker tool_autosplit section:
# Usage: $(AUTOSPLITFILE) FileToSplit AutoDirToSplitInto # Usage: $(AUTOSPLITFILE) FileToSplit AutoDirToSplitInto
AUTOSPLITFILE = $(ABSPERLRUN) -e 'use AutoSplit; autosplit($$ARGV[0], $$ARGV[1], 0, 1, 1)' AUTOSPLITFILE = $(ABSPERLRUN) -e 'use AutoSplit; autosplit($$ARGV[0], $$ARGV[1], 0, 1, 1)' --
@ -201,7 +205,7 @@ SHELL = /bin/sh
CHMOD = chmod CHMOD = chmod
CP = cp CP = cp
MV = mv MV = mv
NOOP = $(SHELL) -c true NOOP = $(TRUE)
NOECHO = @ NOECHO = @
RM_F = rm -f RM_F = rm -f
RM_RF = rm -rf RM_RF = rm -rf
@ -209,24 +213,26 @@ TEST_F = test -f
TOUCH = touch TOUCH = touch
UMASK_NULL = umask 0 UMASK_NULL = umask 0
DEV_NULL = > /dev/null 2>&1 DEV_NULL = > /dev/null 2>&1
MKPATH = $(ABSPERLRUN) "-MExtUtils::Command" -e mkpath MKPATH = $(ABSPERLRUN) -MExtUtils::Command -e 'mkpath' --
EQUALIZE_TIMESTAMP = $(ABSPERLRUN) "-MExtUtils::Command" -e eqtime EQUALIZE_TIMESTAMP = $(ABSPERLRUN) -MExtUtils::Command -e 'eqtime' --
FALSE = false
TRUE = true
ECHO = echo ECHO = echo
ECHO_N = echo -n ECHO_N = echo -n
UNINST = 0 UNINST = 0
VERBINST = 0 VERBINST = 0
MOD_INSTALL = $(ABSPERLRUN) -MExtUtils::Install -e 'install({@ARGV}, '\''$(VERBINST)'\'', 0, '\''$(UNINST)'\'');' MOD_INSTALL = $(ABSPERLRUN) -MExtUtils::Install -e 'install([ from_to => {@ARGV}, verbose => '\''$(VERBINST)'\'', uninstall_shadows => '\''$(UNINST)'\'', dir_mode => '\''$(PERM_DIR)'\'' ]);' --
DOC_INSTALL = $(ABSPERLRUN) "-MExtUtils::Command::MM" -e perllocal_install DOC_INSTALL = $(ABSPERLRUN) -MExtUtils::Command::MM -e 'perllocal_install' --
UNINSTALL = $(ABSPERLRUN) "-MExtUtils::Command::MM" -e uninstall UNINSTALL = $(ABSPERLRUN) -MExtUtils::Command::MM -e 'uninstall' --
WARN_IF_OLD_PACKLIST = $(ABSPERLRUN) "-MExtUtils::Command::MM" -e warn_if_old_packlist WARN_IF_OLD_PACKLIST = $(ABSPERLRUN) -MExtUtils::Command::MM -e 'warn_if_old_packlist' --
MACROSTART = MACROSTART =
MACROEND = MACROEND =
USEMAKEFILE = -f USEMAKEFILE = -f
FIXIN = $(PERLRUN) "-MExtUtils::MY" -e "MY->fixin(shift)" FIXIN = $(ABSPERLRUN) -MExtUtils::MY -e 'MY->fixin(shift)' --
# --- MakeMaker makemakerdflt section: # --- MakeMaker makemakerdflt section:
makemakerdflt: all makemakerdflt : all
$(NOECHO) $(NOOP) $(NOECHO) $(NOOP)
@ -301,42 +307,42 @@ blibdirs.ts : blibdirs
$(INST_LIBDIR)$(DFSEP).exists :: Makefile.PL $(INST_LIBDIR)$(DFSEP).exists :: Makefile.PL
$(NOECHO) $(MKPATH) $(INST_LIBDIR) $(NOECHO) $(MKPATH) $(INST_LIBDIR)
$(NOECHO) $(CHMOD) 755 $(INST_LIBDIR) $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_LIBDIR)
$(NOECHO) $(TOUCH) $(INST_LIBDIR)$(DFSEP).exists $(NOECHO) $(TOUCH) $(INST_LIBDIR)$(DFSEP).exists
$(INST_ARCHLIB)$(DFSEP).exists :: Makefile.PL $(INST_ARCHLIB)$(DFSEP).exists :: Makefile.PL
$(NOECHO) $(MKPATH) $(INST_ARCHLIB) $(NOECHO) $(MKPATH) $(INST_ARCHLIB)
$(NOECHO) $(CHMOD) 755 $(INST_ARCHLIB) $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_ARCHLIB)
$(NOECHO) $(TOUCH) $(INST_ARCHLIB)$(DFSEP).exists $(NOECHO) $(TOUCH) $(INST_ARCHLIB)$(DFSEP).exists
$(INST_AUTODIR)$(DFSEP).exists :: Makefile.PL $(INST_AUTODIR)$(DFSEP).exists :: Makefile.PL
$(NOECHO) $(MKPATH) $(INST_AUTODIR) $(NOECHO) $(MKPATH) $(INST_AUTODIR)
$(NOECHO) $(CHMOD) 755 $(INST_AUTODIR) $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_AUTODIR)
$(NOECHO) $(TOUCH) $(INST_AUTODIR)$(DFSEP).exists $(NOECHO) $(TOUCH) $(INST_AUTODIR)$(DFSEP).exists
$(INST_ARCHAUTODIR)$(DFSEP).exists :: Makefile.PL $(INST_ARCHAUTODIR)$(DFSEP).exists :: Makefile.PL
$(NOECHO) $(MKPATH) $(INST_ARCHAUTODIR) $(NOECHO) $(MKPATH) $(INST_ARCHAUTODIR)
$(NOECHO) $(CHMOD) 755 $(INST_ARCHAUTODIR) $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_ARCHAUTODIR)
$(NOECHO) $(TOUCH) $(INST_ARCHAUTODIR)$(DFSEP).exists $(NOECHO) $(TOUCH) $(INST_ARCHAUTODIR)$(DFSEP).exists
$(INST_BIN)$(DFSEP).exists :: Makefile.PL $(INST_BIN)$(DFSEP).exists :: Makefile.PL
$(NOECHO) $(MKPATH) $(INST_BIN) $(NOECHO) $(MKPATH) $(INST_BIN)
$(NOECHO) $(CHMOD) 755 $(INST_BIN) $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_BIN)
$(NOECHO) $(TOUCH) $(INST_BIN)$(DFSEP).exists $(NOECHO) $(TOUCH) $(INST_BIN)$(DFSEP).exists
$(INST_SCRIPT)$(DFSEP).exists :: Makefile.PL $(INST_SCRIPT)$(DFSEP).exists :: Makefile.PL
$(NOECHO) $(MKPATH) $(INST_SCRIPT) $(NOECHO) $(MKPATH) $(INST_SCRIPT)
$(NOECHO) $(CHMOD) 755 $(INST_SCRIPT) $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_SCRIPT)
$(NOECHO) $(TOUCH) $(INST_SCRIPT)$(DFSEP).exists $(NOECHO) $(TOUCH) $(INST_SCRIPT)$(DFSEP).exists
$(INST_MAN1DIR)$(DFSEP).exists :: Makefile.PL $(INST_MAN1DIR)$(DFSEP).exists :: Makefile.PL
$(NOECHO) $(MKPATH) $(INST_MAN1DIR) $(NOECHO) $(MKPATH) $(INST_MAN1DIR)
$(NOECHO) $(CHMOD) 755 $(INST_MAN1DIR) $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_MAN1DIR)
$(NOECHO) $(TOUCH) $(INST_MAN1DIR)$(DFSEP).exists $(NOECHO) $(TOUCH) $(INST_MAN1DIR)$(DFSEP).exists
$(INST_MAN3DIR)$(DFSEP).exists :: Makefile.PL $(INST_MAN3DIR)$(DFSEP).exists :: Makefile.PL
$(NOECHO) $(MKPATH) $(INST_MAN3DIR) $(NOECHO) $(MKPATH) $(INST_MAN3DIR)
$(NOECHO) $(CHMOD) 755 $(INST_MAN3DIR) $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_MAN3DIR)
$(NOECHO) $(TOUCH) $(INST_MAN3DIR)$(DFSEP).exists $(NOECHO) $(TOUCH) $(INST_MAN3DIR)$(DFSEP).exists
@ -446,16 +452,27 @@ realclean purge :: clean realclean_subdirs
# --- MakeMaker metafile section: # --- MakeMaker metafile section:
metafile : create_distdir metafile : create_distdir
$(NOECHO) $(ECHO) Generating META.yml $(NOECHO) $(ECHO) Generating META.yml
$(NOECHO) $(ECHO) '# http://module-build.sourceforge.net/META-spec.html' > META_new.yml $(NOECHO) $(ECHO) '--- #YAML:1.0' > META_new.yml
$(NOECHO) $(ECHO) '#XXXXXXX This is a prototype!!! It will change in the future!!! XXXXX#' >> META_new.yml $(NOECHO) $(ECHO) 'name: Authen-NTLM-DES' >> META_new.yml
$(NOECHO) $(ECHO) 'name: Authen-NTLM-DES' >> META_new.yml $(NOECHO) $(ECHO) 'version: 1.02' >> META_new.yml
$(NOECHO) $(ECHO) 'version: 1.02' >> META_new.yml $(NOECHO) $(ECHO) 'abstract: ~' >> META_new.yml
$(NOECHO) $(ECHO) 'version_from: DES.pm' >> META_new.yml $(NOECHO) $(ECHO) 'author:' >> META_new.yml
$(NOECHO) $(ECHO) 'installdirs: site' >> META_new.yml $(NOECHO) $(ECHO) ' - David (Buzz) Bussenschutt <davidbuzz@gmail.com>, Mark Bush <Mark.Bush@bushnet.demon.co.uk>' >> META_new.yml
$(NOECHO) $(ECHO) 'requires:' >> META_new.yml $(NOECHO) $(ECHO) 'license: unknown' >> META_new.yml
$(NOECHO) $(ECHO) '' >> META_new.yml $(NOECHO) $(ECHO) 'distribution_type: module' >> META_new.yml
$(NOECHO) $(ECHO) 'distribution_type: module' >> META_new.yml $(NOECHO) $(ECHO) 'configure_requires:' >> META_new.yml
$(NOECHO) $(ECHO) 'generated_by: ExtUtils::MakeMaker version 6.30_01' >> META_new.yml $(NOECHO) $(ECHO) ' ExtUtils::MakeMaker: 0' >> META_new.yml
$(NOECHO) $(ECHO) 'build_requires:' >> META_new.yml
$(NOECHO) $(ECHO) ' ExtUtils::MakeMaker: 0' >> META_new.yml
$(NOECHO) $(ECHO) 'requires: {}' >> META_new.yml
$(NOECHO) $(ECHO) 'no_index:' >> META_new.yml
$(NOECHO) $(ECHO) ' directory:' >> META_new.yml
$(NOECHO) $(ECHO) ' - t' >> META_new.yml
$(NOECHO) $(ECHO) ' - inc' >> META_new.yml
$(NOECHO) $(ECHO) 'generated_by: ExtUtils::MakeMaker version 6.55_02' >> META_new.yml
$(NOECHO) $(ECHO) 'meta-spec:' >> META_new.yml
$(NOECHO) $(ECHO) ' url: http://module-build.sourceforge.net/META-spec-v1.4.html' >> META_new.yml
$(NOECHO) $(ECHO) ' version: 1.4' >> META_new.yml
-$(NOECHO) $(MV) META_new.yml $(DISTVNAME)/META.yml -$(NOECHO) $(MV) META_new.yml $(DISTVNAME)/META.yml
@ -477,14 +494,14 @@ signature :
# --- MakeMaker distmeta section: # --- MakeMaker distmeta section:
distmeta : create_distdir metafile distmeta : create_distdir metafile
$(NOECHO) cd $(DISTVNAME) && $(ABSPERLRUN) -MExtUtils::Manifest=maniadd -e 'eval { maniadd({q{META.yml} => q{Module meta-data (added by MakeMaker)}}) } ' \ $(NOECHO) cd $(DISTVNAME) && $(ABSPERLRUN) -MExtUtils::Manifest=maniadd -e 'eval { maniadd({q{META.yml} => q{Module meta-data (added by MakeMaker)}}) } ' \
-e ' or print "Could not add META.yml to MANIFEST: $${'\''@'\''}\n"' -e ' or print "Could not add META.yml to MANIFEST: $${'\''@'\''}\n"' --
# --- MakeMaker distsignature section: # --- MakeMaker distsignature section:
distsignature : create_distdir distsignature : create_distdir
$(NOECHO) cd $(DISTVNAME) && $(ABSPERLRUN) -MExtUtils::Manifest=maniadd -e 'eval { maniadd({q{SIGNATURE} => q{Public-key signature (added by MakeMaker)}}) } ' \ $(NOECHO) cd $(DISTVNAME) && $(ABSPERLRUN) -MExtUtils::Manifest=maniadd -e 'eval { maniadd({q{SIGNATURE} => q{Public-key signature (added by MakeMaker)}}) } ' \
-e ' or print "Could not add SIGNATURE to MANIFEST: $${'\''@'\''}\n"' -e ' or print "Could not add SIGNATURE to MANIFEST: $${'\''@'\''}\n"' --
$(NOECHO) cd $(DISTVNAME) && $(TOUCH) SIGNATURE $(NOECHO) cd $(DISTVNAME) && $(TOUCH) SIGNATURE
cd $(DISTVNAME) && cpansign -s cd $(DISTVNAME) && cpansign -s
@ -494,7 +511,7 @@ distsignature : create_distdir
# --- MakeMaker force section: # --- MakeMaker force section:
# Phony target to force checking subdirectories. # Phony target to force checking subdirectories.
FORCE: FORCE :
$(NOECHO) $(NOOP) $(NOECHO) $(NOOP)
@ -513,7 +530,7 @@ $(FIRST_MAKEFILE) : Makefile.PL $(CONFIGDEP)
$(PERLRUN) Makefile.PL $(PERLRUN) Makefile.PL
$(NOECHO) $(ECHO) "==> Your Makefile has been rebuilt. <==" $(NOECHO) $(ECHO) "==> Your Makefile has been rebuilt. <=="
$(NOECHO) $(ECHO) "==> Please rerun the $(MAKE) command. <==" $(NOECHO) $(ECHO) "==> Please rerun the $(MAKE) command. <=="
false $(FALSE)
@ -534,7 +551,11 @@ TESTDB_SW = -d
testdb :: testdb_$(LINKTYPE) testdb :: testdb_$(LINKTYPE)
test :: $(TEST_TYPE) test :: $(TEST_TYPE) subdirs-test
subdirs-test ::
$(NOECHO) $(NOOP)
$(NOECHO) $(ECHO) 'No tests defined for $(NAME) extension.' $(NOECHO) $(ECHO) 'No tests defined for $(NAME) extension.'
test_dynamic :: pure_all test_dynamic :: pure_all
@ -550,14 +571,12 @@ testdb_static :: testdb_dynamic
# --- MakeMaker ppd section: # --- MakeMaker ppd section:
# Creates a PPD (Perl Package Description) for a binary distribution. # Creates a PPD (Perl Package Description) for a binary distribution.
ppd: ppd :
$(NOECHO) $(ECHO) '<SOFTPKG NAME="$(DISTNAME)" VERSION="1,02,0,0">' > $(DISTNAME).ppd $(NOECHO) $(ECHO) '<SOFTPKG NAME="$(DISTNAME)" VERSION="1.02">' > $(DISTNAME).ppd
$(NOECHO) $(ECHO) ' <TITLE>$(DISTNAME)</TITLE>' >> $(DISTNAME).ppd
$(NOECHO) $(ECHO) ' <ABSTRACT></ABSTRACT>' >> $(DISTNAME).ppd $(NOECHO) $(ECHO) ' <ABSTRACT></ABSTRACT>' >> $(DISTNAME).ppd
$(NOECHO) $(ECHO) ' <AUTHOR>David (Buzz) Bussenschutt &lt;davidbuzz@gmail.com&gt;, Mark Bush &lt;Mark.Bush@bushnet.demon.co.uk&gt;</AUTHOR>' >> $(DISTNAME).ppd $(NOECHO) $(ECHO) ' <AUTHOR>David (Buzz) Bussenschutt &lt;davidbuzz@gmail.com&gt;, Mark Bush &lt;Mark.Bush@bushnet.demon.co.uk&gt;</AUTHOR>' >> $(DISTNAME).ppd
$(NOECHO) $(ECHO) ' <IMPLEMENTATION>' >> $(DISTNAME).ppd $(NOECHO) $(ECHO) ' <IMPLEMENTATION>' >> $(DISTNAME).ppd
$(NOECHO) $(ECHO) ' <OS NAME="$(OSNAME)" />' >> $(DISTNAME).ppd $(NOECHO) $(ECHO) ' <ARCHITECTURE NAME="i486-linux-gnu-thread-multi-5.10" />' >> $(DISTNAME).ppd
$(NOECHO) $(ECHO) ' <ARCHITECTURE NAME="i486-linux-gnu-thread-multi" />' >> $(DISTNAME).ppd
$(NOECHO) $(ECHO) ' <CODEBASE HREF="" />' >> $(DISTNAME).ppd $(NOECHO) $(ECHO) ' <CODEBASE HREF="" />' >> $(DISTNAME).ppd
$(NOECHO) $(ECHO) ' </IMPLEMENTATION>' >> $(DISTNAME).ppd $(NOECHO) $(ECHO) ' </IMPLEMENTATION>' >> $(DISTNAME).ppd
$(NOECHO) $(ECHO) '</SOFTPKG>' >> $(DISTNAME).ppd $(NOECHO) $(ECHO) '</SOFTPKG>' >> $(DISTNAME).ppd
@ -565,8 +584,8 @@ ppd:
# --- MakeMaker pm_to_blib section: # --- MakeMaker pm_to_blib section:
pm_to_blib : $(TO_INST_PM) pm_to_blib : $(FIRST_MAKEFILE) $(TO_INST_PM)
$(NOECHO) $(ABSPERLRUN) -MExtUtils::Install -e 'pm_to_blib({@ARGV}, '\''$(INST_LIB)/auto'\'', '\''$(PM_FILTER)'\'')' \ $(NOECHO) $(ABSPERLRUN) -MExtUtils::Install -e 'pm_to_blib({@ARGV}, '\''$(INST_LIB)/auto'\'', q[$(PM_FILTER)], '\''$(PERM_DIR)'\'')' -- \
DES.pm $(INST_LIB)/Authen/NTLM/DES.pm DES.pm $(INST_LIB)/Authen/NTLM/DES.pm
$(NOECHO) $(TOUCH) pm_to_blib $(NOECHO) $(TOUCH) pm_to_blib

View file

@ -1,17 +1,20 @@
# This Makefile is for the Authen::NTLM::MD4 extension to perl. # This Makefile is for the Authen::NTLM::MD4 extension to perl.
# #
# It was generated automatically by MakeMaker version # It was generated automatically by MakeMaker version
# 6.30_01 (Revision: Revision: 4535 ) from the contents of # 6.55_02 (Revision: 65502) from the contents of
# Makefile.PL. Don't edit this file, edit Makefile.PL instead. # Makefile.PL. Don't edit this file, edit Makefile.PL instead.
# #
# ANY CHANGES MADE HERE WILL BE LOST! # ANY CHANGES MADE HERE WILL BE LOST!
# #
# MakeMaker ARGV: () # MakeMaker ARGV: ()
# #
# MakeMaker Parameters: # MakeMaker Parameters:
# AUTHOR => q[David (Buzz) Bussenschutt <davidbuzz@gmail.com>, Mark Bush <Mark.Bush@bushnet.demon.co.uk>] # AUTHOR => q[David (Buzz) Bussenschutt <davidbuzz@gmail.com>, Mark Bush <Mark.Bush@bushnet.demon.co.uk>]
# BUILD_REQUIRES => { }
# NAME => q[Authen::NTLM::MD4] # NAME => q[Authen::NTLM::MD4]
# PREREQ_PM => { }
# VERSION_FROM => q[MD4.pm] # VERSION_FROM => q[MD4.pm]
# --- MakeMaker post_initialize section: # --- MakeMaker post_initialize section:
@ -19,29 +22,28 @@
# --- MakeMaker const_config section: # --- MakeMaker const_config section:
# These definitions are from config.sh (via /usr/lib/perl/5.8/Config.pm) # These definitions are from config.sh (via /usr/lib/perl/5.10/Config.pm).
# They may have been overridden via Makefile.PL or on the command line.
# They may have been overridden via Makefile.PL or on the command line
AR = ar AR = ar
CC = cc CC = cc
CCCDLFLAGS = -fPIC CCCDLFLAGS = -fPIC
CCDLFLAGS = -Wl,-E CCDLFLAGS = -Wl,-E
DLEXT = so DLEXT = so
DLSRC = dl_dlopen.xs DLSRC = dl_dlopen.xs
EXE_EXT =
FULL_AR = /usr/bin/ar
LD = cc LD = cc
LDDLFLAGS = -shared -L/usr/local/lib LDDLFLAGS = -shared -O2 -g -L/usr/local/lib -fstack-protector
LDFLAGS = -L/usr/local/lib LDFLAGS = -fstack-protector -L/usr/local/lib
LIBC = /lib/libc-2.7.so LIBC = /lib/libc-2.11.1.so
LIB_EXT = .a LIB_EXT = .a
OBJ_EXT = .o OBJ_EXT = .o
OSNAME = linux OSNAME = linux
OSVERS = 2.6.24-19-server OSVERS = 2.6.24-28-server
RANLIB = : RANLIB = :
SITELIBEXP = /usr/local/share/perl/5.8.8 SITELIBEXP = /usr/local/share/perl/5.10.1
SITEARCHEXP = /usr/local/lib/perl/5.8.8 SITEARCHEXP = /usr/local/lib/perl/5.10.1
SO = so SO = so
EXE_EXT =
FULL_AR = /usr/bin/ar
VENDORARCHEXP = /usr/lib/perl5 VENDORARCHEXP = /usr/lib/perl5
VENDORLIBEXP = /usr/share/perl5 VENDORLIBEXP = /usr/share/perl5
@ -73,15 +75,15 @@ PREFIX = /usr
PERLPREFIX = $(PREFIX) PERLPREFIX = $(PREFIX)
SITEPREFIX = $(PREFIX)/local SITEPREFIX = $(PREFIX)/local
VENDORPREFIX = $(PREFIX) VENDORPREFIX = $(PREFIX)
INSTALLPRIVLIB = $(PERLPREFIX)/share/perl/5.8 INSTALLPRIVLIB = $(PERLPREFIX)/share/perl/5.10
DESTINSTALLPRIVLIB = $(DESTDIR)$(INSTALLPRIVLIB) DESTINSTALLPRIVLIB = $(DESTDIR)$(INSTALLPRIVLIB)
INSTALLSITELIB = $(SITEPREFIX)/share/perl/5.8.8 INSTALLSITELIB = $(SITEPREFIX)/share/perl/5.10.1
DESTINSTALLSITELIB = $(DESTDIR)$(INSTALLSITELIB) DESTINSTALLSITELIB = $(DESTDIR)$(INSTALLSITELIB)
INSTALLVENDORLIB = $(VENDORPREFIX)/share/perl5 INSTALLVENDORLIB = $(VENDORPREFIX)/share/perl5
DESTINSTALLVENDORLIB = $(DESTDIR)$(INSTALLVENDORLIB) DESTINSTALLVENDORLIB = $(DESTDIR)$(INSTALLVENDORLIB)
INSTALLARCHLIB = $(PERLPREFIX)/lib/perl/5.8 INSTALLARCHLIB = $(PERLPREFIX)/lib/perl/5.10
DESTINSTALLARCHLIB = $(DESTDIR)$(INSTALLARCHLIB) DESTINSTALLARCHLIB = $(DESTDIR)$(INSTALLARCHLIB)
INSTALLSITEARCH = $(SITEPREFIX)/lib/perl/5.8.8 INSTALLSITEARCH = $(SITEPREFIX)/lib/perl/5.10.1
DESTINSTALLSITEARCH = $(DESTDIR)$(INSTALLSITEARCH) DESTINSTALLSITEARCH = $(DESTDIR)$(INSTALLSITEARCH)
INSTALLVENDORARCH = $(VENDORPREFIX)/lib/perl5 INSTALLVENDORARCH = $(VENDORPREFIX)/lib/perl5
DESTINSTALLVENDORARCH = $(DESTDIR)$(INSTALLVENDORARCH) DESTINSTALLVENDORARCH = $(DESTDIR)$(INSTALLVENDORARCH)
@ -109,14 +111,14 @@ INSTALLSITEMAN3DIR = $(SITEPREFIX)/man/man3
DESTINSTALLSITEMAN3DIR = $(DESTDIR)$(INSTALLSITEMAN3DIR) DESTINSTALLSITEMAN3DIR = $(DESTDIR)$(INSTALLSITEMAN3DIR)
INSTALLVENDORMAN3DIR = $(VENDORPREFIX)/share/man/man3 INSTALLVENDORMAN3DIR = $(VENDORPREFIX)/share/man/man3
DESTINSTALLVENDORMAN3DIR = $(DESTDIR)$(INSTALLVENDORMAN3DIR) DESTINSTALLVENDORMAN3DIR = $(DESTDIR)$(INSTALLVENDORMAN3DIR)
PERL_LIB = /usr/share/perl/5.8 PERL_LIB = /usr/share/perl/5.10
PERL_ARCHLIB = /usr/lib/perl/5.8 PERL_ARCHLIB = /usr/lib/perl/5.10
LIBPERL_A = libperl.a LIBPERL_A = libperl.a
FIRST_MAKEFILE = Makefile FIRST_MAKEFILE = Makefile
MAKEFILE_OLD = Makefile.old MAKEFILE_OLD = Makefile.old
MAKE_APERL_FILE = Makefile.aperl MAKE_APERL_FILE = Makefile.aperl
PERLMAINCC = $(CC) PERLMAINCC = $(CC)
PERL_INC = /usr/lib/perl/5.8/CORE PERL_INC = /usr/lib/perl/5.10/CORE
PERL = /usr/bin/perl PERL = /usr/bin/perl
FULLPERL = /usr/bin/perl FULLPERL = /usr/bin/perl
ABSPERL = $(PERL) ABSPERL = $(PERL)
@ -127,17 +129,19 @@ PERLRUNINST = $(PERLRUN) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)"
FULLPERLRUNINST = $(FULLPERLRUN) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)" FULLPERLRUNINST = $(FULLPERLRUN) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)"
ABSPERLRUNINST = $(ABSPERLRUN) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)" ABSPERLRUNINST = $(ABSPERLRUN) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)"
PERL_CORE = 0 PERL_CORE = 0
PERM_DIR = 755
PERM_RW = 644 PERM_RW = 644
PERM_RWX = 755 PERM_RWX = 755
MAKEMAKER = /usr/share/perl/5.8/ExtUtils/MakeMaker.pm MAKEMAKER = /usr/share/perl/5.10/ExtUtils/MakeMaker.pm
MM_VERSION = 6.30_01 MM_VERSION = 6.55_02
MM_REVISION = Revision: 4535 MM_REVISION = 65502
# FULLEXT = Pathname for extension directory (eg Foo/Bar/Oracle). # FULLEXT = Pathname for extension directory (eg Foo/Bar/Oracle).
# BASEEXT = Basename part of FULLEXT. May be just equal FULLEXT. (eg Oracle) # BASEEXT = Basename part of FULLEXT. May be just equal FULLEXT. (eg Oracle)
# PARENT_NAME = NAME without BASEEXT and no trailing :: (eg Foo::Bar) # PARENT_NAME = NAME without BASEEXT and no trailing :: (eg Foo::Bar)
# DLBASE = Basename part of dynamic library. May be just equal BASEEXT. # DLBASE = Basename part of dynamic library. May be just equal BASEEXT.
MAKE = make
FULLEXT = Authen/NTLM/MD4 FULLEXT = Authen/NTLM/MD4
BASEEXT = MD4 BASEEXT = MD4
PARENT_NAME = Authen::NTLM PARENT_NAME = Authen::NTLM
@ -183,13 +187,13 @@ PM_TO_BLIB = MD4.pm \
# --- MakeMaker platform_constants section: # --- MakeMaker platform_constants section:
MM_Unix_VERSION = 1.50_01 MM_Unix_VERSION = 6.55_02
PERL_MALLOC_DEF = -DPERL_EXTMALLOC_DEF -Dmalloc=Perl_malloc -Dfree=Perl_mfree -Drealloc=Perl_realloc -Dcalloc=Perl_calloc PERL_MALLOC_DEF = -DPERL_EXTMALLOC_DEF -Dmalloc=Perl_malloc -Dfree=Perl_mfree -Drealloc=Perl_realloc -Dcalloc=Perl_calloc
# --- MakeMaker tool_autosplit section: # --- MakeMaker tool_autosplit section:
# Usage: $(AUTOSPLITFILE) FileToSplit AutoDirToSplitInto # Usage: $(AUTOSPLITFILE) FileToSplit AutoDirToSplitInto
AUTOSPLITFILE = $(ABSPERLRUN) -e 'use AutoSplit; autosplit($$ARGV[0], $$ARGV[1], 0, 1, 1)' AUTOSPLITFILE = $(ABSPERLRUN) -e 'use AutoSplit; autosplit($$ARGV[0], $$ARGV[1], 0, 1, 1)' --
@ -201,7 +205,7 @@ SHELL = /bin/sh
CHMOD = chmod CHMOD = chmod
CP = cp CP = cp
MV = mv MV = mv
NOOP = $(SHELL) -c true NOOP = $(TRUE)
NOECHO = @ NOECHO = @
RM_F = rm -f RM_F = rm -f
RM_RF = rm -rf RM_RF = rm -rf
@ -209,24 +213,26 @@ TEST_F = test -f
TOUCH = touch TOUCH = touch
UMASK_NULL = umask 0 UMASK_NULL = umask 0
DEV_NULL = > /dev/null 2>&1 DEV_NULL = > /dev/null 2>&1
MKPATH = $(ABSPERLRUN) "-MExtUtils::Command" -e mkpath MKPATH = $(ABSPERLRUN) -MExtUtils::Command -e 'mkpath' --
EQUALIZE_TIMESTAMP = $(ABSPERLRUN) "-MExtUtils::Command" -e eqtime EQUALIZE_TIMESTAMP = $(ABSPERLRUN) -MExtUtils::Command -e 'eqtime' --
FALSE = false
TRUE = true
ECHO = echo ECHO = echo
ECHO_N = echo -n ECHO_N = echo -n
UNINST = 0 UNINST = 0
VERBINST = 0 VERBINST = 0
MOD_INSTALL = $(ABSPERLRUN) -MExtUtils::Install -e 'install({@ARGV}, '\''$(VERBINST)'\'', 0, '\''$(UNINST)'\'');' MOD_INSTALL = $(ABSPERLRUN) -MExtUtils::Install -e 'install([ from_to => {@ARGV}, verbose => '\''$(VERBINST)'\'', uninstall_shadows => '\''$(UNINST)'\'', dir_mode => '\''$(PERM_DIR)'\'' ]);' --
DOC_INSTALL = $(ABSPERLRUN) "-MExtUtils::Command::MM" -e perllocal_install DOC_INSTALL = $(ABSPERLRUN) -MExtUtils::Command::MM -e 'perllocal_install' --
UNINSTALL = $(ABSPERLRUN) "-MExtUtils::Command::MM" -e uninstall UNINSTALL = $(ABSPERLRUN) -MExtUtils::Command::MM -e 'uninstall' --
WARN_IF_OLD_PACKLIST = $(ABSPERLRUN) "-MExtUtils::Command::MM" -e warn_if_old_packlist WARN_IF_OLD_PACKLIST = $(ABSPERLRUN) -MExtUtils::Command::MM -e 'warn_if_old_packlist' --
MACROSTART = MACROSTART =
MACROEND = MACROEND =
USEMAKEFILE = -f USEMAKEFILE = -f
FIXIN = $(PERLRUN) "-MExtUtils::MY" -e "MY->fixin(shift)" FIXIN = $(ABSPERLRUN) -MExtUtils::MY -e 'MY->fixin(shift)' --
# --- MakeMaker makemakerdflt section: # --- MakeMaker makemakerdflt section:
makemakerdflt: all makemakerdflt : all
$(NOECHO) $(NOOP) $(NOECHO) $(NOOP)
@ -301,42 +307,42 @@ blibdirs.ts : blibdirs
$(INST_LIBDIR)$(DFSEP).exists :: Makefile.PL $(INST_LIBDIR)$(DFSEP).exists :: Makefile.PL
$(NOECHO) $(MKPATH) $(INST_LIBDIR) $(NOECHO) $(MKPATH) $(INST_LIBDIR)
$(NOECHO) $(CHMOD) 755 $(INST_LIBDIR) $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_LIBDIR)
$(NOECHO) $(TOUCH) $(INST_LIBDIR)$(DFSEP).exists $(NOECHO) $(TOUCH) $(INST_LIBDIR)$(DFSEP).exists
$(INST_ARCHLIB)$(DFSEP).exists :: Makefile.PL $(INST_ARCHLIB)$(DFSEP).exists :: Makefile.PL
$(NOECHO) $(MKPATH) $(INST_ARCHLIB) $(NOECHO) $(MKPATH) $(INST_ARCHLIB)
$(NOECHO) $(CHMOD) 755 $(INST_ARCHLIB) $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_ARCHLIB)
$(NOECHO) $(TOUCH) $(INST_ARCHLIB)$(DFSEP).exists $(NOECHO) $(TOUCH) $(INST_ARCHLIB)$(DFSEP).exists
$(INST_AUTODIR)$(DFSEP).exists :: Makefile.PL $(INST_AUTODIR)$(DFSEP).exists :: Makefile.PL
$(NOECHO) $(MKPATH) $(INST_AUTODIR) $(NOECHO) $(MKPATH) $(INST_AUTODIR)
$(NOECHO) $(CHMOD) 755 $(INST_AUTODIR) $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_AUTODIR)
$(NOECHO) $(TOUCH) $(INST_AUTODIR)$(DFSEP).exists $(NOECHO) $(TOUCH) $(INST_AUTODIR)$(DFSEP).exists
$(INST_ARCHAUTODIR)$(DFSEP).exists :: Makefile.PL $(INST_ARCHAUTODIR)$(DFSEP).exists :: Makefile.PL
$(NOECHO) $(MKPATH) $(INST_ARCHAUTODIR) $(NOECHO) $(MKPATH) $(INST_ARCHAUTODIR)
$(NOECHO) $(CHMOD) 755 $(INST_ARCHAUTODIR) $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_ARCHAUTODIR)
$(NOECHO) $(TOUCH) $(INST_ARCHAUTODIR)$(DFSEP).exists $(NOECHO) $(TOUCH) $(INST_ARCHAUTODIR)$(DFSEP).exists
$(INST_BIN)$(DFSEP).exists :: Makefile.PL $(INST_BIN)$(DFSEP).exists :: Makefile.PL
$(NOECHO) $(MKPATH) $(INST_BIN) $(NOECHO) $(MKPATH) $(INST_BIN)
$(NOECHO) $(CHMOD) 755 $(INST_BIN) $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_BIN)
$(NOECHO) $(TOUCH) $(INST_BIN)$(DFSEP).exists $(NOECHO) $(TOUCH) $(INST_BIN)$(DFSEP).exists
$(INST_SCRIPT)$(DFSEP).exists :: Makefile.PL $(INST_SCRIPT)$(DFSEP).exists :: Makefile.PL
$(NOECHO) $(MKPATH) $(INST_SCRIPT) $(NOECHO) $(MKPATH) $(INST_SCRIPT)
$(NOECHO) $(CHMOD) 755 $(INST_SCRIPT) $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_SCRIPT)
$(NOECHO) $(TOUCH) $(INST_SCRIPT)$(DFSEP).exists $(NOECHO) $(TOUCH) $(INST_SCRIPT)$(DFSEP).exists
$(INST_MAN1DIR)$(DFSEP).exists :: Makefile.PL $(INST_MAN1DIR)$(DFSEP).exists :: Makefile.PL
$(NOECHO) $(MKPATH) $(INST_MAN1DIR) $(NOECHO) $(MKPATH) $(INST_MAN1DIR)
$(NOECHO) $(CHMOD) 755 $(INST_MAN1DIR) $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_MAN1DIR)
$(NOECHO) $(TOUCH) $(INST_MAN1DIR)$(DFSEP).exists $(NOECHO) $(TOUCH) $(INST_MAN1DIR)$(DFSEP).exists
$(INST_MAN3DIR)$(DFSEP).exists :: Makefile.PL $(INST_MAN3DIR)$(DFSEP).exists :: Makefile.PL
$(NOECHO) $(MKPATH) $(INST_MAN3DIR) $(NOECHO) $(MKPATH) $(INST_MAN3DIR)
$(NOECHO) $(CHMOD) 755 $(INST_MAN3DIR) $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_MAN3DIR)
$(NOECHO) $(TOUCH) $(INST_MAN3DIR)$(DFSEP).exists $(NOECHO) $(TOUCH) $(INST_MAN3DIR)$(DFSEP).exists
@ -446,16 +452,27 @@ realclean purge :: clean realclean_subdirs
# --- MakeMaker metafile section: # --- MakeMaker metafile section:
metafile : create_distdir metafile : create_distdir
$(NOECHO) $(ECHO) Generating META.yml $(NOECHO) $(ECHO) Generating META.yml
$(NOECHO) $(ECHO) '# http://module-build.sourceforge.net/META-spec.html' > META_new.yml $(NOECHO) $(ECHO) '--- #YAML:1.0' > META_new.yml
$(NOECHO) $(ECHO) '#XXXXXXX This is a prototype!!! It will change in the future!!! XXXXX#' >> META_new.yml $(NOECHO) $(ECHO) 'name: Authen-NTLM-MD4' >> META_new.yml
$(NOECHO) $(ECHO) 'name: Authen-NTLM-MD4' >> META_new.yml $(NOECHO) $(ECHO) 'version: 1.02' >> META_new.yml
$(NOECHO) $(ECHO) 'version: 1.02' >> META_new.yml $(NOECHO) $(ECHO) 'abstract: ~' >> META_new.yml
$(NOECHO) $(ECHO) 'version_from: MD4.pm' >> META_new.yml $(NOECHO) $(ECHO) 'author:' >> META_new.yml
$(NOECHO) $(ECHO) 'installdirs: site' >> META_new.yml $(NOECHO) $(ECHO) ' - David (Buzz) Bussenschutt <davidbuzz@gmail.com>, Mark Bush <Mark.Bush@bushnet.demon.co.uk>' >> META_new.yml
$(NOECHO) $(ECHO) 'requires:' >> META_new.yml $(NOECHO) $(ECHO) 'license: unknown' >> META_new.yml
$(NOECHO) $(ECHO) '' >> META_new.yml $(NOECHO) $(ECHO) 'distribution_type: module' >> META_new.yml
$(NOECHO) $(ECHO) 'distribution_type: module' >> META_new.yml $(NOECHO) $(ECHO) 'configure_requires:' >> META_new.yml
$(NOECHO) $(ECHO) 'generated_by: ExtUtils::MakeMaker version 6.30_01' >> META_new.yml $(NOECHO) $(ECHO) ' ExtUtils::MakeMaker: 0' >> META_new.yml
$(NOECHO) $(ECHO) 'build_requires:' >> META_new.yml
$(NOECHO) $(ECHO) ' ExtUtils::MakeMaker: 0' >> META_new.yml
$(NOECHO) $(ECHO) 'requires: {}' >> META_new.yml
$(NOECHO) $(ECHO) 'no_index:' >> META_new.yml
$(NOECHO) $(ECHO) ' directory:' >> META_new.yml
$(NOECHO) $(ECHO) ' - t' >> META_new.yml
$(NOECHO) $(ECHO) ' - inc' >> META_new.yml
$(NOECHO) $(ECHO) 'generated_by: ExtUtils::MakeMaker version 6.55_02' >> META_new.yml
$(NOECHO) $(ECHO) 'meta-spec:' >> META_new.yml
$(NOECHO) $(ECHO) ' url: http://module-build.sourceforge.net/META-spec-v1.4.html' >> META_new.yml
$(NOECHO) $(ECHO) ' version: 1.4' >> META_new.yml
-$(NOECHO) $(MV) META_new.yml $(DISTVNAME)/META.yml -$(NOECHO) $(MV) META_new.yml $(DISTVNAME)/META.yml
@ -477,14 +494,14 @@ signature :
# --- MakeMaker distmeta section: # --- MakeMaker distmeta section:
distmeta : create_distdir metafile distmeta : create_distdir metafile
$(NOECHO) cd $(DISTVNAME) && $(ABSPERLRUN) -MExtUtils::Manifest=maniadd -e 'eval { maniadd({q{META.yml} => q{Module meta-data (added by MakeMaker)}}) } ' \ $(NOECHO) cd $(DISTVNAME) && $(ABSPERLRUN) -MExtUtils::Manifest=maniadd -e 'eval { maniadd({q{META.yml} => q{Module meta-data (added by MakeMaker)}}) } ' \
-e ' or print "Could not add META.yml to MANIFEST: $${'\''@'\''}\n"' -e ' or print "Could not add META.yml to MANIFEST: $${'\''@'\''}\n"' --
# --- MakeMaker distsignature section: # --- MakeMaker distsignature section:
distsignature : create_distdir distsignature : create_distdir
$(NOECHO) cd $(DISTVNAME) && $(ABSPERLRUN) -MExtUtils::Manifest=maniadd -e 'eval { maniadd({q{SIGNATURE} => q{Public-key signature (added by MakeMaker)}}) } ' \ $(NOECHO) cd $(DISTVNAME) && $(ABSPERLRUN) -MExtUtils::Manifest=maniadd -e 'eval { maniadd({q{SIGNATURE} => q{Public-key signature (added by MakeMaker)}}) } ' \
-e ' or print "Could not add SIGNATURE to MANIFEST: $${'\''@'\''}\n"' -e ' or print "Could not add SIGNATURE to MANIFEST: $${'\''@'\''}\n"' --
$(NOECHO) cd $(DISTVNAME) && $(TOUCH) SIGNATURE $(NOECHO) cd $(DISTVNAME) && $(TOUCH) SIGNATURE
cd $(DISTVNAME) && cpansign -s cd $(DISTVNAME) && cpansign -s
@ -494,7 +511,7 @@ distsignature : create_distdir
# --- MakeMaker force section: # --- MakeMaker force section:
# Phony target to force checking subdirectories. # Phony target to force checking subdirectories.
FORCE: FORCE :
$(NOECHO) $(NOOP) $(NOECHO) $(NOOP)
@ -513,7 +530,7 @@ $(FIRST_MAKEFILE) : Makefile.PL $(CONFIGDEP)
$(PERLRUN) Makefile.PL $(PERLRUN) Makefile.PL
$(NOECHO) $(ECHO) "==> Your Makefile has been rebuilt. <==" $(NOECHO) $(ECHO) "==> Your Makefile has been rebuilt. <=="
$(NOECHO) $(ECHO) "==> Please rerun the $(MAKE) command. <==" $(NOECHO) $(ECHO) "==> Please rerun the $(MAKE) command. <=="
false $(FALSE)
@ -534,7 +551,11 @@ TESTDB_SW = -d
testdb :: testdb_$(LINKTYPE) testdb :: testdb_$(LINKTYPE)
test :: $(TEST_TYPE) test :: $(TEST_TYPE) subdirs-test
subdirs-test ::
$(NOECHO) $(NOOP)
$(NOECHO) $(ECHO) 'No tests defined for $(NAME) extension.' $(NOECHO) $(ECHO) 'No tests defined for $(NAME) extension.'
test_dynamic :: pure_all test_dynamic :: pure_all
@ -550,14 +571,12 @@ testdb_static :: testdb_dynamic
# --- MakeMaker ppd section: # --- MakeMaker ppd section:
# Creates a PPD (Perl Package Description) for a binary distribution. # Creates a PPD (Perl Package Description) for a binary distribution.
ppd: ppd :
$(NOECHO) $(ECHO) '<SOFTPKG NAME="$(DISTNAME)" VERSION="1,02,0,0">' > $(DISTNAME).ppd $(NOECHO) $(ECHO) '<SOFTPKG NAME="$(DISTNAME)" VERSION="1.02">' > $(DISTNAME).ppd
$(NOECHO) $(ECHO) ' <TITLE>$(DISTNAME)</TITLE>' >> $(DISTNAME).ppd
$(NOECHO) $(ECHO) ' <ABSTRACT></ABSTRACT>' >> $(DISTNAME).ppd $(NOECHO) $(ECHO) ' <ABSTRACT></ABSTRACT>' >> $(DISTNAME).ppd
$(NOECHO) $(ECHO) ' <AUTHOR>David (Buzz) Bussenschutt &lt;davidbuzz@gmail.com&gt;, Mark Bush &lt;Mark.Bush@bushnet.demon.co.uk&gt;</AUTHOR>' >> $(DISTNAME).ppd $(NOECHO) $(ECHO) ' <AUTHOR>David (Buzz) Bussenschutt &lt;davidbuzz@gmail.com&gt;, Mark Bush &lt;Mark.Bush@bushnet.demon.co.uk&gt;</AUTHOR>' >> $(DISTNAME).ppd
$(NOECHO) $(ECHO) ' <IMPLEMENTATION>' >> $(DISTNAME).ppd $(NOECHO) $(ECHO) ' <IMPLEMENTATION>' >> $(DISTNAME).ppd
$(NOECHO) $(ECHO) ' <OS NAME="$(OSNAME)" />' >> $(DISTNAME).ppd $(NOECHO) $(ECHO) ' <ARCHITECTURE NAME="i486-linux-gnu-thread-multi-5.10" />' >> $(DISTNAME).ppd
$(NOECHO) $(ECHO) ' <ARCHITECTURE NAME="i486-linux-gnu-thread-multi" />' >> $(DISTNAME).ppd
$(NOECHO) $(ECHO) ' <CODEBASE HREF="" />' >> $(DISTNAME).ppd $(NOECHO) $(ECHO) ' <CODEBASE HREF="" />' >> $(DISTNAME).ppd
$(NOECHO) $(ECHO) ' </IMPLEMENTATION>' >> $(DISTNAME).ppd $(NOECHO) $(ECHO) ' </IMPLEMENTATION>' >> $(DISTNAME).ppd
$(NOECHO) $(ECHO) '</SOFTPKG>' >> $(DISTNAME).ppd $(NOECHO) $(ECHO) '</SOFTPKG>' >> $(DISTNAME).ppd
@ -565,8 +584,8 @@ ppd:
# --- MakeMaker pm_to_blib section: # --- MakeMaker pm_to_blib section:
pm_to_blib : $(TO_INST_PM) pm_to_blib : $(FIRST_MAKEFILE) $(TO_INST_PM)
$(NOECHO) $(ABSPERLRUN) -MExtUtils::Install -e 'pm_to_blib({@ARGV}, '\''$(INST_LIB)/auto'\'', '\''$(PM_FILTER)'\'')' \ $(NOECHO) $(ABSPERLRUN) -MExtUtils::Install -e 'pm_to_blib({@ARGV}, '\''$(INST_LIB)/auto'\'', q[$(PM_FILTER)], '\''$(PERM_DIR)'\'')' -- \
MD4.pm $(INST_LIB)/Authen/NTLM/MD4.pm MD4.pm $(INST_LIB)/Authen/NTLM/MD4.pm
$(NOECHO) $(TOUCH) pm_to_blib $(NOECHO) $(TOUCH) pm_to_blib

View file

@ -1,10 +1,10 @@
--- #YAML:1.0 --- #YAML:1.0
name: Authen-NTLM name: Authen-NTLM
version: 1.05 version: 1.09
abstract: ~ abstract: ~
license: ~ license: perl
author: author:
- David (Buzz) Bussenschutt <davidbuzz@gmail.com>, Mark Bush <Mark.Bush@bushnet.demon.co.uk> - David (Buzz) Bussenschutt <davidbuzz@gmail.com>, Mark Bush <Mark.Bush@bushnet.demon.co.uk>, Nick Bebout <nbebout@cpan.org>
generated_by: ExtUtils::MakeMaker version 6.42 generated_by: ExtUtils::MakeMaker version 6.42
distribution_type: module distribution_type: module
requires: requires:

View file

@ -1,16 +1,18 @@
# This Makefile is for the Authen::NTLM extension to perl. # This Makefile is for the Authen::NTLM extension to perl.
# #
# It was generated automatically by MakeMaker version # It was generated automatically by MakeMaker version
# 6.30_01 (Revision: Revision: 4535 ) from the contents of # 6.55_02 (Revision: 65502) from the contents of
# Makefile.PL. Don't edit this file, edit Makefile.PL instead. # Makefile.PL. Don't edit this file, edit Makefile.PL instead.
# #
# ANY CHANGES MADE HERE WILL BE LOST! # ANY CHANGES MADE HERE WILL BE LOST!
# #
# MakeMaker ARGV: () # MakeMaker ARGV: ()
# #
# MakeMaker Parameters: # MakeMaker Parameters:
# AUTHOR => q[David (Buzz) Bussenschutt <davidbuzz@gmail.com>, Mark Bush <Mark.Bush@bushnet.demon.co.uk>] # AUTHOR => q[David (Buzz) Bussenschutt <davidbuzz@gmail.com>, Mark Bush <Mark.Bush@bushnet.demon.co.uk>]
# BUILD_REQUIRES => { }
# DIR => [q[DES], q[MD4]] # DIR => [q[DES], q[MD4]]
# NAME => q[Authen::NTLM] # NAME => q[Authen::NTLM]
# PREREQ_PM => { Digest::HMAC_MD5=>q[0], MIME::Base64=>q[0] } # PREREQ_PM => { Digest::HMAC_MD5=>q[0], MIME::Base64=>q[0] }
@ -21,29 +23,28 @@
# --- MakeMaker const_config section: # --- MakeMaker const_config section:
# These definitions are from config.sh (via /usr/lib/perl/5.8/Config.pm) # These definitions are from config.sh (via /usr/lib/perl/5.10/Config.pm).
# They may have been overridden via Makefile.PL or on the command line.
# They may have been overridden via Makefile.PL or on the command line
AR = ar AR = ar
CC = cc CC = cc
CCCDLFLAGS = -fPIC CCCDLFLAGS = -fPIC
CCDLFLAGS = -Wl,-E CCDLFLAGS = -Wl,-E
DLEXT = so DLEXT = so
DLSRC = dl_dlopen.xs DLSRC = dl_dlopen.xs
EXE_EXT =
FULL_AR = /usr/bin/ar
LD = cc LD = cc
LDDLFLAGS = -shared -L/usr/local/lib LDDLFLAGS = -shared -O2 -g -L/usr/local/lib -fstack-protector
LDFLAGS = -L/usr/local/lib LDFLAGS = -fstack-protector -L/usr/local/lib
LIBC = /lib/libc-2.7.so LIBC = /lib/libc-2.11.1.so
LIB_EXT = .a LIB_EXT = .a
OBJ_EXT = .o OBJ_EXT = .o
OSNAME = linux OSNAME = linux
OSVERS = 2.6.24-19-server OSVERS = 2.6.24-28-server
RANLIB = : RANLIB = :
SITELIBEXP = /usr/local/share/perl/5.8.8 SITELIBEXP = /usr/local/share/perl/5.10.1
SITEARCHEXP = /usr/local/lib/perl/5.8.8 SITEARCHEXP = /usr/local/lib/perl/5.10.1
SO = so SO = so
EXE_EXT =
FULL_AR = /usr/bin/ar
VENDORARCHEXP = /usr/lib/perl5 VENDORARCHEXP = /usr/lib/perl5
VENDORLIBEXP = /usr/share/perl5 VENDORLIBEXP = /usr/share/perl5
@ -54,11 +55,11 @@ DIRFILESEP = /
DFSEP = $(DIRFILESEP) DFSEP = $(DIRFILESEP)
NAME = Authen::NTLM NAME = Authen::NTLM
NAME_SYM = Authen_NTLM NAME_SYM = Authen_NTLM
VERSION = 1.05 VERSION = 1.09
VERSION_MACRO = VERSION VERSION_MACRO = VERSION
VERSION_SYM = 1_05 VERSION_SYM = 1_09
DEFINE_VERSION = -D$(VERSION_MACRO)=\"$(VERSION)\" DEFINE_VERSION = -D$(VERSION_MACRO)=\"$(VERSION)\"
XS_VERSION = 1.05 XS_VERSION = 1.09
XS_VERSION_MACRO = XS_VERSION XS_VERSION_MACRO = XS_VERSION
XS_DEFINE_VERSION = -D$(XS_VERSION_MACRO)=\"$(XS_VERSION)\" XS_DEFINE_VERSION = -D$(XS_VERSION_MACRO)=\"$(XS_VERSION)\"
INST_ARCHLIB = blib/arch INST_ARCHLIB = blib/arch
@ -75,15 +76,15 @@ PREFIX = /usr
PERLPREFIX = $(PREFIX) PERLPREFIX = $(PREFIX)
SITEPREFIX = $(PREFIX)/local SITEPREFIX = $(PREFIX)/local
VENDORPREFIX = $(PREFIX) VENDORPREFIX = $(PREFIX)
INSTALLPRIVLIB = $(PERLPREFIX)/share/perl/5.8 INSTALLPRIVLIB = $(PERLPREFIX)/share/perl/5.10
DESTINSTALLPRIVLIB = $(DESTDIR)$(INSTALLPRIVLIB) DESTINSTALLPRIVLIB = $(DESTDIR)$(INSTALLPRIVLIB)
INSTALLSITELIB = $(SITEPREFIX)/share/perl/5.8.8 INSTALLSITELIB = $(SITEPREFIX)/share/perl/5.10.1
DESTINSTALLSITELIB = $(DESTDIR)$(INSTALLSITELIB) DESTINSTALLSITELIB = $(DESTDIR)$(INSTALLSITELIB)
INSTALLVENDORLIB = $(VENDORPREFIX)/share/perl5 INSTALLVENDORLIB = $(VENDORPREFIX)/share/perl5
DESTINSTALLVENDORLIB = $(DESTDIR)$(INSTALLVENDORLIB) DESTINSTALLVENDORLIB = $(DESTDIR)$(INSTALLVENDORLIB)
INSTALLARCHLIB = $(PERLPREFIX)/lib/perl/5.8 INSTALLARCHLIB = $(PERLPREFIX)/lib/perl/5.10
DESTINSTALLARCHLIB = $(DESTDIR)$(INSTALLARCHLIB) DESTINSTALLARCHLIB = $(DESTDIR)$(INSTALLARCHLIB)
INSTALLSITEARCH = $(SITEPREFIX)/lib/perl/5.8.8 INSTALLSITEARCH = $(SITEPREFIX)/lib/perl/5.10.1
DESTINSTALLSITEARCH = $(DESTDIR)$(INSTALLSITEARCH) DESTINSTALLSITEARCH = $(DESTDIR)$(INSTALLSITEARCH)
INSTALLVENDORARCH = $(VENDORPREFIX)/lib/perl5 INSTALLVENDORARCH = $(VENDORPREFIX)/lib/perl5
DESTINSTALLVENDORARCH = $(DESTDIR)$(INSTALLVENDORARCH) DESTINSTALLVENDORARCH = $(DESTDIR)$(INSTALLVENDORARCH)
@ -111,14 +112,14 @@ INSTALLSITEMAN3DIR = $(SITEPREFIX)/man/man3
DESTINSTALLSITEMAN3DIR = $(DESTDIR)$(INSTALLSITEMAN3DIR) DESTINSTALLSITEMAN3DIR = $(DESTDIR)$(INSTALLSITEMAN3DIR)
INSTALLVENDORMAN3DIR = $(VENDORPREFIX)/share/man/man3 INSTALLVENDORMAN3DIR = $(VENDORPREFIX)/share/man/man3
DESTINSTALLVENDORMAN3DIR = $(DESTDIR)$(INSTALLVENDORMAN3DIR) DESTINSTALLVENDORMAN3DIR = $(DESTDIR)$(INSTALLVENDORMAN3DIR)
PERL_LIB = /usr/share/perl/5.8 PERL_LIB = /usr/share/perl/5.10
PERL_ARCHLIB = /usr/lib/perl/5.8 PERL_ARCHLIB = /usr/lib/perl/5.10
LIBPERL_A = libperl.a LIBPERL_A = libperl.a
FIRST_MAKEFILE = Makefile FIRST_MAKEFILE = Makefile
MAKEFILE_OLD = Makefile.old MAKEFILE_OLD = Makefile.old
MAKE_APERL_FILE = Makefile.aperl MAKE_APERL_FILE = Makefile.aperl
PERLMAINCC = $(CC) PERLMAINCC = $(CC)
PERL_INC = /usr/lib/perl/5.8/CORE PERL_INC = /usr/lib/perl/5.10/CORE
PERL = /usr/bin/perl PERL = /usr/bin/perl
FULLPERL = /usr/bin/perl FULLPERL = /usr/bin/perl
ABSPERL = $(PERL) ABSPERL = $(PERL)
@ -129,17 +130,19 @@ PERLRUNINST = $(PERLRUN) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)"
FULLPERLRUNINST = $(FULLPERLRUN) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)" FULLPERLRUNINST = $(FULLPERLRUN) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)"
ABSPERLRUNINST = $(ABSPERLRUN) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)" ABSPERLRUNINST = $(ABSPERLRUN) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)"
PERL_CORE = 0 PERL_CORE = 0
PERM_DIR = 755
PERM_RW = 644 PERM_RW = 644
PERM_RWX = 755 PERM_RWX = 755
MAKEMAKER = /usr/share/perl/5.8/ExtUtils/MakeMaker.pm MAKEMAKER = /usr/share/perl/5.10/ExtUtils/MakeMaker.pm
MM_VERSION = 6.30_01 MM_VERSION = 6.55_02
MM_REVISION = Revision: 4535 MM_REVISION = 65502
# FULLEXT = Pathname for extension directory (eg Foo/Bar/Oracle). # FULLEXT = Pathname for extension directory (eg Foo/Bar/Oracle).
# BASEEXT = Basename part of FULLEXT. May be just equal FULLEXT. (eg Oracle) # BASEEXT = Basename part of FULLEXT. May be just equal FULLEXT. (eg Oracle)
# PARENT_NAME = NAME without BASEEXT and no trailing :: (eg Foo::Bar) # PARENT_NAME = NAME without BASEEXT and no trailing :: (eg Foo::Bar)
# DLBASE = Basename part of dynamic library. May be just equal BASEEXT. # DLBASE = Basename part of dynamic library. May be just equal BASEEXT.
MAKE = make
FULLEXT = Authen/NTLM FULLEXT = Authen/NTLM
BASEEXT = NTLM BASEEXT = NTLM
PARENT_NAME = Authen PARENT_NAME = Authen
@ -185,13 +188,13 @@ PM_TO_BLIB = NTLM.pm \
# --- MakeMaker platform_constants section: # --- MakeMaker platform_constants section:
MM_Unix_VERSION = 1.50_01 MM_Unix_VERSION = 6.55_02
PERL_MALLOC_DEF = -DPERL_EXTMALLOC_DEF -Dmalloc=Perl_malloc -Dfree=Perl_mfree -Drealloc=Perl_realloc -Dcalloc=Perl_calloc PERL_MALLOC_DEF = -DPERL_EXTMALLOC_DEF -Dmalloc=Perl_malloc -Dfree=Perl_mfree -Drealloc=Perl_realloc -Dcalloc=Perl_calloc
# --- MakeMaker tool_autosplit section: # --- MakeMaker tool_autosplit section:
# Usage: $(AUTOSPLITFILE) FileToSplit AutoDirToSplitInto # Usage: $(AUTOSPLITFILE) FileToSplit AutoDirToSplitInto
AUTOSPLITFILE = $(ABSPERLRUN) -e 'use AutoSplit; autosplit($$ARGV[0], $$ARGV[1], 0, 1, 1)' AUTOSPLITFILE = $(ABSPERLRUN) -e 'use AutoSplit; autosplit($$ARGV[0], $$ARGV[1], 0, 1, 1)' --
@ -203,7 +206,7 @@ SHELL = /bin/sh
CHMOD = chmod CHMOD = chmod
CP = cp CP = cp
MV = mv MV = mv
NOOP = $(SHELL) -c true NOOP = $(TRUE)
NOECHO = @ NOECHO = @
RM_F = rm -f RM_F = rm -f
RM_RF = rm -rf RM_RF = rm -rf
@ -211,24 +214,26 @@ TEST_F = test -f
TOUCH = touch TOUCH = touch
UMASK_NULL = umask 0 UMASK_NULL = umask 0
DEV_NULL = > /dev/null 2>&1 DEV_NULL = > /dev/null 2>&1
MKPATH = $(ABSPERLRUN) "-MExtUtils::Command" -e mkpath MKPATH = $(ABSPERLRUN) -MExtUtils::Command -e 'mkpath' --
EQUALIZE_TIMESTAMP = $(ABSPERLRUN) "-MExtUtils::Command" -e eqtime EQUALIZE_TIMESTAMP = $(ABSPERLRUN) -MExtUtils::Command -e 'eqtime' --
FALSE = false
TRUE = true
ECHO = echo ECHO = echo
ECHO_N = echo -n ECHO_N = echo -n
UNINST = 0 UNINST = 0
VERBINST = 0 VERBINST = 0
MOD_INSTALL = $(ABSPERLRUN) -MExtUtils::Install -e 'install({@ARGV}, '\''$(VERBINST)'\'', 0, '\''$(UNINST)'\'');' MOD_INSTALL = $(ABSPERLRUN) -MExtUtils::Install -e 'install([ from_to => {@ARGV}, verbose => '\''$(VERBINST)'\'', uninstall_shadows => '\''$(UNINST)'\'', dir_mode => '\''$(PERM_DIR)'\'' ]);' --
DOC_INSTALL = $(ABSPERLRUN) "-MExtUtils::Command::MM" -e perllocal_install DOC_INSTALL = $(ABSPERLRUN) -MExtUtils::Command::MM -e 'perllocal_install' --
UNINSTALL = $(ABSPERLRUN) "-MExtUtils::Command::MM" -e uninstall UNINSTALL = $(ABSPERLRUN) -MExtUtils::Command::MM -e 'uninstall' --
WARN_IF_OLD_PACKLIST = $(ABSPERLRUN) "-MExtUtils::Command::MM" -e warn_if_old_packlist WARN_IF_OLD_PACKLIST = $(ABSPERLRUN) -MExtUtils::Command::MM -e 'warn_if_old_packlist' --
MACROSTART = MACROSTART =
MACROEND = MACROEND =
USEMAKEFILE = -f USEMAKEFILE = -f
FIXIN = $(PERLRUN) "-MExtUtils::MY" -e "MY->fixin(shift)" FIXIN = $(ABSPERLRUN) -MExtUtils::MY -e 'MY->fixin(shift)' --
# --- MakeMaker makemakerdflt section: # --- MakeMaker makemakerdflt section:
makemakerdflt: all makemakerdflt : all
$(NOECHO) $(NOOP) $(NOECHO) $(NOOP)
@ -248,7 +253,7 @@ RCS_LABEL = rcs -Nv$(VERSION_SYM): -q
DIST_CP = best DIST_CP = best
DIST_DEFAULT = tardist DIST_DEFAULT = tardist
DISTNAME = Authen-NTLM DISTNAME = Authen-NTLM
DISTVNAME = Authen-NTLM-1.05 DISTVNAME = Authen-NTLM-1.09
# --- MakeMaker macro section: # --- MakeMaker macro section:
@ -320,42 +325,42 @@ blibdirs.ts : blibdirs
$(INST_LIBDIR)$(DFSEP).exists :: Makefile.PL $(INST_LIBDIR)$(DFSEP).exists :: Makefile.PL
$(NOECHO) $(MKPATH) $(INST_LIBDIR) $(NOECHO) $(MKPATH) $(INST_LIBDIR)
$(NOECHO) $(CHMOD) 755 $(INST_LIBDIR) $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_LIBDIR)
$(NOECHO) $(TOUCH) $(INST_LIBDIR)$(DFSEP).exists $(NOECHO) $(TOUCH) $(INST_LIBDIR)$(DFSEP).exists
$(INST_ARCHLIB)$(DFSEP).exists :: Makefile.PL $(INST_ARCHLIB)$(DFSEP).exists :: Makefile.PL
$(NOECHO) $(MKPATH) $(INST_ARCHLIB) $(NOECHO) $(MKPATH) $(INST_ARCHLIB)
$(NOECHO) $(CHMOD) 755 $(INST_ARCHLIB) $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_ARCHLIB)
$(NOECHO) $(TOUCH) $(INST_ARCHLIB)$(DFSEP).exists $(NOECHO) $(TOUCH) $(INST_ARCHLIB)$(DFSEP).exists
$(INST_AUTODIR)$(DFSEP).exists :: Makefile.PL $(INST_AUTODIR)$(DFSEP).exists :: Makefile.PL
$(NOECHO) $(MKPATH) $(INST_AUTODIR) $(NOECHO) $(MKPATH) $(INST_AUTODIR)
$(NOECHO) $(CHMOD) 755 $(INST_AUTODIR) $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_AUTODIR)
$(NOECHO) $(TOUCH) $(INST_AUTODIR)$(DFSEP).exists $(NOECHO) $(TOUCH) $(INST_AUTODIR)$(DFSEP).exists
$(INST_ARCHAUTODIR)$(DFSEP).exists :: Makefile.PL $(INST_ARCHAUTODIR)$(DFSEP).exists :: Makefile.PL
$(NOECHO) $(MKPATH) $(INST_ARCHAUTODIR) $(NOECHO) $(MKPATH) $(INST_ARCHAUTODIR)
$(NOECHO) $(CHMOD) 755 $(INST_ARCHAUTODIR) $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_ARCHAUTODIR)
$(NOECHO) $(TOUCH) $(INST_ARCHAUTODIR)$(DFSEP).exists $(NOECHO) $(TOUCH) $(INST_ARCHAUTODIR)$(DFSEP).exists
$(INST_BIN)$(DFSEP).exists :: Makefile.PL $(INST_BIN)$(DFSEP).exists :: Makefile.PL
$(NOECHO) $(MKPATH) $(INST_BIN) $(NOECHO) $(MKPATH) $(INST_BIN)
$(NOECHO) $(CHMOD) 755 $(INST_BIN) $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_BIN)
$(NOECHO) $(TOUCH) $(INST_BIN)$(DFSEP).exists $(NOECHO) $(TOUCH) $(INST_BIN)$(DFSEP).exists
$(INST_SCRIPT)$(DFSEP).exists :: Makefile.PL $(INST_SCRIPT)$(DFSEP).exists :: Makefile.PL
$(NOECHO) $(MKPATH) $(INST_SCRIPT) $(NOECHO) $(MKPATH) $(INST_SCRIPT)
$(NOECHO) $(CHMOD) 755 $(INST_SCRIPT) $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_SCRIPT)
$(NOECHO) $(TOUCH) $(INST_SCRIPT)$(DFSEP).exists $(NOECHO) $(TOUCH) $(INST_SCRIPT)$(DFSEP).exists
$(INST_MAN1DIR)$(DFSEP).exists :: Makefile.PL $(INST_MAN1DIR)$(DFSEP).exists :: Makefile.PL
$(NOECHO) $(MKPATH) $(INST_MAN1DIR) $(NOECHO) $(MKPATH) $(INST_MAN1DIR)
$(NOECHO) $(CHMOD) 755 $(INST_MAN1DIR) $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_MAN1DIR)
$(NOECHO) $(TOUCH) $(INST_MAN1DIR)$(DFSEP).exists $(NOECHO) $(TOUCH) $(INST_MAN1DIR)$(DFSEP).exists
$(INST_MAN3DIR)$(DFSEP).exists :: Makefile.PL $(INST_MAN3DIR)$(DFSEP).exists :: Makefile.PL
$(NOECHO) $(MKPATH) $(INST_MAN3DIR) $(NOECHO) $(MKPATH) $(INST_MAN3DIR)
$(NOECHO) $(CHMOD) 755 $(INST_MAN3DIR) $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_MAN3DIR)
$(NOECHO) $(TOUCH) $(INST_MAN3DIR)$(DFSEP).exists $(NOECHO) $(TOUCH) $(INST_MAN3DIR)$(DFSEP).exists
@ -401,7 +406,6 @@ POD2MAN = $(POD2MAN_EXE)
manifypods : pure_all \ manifypods : pure_all \
NTLM.pm \
NTLM.pm NTLM.pm
$(NOECHO) $(POD2MAN) --section=$(MAN3EXT) --perm_rw=$(PERM_RW) \ $(NOECHO) $(POD2MAN) --section=$(MAN3EXT) --perm_rw=$(PERM_RW) \
NTLM.pm $(INST_MAN3DIR)/Authen::NTLM.$(MAN3EXT) NTLM.pm $(INST_MAN3DIR)/Authen::NTLM.$(MAN3EXT)
@ -430,8 +434,8 @@ subdirs ::
# --- MakeMaker clean_subdirs section: # --- MakeMaker clean_subdirs section:
clean_subdirs : clean_subdirs :
$(ABSPERLRUN) -e 'chdir '\''DES'\''; system '\''$(MAKE) clean'\'' if -f '\''$(FIRST_MAKEFILE)'\'';' $(ABSPERLRUN) -e 'chdir '\''DES'\''; system '\''$(MAKE) clean'\'' if -f '\''$(FIRST_MAKEFILE)'\'';' --
$(ABSPERLRUN) -e 'chdir '\''MD4'\''; system '\''$(MAKE) clean'\'' if -f '\''$(FIRST_MAKEFILE)'\'';' $(ABSPERLRUN) -e 'chdir '\''MD4'\''; system '\''$(MAKE) clean'\'' if -f '\''$(FIRST_MAKEFILE)'\'';' --
# --- MakeMaker clean section: # --- MakeMaker clean section:
@ -463,10 +467,10 @@ clean :: clean_subdirs
# --- MakeMaker realclean_subdirs section: # --- MakeMaker realclean_subdirs section:
realclean_subdirs : realclean_subdirs :
- $(ABSPERLRUN) -e 'chdir '\''DES'\''; system '\''$(MAKE) $(USEMAKEFILE) $(MAKEFILE_OLD) realclean'\'' if -f '\''$(MAKEFILE_OLD)'\'';' - $(ABSPERLRUN) -e 'chdir '\''DES'\''; system '\''$(MAKE) $(USEMAKEFILE) $(MAKEFILE_OLD) realclean'\'' if -f '\''$(MAKEFILE_OLD)'\'';' --
- $(ABSPERLRUN) -e 'chdir '\''DES'\''; system '\''$(MAKE) $(USEMAKEFILE) $(FIRST_MAKEFILE) realclean'\'' if -f '\''$(FIRST_MAKEFILE)'\'';' - $(ABSPERLRUN) -e 'chdir '\''DES'\''; system '\''$(MAKE) $(USEMAKEFILE) $(FIRST_MAKEFILE) realclean'\'' if -f '\''$(FIRST_MAKEFILE)'\'';' --
- $(ABSPERLRUN) -e 'chdir '\''MD4'\''; system '\''$(MAKE) $(USEMAKEFILE) $(MAKEFILE_OLD) realclean'\'' if -f '\''$(MAKEFILE_OLD)'\'';' - $(ABSPERLRUN) -e 'chdir '\''MD4'\''; system '\''$(MAKE) $(USEMAKEFILE) $(MAKEFILE_OLD) realclean'\'' if -f '\''$(MAKEFILE_OLD)'\'';' --
- $(ABSPERLRUN) -e 'chdir '\''MD4'\''; system '\''$(MAKE) $(USEMAKEFILE) $(FIRST_MAKEFILE) realclean'\'' if -f '\''$(FIRST_MAKEFILE)'\'';' - $(ABSPERLRUN) -e 'chdir '\''MD4'\''; system '\''$(MAKE) $(USEMAKEFILE) $(FIRST_MAKEFILE) realclean'\'' if -f '\''$(FIRST_MAKEFILE)'\'';' --
# --- MakeMaker realclean section: # --- MakeMaker realclean section:
@ -481,18 +485,29 @@ realclean purge :: clean realclean_subdirs
# --- MakeMaker metafile section: # --- MakeMaker metafile section:
metafile : create_distdir metafile : create_distdir
$(NOECHO) $(ECHO) Generating META.yml $(NOECHO) $(ECHO) Generating META.yml
$(NOECHO) $(ECHO) '# http://module-build.sourceforge.net/META-spec.html' > META_new.yml $(NOECHO) $(ECHO) '--- #YAML:1.0' > META_new.yml
$(NOECHO) $(ECHO) '#XXXXXXX This is a prototype!!! It will change in the future!!! XXXXX#' >> META_new.yml $(NOECHO) $(ECHO) 'name: Authen-NTLM' >> META_new.yml
$(NOECHO) $(ECHO) 'name: Authen-NTLM' >> META_new.yml $(NOECHO) $(ECHO) 'version: 1.09' >> META_new.yml
$(NOECHO) $(ECHO) 'version: 1.05' >> META_new.yml $(NOECHO) $(ECHO) 'abstract: ~' >> META_new.yml
$(NOECHO) $(ECHO) 'version_from: NTLM.pm' >> META_new.yml $(NOECHO) $(ECHO) 'author:' >> META_new.yml
$(NOECHO) $(ECHO) 'installdirs: site' >> META_new.yml $(NOECHO) $(ECHO) ' - David (Buzz) Bussenschutt <davidbuzz@gmail.com>, Mark Bush <Mark.Bush@bushnet.demon.co.uk>' >> META_new.yml
$(NOECHO) $(ECHO) 'license: unknown' >> META_new.yml
$(NOECHO) $(ECHO) 'distribution_type: module' >> META_new.yml
$(NOECHO) $(ECHO) 'configure_requires:' >> META_new.yml
$(NOECHO) $(ECHO) ' ExtUtils::MakeMaker: 0' >> META_new.yml
$(NOECHO) $(ECHO) 'build_requires:' >> META_new.yml
$(NOECHO) $(ECHO) ' ExtUtils::MakeMaker: 0' >> META_new.yml
$(NOECHO) $(ECHO) 'requires:' >> META_new.yml $(NOECHO) $(ECHO) 'requires:' >> META_new.yml
$(NOECHO) $(ECHO) ' Digest::HMAC_MD5: 0' >> META_new.yml $(NOECHO) $(ECHO) ' Digest::HMAC_MD5: 0' >> META_new.yml
$(NOECHO) $(ECHO) ' MIME::Base64: 0' >> META_new.yml $(NOECHO) $(ECHO) ' MIME::Base64: 0' >> META_new.yml
$(NOECHO) $(ECHO) '' >> META_new.yml $(NOECHO) $(ECHO) 'no_index:' >> META_new.yml
$(NOECHO) $(ECHO) 'distribution_type: module' >> META_new.yml $(NOECHO) $(ECHO) ' directory:' >> META_new.yml
$(NOECHO) $(ECHO) 'generated_by: ExtUtils::MakeMaker version 6.30_01' >> META_new.yml $(NOECHO) $(ECHO) ' - t' >> META_new.yml
$(NOECHO) $(ECHO) ' - inc' >> META_new.yml
$(NOECHO) $(ECHO) 'generated_by: ExtUtils::MakeMaker version 6.55_02' >> META_new.yml
$(NOECHO) $(ECHO) 'meta-spec:' >> META_new.yml
$(NOECHO) $(ECHO) ' url: http://module-build.sourceforge.net/META-spec-v1.4.html' >> META_new.yml
$(NOECHO) $(ECHO) ' version: 1.4' >> META_new.yml
-$(NOECHO) $(MV) META_new.yml $(DISTVNAME)/META.yml -$(NOECHO) $(MV) META_new.yml $(DISTVNAME)/META.yml
@ -515,7 +530,7 @@ manifest :
$(PERLRUN) "-MExtUtils::Manifest=mkmanifest" -e mkmanifest $(PERLRUN) "-MExtUtils::Manifest=mkmanifest" -e mkmanifest
veryclean : realclean veryclean : realclean
$(RM_F) *~ *.orig */*~ */*.orig $(RM_F) *~ */*~ *.orig */*.orig *.bak */*.bak *.old */*.old
@ -523,7 +538,7 @@ veryclean : realclean
dist : $(DIST_DEFAULT) $(FIRST_MAKEFILE) dist : $(DIST_DEFAULT) $(FIRST_MAKEFILE)
$(NOECHO) $(ABSPERLRUN) -l -e 'print '\''Warning: Makefile possibly out of date with $(VERSION_FROM)'\''' \ $(NOECHO) $(ABSPERLRUN) -l -e 'print '\''Warning: Makefile possibly out of date with $(VERSION_FROM)'\''' \
-e ' if -e '\''$(VERSION_FROM)'\'' and -M '\''$(VERSION_FROM)'\'' < -M '\''$(FIRST_MAKEFILE)'\'';' -e ' if -e '\''$(VERSION_FROM)'\'' and -M '\''$(VERSION_FROM)'\'' < -M '\''$(FIRST_MAKEFILE)'\'';' --
tardist : $(DISTVNAME).tar$(SUFFIX) tardist : $(DISTVNAME).tar$(SUFFIX)
$(NOECHO) $(NOOP) $(NOECHO) $(NOOP)
@ -586,14 +601,14 @@ ci :
# --- MakeMaker distmeta section: # --- MakeMaker distmeta section:
distmeta : create_distdir metafile distmeta : create_distdir metafile
$(NOECHO) cd $(DISTVNAME) && $(ABSPERLRUN) -MExtUtils::Manifest=maniadd -e 'eval { maniadd({q{META.yml} => q{Module meta-data (added by MakeMaker)}}) } ' \ $(NOECHO) cd $(DISTVNAME) && $(ABSPERLRUN) -MExtUtils::Manifest=maniadd -e 'eval { maniadd({q{META.yml} => q{Module meta-data (added by MakeMaker)}}) } ' \
-e ' or print "Could not add META.yml to MANIFEST: $${'\''@'\''}\n"' -e ' or print "Could not add META.yml to MANIFEST: $${'\''@'\''}\n"' --
# --- MakeMaker distsignature section: # --- MakeMaker distsignature section:
distsignature : create_distdir distsignature : create_distdir
$(NOECHO) cd $(DISTVNAME) && $(ABSPERLRUN) -MExtUtils::Manifest=maniadd -e 'eval { maniadd({q{SIGNATURE} => q{Public-key signature (added by MakeMaker)}}) } ' \ $(NOECHO) cd $(DISTVNAME) && $(ABSPERLRUN) -MExtUtils::Manifest=maniadd -e 'eval { maniadd({q{SIGNATURE} => q{Public-key signature (added by MakeMaker)}}) } ' \
-e ' or print "Could not add SIGNATURE to MANIFEST: $${'\''@'\''}\n"' -e ' or print "Could not add SIGNATURE to MANIFEST: $${'\''@'\''}\n"' --
$(NOECHO) cd $(DISTVNAME) && $(TOUCH) SIGNATURE $(NOECHO) cd $(DISTVNAME) && $(TOUCH) SIGNATURE
cd $(DISTVNAME) && cpansign -s cd $(DISTVNAME) && cpansign -s
@ -601,16 +616,16 @@ distsignature : create_distdir
# --- MakeMaker install section: # --- MakeMaker install section:
install :: all pure_install doc_install install :: pure_install doc_install
$(NOECHO) $(NOOP) $(NOECHO) $(NOOP)
install_perl :: all pure_perl_install doc_perl_install install_perl :: pure_perl_install doc_perl_install
$(NOECHO) $(NOOP) $(NOECHO) $(NOOP)
install_site :: all pure_site_install doc_site_install install_site :: pure_site_install doc_site_install
$(NOECHO) $(NOOP) $(NOECHO) $(NOOP)
install_vendor :: all pure_vendor_install doc_vendor_install install_vendor :: pure_vendor_install doc_vendor_install
$(NOECHO) $(NOOP) $(NOECHO) $(NOOP)
pure_install :: pure_$(INSTALLDIRS)_install pure_install :: pure_$(INSTALLDIRS)_install
@ -625,7 +640,7 @@ pure__install : pure_site_install
doc__install : doc_site_install doc__install : doc_site_install
$(NOECHO) $(ECHO) INSTALLDIRS not defined, defaulting to INSTALLDIRS=site $(NOECHO) $(ECHO) INSTALLDIRS not defined, defaulting to INSTALLDIRS=site
pure_perl_install :: pure_perl_install :: all
$(NOECHO) umask 022; $(MOD_INSTALL) \ $(NOECHO) umask 022; $(MOD_INSTALL) \
$(INST_LIB) $(DESTINSTALLPRIVLIB) \ $(INST_LIB) $(DESTINSTALLPRIVLIB) \
$(INST_ARCHLIB) $(DESTINSTALLARCHLIB) \ $(INST_ARCHLIB) $(DESTINSTALLARCHLIB) \
@ -637,7 +652,7 @@ pure_perl_install ::
$(SITEARCHEXP)/auto/$(FULLEXT) $(SITEARCHEXP)/auto/$(FULLEXT)
pure_site_install :: pure_site_install :: all
$(NOECHO) umask 02; $(MOD_INSTALL) \ $(NOECHO) umask 02; $(MOD_INSTALL) \
read $(SITEARCHEXP)/auto/$(FULLEXT)/.packlist \ read $(SITEARCHEXP)/auto/$(FULLEXT)/.packlist \
write $(DESTINSTALLSITEARCH)/auto/$(FULLEXT)/.packlist \ write $(DESTINSTALLSITEARCH)/auto/$(FULLEXT)/.packlist \
@ -650,7 +665,7 @@ pure_site_install ::
$(NOECHO) $(WARN_IF_OLD_PACKLIST) \ $(NOECHO) $(WARN_IF_OLD_PACKLIST) \
$(PERL_ARCHLIB)/auto/$(FULLEXT) $(PERL_ARCHLIB)/auto/$(FULLEXT)
pure_vendor_install :: pure_vendor_install :: all
$(NOECHO) umask 022; $(MOD_INSTALL) \ $(NOECHO) umask 022; $(MOD_INSTALL) \
$(INST_LIB) $(DESTINSTALLVENDORLIB) \ $(INST_LIB) $(DESTINSTALLVENDORLIB) \
$(INST_ARCHLIB) $(DESTINSTALLVENDORARCH) \ $(INST_ARCHLIB) $(DESTINSTALLVENDORARCH) \
@ -659,9 +674,9 @@ pure_vendor_install ::
$(INST_MAN1DIR) $(DESTINSTALLVENDORMAN1DIR) \ $(INST_MAN1DIR) $(DESTINSTALLVENDORMAN1DIR) \
$(INST_MAN3DIR) $(DESTINSTALLVENDORMAN3DIR) $(INST_MAN3DIR) $(DESTINSTALLVENDORMAN3DIR)
doc_perl_install :: doc_perl_install :: all
doc_site_install :: doc_site_install :: all
$(NOECHO) $(ECHO) Appending installation info to $(DESTINSTALLSITEARCH)/perllocal.pod $(NOECHO) $(ECHO) Appending installation info to $(DESTINSTALLSITEARCH)/perllocal.pod
-$(NOECHO) umask 02; $(MKPATH) $(DESTINSTALLSITEARCH) -$(NOECHO) umask 02; $(MKPATH) $(DESTINSTALLSITEARCH)
-$(NOECHO) umask 02; $(DOC_INSTALL) \ -$(NOECHO) umask 02; $(DOC_INSTALL) \
@ -672,7 +687,7 @@ doc_site_install ::
EXE_FILES "$(EXE_FILES)" \ EXE_FILES "$(EXE_FILES)" \
>> $(DESTINSTALLSITEARCH)/perllocal.pod >> $(DESTINSTALLSITEARCH)/perllocal.pod
doc_vendor_install :: doc_vendor_install :: all
uninstall :: uninstall_from_$(INSTALLDIRS)dirs uninstall :: uninstall_from_$(INSTALLDIRS)dirs
@ -689,7 +704,7 @@ uninstall_from_vendordirs ::
# --- MakeMaker force section: # --- MakeMaker force section:
# Phony target to force checking subdirectories. # Phony target to force checking subdirectories.
FORCE: FORCE :
$(NOECHO) $(NOOP) $(NOECHO) $(NOOP)
@ -708,7 +723,7 @@ $(FIRST_MAKEFILE) : Makefile.PL $(CONFIGDEP)
$(PERLRUN) Makefile.PL $(PERLRUN) Makefile.PL
$(NOECHO) $(ECHO) "==> Your Makefile has been rebuilt. <==" $(NOECHO) $(ECHO) "==> Your Makefile has been rebuilt. <=="
$(NOECHO) $(ECHO) "==> Please rerun the $(MAKE) command. <==" $(NOECHO) $(ECHO) "==> Please rerun the $(MAKE) command. <=="
false $(FALSE)
@ -739,13 +754,17 @@ TESTDB_SW = -d
testdb :: testdb_$(LINKTYPE) testdb :: testdb_$(LINKTYPE)
test :: $(TEST_TYPE) test :: $(TEST_TYPE) subdirs-test
$(NOECHO) $(ABSPERLRUN) -e 'chdir '\''DES'\''; ' \
-e 'system '\''$(MAKE) test $(PASTHRU)'\'' ' \ subdirs-test ::
-e ' if -f '\''$(FIRST_MAKEFILE)'\'';' $(NOECHO) $(NOOP)
$(NOECHO) $(ABSPERLRUN) -e 'chdir '\''MD4'\''; ' \
-e 'system '\''$(MAKE) test $(PASTHRU)'\'' ' \ subdirs-test ::
-e ' if -f '\''$(FIRST_MAKEFILE)'\'';' $(NOECHO) cd DES && $(MAKE) test $(PASTHRU)
subdirs-test ::
$(NOECHO) cd MD4 && $(MAKE) test $(PASTHRU)
test_dynamic :: pure_all test_dynamic :: pure_all
PERL_DL_NONLAZY=1 $(FULLPERLRUN) "-MExtUtils::Command::MM" "-e" "test_harness($(TEST_VERBOSE), '$(INST_LIB)', '$(INST_ARCHLIB)')" $(TEST_FILES) PERL_DL_NONLAZY=1 $(FULLPERLRUN) "-MExtUtils::Command::MM" "-e" "test_harness($(TEST_VERBOSE), '$(INST_LIB)', '$(INST_ARCHLIB)')" $(TEST_FILES)
@ -761,16 +780,14 @@ testdb_static :: testdb_dynamic
# --- MakeMaker ppd section: # --- MakeMaker ppd section:
# Creates a PPD (Perl Package Description) for a binary distribution. # Creates a PPD (Perl Package Description) for a binary distribution.
ppd: ppd :
$(NOECHO) $(ECHO) '<SOFTPKG NAME="$(DISTNAME)" VERSION="1,05,0,0">' > $(DISTNAME).ppd $(NOECHO) $(ECHO) '<SOFTPKG NAME="$(DISTNAME)" VERSION="1.09">' > $(DISTNAME).ppd
$(NOECHO) $(ECHO) ' <TITLE>$(DISTNAME)</TITLE>' >> $(DISTNAME).ppd
$(NOECHO) $(ECHO) ' <ABSTRACT></ABSTRACT>' >> $(DISTNAME).ppd $(NOECHO) $(ECHO) ' <ABSTRACT></ABSTRACT>' >> $(DISTNAME).ppd
$(NOECHO) $(ECHO) ' <AUTHOR>David (Buzz) Bussenschutt &lt;davidbuzz@gmail.com&gt;, Mark Bush &lt;Mark.Bush@bushnet.demon.co.uk&gt;</AUTHOR>' >> $(DISTNAME).ppd $(NOECHO) $(ECHO) ' <AUTHOR>David (Buzz) Bussenschutt &lt;davidbuzz@gmail.com&gt;, Mark Bush &lt;Mark.Bush@bushnet.demon.co.uk&gt;</AUTHOR>' >> $(DISTNAME).ppd
$(NOECHO) $(ECHO) ' <IMPLEMENTATION>' >> $(DISTNAME).ppd $(NOECHO) $(ECHO) ' <IMPLEMENTATION>' >> $(DISTNAME).ppd
$(NOECHO) $(ECHO) ' <DEPENDENCY NAME="Digest-HMAC_MD5" VERSION="0,0,0,0" />' >> $(DISTNAME).ppd $(NOECHO) $(ECHO) ' <REQUIRE NAME="Digest::HMAC_MD5" />' >> $(DISTNAME).ppd
$(NOECHO) $(ECHO) ' <DEPENDENCY NAME="MIME-Base64" VERSION="0,0,0,0" />' >> $(DISTNAME).ppd $(NOECHO) $(ECHO) ' <REQUIRE NAME="MIME::Base64" />' >> $(DISTNAME).ppd
$(NOECHO) $(ECHO) ' <OS NAME="$(OSNAME)" />' >> $(DISTNAME).ppd $(NOECHO) $(ECHO) ' <ARCHITECTURE NAME="i486-linux-gnu-thread-multi-5.10" />' >> $(DISTNAME).ppd
$(NOECHO) $(ECHO) ' <ARCHITECTURE NAME="i486-linux-gnu-thread-multi" />' >> $(DISTNAME).ppd
$(NOECHO) $(ECHO) ' <CODEBASE HREF="" />' >> $(DISTNAME).ppd $(NOECHO) $(ECHO) ' <CODEBASE HREF="" />' >> $(DISTNAME).ppd
$(NOECHO) $(ECHO) ' </IMPLEMENTATION>' >> $(DISTNAME).ppd $(NOECHO) $(ECHO) ' </IMPLEMENTATION>' >> $(DISTNAME).ppd
$(NOECHO) $(ECHO) '</SOFTPKG>' >> $(DISTNAME).ppd $(NOECHO) $(ECHO) '</SOFTPKG>' >> $(DISTNAME).ppd
@ -778,8 +795,8 @@ ppd:
# --- MakeMaker pm_to_blib section: # --- MakeMaker pm_to_blib section:
pm_to_blib : $(TO_INST_PM) pm_to_blib : $(FIRST_MAKEFILE) $(TO_INST_PM)
$(NOECHO) $(ABSPERLRUN) -MExtUtils::Install -e 'pm_to_blib({@ARGV}, '\''$(INST_LIB)/auto'\'', '\''$(PM_FILTER)'\'')' \ $(NOECHO) $(ABSPERLRUN) -MExtUtils::Install -e 'pm_to_blib({@ARGV}, '\''$(INST_LIB)/auto'\'', q[$(PM_FILTER)], '\''$(PERM_DIR)'\'')' -- \
NTLM.pm $(INST_LIB)/Authen/NTLM.pm NTLM.pm $(INST_LIB)/Authen/NTLM.pm
$(NOECHO) $(TOUCH) pm_to_blib $(NOECHO) $(TOUCH) pm_to_blib

View file

@ -148,6 +148,10 @@ L<perl>, L<Mail::IMAPClient>, L<LWP::Authen::Ntlm>
=head1 HISTORY =head1 HISTORY
1.09 - fix CPAN ticket # 70703
1.08 - fix CPAN ticket # 39925
1.07 - not publicly released
1.06 - relicense as GPL+ or Artistic
1.05 - add OO interface by Dmitry Karasik 1.05 - add OO interface by Dmitry Karasik
1.04 - implementation of NTLMv2 by Andrew Hobson/Dmitry Karasik 1.04 - implementation of NTLMv2 by Andrew Hobson/Dmitry Karasik
1.03 - fixes long-standing 1 line bug L<http://rt.cpan.org/Public/Bug/Display.html?id=9521> - released by David Bussenschutt 9th Aug 2007 1.03 - fixes long-standing 1 line bug L<http://rt.cpan.org/Public/Bug/Display.html?id=9521> - released by David Bussenschutt 9th Aug 2007
@ -155,7 +159,7 @@ L<perl>, L<Mail::IMAPClient>, L<LWP::Authen::Ntlm>
=cut =cut
$VERSION = "1.05"; $VERSION = "1.09";
@ISA = qw(Exporter); @ISA = qw(Exporter);
@EXPORT = qw(ntlm ntlm_domain ntlm_user ntlm_password ntlm_reset ntlm_host ntlmv2); @EXPORT = qw(ntlm ntlm_domain ntlm_user ntlm_password ntlm_reset ntlm_host ntlmv2);
@ -210,7 +214,7 @@ sub challenge
my ( $self, $challenge) = @_; my ( $self, $challenge) = @_;
$state = defined $challenge; $state = defined $challenge;
($user,$domain,$password,$host) = @{$self}{qw(user domain password host)}; ($user,$domain,$password,$host) = @{$self}{qw(user domain password host)};
$ntlm_v2 = ($self-> {version} > 1) ? 1 : 0; $ntlm_v2 = ($self-> {version} eq '2') ? 1 : 0;
return ntlm($challenge); return ntlm($challenge);
} }
@ -287,10 +291,17 @@ sub ntlm
$lmResp = &lmEncrypt($c_info->{data}); $lmResp = &lmEncrypt($c_info->{data});
$ntResp = &ntEncrypt($c_info->{data}); $ntResp = &ntEncrypt($c_info->{data});
$flags = pack($msg3_tl, $c_info->{flags}); $flags = pack($msg3_tl, $c_info->{flags});
} else { }
elsif ($ntlm_v2 eq '1') {
$lmResp = &lmv2Encrypt($c_info->{data}); $lmResp = &lmv2Encrypt($c_info->{data});
$ntResp = &ntv2Encrypt($c_info->{data}, $c_info->{target_data}); $ntResp = &ntv2Encrypt($c_info->{data}, $c_info->{target_data});
$flags = pack($msg3_tl, $ntlm_v2_msg3_flags); $flags = pack($msg3_tl, $ntlm_v2_msg3_flags);
}
else {
$domain = &unicode($domain);#substr($challenge, $c_info->{domain}{offset}, $c_info->{domain}{len});
$lmResp = &lmEncrypt($c_info->{data});
$ntResp = &ntEncrypt($c_info->{data});
$flags = pack($msg3_tl, $c_info->{flags});
} }
$u_host = &unicode(($host ? $host : $user)); $u_host = &unicode(($host ? $host : $user));
$response = pack($msg3, $ident, 3); $response = pack($msg3, $ident, 3);
@ -318,7 +329,7 @@ sub ntlm
$f &= ~NTLMSSP_NEGOTIATE_OEM_DOMAIN_SUPPLIED; $f &= ~NTLMSSP_NEGOTIATE_OEM_DOMAIN_SUPPLIED;
} }
$msg1_host = $user; $msg1_host = $user;
if ($ntlm_v2) { if ($ntlm_v2 and $ntlm_v2 eq '1') {
$f &= ~NTLMSSP_NEGOTIATE_OEM_WORKSTATION_SUPPLIED; $f &= ~NTLMSSP_NEGOTIATE_OEM_WORKSTATION_SUPPLIED;
$f |= NTLMSSP_NEGOTIATE_NTLM2; $f |= NTLMSSP_NEGOTIATE_NTLM2;
$msg1_host = ""; $msg1_host = "";
@ -360,7 +371,8 @@ sub decode_challenge
my (@res, @hdr); my (@res, @hdr);
my $original = $challenge; my $original = $challenge;
$res->{buffer} = substr($challenge, $msg2_hlen); $res->{buffer} = $msg2_hlen < length $challenge
? substr($challenge, $msg2_hlen) : '';
$challenge = substr($challenge, 0, $msg2_hlen); $challenge = substr($challenge, 0, $msg2_hlen);
@res = unpack($msg2, $challenge); @res = unpack($msg2, $challenge);
$res->{ident} = $res[0]; $res->{ident} = $res[0];

104
NTLM-1.09/README Normal file
View file

@ -0,0 +1,104 @@
NTLM Authentication Scheme
==========================
This module implements the NTLM authentication mechanism. It can be
used to perform NTLM style authentication for any desired protocol.
The module works well with the Mail::IMAPClient module in the
"authenticate" method, however I had to make a change to that method
for it to work. The following line (2511 in version 2.1.4):
($code) = $o->[DATA] =~ /^\+ (.*)$/ ;
needed to be changed to:
($code) = $o->[DATA] =~ /^\+(.*)$/ ;
as the initial NTLM challenge is empty.
This module also works well with LWP::Authen::Ntlm , allowing LWP::UserAgent
and/or WWW::Mechanise to automate/browse/fetch/etc remote Microsoft Windows
servers running NTLM authentication.
Example use is like this(note the fact that NTLM.pm is NOT explicitly used!):
use WWW::Mechanize;
$mech = WWW::Mechanize->new(keep_alive=>1);
$mech->no_proxy('my.server');
$mech->credentials('my.server:80', '', "my_domain\\my_user", my_pass);
$response = $mech->get( $url );
INSTALLATION
To install this application:
perl Makefile.PL
make
make test
make install
DEPENDENCIES
This module requires the MIME::Base64 module, and Digest::HMAC_MD5
COPYRIGHT AND LICENSE
This program is free software; you can redistribute it and/or modify
it under the terms of either:
a) the GNU General Public License as published by the Free
Software Foundation; either version 1, or (at your option) any
later version, or
b) the "Artistic License" which comes with this Kit.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See either
the GNU General Public License or the Artistic License for more details.
You should have received a copy of the Artistic License with this
Kit, in the file named "COPYING-Artistic". If not, I'll be glad to provide one.
You should also have received a copy of the GNU General Public License version 1
along with this program in the file named "COPYING-GPL". If not, write to the
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA or visit their web page on the internet at
http://www.gnu.org/copyleft/gpl.html.
For those of you that choose to use the GNU General Public License,
my interpretation of the GNU General Public License is that no Perl
script falls under the terms of the GPL unless you explicitly put
said script under the terms of the GPL yourself. Furthermore, any
object code linked with perl does not automatically fall under the
terms of the GPL, provided such object code only adds definitions
of subroutines and variables, and does not otherwise impair the
resulting interpreter from executing any standard Perl script. I
consider linking in C subroutines in this manner to be the moral
equivalent of defining subroutines in the Perl language itself. You
may sell such an object file as proprietary provided that you provide
or offer to provide the Perl source, as specified by the GNU General
Public License. (This is merely an alternate way of specifying input
to the program.) You may also sell a binary produced by the dumping of
a running Perl script that belongs to you, provided that you provide or
offer to provide the Perl source as specified by the GPL. (The
fact that a Perl interpreter and your code are in the same binary file
is, in this case, a form of mere aggregation.) This is my interpretation
of the GPL. If you still have concerns or difficulties understanding
my intent, feel free to contact me. Of course, the Artistic License
spells all this out for your protection, so you may prefer to use that.
License clarified by Nick Bebout per email from David Bussenschutt.
<nb@fedoraproject.org>
Parts of this code Copyright (C) 2007 David (Buzz) Bussenschutt.
<davidbuzz@gmail.com>
Perl port of this code is Copyright (C) 2001 Mark Bush.
<Mark.Bush@bushnet.demon.co.uk>
The code is originally based on fetchmail code which is Copyright (C) 1997 Eric
S. Raymond.
Fetchmail uses SMB/Netbios code from samba which is Copyright (C)
Andrew Tridgell 1992-1998 with modifications from Jeremy Allison.

View file

@ -148,6 +148,10 @@ L<perl>, L<Mail::IMAPClient>, L<LWP::Authen::Ntlm>
=head1 HISTORY =head1 HISTORY
1.09 - fix CPAN ticket # 70703
1.08 - fix CPAN ticket # 39925
1.07 - not publicly released
1.06 - relicense as GPL+ or Artistic
1.05 - add OO interface by Dmitry Karasik 1.05 - add OO interface by Dmitry Karasik
1.04 - implementation of NTLMv2 by Andrew Hobson/Dmitry Karasik 1.04 - implementation of NTLMv2 by Andrew Hobson/Dmitry Karasik
1.03 - fixes long-standing 1 line bug L<http://rt.cpan.org/Public/Bug/Display.html?id=9521> - released by David Bussenschutt 9th Aug 2007 1.03 - fixes long-standing 1 line bug L<http://rt.cpan.org/Public/Bug/Display.html?id=9521> - released by David Bussenschutt 9th Aug 2007
@ -155,7 +159,7 @@ L<perl>, L<Mail::IMAPClient>, L<LWP::Authen::Ntlm>
=cut =cut
$VERSION = "1.05"; $VERSION = "1.09";
@ISA = qw(Exporter); @ISA = qw(Exporter);
@EXPORT = qw(ntlm ntlm_domain ntlm_user ntlm_password ntlm_reset ntlm_host ntlmv2); @EXPORT = qw(ntlm ntlm_domain ntlm_user ntlm_password ntlm_reset ntlm_host ntlmv2);
@ -210,7 +214,7 @@ sub challenge
my ( $self, $challenge) = @_; my ( $self, $challenge) = @_;
$state = defined $challenge; $state = defined $challenge;
($user,$domain,$password,$host) = @{$self}{qw(user domain password host)}; ($user,$domain,$password,$host) = @{$self}{qw(user domain password host)};
$ntlm_v2 = ($self-> {version} > 1) ? 1 : 0; $ntlm_v2 = ($self-> {version} eq '2') ? 1 : 0;
return ntlm($challenge); return ntlm($challenge);
} }
@ -287,10 +291,17 @@ sub ntlm
$lmResp = &lmEncrypt($c_info->{data}); $lmResp = &lmEncrypt($c_info->{data});
$ntResp = &ntEncrypt($c_info->{data}); $ntResp = &ntEncrypt($c_info->{data});
$flags = pack($msg3_tl, $c_info->{flags}); $flags = pack($msg3_tl, $c_info->{flags});
} else { }
elsif ($ntlm_v2 eq '1') {
$lmResp = &lmv2Encrypt($c_info->{data}); $lmResp = &lmv2Encrypt($c_info->{data});
$ntResp = &ntv2Encrypt($c_info->{data}, $c_info->{target_data}); $ntResp = &ntv2Encrypt($c_info->{data}, $c_info->{target_data});
$flags = pack($msg3_tl, $ntlm_v2_msg3_flags); $flags = pack($msg3_tl, $ntlm_v2_msg3_flags);
}
else {
$domain = &unicode($domain);#substr($challenge, $c_info->{domain}{offset}, $c_info->{domain}{len});
$lmResp = &lmEncrypt($c_info->{data});
$ntResp = &ntEncrypt($c_info->{data});
$flags = pack($msg3_tl, $c_info->{flags});
} }
$u_host = &unicode(($host ? $host : $user)); $u_host = &unicode(($host ? $host : $user));
$response = pack($msg3, $ident, 3); $response = pack($msg3, $ident, 3);
@ -318,7 +329,7 @@ sub ntlm
$f &= ~NTLMSSP_NEGOTIATE_OEM_DOMAIN_SUPPLIED; $f &= ~NTLMSSP_NEGOTIATE_OEM_DOMAIN_SUPPLIED;
} }
$msg1_host = $user; $msg1_host = $user;
if ($ntlm_v2) { if ($ntlm_v2 and $ntlm_v2 eq '1') {
$f &= ~NTLMSSP_NEGOTIATE_OEM_WORKSTATION_SUPPLIED; $f &= ~NTLMSSP_NEGOTIATE_OEM_WORKSTATION_SUPPLIED;
$f |= NTLMSSP_NEGOTIATE_NTLM2; $f |= NTLMSSP_NEGOTIATE_NTLM2;
$msg1_host = ""; $msg1_host = "";
@ -360,7 +371,8 @@ sub decode_challenge
my (@res, @hdr); my (@res, @hdr);
my $original = $challenge; my $original = $challenge;
$res->{buffer} = substr($challenge, $msg2_hlen); $res->{buffer} = $msg2_hlen < length $challenge
? substr($challenge, $msg2_hlen) : '';
$challenge = substr($challenge, 0, $msg2_hlen); $challenge = substr($challenge, 0, $msg2_hlen);
@res = unpack($msg2, $challenge); @res = unpack($msg2, $challenge);
$res->{ident} = $res[0]; $res->{ident} = $res[0];

View file

@ -1,15 +1,7 @@
.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.32 .\" Automatically generated by Pod::Man 2.22 (Pod::Simple 3.07)
.\" .\"
.\" Standard preamble: .\" Standard preamble:
.\" ======================================================================== .\" ========================================================================
.de Sh \" Subsection heading
.br
.if t .Sp
.ne 5
.PP
\fB\\$1\fR
.PP
..
.de Sp \" Vertical space (when we can't use .PP) .de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v .if t .sp .5v
.if n .sp .if n .sp
@ -48,22 +40,25 @@
. ds R" '' . ds R" ''
'br\} 'br\}
.\" .\"
.\" Escape single quotes in literal strings from groff's Unicode transform.
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.\"
.\" If the F register is turned on, we'll generate index entries on stderr for .\" If the F register is turned on, we'll generate index entries on stderr for
.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
.\" entries marked with X<> in POD. Of course, you'll have to process the .\" entries marked with X<> in POD. Of course, you'll have to process the
.\" output yourself in some meaningful fashion. .\" output yourself in some meaningful fashion.
.if \nF \{\ .ie \nF \{\
. de IX . de IX
. tm Index:\\$1\t\\n%\t"\\$2" . tm Index:\\$1\t\\n%\t"\\$2"
.. ..
. nr % 0 . nr % 0
. rr F . rr F
.\} .\}
.\" .el \{\
.\" For nroff, turn off justification. Always turn off hyphenation; it makes . de IX
.\" way too many mistakes in technical documents. ..
.hy 0 .\}
.if n .na
.\" .\"
.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
.\" Fear. Run. Save yourself. No user-serviceable parts. .\" Fear. Run. Save yourself. No user-serviceable parts.
@ -129,7 +124,11 @@
.\" ======================================================================== .\" ========================================================================
.\" .\"
.IX Title "NTLM 3pm" .IX Title "NTLM 3pm"
.TH NTLM 3pm "2008-06-18" "perl v5.8.8" "User Contributed Perl Documentation" .TH NTLM 3pm "2011-09-09" "perl v5.10.1" "User Contributed Perl Documentation"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
.nh
.SH "NAME" .SH "NAME"
Authen::NTLM \- An NTLM authentication module Authen::NTLM \- An NTLM authentication module
.SH "SYNOPSIS" .SH "SYNOPSIS"
@ -137,7 +136,7 @@ Authen::NTLM \- An NTLM authentication module
.Vb 10 .Vb 10
\& use Mail::IMAPClient; \& use Mail::IMAPClient;
\& use Authen::NTLM; \& use Authen::NTLM;
\& my $imap = Mail::IMAPClient\->new(Server=>\(aqimaphost\(aq); \& my $imap = Mail::IMAPClient\->new(Server=>\*(Aqimaphost\*(Aq);
\& ntlm_user($username); \& ntlm_user($username);
\& ntlm_password($password); \& ntlm_password($password);
\& $imap\->authenticate("NTLM", Authen::NTLM::ntlm); \& $imap\->authenticate("NTLM", Authen::NTLM::ntlm);
@ -179,16 +178,14 @@ or
\& to perform the challenge/response mechanism for NTLM connections \& to perform the challenge/response mechanism for NTLM connections
\& or it can be used on its own for NTLM authentication with other \& or it can be used on its own for NTLM authentication with other
\& protocols (eg. HTTP). \& protocols (eg. HTTP).
.Ve \&
.PP
.Vb 5
\& The implementation is a direct port of the code from F<fetchmail> \& The implementation is a direct port of the code from F<fetchmail>
\& which, itself, has based its NTLM implementation on F<samba>. As \& which, itself, has based its NTLM implementation on F<samba>. As
\& such, this code is not especially efficient, however it will still \& such, this code is not especially efficient, however it will still
\& take a fraction of a second to negotiate a login on a PII which is \& take a fraction of a second to negotiate a login on a PII which is
\& likely to be good enough for most situations. \& likely to be good enough for most situations.
.Ve .Ve
.Sh "\s-1FUNCTIONS\s0" .SS "\s-1FUNCTIONS\s0"
.IX Subsection "FUNCTIONS" .IX Subsection "FUNCTIONS"
.IP "\fIntlm_domain()\fR" 4 .IP "\fIntlm_domain()\fR" 4
.IX Item "ntlm_domain()" .IX Item "ntlm_domain()"
@ -225,17 +222,13 @@ or
\& response containing the username and domain (which may be empty). \& response containing the username and domain (which may be empty).
\& The first call to C<ntlm()> generates this first message ignoring \& The first call to C<ntlm()> generates this first message ignoring
\& any arguments. \& any arguments.
.Ve \&
.Sp
.Vb 5
\& The second time it is called, it is assumed that the argument is \& The second time it is called, it is assumed that the argument is
\& the challenge string sent from the server. This will contain 8 \& the challenge string sent from the server. This will contain 8
\& bytes of data which are used in the DES functions to generate the \& bytes of data which are used in the DES functions to generate the
\& response authentication strings. The result of the call is the \& response authentication strings. The result of the call is the
\& final authentication string. \& final authentication string.
.Ve \&
.Sp
.Vb 3
\& If C<ntlm_reset()> is called, then the next call to C<ntlm()> will \& If C<ntlm_reset()> is called, then the next call to C<ntlm()> will
\& start the process again allowing multiple authentications within \& start the process again allowing multiple authentications within
\& an application. \& an application.
@ -245,7 +238,7 @@ or
.Vb 1 .Vb 1
\& Use NTLM v2 authentication. \& Use NTLM v2 authentication.
.Ve .Ve
.Sh "\s-1OBJECT\s0 \s-1API\s0" .SS "\s-1OBJECT\s0 \s-1API\s0"
.IX Subsection "OBJECT API" .IX Subsection "OBJECT API"
.ie n .IP "new %options" 4 .ie n .IP "new %options" 4
.el .IP "new \f(CW%options\fR" 4 .el .IP "new \f(CW%options\fR" 4
@ -270,10 +263,14 @@ the call is the final authentication string.
.Ve .Ve
.SH "SEE ALSO" .SH "SEE ALSO"
.IX Header "SEE ALSO" .IX Header "SEE ALSO"
perl, Mail::IMAPClient, LWP::Authen::Ntlm perl, Mail::IMAPClient, LWP::Authen::Ntlm
.SH "HISTORY" .SH "HISTORY"
.IX Header "HISTORY" .IX Header "HISTORY"
.Vb 4 .Vb 8
\& 1.09 \- fix CPAN ticket # 70703
\& 1.08 \- fix CPAN ticket # 39925
\& 1.07 \- not publicly released
\& 1.06 \- relicense as GPL+ or Artistic
\& 1.05 \- add OO interface by Dmitry Karasik \& 1.05 \- add OO interface by Dmitry Karasik
\& 1.04 \- implementation of NTLMv2 by Andrew Hobson/Dmitry Karasik \& 1.04 \- implementation of NTLMv2 by Andrew Hobson/Dmitry Karasik
\& 1.03 \- fixes long\-standing 1 line bug L<http://rt.cpan.org/Public/Bug/Display.html?id=9521> \- released by David Bussenschutt 9th Aug 2007 \& 1.03 \- fixes long\-standing 1 line bug L<http://rt.cpan.org/Public/Bug/Display.html?id=9521> \- released by David Bussenschutt 9th Aug 2007

19
README
View file

@ -3,7 +3,7 @@ NAME
Synchronise mailboxes between two imap servers. Good at IMAP migration. Synchronise mailboxes between two imap servers. Good at IMAP migration.
More than 36 different IMAP server softwares supported with success. More than 36 different IMAP server softwares supported with success.
$Revision: 1.456 $ $Revision: 1.463 $
SYNOPSIS SYNOPSIS
To synchronise imap account "foo" on "imap.truc.org" to imap account To synchronise imap account "foo" on "imap.truc.org" to imap account
@ -334,8 +334,8 @@ IMAP SERVERS
- hMailServer 5.3.3 [host2], 4.4.1 [host1] (see FAQ) - hMailServer 5.3.3 [host2], 4.4.1 [host1] (see FAQ)
- iPlanet Messaging server 4.15, 5.1, 5.2 - iPlanet Messaging server 4.15, 5.1, 5.2
- IMail 7.15 (Ipswitch/Win2003), 8.12, 11.03 [host1] - IMail 7.15 (Ipswitch/Win2003), 8.12, 11.03 [host1]
- Kerio 7.2.0P1 [host1] - Kerio 7.2.0 Patch 1 [host1] [host2]
- MailEnable 4.23 [host1] [host2] - MailEnable 4.23 [host1] [host2], 4.26 [host1][host2], 5 [host1]
- MDaemon 7.0.1, 8.0.2, 8.1, 9.5.4 (Windows server 2003 R2 platform), 12 [host2], - MDaemon 7.0.1, 8.0.2, 8.1, 9.5.4 (Windows server 2003 R2 platform), 12 [host2],
12.0.3 [host1] 12.0.3 [host1]
- Mercury 4.1 (Windows server 2000 platform) - Mercury 4.1 (Windows server 2000 platform)
@ -344,7 +344,7 @@ IMAP SERVERS
Exchange2007-EP-SP2, Exchange2007-EP-SP2,
Exchange 2010 RTM (Release to Manufacturing) [host2], Exchange 2010 RTM (Release to Manufacturing) [host2],
Exchange 2010 SP1 RU2[host2], Exchange 2010 SP1 RU2[host2],
- Mirapoint - Mirapoint, 4.1.9-GA [host1]
- Netscape Mail Server 3.6 (Wintel !) - Netscape Mail Server 3.6 (Wintel !)
- Netscape Messaging Server 4.15 Patch 7 - Netscape Messaging Server 4.15 Patch 7
- OpenMail IMAP server B.07.00.k0 (Samsung Contact ?) - OpenMail IMAP server B.07.00.k0 (Samsung Contact ?)
@ -363,6 +363,7 @@ IMAP SERVERS
(http://www.washington.edu/imap/) (http://www.washington.edu/imap/)
- UW - QMail v2.1 - UW - QMail v2.1
- VMS, Imap part of TCP/IP suite of VMS 7.3.2 - VMS, Imap part of TCP/IP suite of VMS 7.3.2
- Yahoo [host1]
- Zimbra-IMAP 3.0.1 GA 160, 3.1.0 Build 279, 4.0.5, 4.5.2, 4.5.6, - Zimbra-IMAP 3.0.1 GA 160, 3.1.0 Build 279, 4.0.5, 4.5.2, 4.5.6,
Zimbra 5.0.24_GA_3356.RHEL4 [host1], 5.5, 6.x Zimbra 5.0.24_GA_3356.RHEL4 [host1], 5.5, 6.x
@ -385,10 +386,10 @@ HUGE MIGRATION
--maxage --minage --maxsize --useheader --fast --useuid --usecache --maxage --minage --maxsize --useheader --fast --useuid --usecache
If you have many mailboxes to migrate think about a little shell If you have many mailboxes to migrate think about a little shell
program. Write a file called file.csv (for example) containing users and program. Write a file called file.txt (for example) containing users and
passwords. The separator used in this example is ';' passwords. The separator used in this example is ';'
The file.csv file contains: The file.txt file contains:
user001_1;password001_1;user001_2;password001_2 user001_1;password001_1;user001_2;password001_2
user002_1;password002_1;user002_2;password002_2 user002_1;password002_1;user002_2;password002_2
@ -401,11 +402,11 @@ HUGE MIGRATION
{ while IFS=';' read u1 p1 u2 p2; do { while IFS=';' read u1 p1 u2 p2; do
imapsync --host1 imap.side1.org --user1 "$u1" --password1 "$p1" \ imapsync --host1 imap.side1.org --user1 "$u1" --password1 "$p1" \
--host2 imap.side2.org --user2 "$u2" --password2 "$p2" ... --host2 imap.side2.org --user2 "$u2" --password2 "$p2" ...
done ; } < file.csv done ; } < file.txt
On Windows the batch program can be: On Windows the batch program can be:
FOR /F "tokens=1,2,3,4 delims=; eol=#" %%G IN (file.csv) DO imapsync ^ FOR /F "tokens=1,2,3,4 delims=; eol=#" %%G IN (file.txt) DO imapsync ^
--host1 imap.side1.org --user1 %%G --password1 %%H ^ --host1 imap.side1.org --user1 %%G --password1 %%H ^
--host2 imap.side2.org --user2 %%I --password2 %%J ... --host2 imap.side2.org --user2 %%I --password2 %%J ...
@ -441,5 +442,5 @@ SIMILAR SOFTWARES
Feedback (good or bad) will often be welcome. Feedback (good or bad) will often be welcome.
$Id: imapsync,v 1.456 2011/08/24 04:21:30 gilles Exp gilles $ $Id: imapsync,v 1.463 2011/11/12 21:58:52 gilles Exp gilles $

2
TIME
View file

@ -1,3 +1,5 @@
210 Added statistics on ks and lfo, % Operating systems, ip per year .Updated index.shtml
210 Added --nocacheaftercopy and played with dbmail (uids generation are +=2!)
120 Statistics statistics_VERSION_synthesis 120 Statistics statistics_VERSION_synthesis
150 10 years old announce. index.html. 10 EUR. freshmeat announce+release 1.452 150 10 years old announce. index.html. 10 EUR. freshmeat announce+release 1.452
60 Added --search option. 60 Added --search option.

8
TODO
View file

@ -1,5 +1,5 @@
#!/bin/cat #!/bin/cat
# $Id: TODO,v 1.101 2011/08/24 06:50:30 gilles Exp gilles $ # $Id: TODO,v 1.103 2011/11/12 21:59:35 gilles Exp gilles $
TODO file for imapsync TODO file for imapsync
---------------------- ----------------------
@ -23,6 +23,7 @@ Evaluate
http://www.rackspace.com/apps/email_hosting/migrations http://www.rackspace.com/apps/email_hosting/migrations
http://www.yippiemove.com/ http://www.yippiemove.com/
Find a way to avoid passwords in --debugimap unless needed. Find a way to avoid passwords in --debugimap unless needed.
Explain that users can win time/bandwidth by using --expunge Explain that users can win time/bandwidth by using --expunge
@ -162,6 +163,11 @@ http://asg.web.cmu.edu/cyrus/download/imapd/altnamespace.html
=========================================================================== ===========================================================================
DONE. Add --subscribe by default.
DONE. Ask Nick Czeczulin why he wrote patent "Method for mailbox migration"
http://www.google.com/patents/about?id=qI_IAAAAEBAJ
DONE. Add --search option allowing to select messages with any IMAP SEARCH command. DONE. Add --search option allowing to select messages with any IMAP SEARCH command.
DONE. Make --usecache works with --maxage --maxsize etc. DONE. Make --usecache works with --maxage --maxsize etc.

View file

@ -1 +1 @@
1.456 1.463

View file

@ -1 +1 @@
1.456 1.462

View file

@ -1,6 +1,6 @@
#!/usr/bin/perl #!/usr/bin/perl
# $Id: paypal_bilan,v 1.36 2011/07/18 19:21:07 gilles Exp gilles $ # $Id: paypal_bilan,v 1.37 2011/09/17 22:54:31 gilles Exp gilles $
use strict; use strict;
use warnings; use warnings;
@ -171,8 +171,9 @@ print "Nb invoice suspended $nb_invoice_suspended\n" ;
print "Nb invoice sent $nb_invoice_sent\n" ; print "Nb invoice sent $nb_invoice_sent\n" ;
print "Have to send invoices @invoice_not_sent\n" if ( @invoice_not_sent ) ; print "Have to send invoices @invoice_not_sent\n" if ( @invoice_not_sent ) ;
print "$total_eur != $total_HT_EUR_exo + $total_HT_EUR_ass + $total_TVA_EUR + $total_HT_EUR_sup + $total_TVA_EUR_sup\n" my $total_eur2 = $total_HT_EUR_exo + $total_HT_EUR_ass + $total_TVA_EUR + $total_HT_EUR_sup + $total_TVA_EUR_sup ;
if ( $total_eur != $total_HT_EUR_exo + $total_HT_EUR_ass + $total_TVA_EUR + $total_HT_EUR_sup + $total_TVA_EUR_sup ) ; print "$total_eur != $total_eur2 = $total_HT_EUR_exo + $total_HT_EUR_ass + $total_TVA_EUR + $total_HT_EUR_sup + $total_TVA_EUR_sup\n"
if ( $total_eur != $total_eur2 ) ;
sub parse_one_line_io { sub parse_one_line_io {
my $csv = shift ; my $csv = shift ;

View file

@ -15,19 +15,22 @@ set -x
#/g/public_html/imapsync/W/paypal_reply/paypal_bilan --write_invoices --first_in 645 /g/paypal/paypal_2011_05_complet.csv #/g/public_html/imapsync/W/paypal_reply/paypal_bilan --write_invoices --first_in 645 /g/paypal/paypal_2011_05_complet.csv
#/g/public_html/imapsync/W/paypal_reply/paypal_bilan --write_invoices --first_in 733 /g/paypal/paypal_2011_06_complet.csv #/g/public_html/imapsync/W/paypal_reply/paypal_bilan --write_invoices --first_in 733 /g/paypal/paypal_2011_06_complet.csv
#/g/public_html/imapsync/W/paypal_reply/paypal_bilan --write_invoices --first_in 824 /g/paypal/paypal_2011_07_complet.csv #/g/public_html/imapsync/W/paypal_reply/paypal_bilan --write_invoices --first_in 824 /g/paypal/paypal_2011_07_complet.csv
/g/public_html/imapsync/W/paypal_reply/paypal_bilan --write_invoices --first_in 917 /g/paypal/paypal_2011_08_complet.csv #/g/public_html/imapsync/W/paypal_reply/paypal_bilan --write_invoices --first_in 917 /g/paypal/paypal_2011_08_complet.csv
/g/public_html/imapsync/W/paypal_reply/paypal_bilan --write_invoices --first_in 999 /g/paypal/paypal_2011_09_complet.csv
/g/public_html/imapsync/W/paypal_reply/paypal_bilan --write_invoices --first_in 1094 /g/paypal/paypal_2011_10_complet.csv
# /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 824 /g/paypal/paypal_2011_07_complet.csv : /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 824 /g/paypal/paypal_2011_07_complet.csv
# /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 917 /g/paypal/paypal_2011_08_complet.csv : /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 917 /g/paypal/paypal_2011_08_complet.csv
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 1094 /g/paypal/paypal_2011_10_complet.csv
set +x set +x
# La totale # La totale
: || /g/public_html/imapsync/W/paypal_reply/paypal_bilan --bnc --debug \ : || /g/public_html/imapsync/W/paypal_reply/paypal_bilan --bnc --debug \
--first_in 147 --avoid_numbers '292 293 643 644 731 732' \ --first_in 147 --avoid_numbers '292 293 643 644 731 732 1093' \
/g/paypal/paypal_201?_??_complet.csv /g/paypal/paypal_201?_??_complet.csv
: || /g/public_html/imapsync/W/paypal_reply/paypal_bilan \ : || /g/public_html/imapsync/W/paypal_reply/paypal_bilan \
--first_in 147 --avoid_numbers '292 293 643 644 731 732' \ --first_in 147 --avoid_numbers '292 293 643 644 731 732 1093' \
/g/paypal/paypal_201?_??_complet.csv /g/paypal/paypal_201?_??_complet.csv

View file

@ -1,19 +1,24 @@
# Example file.csv for imapsync massive migration. # Example file.txt for imapsync massive migration.
#
# Thanks to http://ss64.com/nt/for_f.html # ==== Windows ====
# Thanks to http://ss64.com/nt/for_f.html for
# the Windows example of a for loop
# #
# A line beginning with # is a comment thanks to option Win32 eol=#
# Separator is character ; it can be changed by any character using delims=;
# Each contains 4 columns, columns are parameters for --user1 --password1 --user2 --password2
#
# This file can be used on Windows with the following line in a batch # This file can be used on Windows with the following line in a batch
# FOR /F "tokens=1,2,3,4 delims=; eol=#" %%G IN (file.csv) DO imapsync --host1 imap.truc.org --user1 %%G --password1 %%H --host2 imap.trac.org --user2 %%I --password2 %%J # FOR /F "tokens=1,2,3,4 delims=; eol=#" %%G IN (file.txt) DO imapsync --host1 imap.truc.org --user1 %%G --password1 %%H --host2 imap.trac.org --user2 %%I --password2 %%J
# #
# A line beginning with # is a comment thanks to option Win32 eol=#
# Separator is character ; it can be changed by any character changing delims=;
# Each line contains 4 columns, columns are parameters for --user1 --password1 --user2 --password2
#
# ==== Unix ====
# This file can be used on Unix with the following line in a Bourne shell script # This file can be used on Unix with the following line in a Bourne shell script
# { while IFS=';' read u1 p1 u2 p2; do imapsync --user1 "$u1" --password1 "$p1" --user2 "$u2" --password2 "$p2" ... ; done ; } < file.csv # { while IFS=';' read u1 p1 u2 p2; do imapsync --user1 "$u1" --password1 "$p1" --user2 "$u2" --password2 "$p2" ... ; done ; } < file.txt
# #
# # Separator is character ; it can be changed by any character changing IFS=';'
# Each line contains 4 columns, columns are parameters for --user1 --password1 --user2 --password2
# #
# Now the data example
user001_1;password001_1;user001_2;password001_2 user001_1;password001_1;user001_2;password001_2
user002_1;password002_1;user002_2;password002_2 user002_1;password002_1;user002_2;password002_2
user003_1;password003_1;user003_2;password003_2 user003_1;password003_1;user003_2;password003_2

4
i3
View file

@ -1,7 +1,7 @@
#!/bin/sh #!/bin/sh
# $Id: i3,v 1.7 2011/03/15 01:15:48 gilles Exp gilles $ # $Id: i3,v 1.8 2011/11/12 21:49:00 gilles Exp gilles $
BASE=`dirname $0` BASE=`dirname $0`
perl -I${BASE}/Mail-IMAPClient-3.28/lib ${BASE}/imapsync "$@" perl -I${BASE}/Mail-IMAPClient-3.30/lib ${BASE}/imapsync "$@"

View file

@ -20,7 +20,7 @@ Synchronise mailboxes between two imap servers.
Good at IMAP migration. More than 36 different IMAP server softwares Good at IMAP migration. More than 36 different IMAP server softwares
supported with success. supported with success.
$Revision: 1.456 $ $Revision: 1.463 $
=head1 SYNOPSIS =head1 SYNOPSIS
@ -383,8 +383,8 @@ Success stories reported with the following 44 imap servers
- hMailServer 5.3.3 [host2], 4.4.1 [host1] (see FAQ) - hMailServer 5.3.3 [host2], 4.4.1 [host1] (see FAQ)
- iPlanet Messaging server 4.15, 5.1, 5.2 - iPlanet Messaging server 4.15, 5.1, 5.2
- IMail 7.15 (Ipswitch/Win2003), 8.12, 11.03 [host1] - IMail 7.15 (Ipswitch/Win2003), 8.12, 11.03 [host1]
- Kerio 7.2.0P1 [host1] - Kerio 7.2.0 Patch 1 [host1] [host2]
- MailEnable 4.23 [host1] [host2] - MailEnable 4.23 [host1] [host2], 4.26 [host1][host2], 5 [host1]
- MDaemon 7.0.1, 8.0.2, 8.1, 9.5.4 (Windows server 2003 R2 platform), 12 [host2], - MDaemon 7.0.1, 8.0.2, 8.1, 9.5.4 (Windows server 2003 R2 platform), 12 [host2],
12.0.3 [host1] 12.0.3 [host1]
- Mercury 4.1 (Windows server 2000 platform) - Mercury 4.1 (Windows server 2000 platform)
@ -393,7 +393,7 @@ Success stories reported with the following 44 imap servers
Exchange2007-EP-SP2, Exchange2007-EP-SP2,
Exchange 2010 RTM (Release to Manufacturing) [host2], Exchange 2010 RTM (Release to Manufacturing) [host2],
Exchange 2010 SP1 RU2[host2], Exchange 2010 SP1 RU2[host2],
- Mirapoint - Mirapoint, 4.1.9-GA [host1]
- Netscape Mail Server 3.6 (Wintel !) - Netscape Mail Server 3.6 (Wintel !)
- Netscape Messaging Server 4.15 Patch 7 - Netscape Messaging Server 4.15 Patch 7
- OpenMail IMAP server B.07.00.k0 (Samsung Contact ?) - OpenMail IMAP server B.07.00.k0 (Samsung Contact ?)
@ -412,6 +412,7 @@ Success stories reported with the following 44 imap servers
(http://www.washington.edu/imap/) (http://www.washington.edu/imap/)
- UW - QMail v2.1 - UW - QMail v2.1
- VMS, Imap part of TCP/IP suite of VMS 7.3.2 - VMS, Imap part of TCP/IP suite of VMS 7.3.2
- Yahoo [host1]
- Zimbra-IMAP 3.0.1 GA 160, 3.1.0 Build 279, 4.0.5, 4.5.2, 4.5.6, - Zimbra-IMAP 3.0.1 GA 160, 3.1.0 Build 279, 4.0.5, 4.5.2, 4.5.6,
Zimbra 5.0.24_GA_3356.RHEL4 [host1], 5.5, 6.x Zimbra 5.0.24_GA_3356.RHEL4 [host1], 5.5, 6.x
@ -452,11 +453,11 @@ Pay special attention to options
--usecache --usecache
If you have many mailboxes to migrate think about a little If you have many mailboxes to migrate think about a little
shell program. Write a file called file.csv (for example) shell program. Write a file called file.txt (for example)
containing users and passwords. containing users and passwords.
The separator used in this example is ';' The separator used in this example is ';'
The file.csv file contains: The file.txt file contains:
user001_1;password001_1;user001_2;password001_2 user001_1;password001_1;user001_2;password001_2
user002_1;password002_1;user002_2;password002_2 user002_1;password002_1;user002_2;password002_2
@ -470,11 +471,11 @@ On Unix the shell program can be:
{ while IFS=';' read u1 p1 u2 p2; do { while IFS=';' read u1 p1 u2 p2; do
imapsync --host1 imap.side1.org --user1 "$u1" --password1 "$p1" \ imapsync --host1 imap.side1.org --user1 "$u1" --password1 "$p1" \
--host2 imap.side2.org --user2 "$u2" --password2 "$p2" ... --host2 imap.side2.org --user2 "$u2" --password2 "$p2" ...
done ; } < file.csv done ; } < file.txt
On Windows the batch program can be: On Windows the batch program can be:
FOR /F "tokens=1,2,3,4 delims=; eol=#" %%G IN (file.csv) DO imapsync ^ FOR /F "tokens=1,2,3,4 delims=; eol=#" %%G IN (file.txt) DO imapsync ^
--host1 imap.side1.org --user1 %%G --password1 %%H ^ --host1 imap.side1.org --user1 %%G --password1 %%H ^
--host2 imap.side2.org --user2 %%I --password2 %%J ... --host2 imap.side2.org --user2 %%I --password2 %%J ...
@ -516,7 +517,7 @@ Entries for imapsync:
Feedback (good or bad) will often be welcome. Feedback (good or bad) will often be welcome.
$Id: imapsync,v 1.456 2011/08/24 04:21:30 gilles Exp gilles $ $Id: imapsync,v 1.463 2011/11/12 21:58:52 gilles Exp gilles $
=cut =cut
@ -622,7 +623,7 @@ my(
$max_msg_size_in_bytes, $max_msg_size_in_bytes,
$modules_version, $modules_version,
$delete2folders, $delete2foldersonly, $delete2foldersbutnot, $delete2folders, $delete2foldersonly, $delete2foldersbutnot,
$usecache, $debugcache, $usecache, $debugcache, $cacheaftercopy,
$wholeheaderifneeded, %h1_msgs_copy_by_uid, $useuid, $h2_uidguess, $wholeheaderifneeded, %h1_msgs_copy_by_uid, $useuid, $h2_uidguess,
); );
@ -630,7 +631,7 @@ my(
# global variables initialisation # global variables initialisation
$rcs = '$Id: imapsync,v 1.456 2011/08/24 04:21:30 gilles Exp gilles $ '; $rcs = '$Id: imapsync,v 1.463 2011/11/12 21:58:52 gilles Exp gilles $ ';
$total_bytes_transferred = 0; $total_bytes_transferred = 0;
$total_bytes_skipped = 0; $total_bytes_skipped = 0;
@ -705,6 +706,7 @@ if ( $fast ) {
# Activate --usecache if --useuid is set and no --nousecache # Activate --usecache if --useuid is set and no --nousecache
$usecache = 1 if ( $useuid and ( ! defined( $usecache ) ) ) ; $usecache = 1 if ( $useuid and ( ! defined( $usecache ) ) ) ;
$cacheaftercopy = 1 if ( $usecache and ( ! defined( $cacheaftercopy ) ) ) ;
print banner_imapsync(@argv_copy); print banner_imapsync(@argv_copy);
@ -739,6 +741,8 @@ $skipsize = (defined $skipsize) ? $skipsize : 1;
$uid1 = defined($uid1) ? $uid1 : 1; $uid1 = defined($uid1) ? $uid1 : 1;
$uid2 = defined($uid2) ? $uid2 : 1; $uid2 = defined($uid2) ? $uid2 : 1;
$subscribe = defined($subscribe) ? $subscribe : 1;
# Allow size mismatch by default # Allow size mismatch by default
$allowsizemismatch = defined($allowsizemismatch) ? $allowsizemismatch : 1; $allowsizemismatch = defined($allowsizemismatch) ? $allowsizemismatch : 1;
@ -878,7 +882,7 @@ if ( ! ( 1
and $usecache and $usecache
and ! $delete ) ) { and ! $delete ) ) {
die_clean( die_clean(
"Problem --usecache can not be used safely with options --maxsize--minsize --maxage --minage "Problem --usecache can not be used safely with options --maxsize --minsize --maxage --minage
Use --nousecache or suppress the --max* --min* options\n" ) ; Use --nousecache or suppress the --max* --min* options\n" ) ;
} }
@ -1299,6 +1303,7 @@ FOLDER: foreach my $h1_fold (@h1_folders_wanted) {
} }
my $h2_uidnext = $imap2->uidnext( $h2_fold ) ; my $h2_uidnext = $imap2->uidnext( $h2_fold ) ;
$debug and print "uidnext h2: $h2_uidnext\n" ;
$h2_uidguess = $h2_uidnext ; $h2_uidguess = $h2_uidnext ;
MESS: foreach my $m_id (@h1_hash_keys_sorted_by_uid) { MESS: foreach my $m_id (@h1_hash_keys_sorted_by_uid) {
my $h1_size = $h1_hash{$m_id}{'s'}; my $h1_size = $h1_hash{$m_id}{'s'};
@ -1822,8 +1827,8 @@ sub banner_imapsync {
my @argv_copy = @_; my @argv_copy = @_;
my $banner_imapsync = join("", my $banner_imapsync = join("",
'$RCSfile: imapsync,v $ ', '$RCSfile: imapsync,v $ ',
'$Revision: 1.456 $ ', '$Revision: 1.463 $ ',
'$Date: 2011/08/24 04:21:30 $ ', '$Date: 2011/11/12 21:58:52 $ ',
"\n",localhost_info(), "\n", "\n",localhost_info(), "\n",
"Command line used:\n", "Command line used:\n",
"$0 ", command_line_nopassword(@argv_copy), "\n", "$0 ", command_line_nopassword(@argv_copy), "\n",
@ -2694,11 +2699,11 @@ sub copy_message {
$new_id = lastuid( $imap2, $h2_fold, $h2_uidguess ) ; $new_id = lastuid( $imap2, $h2_fold, $h2_uidguess ) ;
} }
printf( "msg %s/%-19s copied to %s/%-10s\n", $h1_fold, "$h1_msg {$string_len}", $h2_fold, $new_id ); printf( "msg %s/%-19s copied to %s/%-10s\n", $h1_fold, "$h1_msg {$string_len}", $h2_fold, $new_id );
$h2_uidguess++; $h2_uidguess += 1 ;
$total_bytes_transferred += $h1_size; $total_bytes_transferred += $h1_size;
$nb_msg_transferred += 1; $nb_msg_transferred += 1;
$debugcache and print "touch $cache_dir/${h1_msg}_$new_id\n" if ( $usecache ) ; $debugcache and print "touch $cache_dir/${h1_msg}_$new_id\n" if ( $usecache and $cacheaftercopy and $new_id =~ m{^\d+$} ) ;
touch( "$cache_dir/${h1_msg}_$new_id" ) if ( $usecache and $new_id =~ m{^\d+$} ); touch( "$cache_dir/${h1_msg}_$new_id" ) if ( $usecache and $cacheaftercopy and $new_id =~ m{^\d+$} ) ;
if ( $delete ) { if ( $delete ) {
print "msg $h1_fold/$h1_msg deleted on host1\n"; print "msg $h1_fold/$h1_msg deleted on host1\n";
unless($dry) { unless($dry) {
@ -2731,8 +2736,8 @@ sub cache_map {
$debugcache and print "C12: $file\n" ; $debugcache and print "C12: $file\n" ;
( $uid1, $uid2 ) = match_a_cache_file( $file ) ; ( $uid1, $uid2 ) = match_a_cache_file( $file ) ;
if ( exists( $h1_msgs_hash_ref->{ $uid1 } ) if ( exists( $h1_msgs_hash_ref->{ $uid1 // q{} } )
and exists( $h2_msgs_hash_ref->{ $uid2 } ) ) { and exists( $h2_msgs_hash_ref->{ $uid2 // q{} } ) ) {
# keep only the greatest uid2 # keep only the greatest uid2
# 130_2301 and # 130_2301 and
# 130_231 => keep only 130 -> 2301 # 130_231 => keep only 130 -> 2301
@ -3396,6 +3401,7 @@ sub get_options {
"releasecheck!" => \$releasecheck, "releasecheck!" => \$releasecheck,
"modules_version!" => \$modules_version, "modules_version!" => \$modules_version,
"usecache!" => \$usecache, "usecache!" => \$usecache,
"cacheaftercopy!" => \$cacheaftercopy,
"debugcache!" => \$debugcache, "debugcache!" => \$debugcache,
"useuid!" => \$useuid, "useuid!" => \$useuid,
); );
@ -3580,7 +3586,7 @@ sub check_last_release {
} }
sub imapsync_version { sub imapsync_version {
my $rcs = '$Id: imapsync,v 1.456 2011/08/24 04:21:30 gilles Exp gilles $ '; my $rcs = '$Id: imapsync,v 1.463 2011/11/12 21:58:52 gilles Exp gilles $ ';
$rcs =~ m/,v (\d+\.\d+)/; $rcs =~ m/,v (\d+\.\d+)/;
my $VERSION = ($1) ? $1: "UNKNOWN"; my $VERSION = ($1) ? $1: "UNKNOWN";
return($VERSION); return($VERSION);
@ -3808,7 +3814,7 @@ Several options are mandatory.
--dry : do nothing, just print what would be done. --dry : do nothing, just print what would be done.
--subscribed : transfers subscribed folders. --subscribed : transfers subscribed folders.
--subscribe : subscribe to the folders transferred on the --subscribe : subscribe to the folders transferred on the
host2 that are subscribed on host1. host2 that are subscribed on host1. On by default.
--subscribe_all : subscribe to the folders transferred on the --subscribe_all : subscribe to the folders transferred on the
host2 even if they are not subscribed on host1. host2 even if they are not subscribed on host1.
--nofoldersizes : Do not calculate the size of each folder in bytes --nofoldersizes : Do not calculate the size of each folder in bytes

View file

@ -5,7 +5,7 @@
<title>Imapsync: an IMAP migration tool ( release <!--#exec cmd="cat VERSION"--> )</title> <title>Imapsync: an IMAP migration tool ( release <!--#exec cmd="cat VERSION"--> )</title>
<meta name="generator" content="Bluefish 1.0.7"/> <meta name="generator" content="Bluefish 1.0.7"/>
<meta name="author" content="Gilles LAMIRAL"/> <meta name="author" content="Gilles LAMIRAL"/>
<meta name="date" content="2011-08-03T03:25:16+0200"/> <meta name="date" content="2011-11-13T00:45:16+0100"/>
<meta name="copyright" content="None"/> <meta name="copyright" content="None"/>
<meta name="keywords" content="imap, transfert, migration"/> <meta name="keywords" content="imap, transfert, migration"/>
<meta name="description" content="imap migration tool"/> <meta name="description" content="imap migration tool"/>
@ -29,8 +29,8 @@
<body> <body>
<ul class="none"> <ul class="none">
<li>Buy <a href="#buy_source">imapsync <b>source code</b></a> (any OS)</li> <li>Buy <a href="#buy_source"><b>imapsync source code</b></a> (any OS)</li>
<li>Buy <a href="#buy_exe"><b>standalone win32</b></a> imapsync.exe</li> <li>Buy <a href="#buy_exe"><b>standalone win32</b></a> <b>imapsync.exe</b> (also <b>works on win64</b>)</li>
<li>Buy <a href="#buy_support">imapsync <b>support</b></a> to succeed your migration</li> <li>Buy <a href="#buy_support">imapsync <b>support</b></a> to succeed your migration</li>
<li>Are your <a href="#imap_server_success">imap servers <b>supported</b></a> by imapsync?</li> <li>Are your <a href="#imap_server_success">imap servers <b>supported</b></a> by imapsync?</li>
</ul> </ul>
@ -39,11 +39,8 @@
<a href="http://ks.lamiral.info/imapsync/"><img src="logo_imapsync.png" width="486" height="309" alt="imapsync logo"/></a> <a href="http://ks.lamiral.info/imapsync/"><img src="logo_imapsync.png" width="486" height="309" alt="imapsync logo"/></a>
<h1>Welcome to the imapsync web site!</h1> <h1>Welcome to the imapsync web site!</h1>
<span style="font-size:300%;">Ten years old since release 1.1!</span><br/>
(on Friday 29 July 2011)
</div> </div>
<h2>What is imapsync?</h2> <h2>What is imapsync?</h2>
<p><b>imapsync</b> software is a command line tool allowing incremental and <p><b>imapsync</b> software is a command line tool allowing incremental and
@ -59,13 +56,22 @@ where the user plays independently on both sides. Use <b>offlineimap</b>
(written by John Goerzen) for this purpose. (written by John Goerzen) for this purpose.
</p> </p>
<h2><a id="NUMBERS"></a>Some numbers</h2> <h2><a id="NUMBERS"></a>Some numbers for 2011</h2>
<ul> <ul>
<li>Number of <b>imapsync users</b> per month: between <b>2 and 3 thousands </b>users</li> <li>Number of <b>imapsync users</b> per month: between <b>2 and 3 thousands </b>users</li>
<li>Number of <b>imapsync transfers</b> per month: between <b>3 and 8 millions </b>transfers</li> <li>Number of <b>imapsync transfers</b> per month: between <b>3 and 11 millions </b>transfers </li>
<li>Pourcentage of <b>Windows</b> users : <b>10%</b></li> <li>Pourcentage between <b>operating systems</b> users running imapsync:
<li><b>Biggest user</b> usage: <b>5 millions</b> of IMAP mailbox transfers <b>in a month</b> (one every 2 seconds)</li> <ul>
<li><b>Linux: 65 %</b></li>
<li><b>Win32: 18 %</b></li>
<li><b>Darwin: 11 %</b></li>
<li>FreeBSD: 6 %</li>
<li>Solaris: 0.4 %</li>
<li>OpenBSD: 0.1 %</li>
</ul>
</li>
<li><b>Biggest user usage</b>: more than <b>11 millions</b> of IMAP mailbox transfers</li>
</ul> </ul>
@ -81,37 +87,32 @@ where the user plays independently on both sides. Use <b>offlineimap</b>
<p>New features or bugfixes since previous releases:</p> <p>New features or bugfixes since previous releases:</p>
<ul> <ul>
<li><b>1.463</b></li>
<li><b>Update</b>: include and use of Mail-IMAPClient-3.30 (imapsync.exe)</li>
<li><b>Usability</b>: --subscribe option is on by defaut.</li>
<li><b>BugFix</b>: Added --nocacheaftercopy to avoid bad uids in cache with --useuid or --usecache and strange uid generator like dbmail 2.2.17</li>
<li><b>BugFix</b>: Avoid Perl warning 'Use of uninitialized value $uid1 in exists'. Thanks to Klaus Franken</li>
</ul>
<ul>
<li><b>1.456</b></li>
<li>Added a <b><a href="./file.txt">file.txt</a></b> example to <b>batch massive migration</b> (many mailboxes) on Windows or Unix</li>
<li>Added support to <b>Yahoo</b> as host1 (just add <kbd>--sep1 "/"</kbd> option. Add <kbd>--ssl1</kbd> for encryption)</li>
<li>Empty default value for $h1_flags $h2_flags to avoid useless Perl warnings.</li>
<li><b>MDaemon 12.0.3 failure as host2</b> (successive APPEND are buggy on MDaemon)</li>
</ul>
<ul>
<li><b>1.452</b></li> <li><b>1.452</b></li>
<li><b>New feature</b>: Added <b>--search</b> option allowing to <b>select messages</b> with the <b>powerful IMAP SEARCH</b> command.</li> <li><b>New feature</b>: Added <b>--search</b> option allowing to <b>select messages</b> with the <b>powerful IMAP SEARCH</b> command.</li>
<li><b>Bugfix</b>: Date reference to select messages with --maxdate --mindate is the beginning of imapsync run now.</li> <li><b>Bugfix</b>: Date reference to select messages with --maxdate --mindate is the beginning of imapsync run now.</li>
<li>Bugfix: Fixed ps call to work with Solaris 10. Thanks to Daniel Rohde.</li> <li>Bugfix: Fixed ps call to work with Solaris 10. Thanks to Daniel Rohde.</li>
<li>Success: <b>Kerio 7.2.0P1</b> success story.</li> <li>Success: <b>Kerio 7.2.0P1</b> success story.</li>
<li>Success: <b>MDaemon 12.0.3</b> success story.</li> <li>Success: <b>MDaemon 12.0.3 success story as host1</b>.</li>
<li><b>1.446</b></li>
<li><b>Bugfix</b>: Better --idatefromheader behavior (thank to Dax Kelson patches).</li>
<li><b>Usability</b>: Now --delete2 sets --uidexpunge2 instead of --expunge2 if possible.</li>
<li><b>Usability</b>: Adapted the usage output multiline character to Unix or Win, \ or ^</li>
<li>Bugfix: Avoid a "not a number" warning when size is null.</li>
<li><b>Bugfix</b>: Added "Date" in the default --useheader list. It is ("Message-Id", "Message-ID", "Date")</li>
<li>Bugfix: allows bad header beginning with a blank character.</li>
<li><b>1.434</b></li>
<li><b>Bugfix</b>: Changed the way imapsync knows <b>whether a folder exists</b> or not. <b>Exchange</b> might be happy and <b>stop deconnecting</b> for this reason.</li>
<li><b>Bugfix</b>: <b>Reconnections</b> are well done in <b>TLS mode</b> now.</li>
<li><b>Bugfix</b>: IMAP RFC 3501 and some imap servers require <b>internal dates</b> have a <b>zone data</b>. Default <b>to +0000</b> when host1 doesn't give it.</li>
<li><b>Bugfix</b>: Options --maxsize --minsize now really work with --useuid (1.422 had a cache issue).</li>
<li><b>Bugfix</b>: <b>Improved</b> the way imapsync <b>deals with headers</b>:<ul>
<li><b>Stopped</b> getting <b>first 2KB body</b> of message. Not a good idea in practice.</li>
<li>If <b>massive</b> get headers <b>fails</b> then take the <b>whole header</b> one by one (instead of body).</li>
<li>Default is like --useheader <b>"Message-Id"</b> --useheader <b>"Message-ID"</b> (instead of just "Message-Id").</li>
<li>Use header "Message-Id" and header "Date" as md5 signature when taking the whole header.</li>
</ul> </ul>
</li>
</ul>
<!-- <!--
<p>The next imapsync release should see:</p> <p>The next imapsync release should see:</p>
@ -193,7 +194,8 @@ name="submit" alt="PayPal - The safer, easier way to pay online!"/>
<h2><a id="buy_exe"></a>Buy standalone imapsync.exe for win32</h2> <h2><a id="buy_exe"></a>Buy standalone imapsync.exe for win32</h2>
<p>Struggle free from source code and Perl installation by<br/> <p>Struggle free from source code and Perl installation by<br/>
buying the latest win32 <b>standalone imapsync.exe</b> for <b>10</b> EUR</p> buying the latest win32 <b>standalone imapsync.exe</b> for <b>30 EUR</b>
</p>
<p> <p>
30 EUR is equal to around <b>45 USD</b>, no problem to pay in USD (or any currency) with paypal: 30 EUR is equal to around <b>45 USD</b>, no problem to pay in USD (or any currency) with paypal:
@ -333,7 +335,7 @@ will be to code it or fix it.<br/>
<tr align="right"><td> Yes</td><td>Fix capability changes </td><td> 1 hour </td><td> 80 min </td><td> 0 $ </td><td> 0 $ </td></tr> <tr align="right"><td> Yes</td><td>Fix capability changes </td><td> 1 hour </td><td> 80 min </td><td> 0 $ </td><td> 0 $ </td></tr>
<tr align="right"><td> Yes</td><td>Large mailbox --maxage </td><td> 4 hours </td><td> 270 min </td><td> 0 $ </td><td> 0 $ </td></tr> <tr align="right"><td> Yes</td><td>Large mailbox --maxage </td><td> 4 hours </td><td> 270 min </td><td> 0 $ </td><td> 0 $ </td></tr>
<tr align="right"><td> Yes</td><td>dkimap support </td><td> 3 hours </td><td> 120 min </td><td> 0 $ </td><td> 0 $ </td></tr> <tr align="right"><td> Yes</td><td>dkimap support </td><td> 3 hours </td><td> 120 min </td><td> 0 $ </td><td> 0 $ </td></tr>
<tr align="right"><td> No</td><td>gratis from here </td><td> 4 hours </td><td> 0 min </td><td> 0 $ </td><td>60000 $ </td></tr>
</table> </table>
<h2><a id="imap_server_success"></a>Lists of imap server software failures and success stories</h2> <h2><a id="imap_server_success"></a>Lists of imap server software failures and success stories</h2>
@ -351,7 +353,7 @@ Don't hesitate to have a try, I will help you and make efforts to switch them to
</ul> </ul>
<p>Now the long reported <b>success stories</b> list: <b>44 different imap server softwares supported!</b><br/> <p>Now the long reported <b>success stories</b> list: <b>44 different imap server softwares supported!</b><br/>
([host1] means "source server", [host2] means "destination server"): [host1] means "source server" and [host2] means "destination server":
</p> </p>
<ul> <ul>
@ -391,7 +393,7 @@ Don't hesitate to have a try, I will help you and make efforts to switch them to
<li>iPlanet Messaging server 4.15, 5.1, 5.2</li> <li>iPlanet Messaging server 4.15, 5.1, 5.2</li>
<li>IMail 7.15 (Ipswitch/Win2003), 8.12, 11.03 [host1]</li> <li>IMail 7.15 (Ipswitch/Win2003), 8.12, 11.03 [host1]</li>
<li>Kerio 7.2.0P1 [host1]</li> <li>Kerio 7.2.0P1 [host1]</li>
<li><b>MailEnable</b> 4.23 [host1][host2], 4.26 [host1][host2]</li> <li><b>MailEnable</b> 4.23 [host1][host2], 4.26 [host1][host2], 5 [host1]</li>
<li>MDaemon 7.0.1, 8.0.2, 8.1, 9.5.4 (Windows server 2003 R2 platform), 12 [host2], 12.0.3 [host1]</li> <li>MDaemon 7.0.1, 8.0.2, 8.1, 9.5.4 (Windows server 2003 R2 platform), 12 [host2], 12.0.3 [host1]</li>
<li>Mercury 4.1 (Windows server 2000 platform)</li> <li>Mercury 4.1 (Windows server 2000 platform)</li>
<li><b>Microsoft Exchange Server</b> 5.5, 6.0.6249.0[host1], 6.0.6487.0[host1], <li><b>Microsoft Exchange Server</b> 5.5, 6.0.6249.0[host1], 6.0.6487.0[host1],
@ -400,7 +402,7 @@ Don't hesitate to have a try, I will help you and make efforts to switch them to
Exchange 2010 RTM (Release to Manufacturing) [host2], Exchange 2010 RTM (Release to Manufacturing) [host2],
Exchange 2010 SP1 RU2 [host2] Exchange 2010 SP1 RU2 [host2]
</li> </li>
<li>Mirapoint server</li> <li>Mirapoint server 4.1.9-GA [host1]</li>
<li>Netscape Mail Server 3.6 (Wintel)</li> <li>Netscape Mail Server 3.6 (Wintel)</li>
<li>Netscape Messaging Server 4.15 Patch 7</li> <li>Netscape Messaging Server 4.15 Patch 7</li>
<li>OpenMail IMAP server B.07.00.k0</li> <li>OpenMail IMAP server B.07.00.k0</li>
@ -419,6 +421,7 @@ Don't hesitate to have a try, I will help you and make efforts to switch them to
(http://www.washington.edu/imap/)</li> (http://www.washington.edu/imap/)</li>
<li>UW - QMail v2.1</li> <li>UW - QMail v2.1</li>
<li>VMS, Imap part of TCP/IP suite of VMS 7.3.2</li> <li>VMS, Imap part of TCP/IP suite of VMS 7.3.2</li>
<li><b>Yahoo</b> [host1]</li>
<li><b>Zimbra-IMAP</b> 3.0.1 GA 160, 3.1.0 Build 279, 4.0.5, 4.5.2, 4.5.6, <li><b>Zimbra-IMAP</b> 3.0.1 GA 160, 3.1.0 Build 279, 4.0.5, 4.5.2, 4.5.6,
Zimbra 5.0.24_GA_3356.RHEL4 [host1], 5.5, 6.x</li> Zimbra 5.0.24_GA_3356.RHEL4 [host1], 5.5, 6.x</li>
</ul> </ul>
@ -449,7 +452,7 @@ alt="Viewable With Any Browser" />
<!--#config timefmt="%D" --> <!--#config timefmt="%D" -->
<!--#config timefmt="%A %B %d, %Y" --> <!--#config timefmt="%A %B %d, %Y" -->
<b>This document last modified on <!--#echo var="LAST_MODIFIED" --></b> <b>This document last modified on <!--#echo var="LAST_MODIFIED" --></b>
($Id: index.shtml,v 1.86 2011/08/03 01:26:05 gilles Exp gilles $) ($Id: index.shtml,v 1.92 2011/11/12 23:45:34 gilles Exp gilles $)
</p> </p>
</body> </body>

159
memo
View file

@ -1,6 +1,6 @@
#!/bin/sh #!/bin/sh
# $Id: memo,v 1.35 2011/08/22 00:31:14 gilles Exp gilles $ # $Id: memo,v 1.38 2011/11/07 15:12:06 gilles Exp gilles $
software_version() { software_version() {
@ -14,31 +14,71 @@ statistics_lfo() {
cat <<EOFF cat <<EOFF
ssh glamiral@linux-france.org "grep -h prj/imapsync/VERSION /usr/local/apache/logs/access_log.bak|cut -d ' ' -f 1,12,13,18,19|sort -n|uniq -c|sort -n" # list ip ssh glamiral@linux-france.org "grep -h prj/imapsync/VERSION /usr/local/apache/logs/access_log.bak|cut -d ' ' -f 1,12,13,18,19|sort -n|uniq -c|sort -n" # list ip
ssh glamiral@linux-france.org "grep -h prj/imapsync/VERSION /usr/local/apache/logs/access_log.bak|cut -d ' ' -f 1,12,13,18,19|sort -n|uniq -c|sort -n|wc" # count ip
ssh glamiral@linux-france.org "grep -h prj/imapsync/VERSION /usr/local/apache/logs/access_log.bak|cut -d ' ' -f 1,12,13,18,19|sort -n|uniq -c|sort -n |grep MSWin32" # Win32 ssh glamiral@linux-france.org "grep -h prj/imapsync/VERSION /usr/local/apache/logs/access_log.bak|cut -d ' ' -f 1,12,13,18,19|sort -n|uniq -c|sort -n |grep MSWin32" # Win32
ssh glamiral@linux-france.org "grep -h prj/imapsync/VERSION /usr/local/apache/logs/access_log.bak|cut -d ' ' -f 13,18,19 |sort -n|uniq -c| sort -n" # OS usage+basename ssh glamiral@linux-france.org "grep -h prj/imapsync/VERSION /usr/local/apache/logs/access_log.bak|cut -d ' ' -f 13,18,19 |sort -n|uniq -c| sort -n" # OS usage+basename
ssh glamiral@linux-france.org "grep -h prj/imapsync/VERSION /usr/local/apache/logs/access_log.bak|cut -d ' ' -f 12 |sort -n|uniq -c| sort -n" # imapsync release ssh glamiral@linux-france.org "grep -h prj/imapsync/VERSION /usr/local/apache/logs/access_log.bak|cut -d ' ' -f 12 |sort -n|uniq -c| sort -n" # imapsync release
ssh glamiral@linux-france.org "grep -h prj/imapsync/VERSION /usr/local/apache/logs/access_log.bak|cut -d ' ' -f 1,12,13,18,19|sort -n|uniq -c|sort -n|wc -l" # count ip
ssh glamiral@linux-france.org "grep -h prj/imapsync/VERSION /usr/local/apache/logs/access_log.bak|wc -l" # imapsync runs
tail -f /usr/local/apache/logs/access_log|cat -n|grep prj/imapsync/VERSION|cat -n |grep VERSION # lfo frequency tail -f /usr/local/apache/logs/access_log|cat -n|grep prj/imapsync/VERSION|cat -n |grep VERSION # lfo frequency
EOFF EOFF
} }
statistics_lfo_run() {
# 62.147.165.21 - - [31/Oct/2010:23:45:28 +0100] "GET /prj/imapsync/VERSION HTTP/1.0" 200 6 "-" "imapsync/1.368 (linux system, perl 5.8.8, Mail::IMAPClient 2.2.9 imapsync)"
#grep prj/imapsync/VERSION /usr/local/apache/logs/access_log | sort -n | cut -d ' ' -f 1,12,13|uniq -c | sort -n # list ip
echo lfo list ip
ssh glamiral@linux-france.org "grep -h prj/imapsync/VERSION /usr/local/apache/logs/access_log.bak|cut -d ' ' -f 1,12,13,18,19|sort -n|uniq -c|sort -n" # list ip
echo lfo Win32
ssh glamiral@linux-france.org "grep -h prj/imapsync/VERSION /usr/local/apache/logs/access_log.bak|cut -d ' ' -f 1,12,13,18,19|sort -n|uniq -c|sort -n |grep MSWin32" # Win32
echo lfo OS usage+basename
ssh glamiral@linux-france.org "grep -h prj/imapsync/VERSION /usr/local/apache/logs/access_log.bak|cut -d ' ' -f 13,18,19 |sort -n|uniq -c| sort -n" # OS usage+basename
echo lfo imapsync release
ssh glamiral@linux-france.org "grep -h prj/imapsync/VERSION /usr/local/apache/logs/access_log.bak|cut -d ' ' -f 12 |sort -n|uniq -c| sort -n" # imapsync release
echo -n "lfo count ip: "
ssh glamiral@linux-france.org "grep -h prj/imapsync/VERSION /usr/local/apache/logs/access_log.bak|cut -d ' ' -f 1,12,13,18,19|sort -n|uniq -c|sort -n|wc -l" # count ip
echo -n "lfo imapsync runs: "
ssh glamiral@linux-france.org "grep -h prj/imapsync/VERSION /usr/local/apache/logs/access_log.bak|wc -l" # imapsync runs
}
statistics_ks() { statistics_ks() {
cat <<EOFF cat <<EOFF
ssh root@ks "cd /var/log/apache2/;grep -h prj/imapsync/VERSION access.log access.log_????????|cut -d ' ' -f 1,12,13,18,19|sort -n|uniq -c|sort -n" # list ip ssh root@ks "cd /var/log/apache2/;grep -h prj/imapsync/VERSION access.log_????????|cut -d ' ' -f 1,12,13,18,19|sort -n|uniq -c|sort -n" # list ip
ssh root@ks "cd /var/log/apache2/;grep -h prj/imapsync/VERSION access.log access.log_????????|cut -d ' ' -f 1,12,13,18,19|sort -n|uniq -c|sort -n|wc" # count ip ssh root@ks "cd /var/log/apache2/;grep -h prj/imapsync/VERSION access.log_????????|cut -d ' ' -f 1,12,13,18,19|sort -n|uniq -c|sort -n |grep MSWin32" # Win32
ssh root@ks "cd /var/log/apache2/;grep -h prj/imapsync/VERSION access.log access.log_????????|cut -d ' ' -f 1,12,13,18,19|sort -n|uniq -c|sort -n |grep MSWin32" # Win32
ssh root@ks "cd /var/log/apache2/;grep -h prj/imapsync/VERSION access.log access.log_????????|cut -d ' ' -f 13,18,19 |sort -n|uniq -c| sort -n" # OS usage+basename ssh root@ks "cd /var/log/apache2/;grep -h prj/imapsync/VERSION access.log_????????|cut -d ' ' -f 13,18,19 |sort -n|uniq -c| sort -n" # OS usage+basename
ssh root@ks "cd /var/log/apache2/;grep -h prj/imapsync/VERSION access.log access.log_????????|cut -d ' ' -f 12 |sort -n|uniq -c| sort -n" # imapsync release ssh root@ks "cd /var/log/apache2/;grep -h prj/imapsync/VERSION access.log_????????|cut -d ' ' -f 12 |sort -n|uniq -c| sort -n" # imapsync release
ssh root@ks "cd /var/log/apache2/;grep -h prj/imapsync/VERSION access.log_????????|cut -d ' ' -f 1,12,13,18,19|sort -n|uniq -c|sort -n|wc -l" # count ip
ssh root@ks "cd /var/log/apache2/;grep -h prj/imapsync/VERSION access.log_????????|wc -l" # imapsync runs
tail -f /var/log/apache2/access.log |cat -n|grep prj/imapsync/VERSION|cat -n |grep VERSION # ks frequency tail -f /var/log/apache2/access.log |cat -n|grep prj/imapsync/VERSION|cat -n |grep VERSION # ks frequency
EOFF EOFF
} }
statistics_ks_run() {
echo ks list ip
ssh root@ks "cd /var/log/apache2/;grep -h prj/imapsync/VERSION access.log_????????|cut -d ' ' -f 1,12,13,18,19|sort -n|uniq -c|sort -n" # list ip
echo ks Win32
ssh root@ks "cd /var/log/apache2/;grep -h prj/imapsync/VERSION access.log_????????|cut -d ' ' -f 1,12,13,18,19|sort -n|uniq -c|sort -n |grep MSWin32" # Win32
echo OS usage+basename
ssh root@ks "cd /var/log/apache2/;grep -h prj/imapsync/VERSION access.log_????????|cut -d ' ' -f 13,18,19 |sort -n|uniq -c| sort -n" # OS usage+basename
echo ks imapsync release
ssh root@ks "cd /var/log/apache2/;grep -h prj/imapsync/VERSION access.log_????????|cut -d ' ' -f 12 |sort -n|uniq -c| sort -n" # imapsync release
echo -n "ks count ip: "
ssh root@ks "cd /var/log/apache2/;grep -h prj/imapsync/VERSION access.log_????????|cut -d ' ' -f 1,12,13,18,19|sort -n|uniq -c|sort -n|wc -l" # count ip
echo -n "ks imapsync runs: "
ssh root@ks "cd /var/log/apache2/;grep -h prj/imapsync/VERSION access.log_????????|wc -l" # imapsync runs
}
statistics_VERSION_lfo() { statistics_VERSION_lfo() {
TMPDIR=. TMPDIR=.
@ -86,14 +126,52 @@ statistics_VERSION_monthly() {
) )
} }
echo statistics_VERSION_yearly_ip
statistics_VERSION_yearly_ip() {
year=${1:-`date '+%Y'`}
(
cd /home/lf/glamiral/imapsync_stats
cut -d ' ' -f 1,12,13,18,19 linux-france.org.??-??-${year}.imapsync_VERSION |sort -n |uniq -c|sort -n > stats_imapsync_${year}.ip
)
}
echo statistics_VERSION_yearly_os
statistics_VERSION_yearly_os() {
year=${1:-`date '+%Y'`}
(
cd /home/lf/glamiral/imapsync_stats
Linux=`grep linux stats_imapsync_${year}.ip | wc -l`
Win32=`grep MSWin32 stats_imapsync_${year}.ip | wc -l`
Darwin=`grep darwin stats_imapsync_${year}.ip | wc -l`
FreeBSD=`grep freebsd stats_imapsync_${year}.ip | wc -l`
Solaris=`grep solaris stats_imapsync_${year}.ip | wc -l`
OpenBSD=`grep openbsd stats_imapsync_${year}.ip | wc -l`
Nb_All=`cat stats_imapsync_${year}.ip | wc -l`
for OS in Linux Win32 Darwin FreeBSD Solaris OpenBSD; do
#echo $OS `eval "echo \\$$OS"` / $Nb_All
Nb_OS=`eval "echo \\$$OS"`
PerCent=`echo "scale=2; 100*$Nb_OS/$Nb_All" | bc -l`
echo $OS $PerCent %
done
)
}
echo statistics_VERSION_synthesis echo statistics_VERSION_synthesis
statistics_VERSION_synthesis() { statistics_VERSION_synthesis() {
year=${1:-`date '+%Y'`}
( (
cd /home/lf/glamiral/imapsync_stats cd /home/lf/glamiral/imapsync_stats
echo Nb users each month echo Nb users each month
wc -l *.ip wc -l stats_imapsync_${year}_??.ip
echo Nb users each year
wc -l stats_imapsync_????.ip
echo Nb runs each month echo Nb runs each month
tail -n 1 *.runs tail -n 1 stats_imapsync_${year}_??.runs
echo % Operating systems
statistics_VERSION_yearly_os $year
echo Biggest users
tail -n 5 stats_imapsync_${year}.ip
) )
} }
@ -128,11 +206,57 @@ statistics_VERSION_monthly_ip() {
) )
} }
echo statistics_VERSION_yearly_ip echo statistics_VERSION_monthly_os 08
statistics_VERSION_yearly_ip() { statistics_VERSION_monthly_os() {
month=${1:-`date '+%m'`}
( (
cd /home/imapsync/imapsync_stats cd /home/imapsync/imapsync_stats
cut -d ' ' -f 1,12,13,18,19 access.log_2011????.imapsync_VERSION |sort -n |uniq -c|sort -n > stats_imapsync_2011.ip Linux=`grep linux stats_imapsync_2011_${month}.ip | wc -l`
Win32=`grep MSWin32 stats_imapsync_2011_${month}.ip | wc -l`
Darwin=`grep darwin stats_imapsync_2011_${month}.ip | wc -l`
FreeBSD=`grep freebsd stats_imapsync_2011_${month}.ip | wc -l`
Solaris=`grep solaris stats_imapsync_2011_${month}.ip | wc -l`
OpenBSD=`grep openbsd stats_imapsync_2011_${month}.ip | wc -l`
Nb_All=`cat stats_imapsync_2011_${month}.ip | wc -l `
for OS in Linux Win32 Darwin FreeBSD Solaris OpenBSD; do
#echo $OS `eval "echo \\$$OS"` / $Nb_All
Nb_OS=`eval "echo \\$$OS"`
PerCent=`echo "scale=2; 100*$Nb_OS/$Nb_All" | bc -l`
echo $OS $PerCent%
done
)
}
echo statistics_VERSION_yearly_os
statistics_VERSION_yearly_os() {
year=${1:-`date '+%Y'`}
(
cd /home/imapsync/imapsync_stats
Linux=`grep linux stats_imapsync_${year}.ip | wc -l`
Win32=`grep MSWin32 stats_imapsync_${year}.ip | wc -l`
Darwin=`grep darwin stats_imapsync_${year}.ip | wc -l`
FreeBSD=`grep freebsd stats_imapsync_${year}.ip | wc -l`
Solaris=`grep solaris stats_imapsync_${year}.ip | wc -l`
OpenBSD=`grep openbsd stats_imapsync_${year}.ip | wc -l`
Nb_All=`cat stats_imapsync_${year}.ip | wc -l`
for OS in Linux Win32 Darwin FreeBSD Solaris OpenBSD; do
#echo $OS `eval "echo \\$$OS"` / $Nb_All
Nb_OS=`eval "echo \\$$OS"`
PerCent=`echo "scale=2; 100*$Nb_OS/$Nb_All" | bc -l`
echo $OS $PerCent %
done
)
}
echo statistics_VERSION_yearly_ip
statistics_VERSION_yearly_ip() {
year=${1:-`date '+%Y'`}
(
cd /home/imapsync/imapsync_stats
cut -d ' ' -f 1,12,13,18,19 access.log_${year}????.imapsync_VERSION |sort -n |uniq -c|sort -n > stats_imapsync_${year}.ip
) )
} }
@ -170,12 +294,19 @@ statistics_VERSION_monthly() {
echo statistics_VERSION_synthesis echo statistics_VERSION_synthesis
statistics_VERSION_synthesis() { statistics_VERSION_synthesis() {
year=${1:-`date '+%Y'`}
( (
cd /home/imapsync/imapsync_stats cd /home/imapsync/imapsync_stats
echo Nb users each month echo Nb users each month
wc -l *.ip wc -l stats_imapsync_${year}_??.ip
echo Nb users each year
wc -l stats_imapsync_????.ip
echo Nb runs each month echo Nb runs each month
tail -n 1 *.runs tail -n 1 stats_imapsync_${year}_??.runs
echo % Operating systems
statistics_VERSION_yearly_os $year
echo Biggest users
tail -n 5 stats_imapsync_${year}.ip
) )
} }

View file

@ -1,5 +1,5 @@
REM $Id: test2.bat,v 1.5 2011/08/24 06:48:44 gilles Exp gilles $ REM $Id: test2.bat,v 1.6 2011/08/24 21:55:56 gilles Exp gilles $
cd C:\msys\1.0\home\Admin\imapsync cd C:\msys\1.0\home\Admin\imapsync
REM perl ./imapsync --host1 p --user1 tata --passfile1 secret.tata --host2 p --user2 titi --passfile2 secret.titi --delete2 --expunge2 --folder INBOX REM perl ./imapsync --host1 p --user1 tata --passfile1 secret.tata --host2 p --user2 titi --passfile2 secret.titi --delete2 --expunge2 --folder INBOX
@ -19,6 +19,6 @@ REM --folder INBOX.bigmail
REM perl imapsync REM perl imapsync
REM perl imapsync --host1 p --user1 tata --passfile1 secret.tata --host2 p --user2 titi --passfile2 secret.titi --nofoldersize --folder INBOX.yop.yap --regexflag "s/\\ /\\/g" --debugflags REM perl imapsync --host1 p --user1 tata --passfile1 secret.tata --host2 p --user2 titi --passfile2 secret.titi --nofoldersize --folder INBOX.yop.yap --regexflag "s/\\ /\\/g" --debugflags
FOR /F "tokens=1,2,3,4 delims=; eol=#" %%G IN (file.csv) DO imapsync ^ FOR /F "tokens=1,2,3,4 delims=; eol=#" %%G IN (file.txt) DO imapsync ^
--host1 imap.side1.org --user1 %%G --password1 %%H ^ --host1 imap.side1.org --user1 %%G --password1 %%H ^
--host2 imap.side2.org --user2 %%I --password2 %%J --host2 imap.side2.org --user2 %%I --password2 %%J

165
tests.sh
View file

@ -1,6 +1,6 @@
#!/bin/sh #!/bin/sh
# $Id: tests.sh,v 1.174 2011/08/24 06:48:23 gilles Exp gilles $ # $Id: tests.sh,v 1.182 2011/11/12 23:40:55 gilles Exp gilles $
# Example 1: # Example 1:
# CMD_PERL='perl -I./Mail-IMAPClient-3.25/lib' sh -x tests.sh # CMD_PERL='perl -I./Mail-IMAPClient-3.25/lib' sh -x tests.sh
@ -20,11 +20,15 @@ HOST2=${HOST2:-'localhost'}
echo HOST2=$HOST2 echo HOST2=$HOST2
# most tests use: # most tests use:
CMD_PERL=${CMD_PERL:-'perl -I./Mail-IMAPClient-2.2.9'}
# few debugging tests use: # few debugging tests use:
CMD_PERL_2xx='perl -I./Mail-IMAPClient-2.2.9' CMD_PERL_2xx='perl -I./Mail-IMAPClient-2.2.9'
CMD_PERL_3xx='perl -I./Mail-IMAPClient-3.28/lib' CMD_PERL_3xx='perl -I./Mail-IMAPClient-3.30/lib'
CMD_PERL=${CMD_PERL:-$CMD_PERL_3xx}
#echo $CMD_PERL
#exit
#### Shell pragmas #### Shell pragmas
@ -542,14 +546,14 @@ ll_nosyncinternaldates() {
ll_idatefromheader() { ll_idatefromheader() {
can_send && sendtestmessage # can_send && sendtestmessage
$CMD_PERL ./imapsync \ $CMD_PERL ./imapsync \
--host1 $HOST1 --user1 tata \ --host1 $HOST1 --user1 tata \
--passfile1 ../../var/pass/secret.tata \ --passfile1 ../../var/pass/secret.tata \
--host2 $HOST2 --user2 titi \ --host2 $HOST2 --user2 titi \
--passfile2 ../../var/pass/secret.titi \ --passfile2 ../../var/pass/secret.titi \
--folder INBOX.oneemail \ --folder INBOX.oneemail2 \
--idatefromheader --debug --dry --idatefromheader --debug --dry
} }
@ -575,14 +579,14 @@ ll_subscribed()
} }
ll_subscribe() ll_nosubscribe()
{ {
$CMD_PERL ./imapsync \ $CMD_PERL ./imapsync \
--host1 $HOST1 --user1 tata \ --host1 $HOST1 --user1 tata \
--passfile1 ../../var/pass/secret.tata \ --passfile1 ../../var/pass/secret.tata \
--host2 $HOST2 --user2 titi \ --host2 $HOST2 --user2 titi \
--passfile2 ../../var/pass/secret.titi \ --passfile2 ../../var/pass/secret.titi \
--subscribed --subscribe --subscribed --nosubscribe
} }
ll_justconnect() ll_justconnect()
@ -802,6 +806,28 @@ ll_search_SENTSINCE()
--search 'SENTSINCE 11-Jul-2011' --folder INBOX --search 'SENTSINCE 11-Jul-2011' --folder INBOX
} }
ll_search_BEFORE_delete2_useuid()
{
can_send && sendtestmessage titi
$CMD_PERL ./imapsync \
--host1 $HOST1 --user1 tata \
--passfile1 ../../var/pass/secret.tata \
--host2 $HOST2 --user2 titi \
--passfile2 ../../var/pass/secret.titi \
--search 'BEFORE 29-Sep-2011' --folder INBOX --delete2 --useuid
}
ll_search_SENTBEFORE()
{
can_send && sendtestmessage titi
$CMD_PERL ./imapsync \
--host1 $HOST1 --user1 tata \
--passfile1 ../../var/pass/secret.tata \
--host2 $HOST2 --user2 titi \
--passfile2 ../../var/pass/secret.titi \
--search 'SENTBEFORE 2-Oct-2011' --folder INBOX --delete2
}
@ -1238,7 +1264,8 @@ ll_regex_flag4()
--host2 $HOST2 --user2 titi \ --host2 $HOST2 --user2 titi \
--passfile2 ../../var/pass/secret.titi \ --passfile2 ../../var/pass/secret.titi \
--folder INBOX.yop.yap --nofoldersizes \ --folder INBOX.yop.yap --nofoldersizes \
--regexflag 's/\$label1/\\label1/g' --debugflags --regexflag 's/\$label1/\\label1/g' \
--regexflag "s/\\\$Forwarded//g" --debugflags
echo 'sudo rm -f /home/vmail/titi/.yop.yap/cur/*' echo 'sudo rm -f /home/vmail/titi/.yop.yap/cur/*'
} }
@ -1283,10 +1310,10 @@ ll_tls_justlogin() {
ll_tls_devel() { ll_tls_devel() {
CMD_PERL='perl -I./Mail-IMAPClient-2.2.9' ll_justlogin ll_ssl_justlogin \ CMD_PERL=$CMD_PERL_2xx ll_justlogin ll_ssl_justlogin \
&& CMD_PERL='perl -I./Mail-IMAPClient-3.28/lib' ll_justlogin ll_ssl_justlogin \ && CMD_PERL=$CMD_PERL_3xx ll_justlogin ll_ssl_justlogin \
&& CMD_PERL='perl -I./Mail-IMAPClient-2.2.9' ll_tls_justconnect ll_tls_justlogin \ && CMD_PERL=$CMD_PERL_2xx ll_tls_justconnect ll_tls_justlogin \
&& CMD_PERL='perl -I./Mail-IMAPClient-3.28/lib' ll_tls_justconnect ll_tls_justlogin && CMD_PERL=$CMD_PERL_3xx ll_tls_justconnect ll_tls_justlogin
} }
ll_tls() { ll_tls() {
@ -1346,7 +1373,7 @@ ll_authmech_PLAIN() {
} }
ll_authmech_NTLM() { ll_authmech_NTLM() {
$CMD_PERL -I./NTLM-1.05/blib/lib ./imapsync \ $CMD_PERL -I./NTLM-1.09/blib/lib ./imapsync \
--host1 mail.freshgrillfoods.com --user1 ktraster \ --host1 mail.freshgrillfoods.com --user1 ktraster \
--passfile1 ../../var/pass/secret.ktraster \ --passfile1 ../../var/pass/secret.ktraster \
--host2 $HOST2 --user2 titi \ --host2 $HOST2 --user2 titi \
@ -1357,7 +1384,7 @@ ll_authmech_NTLM() {
} }
ll_authmech_NTLM_domain() { ll_authmech_NTLM_domain() {
$CMD_PERL -I./NTLM-1.05/blib/lib ./imapsync \ $CMD_PERL -I./NTLM-1.09/blib/lib ./imapsync \
--host1 mail.freshgrillfoods.com --user1 ktraster \ --host1 mail.freshgrillfoods.com --user1 ktraster \
--passfile1 ../../var/pass/secret.ktraster \ --passfile1 ../../var/pass/secret.ktraster \
--host2 $HOST2 --user2 titi \ --host2 $HOST2 --user2 titi \
@ -1367,13 +1394,14 @@ ll_authmech_NTLM_domain() {
} }
ll_authmech_NTLM_2() { ll_authmech_NTLM_2() {
$CMD_PERL -I./NTLM-1.05/blib/lib ./imapsync \ $CMD_PERL -I./NTLM-1.09/blib/lib ./imapsync \
--host1 mail.freshgrillfoods.com --user1 ktraster \ --host1 mail.freshgrillfoods.com --user1 ktraster \
--passfile1 ../../var/pass/secret.ktraster \ --passfile1 ../../var/pass/secret.ktraster \
--host2 $HOST2 --user2 titi \ --host2 $HOST2 --user2 titi \
--passfile2 ../../var/pass/secret.titi \ --passfile2 ../../var/pass/secret.titi \
--authmech1 NTLM --dry --authmech1 NTLM --dry
} }
@ -1556,8 +1584,6 @@ msw2() {
} }
xxxxx_gmail() { xxxxx_gmail() {
! ping -c1 imap.gmail.com || $CMD_PERL ./imapsync \ ! ping -c1 imap.gmail.com || $CMD_PERL ./imapsync \
@ -1569,7 +1595,11 @@ xxxxx_gmail() {
--user1 tata \ --user1 tata \
--passfile1 ../../var/pass/secret.tata \ --passfile1 ../../var/pass/secret.tata \
--nofoldersizes \ --nofoldersizes \
--justfolders --dry --prefix2 '[Gmail]/' --justfolders \
--regextrans2 "s, +$,,g" --regextrans2 "s, +/,/,g" \
--exclude INBOX.yop.YAP
#--dry --prefix2 '[Gmail]/'
} }
xxxxx_gmail_2() { xxxxx_gmail_2() {
@ -1584,7 +1614,6 @@ xxxxx_gmail_2() {
--passfile2 ../../var/pass/secret.gilles_gmail \ --passfile2 ../../var/pass/secret.gilles_gmail \
--nofoldersizes \ --nofoldersizes \
--regextrans2 's,(.*),SMS,' --regextrans2 's,(.*),SMS,'
#--dry --prefix2 '[Gmail]/'
} }
xxxxx_gmail_3() { xxxxx_gmail_3() {
@ -1641,10 +1670,8 @@ gmail_xxxxx() {
--host2 $HOST2 \ --host2 $HOST2 \
--user2 tata \ --user2 tata \
--passfile2 ../../var/pass/secret.tata \ --passfile2 ../../var/pass/secret.tata \
--useheader 'Message-Id' \
--useheader="X-Gmail-Received" \
--nofoldersizes \ --nofoldersizes \
--prefix1 '[Gmail]/' --dry --justfolders --dry --justfolders
} }
@ -1657,10 +1684,7 @@ gmail() {
--passfile1 ../../var/pass/secret.gilles_gmail \ --passfile1 ../../var/pass/secret.gilles_gmail \
--host2 $HOST2 \ --host2 $HOST2 \
--user2 tata \ --user2 tata \
--passfile2 ../../var/pass/secret.tata \ --passfile2 ../../var/pass/secret.tata
--useheader 'Message-Id' \
--useheader="X-Gmail-Received" \
--regextrans2 's/\[Gmail\]/Gmail/'
} }
gmail_justfolders() { gmail_justfolders() {
@ -1673,9 +1697,6 @@ gmail_justfolders() {
--host2 $HOST2 \ --host2 $HOST2 \
--user2 tata \ --user2 tata \
--passfile2 ../../var/pass/secret.tata \ --passfile2 ../../var/pass/secret.tata \
--useheader 'Message-Id' \
--useheader="X-Gmail-Received" \
--regextrans2 's/\[Gmail\]/Gmail/' \
--justfolders --justfolders
} }
@ -1704,12 +1725,9 @@ gmail_gmail() {
--passfile1 ../../var/pass/secret.gilles_gmail \ --passfile1 ../../var/pass/secret.gilles_gmail \
--host2 imap.gmail.com \ --host2 imap.gmail.com \
--ssl2 \ --ssl2 \
--user2 gilles.lamiral@gmail.com \ --user2 imapsync.gl@gmail.com \
--passfile2 ../../var/pass/secret.gilles_gmail \ --passfile2 ../../var/pass/secret.imapsync.gl_gmail \
--useheader 'Message-Id' --useheader="X-Gmail-Received" \ --justfolders
--regextrans2 's¤INBOX¤inbox_copy¤' \
--folder INBOX \
--allowsizemismatch
} }
@ -1723,9 +1741,7 @@ gmail_gmail2() {
--ssl2 \ --ssl2 \
--user2 imapsync.gl@gmail.com \ --user2 imapsync.gl@gmail.com \
--passfile2 ../../var/pass/secret.imapsync.gl_gmail \ --passfile2 ../../var/pass/secret.imapsync.gl_gmail \
--useheader 'Message-Id' --skipsize \ --folder INBOX
--folder INBOX \
--allowsizemismatch
#--dry # --debug --debugimap # --authmech1 LOGIN #--dry # --debug --debugimap # --authmech1 LOGIN
} }
@ -1743,8 +1759,11 @@ yahoo_xxxx_login() {
} }
yahoo_xxxx() { yahoo_xxxx() {
# Yahoo works only with ssl (november 2011)
# Could do plain port 143 before
! ping -c1 imap.mail.yahoo.com || $CMD_PERL ./imapsync \ ! ping -c1 imap.mail.yahoo.com || $CMD_PERL ./imapsync \
--host1 imap.mail.yahoo.com \ --host1 imap.mail.yahoo.com \
--ssl1 \
--user1 glamiral \ --user1 glamiral \
--passfile1 ../../var/pass/secret.gilles_yahoo \ --passfile1 ../../var/pass/secret.gilles_yahoo \
--host2 $HOST2 \ --host2 $HOST2 \
@ -1752,8 +1771,6 @@ yahoo_xxxx() {
--passfile2 ../../var/pass/secret.titi \ --passfile2 ../../var/pass/secret.titi \
--sep1 '.' --sep1 '.'
# Yahoo works also with ssl
# --ssl1 \
} }
@ -1769,7 +1786,7 @@ allow3xx() {
} }
noallow3xx() { noallow3xx() {
! perl -I./Mail-IMAPClient-3.28/lib ./imapsync \ ! $CMD_PERL_3xx ./imapsync \
--host1 $HOST1 --user1 tata \ --host1 $HOST1 --user1 tata \
--passfile1 ../../var/pass/secret.tata \ --passfile1 ../../var/pass/secret.tata \
--host2 $HOST2 --user2 titi \ --host2 $HOST2 --user2 titi \
@ -1985,6 +2002,70 @@ ll_useuid_nousecache()
# specific tests # specific tests
########################## ##########################
dbmail_uid() {
# --useuid alone does not work on dbmaikl server 2.2.17 ready to run
# because uids are += 2 and uidnext is in fact uidnext + 1
if can_send; then
sendtestmessage
else
:
fi
$CMD_PERL ./imapsync \
--host1 $HOST1 --user1 tata \
--passfile1 ../../var/pass/secret.tata \
--host2 182.236.127.31 --user2 imapsynctest \
--passfile2 ../../var/pass/secret.dbmail \
--folder INBOX --fast --delete2 --expunge2 \
--usecache --useuid --nocacheaftercopy
}
dbmail_nocacheaftercopy() {
# Does work
$CMD_PERL ./imapsync \
--host1 $HOST1 --user1 tata \
--passfile1 ../../var/pass/secret.tata \
--host2 182.236.127.31 --user2 imapsynctest \
--passfile2 ../../var/pass/secret.dbmail \
--folder INBOX --fast --delete2 --expunge2 --usecache --nocacheaftercopy
}
dbmail_nocache() {
# Does work
$CMD_PERL ./imapsync \
--host1 $HOST1 --user1 tata \
--passfile1 ../../var/pass/secret.tata \
--host2 182.236.127.31 --user2 imapsynctest \
--passfile2 ../../var/pass/secret.dbmail \
--folder INBOX --fast --delete2 --expunge2
}
bluehost2() {
$CMD_PERL ./imapsync \
--host1 imap.mail.yahoo.com --tls1 \
--user1 dalton@piila.com \
--passfile1 ../../var/pass/secret.bluehost2 \
--host2 box766.bluehost.com --ssl2 \
--user2 dalton@piila.com \
--passfile2 ../../var/pass/secret.bluehost2 \
--sep1 '/' --useuid --regextrans2 's/Inbox/INBOX/' --regextrans2 's,/,_,'
}
bluehost() {
$CMD_PERL ./imapsync \
--host1 imap.mail.yahoo.com --tls1 \
--user1 pii@piila.com \
--passfile1 ../../var/pass/secret.bluehost \
--host2 box766.bluehost.com --ssl2 \
--user2 pii@piila.com \
--passfile2 ../../var/pass/secret.bluehost \
--sep1 '/' --usecache --useuid --regextrans2 's/Inbox/INBOX/'
}
b2btech_1() { b2btech_1() {
$CMD_PERL ./imapsync \ $CMD_PERL ./imapsync \
@ -2410,7 +2491,7 @@ ll_nosyncinternaldates
ll_idatefromheader ll_idatefromheader
ll_folder_rev ll_folder_rev
ll_subscribed ll_subscribed
ll_subscribe ll_nosubscribe
ll_justfoldersizes ll_justfoldersizes
ll_authmd5 ll_authmd5
ll_authmd51 ll_authmd51