mirror of
https://github.com/imapsync/imapsync.git
synced 2025-07-22 18:25:54 +02:00
1.163
This commit is contained in:
parent
7371bedc83
commit
d283785cb2
11 changed files with 508 additions and 146 deletions
6
CREDITS
6
CREDITS
|
@ -1,5 +1,11 @@
|
||||||
#!/bin/cat
|
#!/bin/cat
|
||||||
|
|
||||||
|
Robert Terzi
|
||||||
|
Seems to have the mbox vs Maildir/ problem
|
||||||
|
and gave the --regexmess 's/\AFrom \w .*\n//'
|
||||||
|
solution.
|
||||||
|
|
||||||
|
|
||||||
Subbarao & Prasanthi Punnamaraju
|
Subbarao & Prasanthi Punnamaraju
|
||||||
Asked how to move emails from InBox to a sub-folder.
|
Asked how to move emails from InBox to a sub-folder.
|
||||||
|
|
||||||
|
|
13
ChangeLog
13
ChangeLog
|
@ -1,15 +1,24 @@
|
||||||
|
|
||||||
RCS file: RCS/imapsync,v
|
RCS file: RCS/imapsync,v
|
||||||
Working file: imapsync
|
Working file: imapsync
|
||||||
head: 1.161
|
head: 1.163
|
||||||
branch:
|
branch:
|
||||||
locks: strict
|
locks: strict
|
||||||
access list:
|
access list:
|
||||||
symbolic names:
|
symbolic names:
|
||||||
keyword substitution: kv
|
keyword substitution: kv
|
||||||
total revisions: 161; selected revisions: 161
|
total revisions: 163; selected revisions: 163
|
||||||
description:
|
description:
|
||||||
----------------------------
|
----------------------------
|
||||||
|
revision 1.163
|
||||||
|
date: 2006/03/24 04:18:58; author: gilles; state: Exp; lines: +61 -51
|
||||||
|
Added ask_for_password() function
|
||||||
|
FLAGS INTERNALDATE and RFC822.SIZE fetch together
|
||||||
|
----------------------------
|
||||||
|
revision 1.162
|
||||||
|
date: 2006/03/22 03:45:05; author: gilles; state: Exp; lines: +59 -31
|
||||||
|
Added --authuser1 --authuser2 options
|
||||||
|
----------------------------
|
||||||
revision 1.161
|
revision 1.161
|
||||||
date: 2006/03/20 00:09:41; author: gilles; state: Exp; lines: +12 -42
|
date: 2006/03/20 00:09:41; author: gilles; state: Exp; lines: +12 -42
|
||||||
Fixed default auth to CRAM-MD5
|
Fixed default auth to CRAM-MD5
|
||||||
|
|
64
FAQ
64
FAQ
|
@ -27,32 +27,44 @@ b) Use the --syncinternaldates option and keep using Eudora :-)
|
||||||
=======================================================================
|
=======================================================================
|
||||||
Q. Does imapsync support IMAP over TLS (IMAPS)?
|
Q. Does imapsync support IMAP over TLS (IMAPS)?
|
||||||
|
|
||||||
R. Not natively.
|
R. Yes natively since release 1.161.
|
||||||
but, 2 ways, at least :
|
still, 2 ways, at least :
|
||||||
|
|
||||||
|
a) Use --ssl1 and/or --ssl2 options
|
||||||
|
|
||||||
|
--ssl1 tells imapsync to use ssl on host1
|
||||||
|
--ssl2 tells imapsync to use ssl on host2
|
||||||
|
|
||||||
a) There are patches in patches/ directory to do this
|
|
||||||
in imapsync code.
|
|
||||||
I tried to include them but it broke my tests.
|
|
||||||
It works but not always.
|
|
||||||
|
|
||||||
b) Use stunnel
|
b) Use stunnel
|
||||||
http://www.stunnel.org/
|
http://www.stunnel.org/
|
||||||
Assuming there is an imaps (993) server on imap.foo.org,
|
Assuming there is an imaps (993) server on imap.foo.org,
|
||||||
on your localhost machine (or bar machine) run :
|
on your localhost machine (or bar machine) run :
|
||||||
stunnel -c -d imap -r imap.foo.org:imaps
|
stunnel -c -d imap -r imap.foo.org:imaps
|
||||||
or
|
or using names instead of numbers
|
||||||
stunnel -c -d 143 -r imap.foo.org:993
|
stunnel -c -d 143 -r imap.foo.org:993
|
||||||
then use imapsync on localhost (or bar machine) imap (143) port.
|
then use imapsync on localhost (or bar machine) imap (143) port.
|
||||||
|
|
||||||
|
|
||||||
|
=======================================================================
|
||||||
|
Q: How to have an imaps server ?
|
||||||
|
|
||||||
|
R.
|
||||||
|
a) Install one
|
||||||
|
|
||||||
|
b) or use stunnel :
|
||||||
|
Assuming there is an imap (143) server on localhost
|
||||||
|
stunnel -d 993 -r 143 -f
|
||||||
|
|
||||||
|
c) or use stunnel on inetd
|
||||||
|
imaps stream tcp nowait cyrus /usr/sbin/stunnel -s cyrus -p /etc/ssl/certs/imapd.pem -r localhost:imap2
|
||||||
|
|
||||||
======================================================================
|
======================================================================
|
||||||
Q. I want the --folder 'MyFolder' option be recurse.
|
Q. I want the --folder 'MyFolder' option be recurse.
|
||||||
|
|
||||||
R. Do not use the --folder option.
|
R. Do not use the --folder option.
|
||||||
Instead, use --include '^MyFolder'
|
Instead, use --include '^MyFolder'
|
||||||
Folder "MyFolder" and all its subfolders will be handled.
|
Then the folder "MyFolder" and all its subfolders will be handled.
|
||||||
|
|
||||||
======================================================================
|
======================================================================
|
||||||
Q. I have moved from Braunschweig to Graz, so I would like to have my whole
|
Q. I have moved from Braunschweig to Graz, so I would like to have my whole
|
||||||
|
@ -106,9 +118,9 @@ messages with the shift key.
|
||||||
b) With imapsync:
|
b) With imapsync:
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
you have to calculate the day of year (and
|
You have to calculate the day of year (and
|
||||||
add 365). For example, running it today, Sat Mar 11
|
add 365). For example, running it today,
|
||||||
13:06:01 CET 2006:
|
Sat Mar 11 13:06:01 CET 2006:
|
||||||
|
|
||||||
imapsync ...
|
imapsync ...
|
||||||
--host1 imap.truc.org --host2 imap.trac.org \
|
--host1 imap.truc.org --host2 imap.trac.org \
|
||||||
|
@ -131,6 +143,36 @@ Also, you must take imapsync 1.159 at least since I tested
|
||||||
what I just wrote above and found 2 bugs about --mindate
|
what I just wrote above and found 2 bugs about --mindate
|
||||||
--maxdate options behavior.
|
--maxdate options behavior.
|
||||||
|
|
||||||
|
|
||||||
|
=======================================================================
|
||||||
|
Q. My imap server does not accept a message and warns
|
||||||
|
"Invalid header". What is the problem ?
|
||||||
|
|
||||||
|
R. You fall in the classical mbox versus Maildir/ format
|
||||||
|
problem. May be you use a misconfigured procmail rule.
|
||||||
|
|
||||||
|
A header beginning like the following one is in the mbox
|
||||||
|
format, header line 1 has no colon behind "From", header
|
||||||
|
lines 2 through N do have a colon :
|
||||||
|
|
||||||
|
From foo@yoyo.org Sat Jun 22 01:10:21 2002
|
||||||
|
Return-Path: <foo@yoyo.org>
|
||||||
|
Received: ...
|
||||||
|
|
||||||
|
Any Maidir/ configured imap server may refuse this message
|
||||||
|
since its header is invalid. The first "From " line is not
|
||||||
|
valid. It lacks a colon character ":".
|
||||||
|
To solve this problem you have several solutions a) or b):
|
||||||
|
|
||||||
|
a) Remove these first "From " line manually for each message
|
||||||
|
before using imapsync. Don't think to add a colon to this
|
||||||
|
line since you will end with two "From:" lines (just look at
|
||||||
|
the other lines)
|
||||||
|
|
||||||
|
b) Run imapsync with the following option :
|
||||||
|
--regexmess 's/\AFrom \w .*\n//'
|
||||||
|
|
||||||
|
|
||||||
=======================================================================
|
=======================================================================
|
||||||
Q. I'm migrating from WU to Cyrus, and the mail folders are
|
Q. I'm migrating from WU to Cyrus, and the mail folders are
|
||||||
under /home/user/mail but the tool copies everything in
|
under /home/user/mail but the tool copies everything in
|
||||||
|
|
17
README
17
README
|
@ -2,7 +2,7 @@ NAME
|
||||||
imapsync - IMAP synchronization, copy or migration tool. Synchronize
|
imapsync - IMAP synchronization, copy or migration tool. Synchronize
|
||||||
mailboxes between two imap servers. Good at IMAP migration.
|
mailboxes between two imap servers. Good at IMAP migration.
|
||||||
|
|
||||||
$Revision: 1.161 $
|
$Revision: 1.163 $
|
||||||
|
|
||||||
INSTALL
|
INSTALL
|
||||||
imapsync works fine under any Unix OS.
|
imapsync works fine under any Unix OS.
|
||||||
|
@ -116,8 +116,17 @@ SECURITY
|
||||||
password in a well protected file (600 or rw-------) is the best
|
password in a well protected file (600 or rw-------) is the best
|
||||||
solution.
|
solution.
|
||||||
|
|
||||||
imasync is not protected against sniffers on the network so the
|
imasync is not totally protected against sniffers on the network since
|
||||||
passwords are in plain text.
|
passwords may be transfered in plain text in case CRAM-MD5 is not
|
||||||
|
supported by your imap servers. Use --ssl1 and --ssl2 to enable
|
||||||
|
encryption on host1 and host2.
|
||||||
|
|
||||||
|
You may authenticate as one user (typically an admin user), but be
|
||||||
|
authorized as someone else, which means you don't need to know every
|
||||||
|
user's personal password. Specify --authuser1 "adminuser" to enable this
|
||||||
|
on host1. In this case, --authmech1 PLAIN will be used, but otherwise,
|
||||||
|
--authmech1 CRAM-MD5 is the default. Same behavior with the --authuser2
|
||||||
|
option.
|
||||||
|
|
||||||
EXIT STATUS
|
EXIT STATUS
|
||||||
imapsync will exit with a 0 status (return code) if everything went
|
imapsync will exit with a 0 status (return code) if everything went
|
||||||
|
@ -277,5 +286,5 @@ AUTHOR
|
||||||
teaching free open and gratis softwares. Don't hesitate to pay him for
|
teaching free open and gratis softwares. Don't hesitate to pay him for
|
||||||
that services.
|
that services.
|
||||||
|
|
||||||
$Id: imapsync,v 1.161 2006/03/20 00:09:41 gilles Exp $
|
$Id: imapsync,v 1.163 2006/03/24 04:18:58 gilles Exp $
|
||||||
|
|
||||||
|
|
10
TODO
10
TODO
|
@ -7,10 +7,6 @@ problem is encountered.
|
||||||
Post on newsgroup comp.mail.imap when a new release comes.
|
Post on newsgroup comp.mail.imap when a new release comes.
|
||||||
http://groups.google.fr/group/comp.mail.imap
|
http://groups.google.fr/group/comp.mail.imap
|
||||||
|
|
||||||
Add features from Herman (patch against 1.139)
|
|
||||||
- Support for authenticating as different (admin) user
|
|
||||||
- Support for different auth mechanisms (we needed PLAIN)
|
|
||||||
|
|
||||||
Add my amazon wishlist link.
|
Add my amazon wishlist link.
|
||||||
|
|
||||||
Add an --exactsync option to remove target messages
|
Add an --exactsync option to remove target messages
|
||||||
|
@ -35,6 +31,12 @@ http://asg.web.cmu.edu/cyrus/download/imapd/altnamespace.html
|
||||||
|
|
||||||
Explain expunge behavior.
|
Explain expunge behavior.
|
||||||
|
|
||||||
|
|
||||||
|
DONE. Add features from Herman (patch against 1.139 and
|
||||||
|
again with 1.156 by Kjetil Torgrim Homme)
|
||||||
|
- Support for authenticating as different (admin) user
|
||||||
|
- Support for different auth mechanisms (we needed PLAIN)
|
||||||
|
|
||||||
DONE. Make --include --exclude options possibly be a list.
|
DONE. Make --include --exclude options possibly be a list.
|
||||||
|
|
||||||
DONE. Look at http://freshmeat.net/projects/freshmeat-submit/
|
DONE. Look at http://freshmeat.net/projects/freshmeat-submit/
|
||||||
|
|
2
VERSION
2
VERSION
|
@ -1 +1 @@
|
||||||
1.161
|
1.163
|
||||||
|
|
93
aaa
Normal file
93
aaa
Normal file
|
@ -0,0 +1,93 @@
|
||||||
|
get options: [1]
|
||||||
|
$RCSfile: imapsync,v $ $Revision: 1.162 $ $Date: 2006/03/22 03:45:05 $
|
||||||
|
Mail::IMAPClient version used here is 2.2.9
|
||||||
|
will try to use CRAM-MD5 authentication on host1
|
||||||
|
will try to use CRAM-MD5 authentication on host2
|
||||||
|
From imap server [loul] port [143] user [tata]
|
||||||
|
To imap server [plume] port [143] user [tata@est.belle]
|
||||||
|
Banner : * OK louloutte Cyrus IMAP4 v1.5.19 server ready
|
||||||
|
loul: no support for AUTHENTICATE CRAM-MD5, using LOGIN
|
||||||
|
Banner : * OK [CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA AUTH=PLAIN CRAM-MD5 CRAM-SHA1 IDLE ACL ACL2=UNION STARTTLS] Courier-IMAP ready. Copyright 1998-2004 Double Precision, Inc. See COPYING for distribution information.
|
||||||
|
From Buffer I/O : 4096
|
||||||
|
To Buffer I/O : 4096
|
||||||
|
From capability : QUOTA X-NETSCAPE NAMESPACE X-NON-HIERARCHICAL-RENAME ACL UNSELECT LITERAL+ NO_ATOMIC_RENAME UIDPLUS IMAP4 IMAP4REV1
|
||||||
|
To capability : QUOTA STARTTLS NAMESPACE CRAM-SHA1 IDLE AUTH=PLAIN THREAD=ORDEREDSUBJECT ACL SORT UIDPLUS CHILDREN ACL2=UNION CRAM-MD5 IMAP4REV1 THREAD=REFERENCES
|
||||||
|
From state Authenticated
|
||||||
|
To state Authenticated
|
||||||
|
Getting separators
|
||||||
|
Calling namespace capability
|
||||||
|
Calling namespace capability
|
||||||
|
Getting prefix namespace
|
||||||
|
Calling namespace capability
|
||||||
|
Getting prefix namespace
|
||||||
|
Calling namespace capability
|
||||||
|
From separator and prefix : [.][INBOX.]
|
||||||
|
To separator and prefix : [.][INBOX.]
|
||||||
|
From folders : [INBOX.yop.yap]
|
||||||
|
To folders : [INBOX] [INBOX.2005-INBOX] [INBOX.Draft] [INBOX.Drafts] [INBOX.Sent] [INBOX.Trash] [INBOX.ppp] [INBOX.qqq] [INBOX.yop] [INBOX.yop.yap] [INBOX.yop.yup] [INBOX.yopX] [INBOX.yopX.yap] [INBOX.yopX.yup] [INBOX.zz]
|
||||||
|
From subscribed folders : [INBOX.yop.yap]
|
||||||
|
From Folder [INBOX.yop.yap]
|
||||||
|
removed source prefix : [yop.yap]
|
||||||
|
inverted separators : [yop.yap]
|
||||||
|
added target prefix : [INBOX.yop.yap]
|
||||||
|
To Folder [INBOX.yop.yap]
|
||||||
|
LIST FROM : 1 messages [1]
|
||||||
|
LIST TO : 1 messages [7]
|
||||||
|
++++ From [INBOX.yop.yap] Parse 1 ++++
|
||||||
|
Time headers: 0 s
|
||||||
|
Time sizes : 0 s
|
||||||
|
Head NUM:10
|
||||||
|
FH Date:Fri, 7 Mar 2003 17:00:01 +0100 (CET)
|
||||||
|
FH From:root@louloutte.dyndns.org (Cron Daemon)
|
||||||
|
FH Message-Id:<20030307160001.69D18FEEF@louloutte.dyndns.org>
|
||||||
|
FH Received:by louloutte.dyndns.org (Postfix, from userid 0) id 69D18FEEF; Fri, 7 Mar 2003 17:00:01 +0100 (CET)
|
||||||
|
FH Return-Path:<root@louloutte.dyndns.org>
|
||||||
|
FH Subject:Cron <root@louloutte> /usr/bin/poff libertynico
|
||||||
|
FH To:root@louloutte.dyndns.org
|
||||||
|
FH X-Cron-Env:<HOME=/root>
|
||||||
|
FH X-Cron-Env:<LOGNAME=root>
|
||||||
|
FH X-Cron-Env:<PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin>
|
||||||
|
FH X-Cron-Env:<SHELL=/bin/sh>
|
||||||
|
FH X-Spam-Level:*
|
||||||
|
FH X-Spam-Status:No, hits=1.6 required=5.0 tests=NO_MX_FOR_FROM,AWL version=2.20
|
||||||
|
F msg 1:ri4E1CAmNkh3rP3Mq15HSw:714
|
||||||
|
Time headers: 0 s
|
||||||
|
++++ To [INBOX.yop.yap] Parse 1 ++++
|
||||||
|
Time headers: 0 s
|
||||||
|
Time sizes : 0 s
|
||||||
|
Head NUM:10
|
||||||
|
TH Date:Fri, 7 Mar 2003 17:00:01 +0100 (CET)
|
||||||
|
TH From:root@louloutte.dyndns.org (Cron Daemon)
|
||||||
|
TH Message-Id:<20030307160001.69D18FEEF@louloutte.dyndns.org>
|
||||||
|
TH Received:by louloutte.dyndns.org (Postfix, from userid 0) id 69D18FEEF; Fri, 7 Mar 2003 17:00:01 +0100 (CET)
|
||||||
|
TH Return-Path:<root@louloutte.dyndns.org>
|
||||||
|
TH Subject:Cron <root@louloutte> /usr/bin/poff libertynico
|
||||||
|
TH To:root@louloutte.dyndns.org
|
||||||
|
TH X-Cron-Env:<HOME=/root>
|
||||||
|
TH X-Cron-Env:<LOGNAME=root>
|
||||||
|
TH X-Cron-Env:<PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin>
|
||||||
|
TH X-Cron-Env:<SHELL=/bin/sh>
|
||||||
|
TH X-Spam-Level:*
|
||||||
|
TH X-Spam-Status:No, hits=1.6 required=5.0 tests=NO_MX_FOR_FROM,AWL version=2.20
|
||||||
|
T msg 7:ri4E1CAmNkh3rP3Mq15HSw:714
|
||||||
|
Time headers: 0 s
|
||||||
|
++++ Verifying [INBOX.yop.yap] -> [INBOX.yop.yap] ++++
|
||||||
|
+ key ri4E1CAmNkh3rP3Mq15HSw:714 #1
|
||||||
|
Message id [ri4E1CAmNkh3rP3Mq15HSw:714] found in t:INBOX.yop.yap
|
||||||
|
Setting flags
|
||||||
|
flags from : \Seen
|
||||||
|
flags to : \Seen
|
||||||
|
Looking dates
|
||||||
|
idate from : 22-Aug-2003 19:16:01 +0200
|
||||||
|
idate to : 21-May-2005 12:39:11 +0200
|
||||||
|
Message ri4E1CAmNkh3rP3Mq15HSw:714 SZ_GOOD f:1:714 t:7:714
|
||||||
|
Time : 0 s
|
||||||
|
++++ Statistics ++++
|
||||||
|
Time : 0 sec
|
||||||
|
Messages transfered : 0
|
||||||
|
Messages skipped : 1
|
||||||
|
Total bytes transfered : 0
|
||||||
|
Total bytes skipped : 714
|
||||||
|
Total bytes error : 0
|
||||||
|
Detected 0 errors
|
||||||
|
Please, rate imapsync at http://freshmeat.net/projects/imapsync/
|
93
aaa2
Normal file
93
aaa2
Normal file
|
@ -0,0 +1,93 @@
|
||||||
|
get options: [1]
|
||||||
|
$RCSfile: imapsync,v $ $Revision: 1.162 $ $Date: 2006/03/22 03:45:05 $
|
||||||
|
Mail::IMAPClient version used here is 2.2.9
|
||||||
|
will try to use CRAM-MD5 authentication on host1
|
||||||
|
will try to use CRAM-MD5 authentication on host2
|
||||||
|
From imap server [loul] port [143] user [tata]
|
||||||
|
To imap server [plume] port [143] user [tata@est.belle]
|
||||||
|
Banner : * OK louloutte Cyrus IMAP4 v1.5.19 server ready
|
||||||
|
loul: no support for AUTHENTICATE CRAM-MD5, using LOGIN
|
||||||
|
Banner : * OK [CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA AUTH=PLAIN CRAM-MD5 CRAM-SHA1 IDLE ACL ACL2=UNION STARTTLS] Courier-IMAP ready. Copyright 1998-2004 Double Precision, Inc. See COPYING for distribution information.
|
||||||
|
From Buffer I/O : 4096
|
||||||
|
To Buffer I/O : 4096
|
||||||
|
From capability : QUOTA X-NETSCAPE NAMESPACE X-NON-HIERARCHICAL-RENAME ACL UNSELECT LITERAL+ NO_ATOMIC_RENAME UIDPLUS IMAP4 IMAP4REV1
|
||||||
|
To capability : QUOTA STARTTLS NAMESPACE CRAM-SHA1 IDLE AUTH=PLAIN THREAD=ORDEREDSUBJECT ACL SORT UIDPLUS CHILDREN ACL2=UNION CRAM-MD5 IMAP4REV1 THREAD=REFERENCES
|
||||||
|
From state Authenticated
|
||||||
|
To state Authenticated
|
||||||
|
Getting separators
|
||||||
|
Calling namespace capability
|
||||||
|
Calling namespace capability
|
||||||
|
Getting prefix namespace
|
||||||
|
Calling namespace capability
|
||||||
|
Getting prefix namespace
|
||||||
|
Calling namespace capability
|
||||||
|
From separator and prefix : [.][INBOX.]
|
||||||
|
To separator and prefix : [.][INBOX.]
|
||||||
|
From folders : [INBOX.yop.yap]
|
||||||
|
To folders : [INBOX] [INBOX.2005-INBOX] [INBOX.Draft] [INBOX.Drafts] [INBOX.Sent] [INBOX.Trash] [INBOX.ppp] [INBOX.qqq] [INBOX.yop] [INBOX.yop.yap] [INBOX.yop.yup] [INBOX.yopX] [INBOX.yopX.yap] [INBOX.yopX.yup] [INBOX.zz]
|
||||||
|
From subscribed folders : [INBOX.yop.yap]
|
||||||
|
From Folder [INBOX.yop.yap]
|
||||||
|
removed source prefix : [yop.yap]
|
||||||
|
inverted separators : [yop.yap]
|
||||||
|
added target prefix : [INBOX.yop.yap]
|
||||||
|
To Folder [INBOX.yop.yap]
|
||||||
|
LIST FROM : 1 messages [1]
|
||||||
|
LIST TO : 1 messages [7]
|
||||||
|
++++ From [INBOX.yop.yap] Parse 1 ++++
|
||||||
|
Time headers: 1 s
|
||||||
|
Time fir : 0 s
|
||||||
|
Head NUM:10
|
||||||
|
FH Date:Fri, 7 Mar 2003 17:00:01 +0100 (CET)
|
||||||
|
FH From:root@louloutte.dyndns.org (Cron Daemon)
|
||||||
|
FH Message-Id:<20030307160001.69D18FEEF@louloutte.dyndns.org>
|
||||||
|
FH Received:by louloutte.dyndns.org (Postfix, from userid 0) id 69D18FEEF; Fri, 7 Mar 2003 17:00:01 +0100 (CET)
|
||||||
|
FH Return-Path:<root@louloutte.dyndns.org>
|
||||||
|
FH Subject:Cron <root@louloutte> /usr/bin/poff libertynico
|
||||||
|
FH To:root@louloutte.dyndns.org
|
||||||
|
FH X-Cron-Env:<HOME=/root>
|
||||||
|
FH X-Cron-Env:<LOGNAME=root>
|
||||||
|
FH X-Cron-Env:<PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin>
|
||||||
|
FH X-Cron-Env:<SHELL=/bin/sh>
|
||||||
|
FH X-Spam-Level:*
|
||||||
|
FH X-Spam-Status:No, hits=1.6 required=5.0 tests=NO_MX_FOR_FROM,AWL version=2.20
|
||||||
|
F msg 1:ri4E1CAmNkh3rP3Mq15HSw:714
|
||||||
|
Time headers: 0 s
|
||||||
|
++++ To [INBOX.yop.yap] Parse 1 ++++
|
||||||
|
Time headers: 0 s
|
||||||
|
Time fir : 0 s
|
||||||
|
Head NUM:10
|
||||||
|
TH Date:Fri, 7 Mar 2003 17:00:01 +0100 (CET)
|
||||||
|
TH From:root@louloutte.dyndns.org (Cron Daemon)
|
||||||
|
TH Message-Id:<20030307160001.69D18FEEF@louloutte.dyndns.org>
|
||||||
|
TH Received:by louloutte.dyndns.org (Postfix, from userid 0) id 69D18FEEF; Fri, 7 Mar 2003 17:00:01 +0100 (CET)
|
||||||
|
TH Return-Path:<root@louloutte.dyndns.org>
|
||||||
|
TH Subject:Cron <root@louloutte> /usr/bin/poff libertynico
|
||||||
|
TH To:root@louloutte.dyndns.org
|
||||||
|
TH X-Cron-Env:<HOME=/root>
|
||||||
|
TH X-Cron-Env:<LOGNAME=root>
|
||||||
|
TH X-Cron-Env:<PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin>
|
||||||
|
TH X-Cron-Env:<SHELL=/bin/sh>
|
||||||
|
TH X-Spam-Level:*
|
||||||
|
TH X-Spam-Status:No, hits=1.6 required=5.0 tests=NO_MX_FOR_FROM,AWL version=2.20
|
||||||
|
T msg 7:ri4E1CAmNkh3rP3Mq15HSw:714
|
||||||
|
Time headers: 0 s
|
||||||
|
++++ Verifying [INBOX.yop.yap] -> [INBOX.yop.yap] ++++
|
||||||
|
+ key ri4E1CAmNkh3rP3Mq15HSw:714 #1
|
||||||
|
Message id [ri4E1CAmNkh3rP3Mq15HSw:714] found in t:INBOX.yop.yap
|
||||||
|
Setting flags
|
||||||
|
flags from : \Seen
|
||||||
|
flags to : \Seen
|
||||||
|
Looking dates
|
||||||
|
idate from : 22-Aug-2003 19:16:01 +0200
|
||||||
|
idate to : 21-May-2005 12:39:11 +0200
|
||||||
|
Message ri4E1CAmNkh3rP3Mq15HSw:714 SZ_GOOD f:1:714 t:7:714
|
||||||
|
Time : 0 s
|
||||||
|
++++ Statistics ++++
|
||||||
|
Time : 1 sec
|
||||||
|
Messages transfered : 0
|
||||||
|
Messages skipped : 1
|
||||||
|
Total bytes transfered : 0
|
||||||
|
Total bytes skipped : 714
|
||||||
|
Total bytes error : 0
|
||||||
|
Detected 0 errors
|
||||||
|
Please, rate imapsync at http://freshmeat.net/projects/imapsync/
|
|
@ -1,5 +1,5 @@
|
||||||
Project: imapsync
|
Project: imapsync
|
||||||
Version: 1.159
|
Version: 1.161
|
||||||
Release-Focus: Major bugfixes
|
Release-Focus: Major bugfixes
|
||||||
Hide: Y
|
Hide: Y
|
||||||
Home-Page-URL: http://www.linux-france.org/prj/imapsync/
|
Home-Page-URL: http://www.linux-france.org/prj/imapsync/
|
||||||
|
|
192
imapsync
192
imapsync
|
@ -6,7 +6,7 @@ imapsync - IMAP synchronization, copy or migration
|
||||||
tool. Synchronize mailboxes between two imap servers. Good
|
tool. Synchronize mailboxes between two imap servers. Good
|
||||||
at IMAP migration.
|
at IMAP migration.
|
||||||
|
|
||||||
$Revision: 1.161 $
|
$Revision: 1.163 $
|
||||||
|
|
||||||
=head1 INSTALL
|
=head1 INSTALL
|
||||||
|
|
||||||
|
@ -136,8 +136,19 @@ dangerous because of the 'ps auxwwwwe' command. So, saving
|
||||||
the password in a well protected file (600 or rw-------) is
|
the password in a well protected file (600 or rw-------) is
|
||||||
the best solution.
|
the best solution.
|
||||||
|
|
||||||
imasync is not protected against sniffers on the network so
|
imasync is not totally protected against sniffers on the
|
||||||
the passwords are in plain text.
|
network since passwords may be transfered in plain text in
|
||||||
|
case CRAM-MD5 is not supported by your imap servers. Use
|
||||||
|
--ssl1 and --ssl2 to enable encryption on host1 and host2.
|
||||||
|
|
||||||
|
You may authenticate as one user (typically an admin user),
|
||||||
|
but be authorized as someone else, which means you don't
|
||||||
|
need to know every user's personal password. Specify
|
||||||
|
--authuser1 "adminuser" to enable this on host1. In this
|
||||||
|
case, --authmech1 PLAIN will be used, but otherwise,
|
||||||
|
--authmech1 CRAM-MD5 is the default. Same behavior with the
|
||||||
|
--authuser2 option.
|
||||||
|
|
||||||
|
|
||||||
=head1 EXIT STATUS
|
=head1 EXIT STATUS
|
||||||
|
|
||||||
|
@ -325,7 +336,7 @@ Gilles LAMIRAL earn his living writing, installing,
|
||||||
configuring and teaching free open and gratis
|
configuring and teaching free open and gratis
|
||||||
softwares. Don't hesitate to pay him for that services.
|
softwares. Don't hesitate to pay him for that services.
|
||||||
|
|
||||||
$Id: imapsync,v 1.161 2006/03/20 00:09:41 gilles Exp $
|
$Id: imapsync,v 1.163 2006/03/24 04:18:58 gilles Exp $
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
|
||||||
|
@ -372,14 +383,14 @@ my(
|
||||||
$timestart, $timeend, $timediff,
|
$timestart, $timeend, $timediff,
|
||||||
$timesize, $timebefore,
|
$timesize, $timebefore,
|
||||||
$ssl1, $ssl2,
|
$ssl1, $ssl2,
|
||||||
$authusing1, $authusing2,
|
$authuser1, $authuser2,
|
||||||
$authmech1, $authmech2,
|
$authmech1, $authmech2,
|
||||||
);
|
);
|
||||||
|
|
||||||
use vars qw ($opt_G); # missing code for this will be option.
|
use vars qw ($opt_G); # missing code for this will be option.
|
||||||
|
|
||||||
|
|
||||||
$rcs = ' $Id: imapsync,v 1.161 2006/03/20 00:09:41 gilles Exp $ ';
|
$rcs = ' $Id: imapsync,v 1.163 2006/03/24 04:18:58 gilles Exp $ ';
|
||||||
$rcs =~ m/,v (\d+\.\d+)/;
|
$rcs =~ m/,v (\d+\.\d+)/;
|
||||||
$VERSION = ($1) ? $1 : "UNKNOWN";
|
$VERSION = ($1) ? $1 : "UNKNOWN";
|
||||||
|
|
||||||
|
@ -416,8 +427,8 @@ $error=0;
|
||||||
|
|
||||||
my $banner = join("",
|
my $banner = join("",
|
||||||
'$RCSfile: imapsync,v $ ',
|
'$RCSfile: imapsync,v $ ',
|
||||||
'$Revision: 1.161 $ ',
|
'$Revision: 1.163 $ ',
|
||||||
'$Date: 2006/03/20 00:09:41 $ ',
|
'$Date: 2006/03/24 04:18:58 $ ',
|
||||||
"\n",
|
"\n",
|
||||||
"Mail::IMAPClient version used here is ",
|
"Mail::IMAPClient version used here is ",
|
||||||
$VERSION_IMAPClient,"\n"
|
$VERSION_IMAPClient,"\n"
|
||||||
|
@ -459,10 +470,12 @@ if ($justconnect) {
|
||||||
my $to = ();
|
my $to = ();
|
||||||
|
|
||||||
$from = connect_imap($host1, $port1);
|
$from = connect_imap($host1, $port1);
|
||||||
print "From software : ", ($from->Report())[0];
|
|
||||||
|
|
||||||
|
print "From software : ", server_banner($from);
|
||||||
print "From capability : ", join(" ", $from->capability()), "\n";
|
print "From capability : ", join(" ", $from->capability()), "\n";
|
||||||
$to = connect_imap($host2, $port2);
|
$to = connect_imap($host2, $port2);
|
||||||
print "To software : ", ($to->Report())[0];
|
print "To software : ", server_banner($to);
|
||||||
print "To capability : ", join(" ", $to->capability()), "\n";
|
print "To capability : ", join(" ", $to->capability()), "\n";
|
||||||
$from->logout();
|
$from->logout();
|
||||||
$to->logout();
|
$to->logout();
|
||||||
|
@ -474,12 +487,15 @@ $user2 || missing_option("--user2");
|
||||||
|
|
||||||
if(defined($authmd5) and not($authmd5)) {
|
if(defined($authmd5) and not($authmd5)) {
|
||||||
$authmech1 ||= 'PLAIN';
|
$authmech1 ||= 'PLAIN';
|
||||||
$authmech2 ||= 'PLAIN';
|
$authmech2 ||= 'PLAIN';
|
||||||
}else{
|
}else{
|
||||||
$authmech1 ||= 'CRAM-MD5';
|
$authmech1 ||= $authuser1 ? 'PLAIN' : 'CRAM-MD5';
|
||||||
$authmech2 ||= 'CRAM-MD5';
|
$authmech2 ||= $authuser2 ? 'PLAIN' : 'CRAM-MD5';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$authuser1 ||= $user1;
|
||||||
|
$authuser2 ||= $user2;
|
||||||
|
|
||||||
print "will try to use $authmech1 authentication on host1\n";
|
print "will try to use $authmech1 authentication on host1\n";
|
||||||
print "will try to use $authmech2 authentication on host2\n";
|
print "will try to use $authmech2 authentication on host2\n";
|
||||||
|
|
||||||
|
@ -495,21 +511,29 @@ $fastio2 = (defined($fastio2)) ? $fastio2 : 1;
|
||||||
print "From imap server [$host1] port [$port1] user [$user1]\n";
|
print "From imap server [$host1] port [$port1] user [$user1]\n";
|
||||||
print "To imap server [$host2] port [$port2] user [$user2]\n";
|
print "To imap server [$host2] port [$port2] user [$user2]\n";
|
||||||
|
|
||||||
|
|
||||||
|
sub ask_for_password {
|
||||||
|
my ($user, $host) = @_;
|
||||||
|
print "What's the password for $user\@$host? ";
|
||||||
|
ReadMode 2;
|
||||||
|
my $password = <>;
|
||||||
|
chomp $password;
|
||||||
|
printf "\n";
|
||||||
|
ReadMode 0;
|
||||||
|
return $password;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
$password1 || $passfile1 || do {
|
$password1 || $passfile1 || do {
|
||||||
print "What's the password for $user1\@$host1? ";
|
ask_for_password($authuser1 || $user1, $host1);
|
||||||
ReadMode 2;
|
|
||||||
$password1 = <>; chop $password1;
|
|
||||||
printf "\n"; ReadMode 0;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
$password1 = (defined($passfile1)) ? firstline ($passfile1) : $password1;
|
$password1 = (defined($passfile1)) ? firstline ($passfile1) : $password1;
|
||||||
|
|
||||||
$password2 || $passfile2 || do {
|
$password2 || $passfile2 || do {
|
||||||
print "What's the password for $user2\@$host2? ";
|
ask_for_password($authuser2 || $user2, $host2);
|
||||||
ReadMode 2;
|
|
||||||
$password2 = <>; chop $password2;
|
|
||||||
printf "\n"; ReadMode 0;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
$password2 = (defined($passfile2)) ? firstline ($passfile2) : $password2;
|
$password2 = (defined($passfile2)) ? firstline ($passfile2) : $password2;
|
||||||
|
|
||||||
my $from = ();
|
my $from = ();
|
||||||
|
@ -518,29 +542,26 @@ my $to = ();
|
||||||
$timestart = time();
|
$timestart = time();
|
||||||
$timebefore = $timestart;
|
$timebefore = $timestart;
|
||||||
|
|
||||||
$fastio1 = 1;
|
|
||||||
$fastio2 = 1;
|
|
||||||
|
|
||||||
$debugimap and print "From connection\n";
|
$debugimap and print "From connection\n";
|
||||||
$from = login_imap($host1, $port1, $user1, $password1,
|
$from = login_imap($host1, $port1, $user1, $password1,
|
||||||
$debugimap, $timeout, $fastio1, $ssl1, $authmech1);
|
$debugimap, $timeout, $fastio1, $ssl1,
|
||||||
|
$authmech1, $authuser1);
|
||||||
|
|
||||||
$debugimap and print "To connection\n";
|
$debugimap and print "To connection\n";
|
||||||
$to = login_imap($host2, $port2, $user2, $password2,
|
$to = login_imap($host2, $port2, $user2, $password2,
|
||||||
$debugimap, $timeout, $fastio2, $ssl2, $authmech2);
|
$debugimap, $timeout, $fastio2, $ssl2,
|
||||||
|
$authmech2, $authuser2);
|
||||||
|
|
||||||
# No history
|
# history
|
||||||
$from->Clear(2);
|
|
||||||
$to->Clear(2);
|
|
||||||
|
|
||||||
$debug and print "From Buffer I/O : ", $from->Buffer(), "\n";
|
$debug and print "From Buffer I/O : ", $from->Buffer(), "\n";
|
||||||
$debug and print "To Buffer I/O : ", $to->Buffer(), "\n";
|
$debug and print "To Buffer I/O : ", $to->Buffer(), "\n";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
sub login_imap {
|
sub login_imap {
|
||||||
my($host, $port, $user, $password,
|
my($host, $port, $user, $password,
|
||||||
$debugimap, $timeout, $fastio, $ssl, $authmech) = @_;
|
$debugimap, $timeout, $fastio,
|
||||||
|
$ssl, $authmech, $authuser) = @_;
|
||||||
my ($imap);
|
my ($imap);
|
||||||
if ($ssl) {
|
if ($ssl) {
|
||||||
my $socssl = new IO::Socket::SSL("$host:$port");
|
my $socssl = new IO::Socket::SSL("$host:$port");
|
||||||
|
@ -554,6 +575,7 @@ sub login_imap {
|
||||||
} else {
|
} else {
|
||||||
$imap = Mail::IMAPClient->new();
|
$imap = Mail::IMAPClient->new();
|
||||||
}
|
}
|
||||||
|
$imap->Clear(20);
|
||||||
$imap->Server($host);
|
$imap->Server($host);
|
||||||
$imap->Port($port);
|
$imap->Port($port);
|
||||||
$imap->Fast_io($fastio);
|
$imap->Fast_io($fastio);
|
||||||
|
@ -561,27 +583,31 @@ sub login_imap {
|
||||||
$imap->Uid(1);
|
$imap->Uid(1);
|
||||||
$imap->Peek(1);
|
$imap->Peek(1);
|
||||||
$imap->Debug($debugimap);
|
$imap->Debug($debugimap);
|
||||||
|
$timeout and $imap->Timeout($timeout);
|
||||||
|
|
||||||
if ($ssl) {
|
if ($ssl) {
|
||||||
$imap->State(Mail::IMAPClient::Connected);
|
$imap->State(Mail::IMAPClient::Connected);
|
||||||
} else {
|
} else {
|
||||||
$imap->connect()
|
$imap->connect()
|
||||||
or die "Can not open imap connection on [$host] with user [$user] : $@\n";
|
or die "Can not open imap connection on [$host] with user [$user] : $@\n";
|
||||||
}
|
}
|
||||||
$timeout and $imap->Timeout($timeout);
|
print "Banner : ", server_banner($imap);
|
||||||
|
|
||||||
if ($authmech eq "LOGIN") {
|
if ($authmech eq "LOGIN") {
|
||||||
# Default mode for Mail::IMAPClient, so don't do anything.
|
# Default mode for Mail::IMAPClient, so don't do anything.
|
||||||
} elsif ($imap->has_capability("AUTH=$authmech")
|
} elsif ($imap->has_capability("AUTH=$authmech")
|
||||||
or $imap->has_capability($authmech)) {
|
or $imap->has_capability($authmech)
|
||||||
|
) {
|
||||||
$imap->Authmechanism($authmech);
|
$imap->Authmechanism($authmech);
|
||||||
$imap->Authcallback(\&plainauth) if $authmech eq "PLAIN";
|
$imap->Authcallback(\&plainauth) if $authmech eq "PLAIN";
|
||||||
} else {
|
} else {
|
||||||
printf("%s: no support for AUTHENTICATE %s, using LOGIN\n",
|
printf("%s: no support for AUTHENTICATE %s, using LOGIN\n",
|
||||||
$imap->Server, $authmech);
|
$imap->Server, $authmech);
|
||||||
}
|
}
|
||||||
|
|
||||||
$imap->User($user);
|
$imap->User($user);
|
||||||
|
$imap->Authuser($authuser);
|
||||||
$imap->Password($password);
|
$imap->Password($password);
|
||||||
#md5auth($imap);
|
|
||||||
$imap->login() or die "Error login : [$host] with user [$user] : $@";
|
$imap->login() or die "Error login : [$host] with user [$user] : $@";
|
||||||
return($imap);
|
return($imap);
|
||||||
}
|
}
|
||||||
|
@ -591,20 +617,29 @@ sub plainauth() {
|
||||||
my $imap = shift;
|
my $imap = shift;
|
||||||
|
|
||||||
my $string = sprintf("%s\x00%s\x00%s", $imap->User,
|
my $string = sprintf("%s\x00%s\x00%s", $imap->User,
|
||||||
$imap->User, $imap->Password);
|
$imap->Authuser, $imap->Password);
|
||||||
return encode_base64("$string");
|
return encode_base64("$string");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
sub server_banner {
|
||||||
|
my $imap = shift;
|
||||||
|
for my $line ($imap->Results()) {
|
||||||
|
#print "LR: $line";
|
||||||
|
return $line if $line =~ /^\* (OK|NO|BAD)/;
|
||||||
|
}
|
||||||
|
return "No banner\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
print "From software : ", ($from->Report())[0];
|
|
||||||
print "To software : ", ($to->Report())[0];
|
|
||||||
|
|
||||||
print "From capability : ", join(" ", $from->capability()), "\n";
|
print "From capability : ", join(" ", $from->capability()), "\n";
|
||||||
print "To capability : ", join(" ", $to->capability()), "\n";
|
print "To capability : ", join(" ", $to->capability()), "\n";
|
||||||
|
|
||||||
die unless $from->IsAuthenticated();
|
die unless $from->IsAuthenticated();
|
||||||
|
print "From state Authenticated\n";
|
||||||
die unless $to->IsAuthenticated();
|
die unless $to->IsAuthenticated();
|
||||||
|
print "To state Authenticated\n";
|
||||||
|
|
||||||
my (@f_folders, @t_folders, %fs_folders);
|
my (@f_folders, @t_folders, %fs_folders);
|
||||||
|
|
||||||
|
@ -612,8 +647,6 @@ my (@f_folders, @t_folders, %fs_folders);
|
||||||
map { $fs_folders{$_}=1 } $from->subscribed();
|
map { $fs_folders{$_}=1 } $from->subscribed();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (scalar(@folder)) {
|
if (scalar(@folder)) {
|
||||||
# folders given by option --folder
|
# folders given by option --folder
|
||||||
@f_folders = @folder;
|
@f_folders = @folder;
|
||||||
|
@ -911,16 +944,13 @@ FOLDER: foreach my $f_fold (@f_folders) {
|
||||||
my $f_heads = $from->parse_headers($from->Range([@f_msgs]),@useheader)
|
my $f_heads = $from->parse_headers($from->Range([@f_msgs]),@useheader)
|
||||||
if (@f_msgs) ;
|
if (@f_msgs) ;
|
||||||
$debug and print "Time headers: ", timenext(), " s\n";
|
$debug and print "Time headers: ", timenext(), " s\n";
|
||||||
my $f_size = $from->fetch_hash("RFC822.SIZE") if (@f_msgs);
|
my $f_fir = $from->fetch_hash("FLAGS",
|
||||||
$debug and print "Time sizes : ", timenext(), " s\n";
|
"INTERNALDATE",
|
||||||
#my $f_flags = $from->flags(@f_msgs) ;
|
"RFC822.SIZE") if (@f_msgs);
|
||||||
#print "Time flags : ", timenext(), " s\n";
|
$debug and print "Time fir : ", timenext(), " s\n";
|
||||||
use Data::Dumper;
|
|
||||||
#print Data::Dumper->Dump([$f_heads]);
|
|
||||||
#print Data::Dumper->Dump([$f_flags]);
|
|
||||||
|
|
||||||
foreach my $m (@f_msgs) {
|
foreach my $m (@f_msgs) {
|
||||||
parse_header_msg1($from, $m, $f_heads, $f_size, "F", \%f_hash);
|
parse_header_msg1($from, $m, $f_heads, $f_fir, "F", \%f_hash);
|
||||||
}
|
}
|
||||||
$debug and print "Time headers: ", timenext(), " s\n";
|
$debug and print "Time headers: ", timenext(), " s\n";
|
||||||
|
|
||||||
|
@ -928,17 +958,15 @@ FOLDER: foreach my $f_fold (@f_folders) {
|
||||||
my $t_heads = $to->parse_headers($to->Range([@t_msgs]),@useheader)
|
my $t_heads = $to->parse_headers($to->Range([@t_msgs]),@useheader)
|
||||||
if (@t_msgs);
|
if (@t_msgs);
|
||||||
$debug and print "Time headers: ", timenext(), " s\n";
|
$debug and print "Time headers: ", timenext(), " s\n";
|
||||||
my $t_size = $to->fetch_hash("RFC822.SIZE") if (@t_msgs);
|
my $t_fir = $to->fetch_hash("FLAGS",
|
||||||
$debug and print "Time sizes : ", timenext(), " s\n";
|
"INTERNALDATE",
|
||||||
#my $t_flags = $to->flags(@t_msgs) ;
|
"RFC822.SIZE") if (@t_msgs);
|
||||||
#print "Time flags : ", timenext(), " s\n";
|
$debug and print "Time fir : ", timenext(), " s\n";
|
||||||
|
|
||||||
foreach my $m (@t_msgs) {
|
foreach my $m (@t_msgs) {
|
||||||
parse_header_msg1($to, $m, $t_heads, $t_size, "T", \%t_hash);
|
parse_header_msg1($to, $m, $t_heads, $t_fir, "T", \%t_hash);
|
||||||
}
|
}
|
||||||
$debug and print "Time headers: ", timenext(), " s\n";
|
$debug and print "Time headers: ", timenext(), " s\n";
|
||||||
#exit;
|
|
||||||
|
|
||||||
print "++++ Verifying [$f_fold] -> [$t_fold] ++++\n";
|
print "++++ Verifying [$f_fold] -> [$t_fold] ++++\n";
|
||||||
# messages in "from" that are not good in "to"
|
# messages in "from" that are not good in "to"
|
||||||
|
|
||||||
|
@ -950,7 +978,8 @@ FOLDER: foreach my $f_fold (@f_folders) {
|
||||||
MESS: foreach my $m_id (@f_hash_keys_sorted_by_uid) {
|
MESS: foreach my $m_id (@f_hash_keys_sorted_by_uid) {
|
||||||
my $f_size = $f_hash{$m_id}{'s'};
|
my $f_size = $f_hash{$m_id}{'s'};
|
||||||
my $f_msg = $f_hash{$m_id}{'m'};
|
my $f_msg = $f_hash{$m_id}{'m'};
|
||||||
# print ".";
|
my $f_idate = $f_hash{$m_id}{'D'};
|
||||||
|
|
||||||
if (defined $maxsize and $f_size > $maxsize) {
|
if (defined $maxsize and $f_size > $maxsize) {
|
||||||
print "+ Skipping msg #$f_msg:$f_size in folder $f_fold (exceeds maxsize limit $maxsize bytes)\n";
|
print "+ Skipping msg #$f_msg:$f_size in folder $f_fold (exceeds maxsize limit $maxsize bytes)\n";
|
||||||
$mess_size_total_skipped += $f_msg;
|
$mess_size_total_skipped += $f_msg;
|
||||||
|
@ -971,24 +1000,12 @@ FOLDER: foreach my $f_fold (@f_folders) {
|
||||||
"F message content ended on previous line\n";
|
"F message content ended on previous line\n";
|
||||||
my $d = "";
|
my $d = "";
|
||||||
if ($syncinternaldates) {
|
if ($syncinternaldates) {
|
||||||
$d = $from->internaldate($f_msg);
|
$d = $f_idate;
|
||||||
$d = "\"$d\"";
|
$d = "\"$d\"";
|
||||||
$debug and print "internal date from 1: [$d]\n";
|
$debug and print "internal date from 1: [$d]\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
my $flags_f_rv = $from->flags($f_msg);
|
my $flags_f = $f_hash{$m_id}{'F'} || "";
|
||||||
my @flags_f;
|
|
||||||
my $flags_f;
|
|
||||||
|
|
||||||
if (ref($flags_f_rv)) {
|
|
||||||
@flags_f = @{$flags_f_rv};
|
|
||||||
$flags_f = join(" ", @flags_f);
|
|
||||||
}else{
|
|
||||||
$flags_f = "";
|
|
||||||
}
|
|
||||||
|
|
||||||
#$flags_f = join(" ", @{$from->flags($f_msg)});
|
|
||||||
|
|
||||||
# RFC 2060 : This flag can not be altered by the client
|
# RFC 2060 : This flag can not be altered by the client
|
||||||
$flags_f =~ s@\\Recent@@g;
|
$flags_f =~ s@\\Recent@@g;
|
||||||
|
|
||||||
|
@ -1023,6 +1040,7 @@ FOLDER: foreach my $f_fold (@f_folders) {
|
||||||
my $t_size = $t_hash{$m_id}{'s'};
|
my $t_size = $t_hash{$m_id}{'s'};
|
||||||
my $t_msg = $t_hash{$m_id}{'m'};
|
my $t_msg = $t_hash{$m_id}{'m'};
|
||||||
|
|
||||||
|
|
||||||
$debug and print "Setting flags\n";
|
$debug and print "Setting flags\n";
|
||||||
my (@flags_f,@flags_t);
|
my (@flags_f,@flags_t);
|
||||||
my $flags_f_rv = $from->flags($f_msg);
|
my $flags_f_rv = $from->flags($f_msg);
|
||||||
|
@ -1043,11 +1061,14 @@ FOLDER: foreach my $f_fold (@f_folders) {
|
||||||
|
|
||||||
$debug and do {
|
$debug and do {
|
||||||
print "Looking dates\n";
|
print "Looking dates\n";
|
||||||
my $d_f = $from->internaldate($f_msg);
|
#my $d_f = $from->internaldate($f_msg);
|
||||||
my $d_t = $to->internaldate($t_msg);
|
#my $d_t = $to->internaldate($t_msg);
|
||||||
|
my $d_f = $f_hash{$m_id}{'D'};
|
||||||
|
my $d_t = $t_hash{$m_id}{'D'};
|
||||||
print
|
print
|
||||||
"idate from : $d_f\n",
|
"idate from : $d_f\n",
|
||||||
"idate to : $d_t\n";
|
"idate to : $d_t\n";
|
||||||
|
|
||||||
#unless ($d_f eq $d_t) {
|
#unless ($d_f eq $d_t) {
|
||||||
# print "!!! Dates differ !!!\n";
|
# print "!!! Dates differ !!!\n";
|
||||||
#}
|
#}
|
||||||
|
@ -1198,6 +1219,8 @@ sub get_options
|
||||||
"ssl2!" => \$ssl2,
|
"ssl2!" => \$ssl2,
|
||||||
"authmech1=s" => \$authmech1,
|
"authmech1=s" => \$authmech1,
|
||||||
"authmech2=s" => \$authmech2,
|
"authmech2=s" => \$authmech2,
|
||||||
|
"authuser1=s" => \$authuser1,
|
||||||
|
"authuser2=s" => \$authuser2,
|
||||||
);
|
);
|
||||||
|
|
||||||
$debug and print "get options: [$opt_ret]\n";
|
$debug and print "get options: [$opt_ret]\n";
|
||||||
|
@ -1216,7 +1239,7 @@ sub get_options
|
||||||
|
|
||||||
|
|
||||||
sub parse_header_msg1 {
|
sub parse_header_msg1 {
|
||||||
my ($imap, $m_uid, $s_heads, $s_size, $s, $s_hash) = @_;
|
my ($imap, $m_uid, $s_heads, $s_fir, $s, $s_hash) = @_;
|
||||||
|
|
||||||
my $head = $s_heads->{$m_uid};
|
my $head = $s_heads->{$m_uid};
|
||||||
my $headnum = scalar(keys(%$head));
|
my $headnum = scalar(keys(%$head));
|
||||||
|
@ -1244,8 +1267,9 @@ sub parse_header_msg1 {
|
||||||
# no header so taking everything
|
# no header so taking everything
|
||||||
$headstr = $imap->message_string($m_uid);
|
$headstr = $imap->message_string($m_uid);
|
||||||
}
|
}
|
||||||
my $size = $s_size->{$m_uid}->{"RFC822.SIZE"};
|
my $size = $s_fir->{$m_uid}->{"RFC822.SIZE"};
|
||||||
#return unless ($size);
|
my $flags = $s_fir->{$m_uid}->{"FLAGS"};
|
||||||
|
my $idate = $s_fir->{$m_uid}->{"INTERNALDATE"};
|
||||||
$size = length($headstr) unless ($size);
|
$size = length($headstr) unless ($size);
|
||||||
my $m_md5 = md5_base64($headstr);
|
my $m_md5 = md5_base64($headstr);
|
||||||
$debug and print "$s msg $m_uid:$m_md5:$size\n";
|
$debug and print "$s msg $m_uid:$m_md5:$size\n";
|
||||||
|
@ -1257,6 +1281,8 @@ sub parse_header_msg1 {
|
||||||
}
|
}
|
||||||
$s_hash->{"$key"}{'5'} = $m_md5;
|
$s_hash->{"$key"}{'5'} = $m_md5;
|
||||||
$s_hash->{"$key"}{'s'} = $size;
|
$s_hash->{"$key"}{'s'} = $size;
|
||||||
|
$s_hash->{"$key"}{'D'} = $idate;
|
||||||
|
$s_hash->{"$key"}{'F'} = $flags;
|
||||||
$s_hash->{"$key"}{'m'} = $m_uid;
|
$s_hash->{"$key"}{'m'} = $m_uid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1284,15 +1310,16 @@ Several options are mandatory.
|
||||||
--host1 <string> : "from" imap server. Mandatory.
|
--host1 <string> : "from" imap server. Mandatory.
|
||||||
--port1 <int> : port to connect on host1. Default is 143.
|
--port1 <int> : port to connect on host1. Default is 143.
|
||||||
--user1 <string> : user to login on host1. Mandatory.
|
--user1 <string> : user to login on host1. Mandatory.
|
||||||
|
--authuser1 <string> : user to auth with on host1 (admin user).
|
||||||
--password1 <string> : password for the user1. Dangerous, use --passfile1
|
--password1 <string> : password for the user1. Dangerous, use --passfile1
|
||||||
--passfile1 <string> : password file for the user1. Contains the password.
|
--passfile1 <string> : password file for the user1. Contains the password.
|
||||||
--host2 <string> : "destination" imap server. Mandatory.
|
--host2 <string> : "destination" imap server. Mandatory.
|
||||||
--port2 <int> : port to connect on host2. Default is 143.
|
--port2 <int> : port to connect on host2. Default is 143.
|
||||||
--user2 <string> : user to login on host2. Mandatory.
|
--user2 <string> : user to login on host2. Mandatory.
|
||||||
|
--authuser2 <string> : user to auth with on host2 (admin user).
|
||||||
--password2 <string> : password for the user2. Dangerous, use --passfile2
|
--password2 <string> : password for the user2. Dangerous, use --passfile2
|
||||||
--passfile2 <string> : password file for the user2. Contains the password.
|
--passfile2 <string> : password file for the user2. Contains the password.
|
||||||
--noauthmd5 : don't use MD5 authentification.
|
--noauthmd5 : don't use MD5 authentification.
|
||||||
--authmd5 : use MD5 authentification.
|
|
||||||
--authmech1 <string> : auth mechanism to use with host1:
|
--authmech1 <string> : auth mechanism to use with host1:
|
||||||
PLAIN, LOGIN, CRAM-MD5 etc.
|
PLAIN, LOGIN, CRAM-MD5 etc.
|
||||||
--authmech2 <string> : auth mechanism to use with host2. See --authmech1
|
--authmech2 <string> : auth mechanism to use with host2. See --authmech1
|
||||||
|
@ -1401,3 +1428,14 @@ $rcs
|
||||||
See http://www.gnu.org/copyleft/gpl.html
|
See http://www.gnu.org/copyleft/gpl.html
|
||||||
EOF
|
EOF
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
package Mail::IMAPClient;
|
||||||
|
|
||||||
|
|
||||||
|
sub Authuser {
|
||||||
|
my $self = shift;
|
||||||
|
|
||||||
|
if (@_) { $self->{AUTHUSER} = shift }
|
||||||
|
return $self->{AUTHUSER};
|
||||||
|
}
|
||||||
|
|
162
tests.sh
162
tests.sh
|
@ -1,6 +1,6 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
# $Id: tests.sh,v 1.47 2006/02/28 03:53:34 gilles Exp gilles $
|
# $Id: tests.sh,v 1.50 2006/03/25 22:22:53 gilles Exp $
|
||||||
|
|
||||||
#### Shell pragmas
|
#### Shell pragmas
|
||||||
|
|
||||||
|
@ -71,13 +71,11 @@ loulplume() {
|
||||||
if test X`hostname` = X"plume"; then
|
if test X`hostname` = X"plume"; then
|
||||||
echo3 Here is plume
|
echo3 Here is plume
|
||||||
sendtestmessage
|
sendtestmessage
|
||||||
#sleep 10
|
|
||||||
./imapsync \
|
./imapsync \
|
||||||
--host1 loul --user1 tata \
|
--host1 loul --user1 tata \
|
||||||
--passfile1 /var/tmp/secret.tata \
|
--passfile1 /var/tmp/secret.tata \
|
||||||
--host2 plume --user2 tata@est.belle \
|
--host2 plume --user2 tata@est.belle \
|
||||||
--passfile2 /var/tmp/secret.tata \
|
--passfile2 /var/tmp/secret.tata
|
||||||
--nosyncacls
|
|
||||||
else
|
else
|
||||||
:
|
:
|
||||||
fi
|
fi
|
||||||
|
@ -87,7 +85,6 @@ loulloul() {
|
||||||
if test X`hostname` = X"plume"; then
|
if test X`hostname` = X"plume"; then
|
||||||
echo3 Here is plume
|
echo3 Here is plume
|
||||||
sendtestmessage
|
sendtestmessage
|
||||||
#sleep 10
|
|
||||||
./imapsync \
|
./imapsync \
|
||||||
--host1 loul --user1 tata \
|
--host1 loul --user1 tata \
|
||||||
--passfile1 /var/tmp/secret.tata \
|
--passfile1 /var/tmp/secret.tata \
|
||||||
|
@ -107,8 +104,7 @@ plumeloul() {
|
||||||
--host1 plume --user1 tata@est.belle \
|
--host1 plume --user1 tata@est.belle \
|
||||||
--passfile1 /var/tmp/secret.tata \
|
--passfile1 /var/tmp/secret.tata \
|
||||||
--host2 loul --user2 tata \
|
--host2 loul --user2 tata \
|
||||||
--passfile2 /var/tmp/secret.tata \
|
--passfile2 /var/tmp/secret.tata
|
||||||
--nosyncacls
|
|
||||||
else
|
else
|
||||||
:
|
:
|
||||||
fi
|
fi
|
||||||
|
@ -122,8 +118,7 @@ lp_folder() {
|
||||||
--passfile2 /var/tmp/secret.tata \
|
--passfile2 /var/tmp/secret.tata \
|
||||||
--folder INBOX.yop --folder INBOX.Trash \
|
--folder INBOX.yop --folder INBOX.Trash \
|
||||||
--host1 loul --user1 tata \
|
--host1 loul --user1 tata \
|
||||||
--passfile1 /var/tmp/secret.tata \
|
--passfile1 /var/tmp/secret.tata
|
||||||
--nosyncacls
|
|
||||||
else
|
else
|
||||||
:
|
:
|
||||||
fi
|
fi
|
||||||
|
@ -154,8 +149,7 @@ lp_justfolders() {
|
||||||
--folder INBOX.yop --folder INBOX.Trash \
|
--folder INBOX.yop --folder INBOX.Trash \
|
||||||
--host1 loul --user1 tata \
|
--host1 loul --user1 tata \
|
||||||
--passfile1 /var/tmp/secret.tata \
|
--passfile1 /var/tmp/secret.tata \
|
||||||
--justfolders \
|
--justfolders
|
||||||
--nosyncacls
|
|
||||||
else
|
else
|
||||||
:
|
:
|
||||||
fi
|
fi
|
||||||
|
@ -170,8 +164,7 @@ pl_folder_qqq() {
|
||||||
--passfile1 /var/tmp/secret.tata \
|
--passfile1 /var/tmp/secret.tata \
|
||||||
--folder INBOX.qqq \
|
--folder INBOX.qqq \
|
||||||
--host2 loul --user2 tata \
|
--host2 loul --user2 tata \
|
||||||
--passfile2 /var/tmp/secret.tata \
|
--passfile2 /var/tmp/secret.tata
|
||||||
--nosyncacls
|
|
||||||
else
|
else
|
||||||
:
|
:
|
||||||
fi
|
fi
|
||||||
|
@ -186,7 +179,6 @@ pl_prefix12() {
|
||||||
--folder INBOX.qqq \
|
--folder INBOX.qqq \
|
||||||
--host2 loul --user2 tata \
|
--host2 loul --user2 tata \
|
||||||
--passfile2 /var/tmp/secret.tata \
|
--passfile2 /var/tmp/secret.tata \
|
||||||
--nosyncacls \
|
|
||||||
--prefix1 INBOX.\
|
--prefix1 INBOX.\
|
||||||
--prefix2 INBOX. \
|
--prefix2 INBOX. \
|
||||||
else
|
else
|
||||||
|
@ -223,8 +215,7 @@ pl_folder() {
|
||||||
--passfile1 /var/tmp/secret.tata \
|
--passfile1 /var/tmp/secret.tata \
|
||||||
--folder INBOX.yop \
|
--folder INBOX.yop \
|
||||||
--host2 loul --user2 tata \
|
--host2 loul --user2 tata \
|
||||||
--passfile2 /var/tmp/secret.tata \
|
--passfile2 /var/tmp/secret.tata
|
||||||
--nosyncacls
|
|
||||||
else
|
else
|
||||||
:
|
:
|
||||||
fi
|
fi
|
||||||
|
@ -295,13 +286,12 @@ lp_authmd5()
|
||||||
{
|
{
|
||||||
if test X`hostname` = X"plume"; then
|
if test X`hostname` = X"plume"; then
|
||||||
echo3 Here is plume
|
echo3 Here is plume
|
||||||
perl -I ~gilles/build/Mail-IMAPClient-2.2.8/blib/lib/ \
|
|
||||||
./imapsync \
|
./imapsync \
|
||||||
--host2 plume --user2 tata@est.belle \
|
--host2 plume --user2 tata@est.belle \
|
||||||
--passfile2 /var/tmp/secret.tata \
|
--passfile2 /var/tmp/secret.tata \
|
||||||
--host1 loul --user1 tata \
|
--host1 loul --user1 tata \
|
||||||
--passfile1 /var/tmp/secret.tata \
|
--passfile1 /var/tmp/secret.tata \
|
||||||
--justconnect
|
--justfoldersizes
|
||||||
else
|
else
|
||||||
:
|
:
|
||||||
fi
|
fi
|
||||||
|
@ -311,13 +301,12 @@ lp_noauthmd5()
|
||||||
{
|
{
|
||||||
if test X`hostname` = X"plume"; then
|
if test X`hostname` = X"plume"; then
|
||||||
echo3 Here is plume
|
echo3 Here is plume
|
||||||
perl -I ~gilles/build/Mail-IMAPClient-2.2.8/blib/lib/ \
|
|
||||||
./imapsync \
|
./imapsync \
|
||||||
--host2 plume --user2 tata@est.belle \
|
--host2 plume --user2 tata@est.belle \
|
||||||
--passfile2 /var/tmp/secret.tata \
|
--passfile2 /var/tmp/secret.tata \
|
||||||
--host1 loul --user1 tata \
|
--host1 loul --user1 tata \
|
||||||
--passfile1 /var/tmp/secret.tata \
|
--passfile1 /var/tmp/secret.tata \
|
||||||
--justconnect --noauthmd5
|
--justfoldersizes --noauthmd5
|
||||||
else
|
else
|
||||||
:
|
:
|
||||||
fi
|
fi
|
||||||
|
@ -456,7 +445,7 @@ bad_login()
|
||||||
bad_host()
|
bad_host()
|
||||||
{
|
{
|
||||||
! ./imapsync \
|
! ./imapsync \
|
||||||
--host1 localhost --user1 toto@est.belle \
|
--host1 badhost --user1 toto@est.belle \
|
||||||
--passfile1 /var/tmp/secret1 \
|
--passfile1 /var/tmp/secret1 \
|
||||||
--host2 badhost --user2 titi@est.belle \
|
--host2 badhost --user2 titi@est.belle \
|
||||||
--passfile2 /var/tmp/secret2
|
--passfile2 /var/tmp/secret2
|
||||||
|
@ -473,25 +462,7 @@ foldersizes()
|
||||||
--passfile2 /var/tmp/secret.tata \
|
--passfile2 /var/tmp/secret.tata \
|
||||||
--host1 loul --user1 tata \
|
--host1 loul --user1 tata \
|
||||||
--passfile1 /var/tmp/secret.tata \
|
--passfile1 /var/tmp/secret.tata \
|
||||||
--justconnect --foldersizes
|
--justfoldersizes
|
||||||
else
|
|
||||||
:
|
|
||||||
fi
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
foldersizes2()
|
|
||||||
{
|
|
||||||
if test X`hostname` = X"plume"; then
|
|
||||||
echo3 Here is plume
|
|
||||||
perl -I ~gilles/build/Mail-IMAPClient-2.2.8/blib/lib/ \
|
|
||||||
./imapsync \
|
|
||||||
--host2 plume --user2 tata@est.belle \
|
|
||||||
--passfile2 /var/tmp/secret.tata \
|
|
||||||
--host1 loul --user1 tata \
|
|
||||||
--passfile1 /var/tmp/secret.tata \
|
|
||||||
--justconnect --foldersizes
|
|
||||||
else
|
else
|
||||||
:
|
:
|
||||||
fi
|
fi
|
||||||
|
@ -524,8 +495,8 @@ big_transfert_sizes_only()
|
||||||
--passfile1 /var/tmp/secret \
|
--passfile1 /var/tmp/secret \
|
||||||
--host2 plume --user2 tete@est.belle \
|
--host2 plume --user2 tete@est.belle \
|
||||||
--passfile2 /var/tmp/secret.tete \
|
--passfile2 /var/tmp/secret.tete \
|
||||||
--subscribed --foldersizes --noauthmd5 \
|
--subscribed --noauthmd5 \
|
||||||
--justconnect --fast || \
|
--justfoldersizes || \
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
date2=`date`
|
date2=`date`
|
||||||
|
@ -573,7 +544,6 @@ essnet_mail2_mail()
|
||||||
--user2 gilles@softwareuno.com \
|
--user2 gilles@softwareuno.com \
|
||||||
--passfile2 /var/tmp/secret.prw \
|
--passfile2 /var/tmp/secret.prw \
|
||||||
--noauthmd5 --sep1 / --foldersizes \
|
--noauthmd5 --sep1 / --foldersizes \
|
||||||
--nosyncacls \
|
|
||||||
--prefix2 "INBOX/" --regextrans2 's¤INBOX/INBOX¤INBOX¤'
|
--prefix2 "INBOX/" --regextrans2 's¤INBOX/INBOX¤INBOX¤'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -590,7 +560,7 @@ for user1 in test1 test2 test3; do
|
||||||
--passfile2 /var/tmp/secret.prw \
|
--passfile2 /var/tmp/secret.prw \
|
||||||
--noauthmd5 --sep1 / --foldersizes \
|
--noauthmd5 --sep1 / --foldersizes \
|
||||||
--prefix2 "INBOX/" --regextrans2 's¤INBOX/INBOX¤INBOX¤' \
|
--prefix2 "INBOX/" --regextrans2 's¤INBOX/INBOX¤INBOX¤' \
|
||||||
--nosyncacls --debug \
|
--debug \
|
||||||
|| true
|
|| true
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
@ -604,7 +574,6 @@ essnet_plume2()
|
||||||
--passfile1 /var/tmp/secret.prw \
|
--passfile1 /var/tmp/secret.prw \
|
||||||
--host2 plume --user2 tata@est.belle \
|
--host2 plume --user2 tata@est.belle \
|
||||||
--passfile2 /var/tmp/secret.tata \
|
--passfile2 /var/tmp/secret.tata \
|
||||||
--nosyncacls \
|
|
||||||
--noauthmd5 --sep1 / --foldersizes \
|
--noauthmd5 --sep1 / --foldersizes \
|
||||||
--prefix2 INBOX. --regextrans2 's¤INBOX.INBOX¤INBOX¤'
|
--prefix2 INBOX. --regextrans2 's¤INBOX.INBOX¤INBOX¤'
|
||||||
}
|
}
|
||||||
|
@ -697,6 +666,102 @@ regexmess()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
flags()
|
||||||
|
{
|
||||||
|
if test X`hostname` = X"plume"; then
|
||||||
|
echo3 Here is plume
|
||||||
|
|
||||||
|
./imapsync \
|
||||||
|
--host2 plume --user2 tata@est.belle \
|
||||||
|
--passfile2 /var/tmp/secret.tata \
|
||||||
|
--host1 loul --user1 tata \
|
||||||
|
--passfile1 /var/tmp/secret.tata \
|
||||||
|
--folder INBOX.yop.yap \
|
||||||
|
--dry --debug
|
||||||
|
|
||||||
|
echo 'rm /home/vmail/tata/.yop.yap/cur/*'
|
||||||
|
else
|
||||||
|
:
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
lp_ssl() {
|
||||||
|
if test X`hostname` = X"plume"; then
|
||||||
|
echo3 Here is plume
|
||||||
|
./imapsync \
|
||||||
|
--host2 plume --user2 tata@est.belle \
|
||||||
|
--passfile2 /var/tmp/secret.tata \
|
||||||
|
--host1 loul --user1 tata \
|
||||||
|
--passfile1 /var/tmp/secret.tata \
|
||||||
|
--ssl1 --ssl2
|
||||||
|
else
|
||||||
|
:
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
lp_authmech_PLAIN() {
|
||||||
|
if test X`hostname` = X"plume"; then
|
||||||
|
echo3 Here is plume
|
||||||
|
./imapsync \
|
||||||
|
--host2 plume --user2 tata@est.belle \
|
||||||
|
--passfile2 /var/tmp/secret.tata \
|
||||||
|
--host1 loul --user1 tata \
|
||||||
|
--passfile1 /var/tmp/secret.tata \
|
||||||
|
--justfoldersizes --nofoldersizes \
|
||||||
|
--authmech1 PLAIN --authmech2 PLAIN
|
||||||
|
else
|
||||||
|
:
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
lp_authuser() {
|
||||||
|
if test X`hostname` = X"plume"; then
|
||||||
|
echo3 Here is plume
|
||||||
|
./imapsync \
|
||||||
|
--host2 plume --user2 tata@est.belle \
|
||||||
|
--passfile2 /var/tmp/secret.tata \
|
||||||
|
--host1 loul --user1 tata \
|
||||||
|
--passfile1 /var/tmp/secret.tata \
|
||||||
|
--justfoldersizes --nofoldersizes \
|
||||||
|
--authuser2 tata@est.belle
|
||||||
|
else
|
||||||
|
:
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
lp_authmech_LOGIN() {
|
||||||
|
if test X`hostname` = X"plume"; then
|
||||||
|
echo3 Here is plume
|
||||||
|
./imapsync \
|
||||||
|
--host2 plume --user2 tata@est.belle \
|
||||||
|
--passfile2 /var/tmp/secret.tata \
|
||||||
|
--host1 loul --user1 tata \
|
||||||
|
--passfile1 /var/tmp/secret.tata \
|
||||||
|
--justfoldersizes --nofoldersizes \
|
||||||
|
--authmech1 LOGIN --authmech2 LOGIN
|
||||||
|
else
|
||||||
|
:
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
lp_authmech_CRAMMD5() {
|
||||||
|
if test X`hostname` = X"plume"; then
|
||||||
|
echo3 Here is plume
|
||||||
|
./imapsync \
|
||||||
|
--host2 plume --user2 tata@est.belle \
|
||||||
|
--passfile2 /var/tmp/secret.tata \
|
||||||
|
--host1 loul --user1 tata \
|
||||||
|
--passfile1 /var/tmp/secret.tata \
|
||||||
|
--justfoldersizes --nofoldersizes \
|
||||||
|
--authmech1 CRAM-MD5 --authmech2 CRAM-MD5
|
||||||
|
else
|
||||||
|
:
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# mandatory tests
|
# mandatory tests
|
||||||
|
|
||||||
run_tests perl_syntax
|
run_tests perl_syntax
|
||||||
|
@ -730,10 +795,15 @@ test $# -eq 0 && run_tests \
|
||||||
lp_skipsize \
|
lp_skipsize \
|
||||||
lp_skipheader \
|
lp_skipheader \
|
||||||
lp_regextrans2 \
|
lp_regextrans2 \
|
||||||
foldersizes2 \
|
|
||||||
foldersizes \
|
foldersizes \
|
||||||
regexmess \
|
regexmess \
|
||||||
useheader \
|
useheader \
|
||||||
|
lp_ssl \
|
||||||
|
lp_authmech_LOGIN \
|
||||||
|
lp_authmech_CRAMMD5 \
|
||||||
|
lp_authmech_PLAIN \
|
||||||
|
lp_authuser
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue