diff options
Diffstat (limited to 'maildir')
| -rw-r--r-- | maildir/.gitignore | 1 | ||||
| -rw-r--r-- | maildir/Makefile.am | 8 | ||||
| -rw-r--r-- | maildir/maildirkeywords2.c | 14 | ||||
| -rw-r--r-- | maildir/maildirkw.C (renamed from maildir/maildirkw.c) | 20 | ||||
| -rw-r--r-- | maildir/maildirkwtest2.c | 25 | ||||
| -rw-r--r-- | maildir/testsuite | 30 | ||||
| -rw-r--r-- | maildir/testsuite.txt | 28 | 
7 files changed, 118 insertions, 8 deletions
| diff --git a/maildir/.gitignore b/maildir/.gitignore index 8b7d08e..0d863fa 100644 --- a/maildir/.gitignore +++ b/maildir/.gitignore @@ -21,6 +21,7 @@  /maildirkw.1  /maildirkw.html  /maildirkwtest +/maildirkwtest2  /maildirmake  /maildirmake.1  /maildirmake.1.in diff --git a/maildir/Makefile.am b/maildir/Makefile.am index bd4dadc..bcac417 100644 --- a/maildir/Makefile.am +++ b/maildir/Makefile.am @@ -53,6 +53,7 @@ libmaildir_la_SOURCES=autoresponse.c autoresponse.h \  	maildirwatch.c maildirwatch.h loginexec.c loginexec.h  noinst_PROGRAMS=deliverquota maildirmake testmaildirfilter maildirkwtest \ +	maildirkwtest2 \  	maildirkw maildiracl maildiraclttest testmaildirsearch maildirwatch  deliverquota_SOURCES=deliverquota.c @@ -80,12 +81,17 @@ maildirkwtest_LDADD=libmaildir.la  maildirkwtest_DEPENDENCIES=libmaildir.la  maildirkwtest_LDFLAGS=-static -maildirkw_SOURCES=maildirkw.c +maildirkw_SOURCES=maildirkw.C  maildirkw_LDADD=libmaildir.la ../liblock/liblock.la ../numlib/libnumlib.la  maildirkw_DEPENDENCIES=libmaildir.la ../liblock/liblock.la \  	../numlib/libnumlib.la  maildirkw_LDFLAGS=-static +maildirkwtest2_SOURCES=maildirkw.C maildirkwtest2.c +maildirkwtest2_LDADD=$(maildirkw_LDADD) +maildirkwtest2_DEPENDENCIES=$(maildirkw_DEPENDENCIES) +maildirkwtest2_LDFLAGS=-static +  maildirwatch_SOURCES=maildirwatchprog.c  maildirwatch_LDADD=libmaildir.la ../liblock/liblock.la ../numlib/libnumlib.la  maildirwatch_DEPENDENCIES=libmaildir.la ../liblock/liblock.la \ diff --git a/maildir/maildirkeywords2.c b/maildir/maildirkeywords2.c index 6923a7a..4bcbcff 100644 --- a/maildir/maildirkeywords2.c +++ b/maildir/maildirkeywords2.c @@ -148,7 +148,12 @@ static void doReadKeywords2(const char *maildir, const char *dir,  	struct keywordUpdateInfo *updateInfo;  	time_t t=time(NULL); -	time_t tn=t/300; +	time_t tn; +#ifdef MAILDIRKW_MOCKTIME +	MAILDIRKW_MOCKTIME(); +#endif + +	tn=t/300;  	rki->updateNeeded=0;  	rki->tryagain=0; @@ -307,6 +312,9 @@ int maildir_kwImport(FILE *fp, struct maildir_kwReadInfo *rki)  			*q++=0; +#ifdef MAILDIRKW_MOCKTIME2 +			MAILDIRKW_MOCKTIME2() +#endif  			i= (*rki->findMessageByFilename)(p, 0, &n,  							 rki->voidarg); @@ -458,7 +466,7 @@ static void scan_updates(const char *dir,  		if (in >= n)  		{  			/* libmail_kwgReadMaildir autocrerate */ -			 +  			struct keywordUpdateInfo *u=  				realloc(*updateInfo,  					sizeof(**updateInfo) * (in+1)); @@ -919,7 +927,7 @@ static int maildir_kwSaveCommon(const char *maildir,  	if (p)  		*p=0; -	 +  	maildir_tmpcreate_init(&createInfo);  	createInfo.maildir=maildir; diff --git a/maildir/maildirkw.c b/maildir/maildirkw.C index a0df76c..1c17959 100644 --- a/maildir/maildirkw.c +++ b/maildir/maildirkw.C @@ -1,5 +1,5 @@  /* -** Copyright 2003-2004 Double Precision, Inc. +** Copyright 2003-2022 Double Precision, Inc.  ** See COPYING for distribution information.  */ @@ -19,6 +19,9 @@  #include	"maildirkeywords.h"  #include	"maildirwatch.h" +#include	<string> +#include	<map> +  static void usage()  {  	printf("Usage: maildirkw [ options ] maildir [+/-]flag [+/-]flag...\n"); @@ -171,10 +174,10 @@ static int doit_locked(const char *maildir,  					rc= -1;  				unlink(tmpname);  			} +			free(tmpname); +			free(newname);  		} -		free(tmpname); -		free(newname);  		if (kwm_alloced)  			libmail_kwmDestroy(kwm_alloced);  		libmail_kwgDestroy(&g); @@ -196,10 +199,21 @@ static int list_locked(const char *maildir)  	if (rc)  		return rc; +	std::map<std::string, size_t> messages; +  	for (n=0; n<g.nMessages; n++)  	{  		struct libmail_kwGenericEntry *e=  			libmail_kwgFindByIndex(&g, n); + +		if (e) +			messages[e->filename]=n; +	} + +	for (auto b=messages.begin(), ee=messages.end(); b != ee; ++b) +	{ +		struct libmail_kwGenericEntry *e= +			libmail_kwgFindByIndex(&g, b->second);  		struct libmail_kwMessageEntry *k;  		if (!e) diff --git a/maildir/maildirkwtest2.c b/maildir/maildirkwtest2.c new file mode 100644 index 0000000..9a1dd7d --- /dev/null +++ b/maildir/maildirkwtest2.c @@ -0,0 +1,25 @@ +#define MAILDIRKW_MOCKTIME()				\ +	do {						\ +		const char *p=getenv("MOCKTIME");	\ +		if (p)					\ +			t=atoi(p);			\ +	} while (0) + +#define MAILDIRKW_MOCKTIME2()					\ +	do {							\ +		const char *eee=getenv("MOCKTIME");			\ +									\ +		if (eee && strcmp(eee, "1000") == 0 &&			\ +		    strcmp(p, "004") == 0)				\ +		{							\ +			printf("Faked stale filename\n");		\ +			fflush(stdout);					\ +			p=NULL;						\ +									\ +		}							\ +	} while(0);							\ +									\ +	i=NULL;								\ +		if (p) + +#include "maildirkeywords2.c" diff --git a/maildir/testsuite b/maildir/testsuite index 71b9fe2..7245f9c 100644 --- a/maildir/testsuite +++ b/maildir/testsuite @@ -40,7 +40,7 @@ echo ""  $VALGRIND ./maildirkw -L md | sort  rm -rf md testmd -maildirmake ./testmd +./maildirmake ./testmd  $VALGRIND ./maildiracl -set testmd INBOX.Folder user1 rw  $VALGRIND ./maildiracl -list testmd INBOX.Folder | sort @@ -49,3 +49,31 @@ $VALGRIND ./maildirmake -f Folder testmd  $VALGRIND ./maildiracl -list testmd INBOX.Folder | sort  ls testmd/courierimaphieracl  rm -rf testmd + +./maildirmake ./testmd +echo "Subject: message 1" >testmd/cur/001:2,S +echo "Subject: message 2" >testmd/cur/002:2,S +echo "Subject: message 3" >testmd/cur/003:2,S +$VALGRIND ./maildirkw testmd 003 gamma alpha beta +$VALGRIND ./maildirkw testmd 002 alpha gamma +$VALGRIND ./maildirkw testmd 001 beta gamma +$VALGRIND ./maildirkw testmd 004 000 +MOCKTIME=1000 $VALGRIND ./maildirkwtest2 -L testmd +echo "===" +MOCKTIME=1000 $VALGRIND ./maildirkwtest2 -L testmd +MOCKTIME=2000 $VALGRIND ./maildirkwtest2 -L testmd +MOCKTIME=1000 $VALGRIND ./maildirkwtest2 -L testmd +>testmd/courierimapkeywords/.tmp.4.foo +>testmd/courierimapkeywords/.tmp.1000.baz +MOCKTIME=1000 $VALGRIND ./maildirkwtest2 -L testmd +ls testmd/courierimapkeywords/.tmp.* 2>&1 +rm -f testmd/courierimapkeywords/:list +echo "epsilon" >testmd/courierimapkeywords/.1.002 +echo "zeta" >testmd/courierimapkeywords/.2.002 +MOCKTIME=1000 $VALGRIND ./maildirkwtest2 -L testmd +ls testmd/courierimapkeywords/.*002 +$VALGRIND ./maildirkw -a testmd 001 alpha beta +$VALGRIND ./maildirkw -L testmd +$VALGRIND ./maildirkw -r testmd 001 beta +$VALGRIND ./maildirkw -L testmd +rm -rf testmd diff --git a/maildir/testsuite.txt b/maildir/testsuite.txt index ed34d92..cc5eb74 100644 --- a/maildir/testsuite.txt +++ b/maildir/testsuite.txt @@ -38,3 +38,31 @@ administrators	aceilrstwx  owner	aceilrstwx  user1	rw  Folder.Subfolder +001 beta gamma +002 alpha gamma +003 alpha beta gamma +004 000 +=== +Faked stale filename +001 beta gamma +002 alpha gamma +003 alpha beta gamma +004 000 +001 beta gamma +002 alpha gamma +003 alpha beta gamma +004 000 +Faked stale filename +001 beta gamma +002 alpha gamma +003 alpha beta gamma +001 beta gamma +002 alpha gamma +003 alpha beta gamma +testmd/courierimapkeywords/.tmp.1000.baz +002 zeta +testmd/courierimapkeywords/.2.002 +001 alpha beta +002 zeta +001 alpha +002 zeta | 
