dovecot-2.2-pigeonhole: lib-sieve: sieve script: Made sure there...

pigeonhole at rename-it.nl pigeonhole at rename-it.nl
Tue Oct 28 21:35:27 UTC 2014


details:   http://hg.rename-it.nl/dovecot-2.2-pigeonhole/rev/6afd6d927f40
changeset: 1944:6afd6d927f40
user:      Stephan Bosch <stephan at rename-it.nl>
date:      Tue Oct 28 22:34:48 2014 +0100
description:
lib-sieve: sieve script: Made sure there is a script name for when sieve_script_open() fails.

diffstat:

 src/lib-sieve/storage/file/sieve-file-script.c |  50 +++++++++++++++++--------
 1 files changed, 34 insertions(+), 16 deletions(-)

diffs (96 lines):

diff -r 5ba10b28d630 -r 6afd6d927f40 src/lib-sieve/storage/file/sieve-file-script.c
--- a/src/lib-sieve/storage/file/sieve-file-script.c	Tue Oct 28 14:53:39 2014 +0100
+++ b/src/lib-sieve/storage/file/sieve-file-script.c	Tue Oct 28 22:34:48 2014 +0100
@@ -52,7 +52,7 @@
 
 static void sieve_file_script_handle_error
 (struct sieve_file_script *fscript, const char *path,
-	enum sieve_error *error_r)
+	const char *name, enum sieve_error *error_r)
 {
 	struct sieve_script *script = &fscript->script;
 
@@ -61,8 +61,7 @@
 		sieve_script_sys_debug(script, "File `%s' not found", t_abspath(path));
 		sieve_script_set_error(script,
 			SIEVE_ERROR_NOT_FOUND,
-			"Sieve script `%s' not found",
-			fscript->script.name);
+			"Sieve script `%s' not found", name);
 		*error_r = SIEVE_ERROR_NOT_FOUND;
 		break;
 	case EACCES:
@@ -262,6 +261,22 @@
 	return 1;
 }
 
+static const char *
+path_split_filename(const char *path, const char **dirpath_r)
+{
+	const char *filename;
+
+	filename = strrchr(path, '/');
+	if ( filename == NULL ) {
+		*dirpath_r = "";
+		filename = path;
+	} else {
+		*dirpath_r = t_strdup_until(path, filename);
+		filename++;
+	}
+	return filename;
+}
+
 static int sieve_file_script_open
 (struct sieve_script *script, enum sieve_error *error_r)
 {
@@ -320,14 +335,7 @@
 			} else {
 
 				/* Extract filename from path */
-				filename = strrchr(path, '/');
-				if ( filename == NULL ) {
-					dirpath = "";
-					filename = path;
-				} else {
-					dirpath = t_strdup_until(path, filename);
-					filename++;
-				}
+				filename = path_split_filename(path, &dirpath);
 
 				if ( (basename=sieve_script_file_get_scriptname(filename)) == NULL )
 					basename = filename;
@@ -341,11 +349,21 @@
 
 		if ( success ) {
 			if ( ret <= 0 ) {
-				if ( fscript->script.name == NULL )
-					fscript->script.name = p_strdup(pool, basename);
-				sieve_file_script_handle_error(fscript, path, error_r);
+				/* Make sure we have a script name for the error */
+				if ( name == NULL ) {
+					if ( basename == NULL ) {
+						if ( filename == NULL )
+							filename = path_split_filename(path, &dirpath);
+						basename = sieve_script_file_get_scriptname(filename);
+						if ( basename == NULL )
+							basename = filename;
+					}
+					name = basename;
+				}
+				sieve_file_script_handle_error(fscript, path, name, error_r);
 				success = FALSE;
-			} else if (!S_ISREG(st.st_mode) ) {
+
+			} else if ( !S_ISREG(st.st_mode) ) {
 				sieve_script_set_critical(script,
 					"Sieve script file '%s' is not a regular file.", path);
 				*error_r = SIEVE_ERROR_TEMP_FAILURE;
@@ -412,7 +430,7 @@
 
 	if ( (fd=open(fscript->path, O_RDONLY)) < 0 ) {
 		sieve_file_script_handle_error
-			(fscript, fscript->path, error_r);
+			(fscript, fscript->path, fscript->script.name, error_r);
 		return -1;
 	}
 


More information about the dovecot-cvs mailing list