dovecot-2.0-pigeonhole: lib-sieve: made uniform scriptname <-> f...
pigeonhole at rename-it.nl
pigeonhole at rename-it.nl
Sat Dec 17 20:00:42 EET 2011
details: http://hg.rename-it.nl/dovecot-2.0-pigeonhole/rev/cc6d38c3f87f
changeset: 1551:cc6d38c3f87f
user: Stephan Bosch <stephan at rename-it.nl>
date: Sat Dec 17 18:58:48 2011 +0100
description:
lib-sieve: made uniform scriptname <-> filename conversion functions.
This puts the ".sieve" and ".svbin" file extension definitions in a single locatio.
IMPORTANT: this fixes a bug in the include extension that implicitly mapped script names like "name.sieve" to "name".
diffstat:
src/lib-sieve/sieve-config.h | 3 +
src/lib-sieve/sieve-script.c | 43 ++++++++++-----------
src/lib-sieve/sieve-script.h | 15 ++++---
src/lib-sieve/sieve.c | 2 +-
src/lib-sievestorage/sieve-storage-list.c | 4 +-
src/lib-sievestorage/sieve-storage-quota.c | 2 +-
src/lib-sievestorage/sieve-storage-save.c | 12 ++---
src/lib-sievestorage/sieve-storage-script.c | 24 +++---------
src/lib-sievestorage/sieve-storage-script.h | 3 -
src/lib-sievestorage/sieve-storage.c | 2 +-
src/sieve-tools/sievec.c | 2 +-
src/testsuite/testsuite-binary.c | 9 ++--
tests/extensions/include/errors/circular-1.sieve | 2 +-
tests/extensions/include/errors/circular-2.sieve | 2 +-
tests/extensions/include/included/circular-one.sieve | 2 +-
tests/extensions/include/included/circular-three-2.sieve | 2 +-
tests/extensions/include/included/circular-three.sieve | 2 +-
tests/extensions/include/included/circular-two.sieve | 2 +-
tests/extensions/include/included/once-2.sieve | 2 +-
tests/extensions/include/included/twice-2.sieve | 2 +-
20 files changed, 61 insertions(+), 76 deletions(-)
diffs (truncated from 412 to 300 lines):
diff -r 787832d0aa0a -r cc6d38c3f87f src/lib-sieve/sieve-config.h
--- a/src/lib-sieve/sieve-config.h Sat Dec 17 14:47:23 2011 +0100
+++ b/src/lib-sieve/sieve-config.h Sat Dec 17 18:58:48 2011 +0100
@@ -8,4 +8,7 @@
#define SIEVE_IMPLEMENTATION PIGEONHOLE_NAME " Sieve " PIGEONHOLE_VERSION
+#define SIEVE_SCRIPT_FILEEXT "sieve"
+#define SIEVE_BINARY_FILEEXT "svbin"
+
#endif
diff -r 787832d0aa0a -r cc6d38c3f87f src/lib-sieve/sieve-script.c
--- a/src/lib-sieve/sieve-script.c Sat Dec 17 14:47:23 2011 +0100
+++ b/src/lib-sieve/sieve-script.c Sat Dec 17 18:58:48 2011 +0100
@@ -96,38 +96,35 @@
* Filename to name/name to filename
*/
-static inline const char *_sieve_scriptfile_get_basename(const char *filename)
+const char *sieve_scriptfile_get_script_name(const char *filename)
{
const char *ext;
/* Extract the script name */
ext = strrchr(filename, '.');
- if ( ext == NULL || ext == filename || strncmp(ext,".sieve",6) != 0 )
- return filename;
+ if ( ext == NULL || ext == filename ||
+ strcmp(ext, "."SIEVE_SCRIPT_FILEEXT) != 0 )
+ return NULL;
return t_strdup_until(filename, ext);
}
-bool sieve_script_file_has_extension(const char *filename)
+bool sieve_scriptfile_has_extension(const char *filename)
{
- const char *ext;
-
- /* See if it ends in .sieve already */
- ext = strrchr(filename, '.');
- if ( ext == NULL || ext == filename || strncmp(ext,".sieve",6) != 0 )
- return FALSE;
-
- return TRUE;
+ return ( sieve_scriptfile_get_script_name(filename) != NULL );
}
-static inline const char *_sieve_scriptfile_from_name(const char *name)
+const char *sieve_scriptfile_from_name(const char *name)
{
- if ( !sieve_script_file_has_extension(name) )
- return t_strconcat(name, ".sieve", NULL);
+ return t_strconcat(name, "."SIEVE_SCRIPT_FILEEXT, NULL);
+}
- return name;
+const char *sieve_binfile_from_name(const char *name)
+{
+ return t_strconcat(name, "."SIEVE_BINARY_FILEEXT, NULL);
}
+
/*
* Common error handling
*/
@@ -192,12 +189,12 @@
filename++;
}
- basename = _sieve_scriptfile_get_basename(filename);
+ if ( (basename=sieve_scriptfile_get_script_name(filename)) == NULL )
+ basename = filename;
- if ( *dirpath == '\0' )
- binpath = t_strconcat(basename, ".svbin", NULL);
- else
- binpath = t_strconcat(dirpath, "/", basename, ".svbin", NULL);
+ binpath = sieve_binfile_from_name(basename);
+ if ( *dirpath != '\0' )
+ binpath = t_strconcat(dirpath, "/", binpath, NULL);
if ( name == NULL ) {
name = basename;
@@ -284,10 +281,10 @@
if ( dirpath[strlen(dirpath)-1] == '/' )
path = t_strconcat(dirpath,
- _sieve_scriptfile_from_name(name), NULL);
+ sieve_scriptfile_from_name(name), NULL);
else
path = t_strconcat(dirpath, "/",
- _sieve_scriptfile_from_name(name), NULL);
+ sieve_scriptfile_from_name(name), NULL);
return sieve_script_init(NULL, svinst, path, name, ehandler, error_r);
}
diff -r 787832d0aa0a -r cc6d38c3f87f src/lib-sieve/sieve-script.h
--- a/src/lib-sieve/sieve-script.h Sat Dec 17 14:47:23 2011 +0100
+++ b/src/lib-sieve/sieve-script.h Sat Dec 17 18:58:48 2011 +0100
@@ -16,6 +16,15 @@
bool sieve_script_name_is_valid(const char *scriptname);
/*
+ * Sieve script filenames
+ */
+
+bool sieve_scriptfile_has_extension(const char *filename);
+const char *sieve_scriptfile_get_script_name(const char *filename);
+const char *sieve_scriptfile_from_name(const char *name);
+const char *sieve_binfile_from_name(const char *name);
+
+/*
* Sieve script object
*/
@@ -33,12 +42,6 @@
void sieve_script_unref(struct sieve_script **script);
/*
- * Filename filter
- */
-
-bool sieve_script_file_has_extension(const char *filename);
-
-/*
* Accessors
*/
diff -r 787832d0aa0a -r cc6d38c3f87f src/lib-sieve/sieve.c
--- a/src/lib-sieve/sieve.c Sat Dec 17 14:47:23 2011 +0100
+++ b/src/lib-sieve/sieve.c Sat Dec 17 18:58:48 2011 +0100
@@ -761,7 +761,7 @@
return NULL;
}
- if ( !sieve_script_file_has_extension(dp->d_name) )
+ if ( !sieve_scriptfile_has_extension(dp->d_name) )
continue;
if ( sdir->path[strlen(sdir->path)-1] == '/' )
diff -r 787832d0aa0a -r cc6d38c3f87f src/lib-sievestorage/sieve-storage-list.c
--- a/src/lib-sievestorage/sieve-storage-list.c Sat Dec 17 14:47:23 2011 +0100
+++ b/src/lib-sievestorage/sieve-storage-list.c Sat Dec 17 18:58:48 2011 +0100
@@ -69,9 +69,7 @@
if ( (dp = readdir(ctx->dirp)) == NULL )
return NULL;
- scriptname = sieve_storage_file_get_scriptname
- (storage, dp->d_name);
-
+ scriptname = sieve_scriptfile_get_script_name(dp->d_name);
if (scriptname != NULL ) {
/* Don't list our active sieve script link if the link
* resides in the script dir (generally a bad idea).
diff -r 787832d0aa0a -r cc6d38c3f87f src/lib-sievestorage/sieve-storage-quota.c
--- a/src/lib-sievestorage/sieve-storage-quota.c Sat Dec 17 14:47:23 2011 +0100
+++ b/src/lib-sievestorage/sieve-storage-quota.c Sat Dec 17 18:58:48 2011 +0100
@@ -78,7 +78,7 @@
}
/* Parse filename */
- name = sieve_storage_file_get_scriptname(storage, dp->d_name);
+ name = sieve_scriptfile_get_script_name(dp->d_name);
/* Ignore non-script files */
if ( name == NULL )
diff -r 787832d0aa0a -r cc6d38c3f87f src/lib-sievestorage/sieve-storage-save.c
--- a/src/lib-sievestorage/sieve-storage-save.c Sat Dec 17 14:47:23 2011 +0100
+++ b/src/lib-sievestorage/sieve-storage-save.c Sat Dec 17 18:58:48 2011 +0100
@@ -59,13 +59,11 @@
}
last_tv = tv;
- if ( scriptname == NULL )
- return t_strdup_printf("NULL_%s.M%sP%s.%s.sieve", dec2str(tv.tv_sec),
- dec2str(tv.tv_usec), my_pid, my_hostname);
+ scriptname = t_strdup_printf("%s_%s.M%sP%s.%s",
+ ( scriptname == NULL ? "NULL" : scriptname ),
+ dec2str(tv.tv_sec), dec2str(tv.tv_usec), my_pid, my_hostname);
- return t_strdup_printf
- ("%s-%s.M%sP%s.%s.sieve", scriptname, dec2str(tv.tv_sec),
- dec2str(tv.tv_usec), my_pid, my_hostname);
+ return sieve_scriptfile_from_name(scriptname);
}
static int sieve_storage_create_tmp
@@ -327,7 +325,7 @@
T_BEGIN {
dest_path = t_strconcat((*ctx)->storage->dir, "/",
- (*ctx)->scriptname, ".sieve", NULL);
+ sieve_scriptfile_from_name((*ctx)->scriptname), NULL);
failed = !sieve_storage_script_move((*ctx), dest_path);
} T_END;
diff -r 787832d0aa0a -r cc6d38c3f87f src/lib-sievestorage/sieve-storage-script.c
--- a/src/lib-sievestorage/sieve-storage-script.c Sat Dec 17 14:47:23 2011 +0100
+++ b/src/lib-sievestorage/sieve-storage-script.c Sat Dec 17 18:58:48 2011 +0100
@@ -88,7 +88,8 @@
}
T_BEGIN {
- path = t_strconcat( storage->dir, "/", scriptname, ".sieve", NULL );
+ path = t_strconcat
+ ( storage->dir, "/", sieve_scriptfile_from_name(scriptname), NULL );
script = sieve_storage_script_init_from_path(storage, path, NULL);
} T_END;
@@ -111,19 +112,6 @@
return script;
}
-const char *sieve_storage_file_get_scriptname
-(const struct sieve_storage *storage ATTR_UNUSED, const char *filename)
-{
- const char *ext;
-
- ext = strrchr(filename, '.');
-
- if ( ext == NULL || ext == filename || strcmp(ext,".sieve") != 0 )
- return NULL;
-
- return t_strdup_until(filename, ext);
-}
-
static int sieve_storage_read_active_link
(struct sieve_storage *storage, const char **link_r)
{
@@ -179,7 +167,7 @@
}
/* Check the script name */
- scriptname = sieve_storage_file_get_scriptname(storage, fname);
+ scriptname = sieve_scriptfile_get_script_name(fname);
/* Warn if link is deemed to be invalid */
if ( scriptname == NULL ) {
@@ -351,7 +339,7 @@
T_BEGIN {
dstpath = t_strconcat
- ( storage->dir, "/dovecot.orig.sieve", NULL );
+ ( storage->dir, "/", sieve_scriptfile_from_name("dovecot.orig"), NULL );
if ( file_copy(storage->active_path, dstpath, 1) < 1 ) {
sieve_storage_set_critical(storage,
"Active sieve script file '%s' is a regular file and copying it to "
@@ -408,7 +396,7 @@
for (;;) {
/* First the new symlink is created with a different filename */
active_path_new = t_strdup_printf
- ("%s-new.%s.P%sM%s.%s.sieve",
+ ("%s-new.%s.P%sM%s.%s",
storage->active_path,
dec2str(tv->tv_sec), my_pid,
dec2str(tv->tv_usec), my_hostname);
@@ -543,7 +531,7 @@
}
T_BEGIN {
- newfile = t_strconcat( newname, ".sieve", NULL );
+ newfile = sieve_scriptfile_from_name(newname);
newpath = t_strconcat( storage->dir, "/", newfile, NULL );
/* The normal rename() system call overwrites the existing file without
diff -r 787832d0aa0a -r cc6d38c3f87f src/lib-sievestorage/sieve-storage-script.h
--- a/src/lib-sievestorage/sieve-storage-script.h Sat Dec 17 14:47:23 2011 +0100
+++ b/src/lib-sievestorage/sieve-storage-script.h Sat Dec 17 18:58:48 2011 +0100
@@ -11,9 +11,6 @@
struct sieve_script *sieve_storage_script_init
(struct sieve_storage *storage, const char *scriptname);
-const char *sieve_storage_file_get_scriptname
- (const struct sieve_storage *storage, const char *filename);
-
int sieve_storage_get_active_scriptfile
(struct sieve_storage *storage, const char **file_r);
diff -r 787832d0aa0a -r cc6d38c3f87f src/lib-sievestorage/sieve-storage.c
--- a/src/lib-sievestorage/sieve-storage.c Sat Dec 17 14:47:23 2011 +0100
+++ b/src/lib-sievestorage/sieve-storage.c Sat Dec 17 18:58:48 2011 +0100
@@ -22,7 +22,7 @@
#include <ctype.h>
#include <time.h>
-#define SIEVE_DEFAULT_PATH "~/.dovecot.sieve"
+#define SIEVE_DEFAULT_PATH "~/.dovecot."SIEVE_SCRIPT_FILEEXT
#define MAX_DIR_CREATE_MODE 0770
diff -r 787832d0aa0a -r cc6d38c3f87f src/sieve-tools/sievec.c
--- a/src/sieve-tools/sievec.c Sat Dec 17 14:47:23 2011 +0100
+++ b/src/sieve-tools/sievec.c Sat Dec 17 18:58:48 2011 +0100
@@ -112,7 +112,7 @@
break;
}
- if ( sieve_script_file_has_extension(dp->d_name) ) {
+ if ( sieve_scriptfile_has_extension(dp->d_name) ) {
More information about the dovecot-cvs
mailing list