dovecot-2.1-pigeonhole: lib-sieve: made uniform scriptname <-> f...

pigeonhole at rename-it.nl pigeonhole at rename-it.nl
Sat Dec 17 19:58:56 EET 2011


details:   http://hg.rename-it.nl/dovecot-2.1-pigeonhole/rev/66b7b1636c8c
changeset: 1583:66b7b1636c8c
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 5834cc823e38 -r 66b7b1636c8c src/lib-sieve/sieve-config.h
--- a/src/lib-sieve/sieve-config.h	Sat Dec 17 16:07:16 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 5834cc823e38 -r 66b7b1636c8c src/lib-sieve/sieve-script.c
--- a/src/lib-sieve/sieve-script.c	Sat Dec 17 16:07:16 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 5834cc823e38 -r 66b7b1636c8c src/lib-sieve/sieve-script.h
--- a/src/lib-sieve/sieve-script.h	Sat Dec 17 16:07:16 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 5834cc823e38 -r 66b7b1636c8c src/lib-sieve/sieve.c
--- a/src/lib-sieve/sieve.c	Sat Dec 17 16:07:16 2011 +0100
+++ b/src/lib-sieve/sieve.c	Sat Dec 17 18:58:48 2011 +0100
@@ -765,7 +765,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 5834cc823e38 -r 66b7b1636c8c src/lib-sievestorage/sieve-storage-list.c
--- a/src/lib-sievestorage/sieve-storage-list.c	Sat Dec 17 16:07:16 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 5834cc823e38 -r 66b7b1636c8c src/lib-sievestorage/sieve-storage-quota.c
--- a/src/lib-sievestorage/sieve-storage-quota.c	Sat Dec 17 16:07:16 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 5834cc823e38 -r 66b7b1636c8c src/lib-sievestorage/sieve-storage-save.c
--- a/src/lib-sievestorage/sieve-storage-save.c	Sat Dec 17 16:07:16 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
@@ -345,7 +343,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 5834cc823e38 -r 66b7b1636c8c src/lib-sievestorage/sieve-storage-script.c
--- a/src/lib-sievestorage/sieve-storage-script.c	Sat Dec 17 16:07:16 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 ) {
@@ -377,7 +365,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 "
@@ -434,7 +422,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);
@@ -569,7 +557,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 5834cc823e38 -r 66b7b1636c8c src/lib-sievestorage/sieve-storage-script.h
--- a/src/lib-sievestorage/sieve-storage-script.h	Sat Dec 17 16:07:16 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);
 int sieve_storage_get_active_scriptname
diff -r 5834cc823e38 -r 66b7b1636c8c src/lib-sievestorage/sieve-storage.c
--- a/src/lib-sievestorage/sieve-storage.c	Sat Dec 17 16:07:16 2011 +0100
+++ b/src/lib-sievestorage/sieve-storage.c	Sat Dec 17 18:58:48 2011 +0100
@@ -23,7 +23,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 5834cc823e38 -r 66b7b1636c8c src/sieve-tools/sievec.c
--- a/src/sieve-tools/sievec.c	Sat Dec 17 16:07:16 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