updated URL for project
fixed segmentation fault caused by double free() when an error occurred during the IMAP transmission. fixed bug where isync could not handle a 0 value UIDVALIDITY
This commit is contained in:
parent
7741548ff8
commit
f6c037c854
3
README
3
README
|
@ -5,7 +5,7 @@
|
|||
|_|___/\__, |_| |_|\___|
|
||||
|___/
|
||||
isync - IMAP4 to maildir mailbox synchronization program
|
||||
http://www.sigpipe.org:8080/isync/
|
||||
http://www.cs.hmc.edu/~me/isync/
|
||||
|
||||
Author: Michael Elkins <me@mutt.org>
|
||||
|
||||
|
@ -29,6 +29,7 @@ maintained, and all flags are synchronized.
|
|||
* Microsoft Exchange 2000 IMAP4rev1 server version 6.0.4417.0
|
||||
* Courier-IMAP 1.2.3
|
||||
* WU-IMAP 2000
|
||||
* Domino IMAP4 Server Release 5.0.8
|
||||
|
||||
* Platforms
|
||||
|
||||
|
|
4
isync.1
4
isync.1
|
@ -16,7 +16,7 @@
|
|||
\" along with this program; if not, write to the Free Software
|
||||
\" Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
..
|
||||
.TH isync 1 "2002 Apr 19"
|
||||
.TH isync 1 "2002 Jun 17"
|
||||
..
|
||||
.SH NAME
|
||||
isync - synchronize IMAP4 and maildir mailboxes
|
||||
|
@ -337,7 +337,7 @@ mutt(1), maildir(5)
|
|||
Up to date information on
|
||||
.B isync
|
||||
can be found at
|
||||
http://www.sigpipe.org:8080/isync/.
|
||||
http://www.cs.hmc.edu/~me/isync/.
|
||||
..
|
||||
.SH AUTHOR
|
||||
Written by Michael R. Elkins <me@mutt.org>.
|
||||
|
|
2
isync.h
2
isync.h
|
@ -91,6 +91,8 @@ struct mailbox
|
|||
unsigned int deleted; /* # of deleted messages */
|
||||
unsigned int uidvalidity;
|
||||
unsigned int maxuid; /* largest uid we know about */
|
||||
unsigned int uidseen : 1; /* flag indicating whether or not we saw a
|
||||
valid value for UIDVALIDITY */
|
||||
};
|
||||
|
||||
/* message dispositions */
|
||||
|
|
40
maildir.c
40
maildir.c
|
@ -80,15 +80,21 @@ parse_info (message_t * m, char *s)
|
|||
}
|
||||
}
|
||||
|
||||
static unsigned int
|
||||
read_uid (const char *path, const char *file)
|
||||
/*
|
||||
* There are three possible results of this function:
|
||||
* >1 uid was already seen
|
||||
* 0 uid was not yet seen
|
||||
* -1 unable to read uid because of some other error
|
||||
*/
|
||||
|
||||
static int
|
||||
read_uid (const char *path, const char *file, unsigned int *uid /* out */)
|
||||
{
|
||||
char full[_POSIX_PATH_MAX];
|
||||
int fd;
|
||||
int ret = 0;
|
||||
int ret = -1;
|
||||
int len;
|
||||
char buf[64];
|
||||
unsigned int uid = 0;
|
||||
char buf[64], *ptr;
|
||||
|
||||
snprintf (full, sizeof (full), "%s/%s", path, file);
|
||||
fd = open (full, O_RDONLY);
|
||||
|
@ -103,18 +109,20 @@ read_uid (const char *path, const char *file)
|
|||
}
|
||||
len = read (fd, buf, sizeof (buf) - 1);
|
||||
if (len == -1)
|
||||
{
|
||||
perror ("read");
|
||||
ret = -1;
|
||||
}
|
||||
else
|
||||
{
|
||||
buf[len] = 0;
|
||||
uid = atol (buf);
|
||||
errno = 0;
|
||||
*uid = strtoul (buf, &ptr, 10);
|
||||
if (errno)
|
||||
perror ("strtoul");
|
||||
else if (ptr && *ptr == '\n')
|
||||
ret = 1;
|
||||
/* else invalid value */
|
||||
}
|
||||
close (fd);
|
||||
return ret ? (unsigned int) ret : uid;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* NOTE: this is NOT NFS safe */
|
||||
|
@ -233,12 +241,14 @@ maildir_open (const char *path, int flags)
|
|||
goto err;
|
||||
|
||||
/* check for the uidvalidity value */
|
||||
m->uidvalidity = read_uid (m->path, "isyncuidvalidity");
|
||||
if (m->uidvalidity == (unsigned int) -1)
|
||||
goto err;
|
||||
i = read_uid (m->path, "isyncuidvalidity", &m->uidvalidity);
|
||||
if (i == -1)
|
||||
goto err;
|
||||
else if (i > 0)
|
||||
m->uidseen = 1;
|
||||
|
||||
/* load the current maxuid */
|
||||
if ((m->maxuid = read_uid (m->path, "isyncmaxuid")) == (unsigned int) -1)
|
||||
if (read_uid (m->path, "isyncmaxuid", &m->maxuid) == -1)
|
||||
goto err;
|
||||
|
||||
if (flags & OPEN_FAST)
|
||||
|
|
1
main.c
1
main.c
|
@ -312,6 +312,7 @@ main (int argc, char **argv)
|
|||
imap_close (imap); /* Just to be safe. Don't really know
|
||||
* what the problem was.
|
||||
*/
|
||||
imap = NULL; /* context no longer valid */
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user