commit 7726ce3e0f57f39f9040de4f85dc04f99b859f29
parent 5224b5bc9fa4dbfa465a5e884b1d5f774502c7ba
Author: Oswald Buddenhagen <ossi@users.sf.net>
Date: Sat, 11 Feb 2006 20:14:31 +0000
don't barf at directories with none of {tmp,new,cur}/ and turn them
into maildirs instead. see next commit.
Diffstat:
1 file changed, 11 insertions(+), 6 deletions(-)
diff --git a/src/drv_maildir.c b/src/drv_maildir.c
@@ -212,7 +212,7 @@ maildir_validate( const char *prefix, const char *box, int create )
DIR *dirp;
struct dirent *entry;
time_t now;
- int i, bl;
+ int i, j, bl;
struct stat st;
char buf[_POSIX_PATH_MAX];
@@ -225,6 +225,7 @@ maildir_validate( const char *prefix, const char *box, int create )
buf, strerror(errno), errno );
return DRV_STORE_BAD;
}
+ mkdirs:
for (i = 0; i < 3; i++) {
memcpy( buf + bl, subdirs[i], 4 );
if (mkdir( buf, 0700 )) {
@@ -243,12 +244,16 @@ maildir_validate( const char *prefix, const char *box, int create )
return DRV_BOX_BAD;
}
} else {
- for (i = 0; i < 3; i++) {
+ for (i = j = 0; i < 3; i++) {
memcpy( buf + bl, subdirs[i], 4 );
- if (stat( buf, &st ) || !S_ISDIR(st.st_mode)) {
- fprintf( stderr, "Maildir error: '%.*s' is no valid mailbox\n", bl, buf );
- return DRV_BOX_BAD;
- }
+ if (!stat( buf, &st ) && S_ISDIR(st.st_mode))
+ j++;
+ }
+ if (!j)
+ goto mkdirs;
+ if (j != 3) {
+ fprintf( stderr, "Maildir error: '%.*s' is no valid mailbox\n", bl, buf );
+ return DRV_BOX_BAD;
}
memcpy( buf + bl, "tmp/", 5 );
bl += 4;