diff --git a/configure b/configure index 1758514..9491bfe 100755 --- a/configure +++ b/configure @@ -695,6 +695,7 @@ ac_user_opts=' enable_option_checking enable_static_build +enable_compat_layout enable_clamd enable_memcached enable_starttls @@ -1320,6 +1321,7 @@ --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-static-build build statically linked executables (default: dynamically linked) + --enable-compat-layout support for older storage layout (default: no) --enable-clamd build clamd antivirus support --enable-memcached build memcached support --enable-starttls build starttls support @@ -3457,6 +3459,7 @@ timeout_binary="" have_static_build="no" +have_compat_storage_layout="no" antispam_libs="-lz -lm -ldl -lcrypto -lssl" defs="" @@ -3500,6 +3503,16 @@ +# Check whether --enable-compat-layout was given. +if test "${enable_compat_layout+set}" = set; then : + enableval=$enable_compat_layout; have_compat_storage_layout=$enableval +else + have_compat_storage_layout="no" +fi + + + + # Check whether --enable-clamd was given. if test "${enable_clamd+set}" = set; then : @@ -4665,6 +4678,16 @@ echo +if test "$have_compat_storage_layout" = "yes"; then + echo "support for older storage layout: yes" + +cat >>confdefs.h <<_ACEOF +#define HAVE_SUPPORT_FOR_COMPAT_STORAGE_LAYOUT 1 +_ACEOF + +fi + + if test "$have_mysql" = "yes"; then echo "database: mysql" fi diff --git a/configure.in b/configure.in index 9de3f79..f4f04e4 100644 --- a/configure.in +++ b/configure.in @@ -56,6 +56,7 @@ timeout_binary="" have_static_build="no" +have_compat_storage_layout="no" antispam_libs="-lz -lm -ldl -lcrypto -lssl" defs="" @@ -94,6 +95,12 @@ [ --enable-static-build build statically linked executables (default: dynamically linked)], have_static_build=$enableval, have_static_build="no") +dnl + +AC_ARG_ENABLE(compat-layout, + [ --enable-compat-layout support for older storage layout (default: no)], have_compat_storage_layout=$enableval, have_compat_storage_layout="no") + + dnl clamd @@ -390,6 +397,12 @@ echo +if test "$have_compat_storage_layout" = "yes"; then + echo "support for older storage layout: yes" + AC_DEFINE_UNQUOTED(HAVE_SUPPORT_FOR_COMPAT_STORAGE_LAYOUT, 1, [compat storage layout support]) +fi + + if test "$have_mysql" = "yes"; then echo "database: mysql" fi diff --git a/piler-config.h.in b/piler-config.h.in index fd37a06..8dbbe98 100644 --- a/piler-config.h.in +++ b/piler-config.h.in @@ -24,3 +24,6 @@ #undef HAVE_LIBWRAP #undef HAVE_TWEAK_SENT_TIME + +#undef HAVE_SUPPORT_FOR_COMPAT_STORAGE_LAYOUT + diff --git a/src/archive.c b/src/archive.c index 4dfcf71..66d7173 100644 --- a/src/archive.c +++ b/src/archive.c @@ -305,9 +305,11 @@ } snprintf(filename, sizeof(filename)-1, "%s/%02x/%c%c%c/%c%c/%c%c/%s.m", cfg->queuedir, cfg->server_id, *(sdata->ttmpfile+8), *(sdata->ttmpfile+9), *(sdata->ttmpfile+10), *(sdata->ttmpfile+RND_STR_LEN-4), *(sdata->ttmpfile+RND_STR_LEN-3), *(sdata->ttmpfile+RND_STR_LEN-2), *(sdata->ttmpfile+RND_STR_LEN-1), sdata->ttmpfile); +#ifdef HAVE_SUPPORT_FOR_COMPAT_STORAGE_LAYOUT if(stat(filename, &st)){ snprintf(filename, sizeof(filename)-1, "%s/%02x/%c%c/%c%c/%c%c/%s.m", cfg->queuedir, cfg->server_id, *(sdata->ttmpfile+RND_STR_LEN-6), *(sdata->ttmpfile+RND_STR_LEN-5), *(sdata->ttmpfile+RND_STR_LEN-4), *(sdata->ttmpfile+RND_STR_LEN-3), *(sdata->ttmpfile+RND_STR_LEN-2), *(sdata->ttmpfile+RND_STR_LEN-1), sdata->ttmpfile); } +#endif if(attachments == 0){ retrieve_file_from_archive(filename, WRITE_TO_STDOUT, &buffer, dest, cfg); @@ -330,9 +332,11 @@ if(strlen(ptr_arr[i].piler_id) == RND_STR_LEN){ snprintf(filename, sizeof(filename)-1, "%s/%02x/%c%c%c/%c%c/%c%c/%s.a%d", cfg->queuedir, cfg->server_id, ptr_arr[i].piler_id[8], ptr_arr[i].piler_id[9], ptr_arr[i].piler_id[10], ptr_arr[i].piler_id[RND_STR_LEN-4], ptr_arr[i].piler_id[RND_STR_LEN-3], ptr_arr[i].piler_id[RND_STR_LEN-2], ptr_arr[i].piler_id[RND_STR_LEN-1], ptr_arr[i].piler_id, ptr_arr[i].attachment_id); + #ifdef HAVE_SUPPORT_FOR_COMPAT_STORAGE_LAYOUT if(stat(filename, &st)){ snprintf(filename, sizeof(filename)-1, "%s/%02x/%c%c/%c%c/%c%c/%s.a%d", cfg->queuedir, cfg->server_id, ptr_arr[i].piler_id[RND_STR_LEN-6], ptr_arr[i].piler_id[RND_STR_LEN-5], ptr_arr[i].piler_id[RND_STR_LEN-4], ptr_arr[i].piler_id[RND_STR_LEN-3], ptr_arr[i].piler_id[RND_STR_LEN-2], ptr_arr[i].piler_id[RND_STR_LEN-1], ptr_arr[i].piler_id, ptr_arr[i].attachment_id); } + #endif retrieve_file_from_archive(filename, WRITE_TO_STDOUT, NULL, dest, cfg); } diff --git a/src/extract.c b/src/extract.c index b7cfc95..e2090a1 100644 --- a/src/extract.c +++ b/src/extract.c @@ -54,7 +54,7 @@ z = zip_open(filename, ZIP_CHECKCONS, &errorp); if(!z){ - syslog(LOG_INFO, "error: corrupt zip file=%s, error code=%d", filename, errorp); + syslog(LOG_INFO, "%s: error: corrupt zip file=%s, error code=%d", sdata->ttmpfile, filename, errorp); return 1; } @@ -105,7 +105,7 @@ z = zip_open(filename, ZIP_CHECKCONS, &errorp); if(!z){ - syslog(LOG_INFO, "error: corrupt zip file=%s, error code=%d", filename, errorp); + syslog(LOG_INFO, "%s: error: corrupt zip file=%s, error code=%d", sdata->ttmpfile, filename, errorp); return 1; } diff --git a/src/pileraget.c b/src/pileraget.c index a4ac20d..be2bee1 100644 --- a/src/pileraget.c +++ b/src/pileraget.c @@ -45,9 +45,11 @@ } snprintf(filename, sizeof(filename)-1, "%s/%02x/%c%c%c/%c%c/%c%c/%s.a%d", cfg.queuedir, cfg.server_id, argv[1][8], argv[1][9], argv[1][10], argv[1][RND_STR_LEN-4], argv[1][RND_STR_LEN-3], argv[1][RND_STR_LEN-2], argv[1][RND_STR_LEN-1], argv[1], atoi(argv[2])); +#ifdef HAVE_SUPPORT_FOR_COMPAT_STORAGE_LAYOUT if(stat(filename, &st)){ snprintf(filename, sizeof(filename)-1, "%s/%02x/%c%c/%c%c/%c%c/%s.a%d", cfg.queuedir, cfg.server_id, argv[1][RND_STR_LEN-6], argv[1][RND_STR_LEN-5], argv[1][RND_STR_LEN-4], argv[1][RND_STR_LEN-3], argv[1][RND_STR_LEN-2], argv[1][RND_STR_LEN-1], argv[1], atoi(argv[2])); } +#endif retrieve_file_from_archive(filename, WRITE_TO_STDOUT, NULL, stdout, &cfg); diff --git a/src/pilerpurge.c b/src/pilerpurge.c index 942d0f5..ce9de88 100644 --- a/src/pilerpurge.c +++ b/src/pilerpurge.c @@ -69,9 +69,11 @@ if(strlen(puf) == RND_STR_LEN){ snprintf(filename, sizeof(filename)-1, "%s/%02x/%c%c%c/%c%c/%c%c/%s.m", cfg->queuedir, cfg->server_id, puf[8], puf[9], puf[10], puf[RND_STR_LEN-4], puf[RND_STR_LEN-3], puf[RND_STR_LEN-2], puf[RND_STR_LEN-1], puf); + #ifdef HAVE_SUPPORT_FOR_COMPAT_STORAGE_LAYOUT if(stat(filename, &st)){ snprintf(filename, sizeof(filename)-1, "%s/%02x/%c%c/%c%c/%c%c/%s.m", cfg->queuedir, cfg->server_id, puf[RND_STR_LEN-6], puf[RND_STR_LEN-5], puf[RND_STR_LEN-4], puf[RND_STR_LEN-3], puf[RND_STR_LEN-2], puf[RND_STR_LEN-1], puf); } + #endif if(dryrun == 1){ n++; @@ -147,9 +149,11 @@ while(p_fetch_results(data->stmt_select_non_referenced_attachments) == OK){ snprintf(filename, sizeof(filename)-1, "%s/%02x/%c%c%c/%c%c/%c%c/%s.a%d", cfg->queuedir, cfg->server_id, piler_id[8], piler_id[9], piler_id[10], piler_id[RND_STR_LEN-4], piler_id[RND_STR_LEN-3], piler_id[RND_STR_LEN-2], piler_id[RND_STR_LEN-1], piler_id, attachment_id); + #ifdef HAVE_SUPPORT_FOR_COMPAT_STORAGE_LAYOUT if(stat(filename, &st)){ snprintf(filename, sizeof(filename)-1, "%s/%02x/%c%c/%c%c/%c%c/%s.a%d", cfg->queuedir, cfg->server_id, piler_id[RND_STR_LEN-6], piler_id[RND_STR_LEN-5], piler_id[RND_STR_LEN-4], piler_id[RND_STR_LEN-3], piler_id[RND_STR_LEN-2], piler_id[RND_STR_LEN-1], piler_id, attachment_id); } + #endif if(dryrun == 1){ printf("removing attachment: *%s*\n", filename); diff --git a/src/retr.c b/src/retr.c index 3d77f98..a1f1bef 100644 --- a/src/retr.c +++ b/src/retr.c @@ -25,8 +25,10 @@ snprintf(*buf, buflen, "%s/%02x/%c%c%c/%c%c/%c%c/%s", cfg->queuedir, cfg->server_id, f[8], f[9], f[10], f[RND_STR_LEN-4], f[RND_STR_LEN-3], f[RND_STR_LEN-2], f[RND_STR_LEN-1], f); if(!stat(*buf, &st)) return st.st_size; +#ifdef HAVE_SUPPORT_FOR_COMPAT_STORAGE_LAYOUT snprintf(*buf, TINYBUFSIZE-1, "%s/%02x/%c%c/%c%c/%c%c/%s", cfg->queuedir, cfg->server_id, f[RND_STR_LEN-6], f[RND_STR_LEN-5], f[RND_STR_LEN-4], f[RND_STR_LEN-3], f[RND_STR_LEN-2], f[RND_STR_LEN-1], f); if(!stat(*buf, &st)) return st.st_size; +#endif return 0; }