changeset 4963:b13c7888563c HEAD

deliver was treating boolean settings set to "no" as if they were "yes" (usually they were supposed to be commented out)
author Timo Sirainen <tss@iki.fi>
date Thu, 28 Dec 2006 14:26:46 +0200
parents 7d8d82d0e5e5
children 3ed0749731d2
files src/deliver/Makefile.am src/deliver/deliver.c src/master/master-settings-defs.c src/master/master-settings.c
diffstat 4 files changed, 135 insertions(+), 113 deletions(-) [+]
line wrap: on
line diff
--- a/src/deliver/Makefile.am	Wed Dec 27 09:59:56 2006 +0200
+++ b/src/deliver/Makefile.am	Thu Dec 28 14:26:46 2006 +0200
@@ -6,6 +6,7 @@
 	-I$(top_srcdir)/src/lib \
 	-I$(top_srcdir)/src/lib-dict \
 	-I$(top_srcdir)/src/lib-mail \
+	-I$(top_srcdir)/src/lib-settings \
 	-I$(top_srcdir)/src/lib-storage \
 	-I$(top_srcdir)/src/lib-storage/index/mbox \
 	-DSYSCONFDIR=\""$(sysconfdir)"\" \
--- a/src/deliver/deliver.c	Wed Dec 27 09:59:56 2006 +0200
+++ b/src/deliver/deliver.c	Thu Dec 28 14:26:46 2006 +0200
@@ -157,8 +157,23 @@
 			       count++, deliver_set->hostname);
 }
 
+#include "settings.h"
+#include "../master/master-settings.h"
+#include "../master/master-settings-defs.c"
+
 #define IS_WHITE(c) ((c) == ' ' || (c) == '\t')
 
+static bool setting_is_bool(const char *name)
+{
+	const struct setting_def *def;
+
+	for (def = setting_defs; def->name != NULL; def++) {
+		if (strcmp(def->name, name) == 0)
+			return def->type == SET_BOOL;
+	}
+	return FALSE;
+}
+
 static void config_file_init(const char *path)
 {
 	struct istream *input;
@@ -231,6 +246,9 @@
 			value++;
 		} while (*value == ' ');
 
+		if (setting_is_bool(key) && strcasecmp(value, "yes") != 0)
+			continue;
+
 		env_put(t_strconcat(t_str_ucase(key), "=", value, NULL));
 	}
 	i_stream_unref(&input);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/master/master-settings-defs.c	Thu Dec 28 14:26:46 2006 +0200
@@ -0,0 +1,115 @@
+/* kludgy: this file is included from master-settings.c and from deliver */
+
+#define DEF(type, name) \
+	{ type, #name, offsetof(struct settings, name) }
+
+static struct setting_def setting_defs[] = {
+	/* common */
+	DEF(SET_STR, base_dir),
+	DEF(SET_STR, log_path),
+	DEF(SET_STR, info_log_path),
+	DEF(SET_STR, log_timestamp),
+	DEF(SET_STR, syslog_facility),
+
+	/* general */
+	DEF(SET_STR, protocols),
+	DEF(SET_STR, listen),
+	DEF(SET_STR, ssl_listen),
+
+	DEF(SET_BOOL, ssl_disable),
+	DEF(SET_STR, ssl_ca_file),
+	DEF(SET_STR, ssl_cert_file),
+	DEF(SET_STR, ssl_key_file),
+	DEF(SET_STR, ssl_key_password),
+	DEF(SET_INT, ssl_parameters_regenerate),
+	DEF(SET_STR, ssl_cipher_list),
+	DEF(SET_BOOL, ssl_verify_client_cert),
+	DEF(SET_BOOL, disable_plaintext_auth),
+	DEF(SET_BOOL, verbose_ssl),
+	DEF(SET_BOOL, shutdown_clients),
+	DEF(SET_BOOL, nfs_check),
+	DEF(SET_BOOL, version_ignore),
+
+	/* login */
+	DEF(SET_STR, login_dir),
+	DEF(SET_STR, login_executable),
+	DEF(SET_STR, login_user),
+	DEF(SET_STR, login_greeting),
+	DEF(SET_STR, login_log_format_elements),
+	DEF(SET_STR, login_log_format),
+
+	DEF(SET_BOOL, login_process_per_connection),
+	DEF(SET_BOOL, login_chroot),
+	DEF(SET_BOOL, login_greeting_capability),
+
+	DEF(SET_INT, login_process_size),
+	DEF(SET_INT, login_processes_count),
+	DEF(SET_INT, login_max_processes_count),
+	DEF(SET_INT, login_max_connections),
+
+	/* mail */
+	DEF(SET_STR, valid_chroot_dirs),
+	DEF(SET_STR, mail_chroot),
+	DEF(SET_INT, max_mail_processes),
+	DEF(SET_BOOL, verbose_proctitle),
+
+	DEF(SET_INT, first_valid_uid),
+	DEF(SET_INT, last_valid_uid),
+	DEF(SET_INT, first_valid_gid),
+	DEF(SET_INT, last_valid_gid),
+	DEF(SET_STR, mail_extra_groups),
+
+	DEF(SET_STR, default_mail_env),
+	DEF(SET_STR, mail_location),
+	DEF(SET_STR, mail_cache_fields),
+	DEF(SET_STR, mail_never_cache_fields),
+	DEF(SET_INT, mail_cache_min_mail_count),
+	DEF(SET_INT, mailbox_idle_check_interval),
+	DEF(SET_BOOL, mail_debug),
+	DEF(SET_BOOL, mail_full_filesystem_access),
+	DEF(SET_INT, mail_max_keyword_length),
+	DEF(SET_BOOL, mail_save_crlf),
+	DEF(SET_BOOL, mail_read_mmaped),
+	DEF(SET_BOOL, mmap_disable),
+	DEF(SET_BOOL, mmap_no_write),
+	DEF(SET_BOOL, fsync_disable),
+	DEF(SET_STR, lock_method),
+	DEF(SET_BOOL, maildir_stat_dirs),
+	DEF(SET_BOOL, maildir_copy_with_hardlinks),
+	DEF(SET_BOOL, maildir_copy_preserve_filename),
+	DEF(SET_STR, mbox_read_locks),
+	DEF(SET_STR, mbox_write_locks),
+	DEF(SET_INT, mbox_lock_timeout),
+	DEF(SET_INT, mbox_dotlock_change_timeout),
+	DEF(SET_INT, mbox_min_index_size),
+	DEF(SET_BOOL, mbox_dirty_syncs),
+	DEF(SET_BOOL, mbox_very_dirty_syncs),
+	DEF(SET_BOOL, mbox_lazy_writes),
+	DEF(SET_INT, dbox_rotate_size),
+	DEF(SET_INT, dbox_rotate_min_size),
+	DEF(SET_INT, dbox_rotate_days),
+	DEF(SET_INT, umask),
+	DEF(SET_BOOL, mail_drop_priv_before_exec),
+
+	DEF(SET_STR, mail_executable),
+	DEF(SET_INT, mail_process_size),
+	DEF(SET_STR, mail_plugins),
+	DEF(SET_STR, mail_plugin_dir),
+	DEF(SET_STR, mail_log_prefix),
+
+	/* imap */
+	DEF(SET_INT, imap_max_line_length),
+	DEF(SET_STR, imap_capability),
+	DEF(SET_STR, imap_client_workarounds),
+
+	/* pop3 */
+	DEF(SET_BOOL, pop3_no_flag_updates),
+	DEF(SET_BOOL, pop3_enable_last),
+	DEF(SET_BOOL, pop3_reuse_xuidl),
+	DEF(SET_BOOL, pop3_lock_session),
+	DEF(SET_STR, pop3_uidl_format),
+	DEF(SET_STR, pop3_client_workarounds),
+	DEF(SET_STR, pop3_logout_format),
+
+	{ 0, NULL, 0 }
+};
--- a/src/master/master-settings.c	Wed Dec 27 09:59:56 2006 +0200
+++ b/src/master/master-settings.c	Thu Dec 28 14:26:46 2006 +0200
@@ -49,119 +49,7 @@
 	int level;
 };
 
-#define DEF(type, name) \
-	{ type, #name, offsetof(struct settings, name) }
-
-static struct setting_def setting_defs[] = {
-	/* common */
-	DEF(SET_STR, base_dir),
-	DEF(SET_STR, log_path),
-	DEF(SET_STR, info_log_path),
-	DEF(SET_STR, log_timestamp),
-	DEF(SET_STR, syslog_facility),
-
-	/* general */
-	DEF(SET_STR, protocols),
-	DEF(SET_STR, listen),
-	DEF(SET_STR, ssl_listen),
-
-	DEF(SET_BOOL, ssl_disable),
-	DEF(SET_STR, ssl_ca_file),
-	DEF(SET_STR, ssl_cert_file),
-	DEF(SET_STR, ssl_key_file),
-	DEF(SET_STR, ssl_key_password),
-	DEF(SET_INT, ssl_parameters_regenerate),
-	DEF(SET_STR, ssl_cipher_list),
-	DEF(SET_BOOL, ssl_verify_client_cert),
-	DEF(SET_BOOL, disable_plaintext_auth),
-	DEF(SET_BOOL, verbose_ssl),
-	DEF(SET_BOOL, shutdown_clients),
-	DEF(SET_BOOL, nfs_check),
-	DEF(SET_BOOL, version_ignore),
-
-	/* login */
-	DEF(SET_STR, login_dir),
-	DEF(SET_STR, login_executable),
-	DEF(SET_STR, login_user),
-	DEF(SET_STR, login_greeting),
-	DEF(SET_STR, login_log_format_elements),
-	DEF(SET_STR, login_log_format),
-
-	DEF(SET_BOOL, login_process_per_connection),
-	DEF(SET_BOOL, login_chroot),
-	DEF(SET_BOOL, login_greeting_capability),
-
-	DEF(SET_INT, login_process_size),
-	DEF(SET_INT, login_processes_count),
-	DEF(SET_INT, login_max_processes_count),
-	DEF(SET_INT, login_max_connections),
-
-	/* mail */
-	DEF(SET_STR, valid_chroot_dirs),
-	DEF(SET_STR, mail_chroot),
-	DEF(SET_INT, max_mail_processes),
-	DEF(SET_BOOL, verbose_proctitle),
-
-	DEF(SET_INT, first_valid_uid),
-	DEF(SET_INT, last_valid_uid),
-	DEF(SET_INT, first_valid_gid),
-	DEF(SET_INT, last_valid_gid),
-	DEF(SET_STR, mail_extra_groups),
-
-	DEF(SET_STR, default_mail_env),
-	DEF(SET_STR, mail_location),
-	DEF(SET_STR, mail_cache_fields),
-	DEF(SET_STR, mail_never_cache_fields),
-	DEF(SET_INT, mail_cache_min_mail_count),
-	DEF(SET_INT, mailbox_idle_check_interval),
-	DEF(SET_BOOL, mail_debug),
-	DEF(SET_BOOL, mail_full_filesystem_access),
-	DEF(SET_INT, mail_max_keyword_length),
-	DEF(SET_BOOL, mail_save_crlf),
-	DEF(SET_BOOL, mail_read_mmaped),
-	DEF(SET_BOOL, mmap_disable),
-	DEF(SET_BOOL, mmap_no_write),
-	DEF(SET_BOOL, fsync_disable),
-	DEF(SET_STR, lock_method),
-	DEF(SET_BOOL, maildir_stat_dirs),
-	DEF(SET_BOOL, maildir_copy_with_hardlinks),
-	DEF(SET_BOOL, maildir_copy_preserve_filename),
-	DEF(SET_STR, mbox_read_locks),
-	DEF(SET_STR, mbox_write_locks),
-	DEF(SET_INT, mbox_lock_timeout),
-	DEF(SET_INT, mbox_dotlock_change_timeout),
-	DEF(SET_INT, mbox_min_index_size),
-	DEF(SET_BOOL, mbox_dirty_syncs),
-	DEF(SET_BOOL, mbox_very_dirty_syncs),
-	DEF(SET_BOOL, mbox_lazy_writes),
-	DEF(SET_INT, dbox_rotate_size),
-	DEF(SET_INT, dbox_rotate_min_size),
-	DEF(SET_INT, dbox_rotate_days),
-	DEF(SET_INT, umask),
-	DEF(SET_BOOL, mail_drop_priv_before_exec),
-
-	DEF(SET_STR, mail_executable),
-	DEF(SET_INT, mail_process_size),
-	DEF(SET_STR, mail_plugins),
-	DEF(SET_STR, mail_plugin_dir),
-	DEF(SET_STR, mail_log_prefix),
-
-	/* imap */
-	DEF(SET_INT, imap_max_line_length),
-	DEF(SET_STR, imap_capability),
-	DEF(SET_STR, imap_client_workarounds),
-
-	/* pop3 */
-	DEF(SET_BOOL, pop3_no_flag_updates),
-	DEF(SET_BOOL, pop3_enable_last),
-	DEF(SET_BOOL, pop3_reuse_xuidl),
-	DEF(SET_BOOL, pop3_lock_session),
-	DEF(SET_STR, pop3_uidl_format),
-	DEF(SET_STR, pop3_client_workarounds),
-	DEF(SET_STR, pop3_logout_format),
-
-	{ 0, NULL, 0 }
-};
+#include "master-settings-defs.c"
 
 #undef DEF
 #define DEF(type, name) \