dovecot-2.1: Don't auto-add mountpoints under /media or /cdrom.

dovecot at dovecot.org dovecot at dovecot.org
Sun Mar 4 15:49:40 EET 2012


details:   http://hg.dovecot.org/dovecot-2.1/rev/a63651897eac
changeset: 14250:a63651897eac
user:      Timo Sirainen <tss at iki.fi>
date:      Sun Mar 04 15:48:48 2012 +0200
description:
Don't auto-add mountpoints under /media or /cdrom.

diffstat:

 src/doveadm/doveadm-mount.c      |   6 ++++--
 src/lib-master/mountpoint-list.c |  30 ++++++++++++++++++++++++------
 src/lib-master/mountpoint-list.h |   7 ++++++-
 src/master/main.c                |   1 +
 4 files changed, 35 insertions(+), 9 deletions(-)

diffs (113 lines):

diff -r e540404debb7 -r a63651897eac src/doveadm/doveadm-mount.c
--- a/src/doveadm/doveadm-mount.c	Sun Mar 04 15:30:31 2012 +0200
+++ b/src/doveadm/doveadm-mount.c	Sun Mar 04 15:48:48 2012 +0200
@@ -77,8 +77,10 @@
 
 	mountpoints = mountpoint_list_get();
 	if (argv[1] == NULL) {
-		mountpoint_list_add_missing(mountpoints, MOUNTPOINT_STATE_DEFAULT,
-					    mountpoint_list_default_ignore_types);
+		mountpoint_list_add_missing(mountpoints,
+			MOUNTPOINT_STATE_DEFAULT,
+			mountpoint_list_default_ignore_prefixes,
+			mountpoint_list_default_ignore_types);
 	} else {
 		memset(&rec, 0, sizeof(rec));
 		rec.mount_path = argv[1];
diff -r e540404debb7 -r a63651897eac src/lib-master/mountpoint-list.c
--- a/src/lib-master/mountpoint-list.c	Sun Mar 04 15:30:31 2012 +0200
+++ b/src/lib-master/mountpoint-list.c	Sun Mar 04 15:48:48 2012 +0200
@@ -50,6 +50,12 @@
 	NULL
 };
 
+const char *const mountpoint_list_default_ignore_prefixes[] = {
+	"/cdrom",
+	"/media",
+	NULL
+};
+
 struct mountpoint_list *
 mountpoint_list_init(const char *perm_path, const char *state_path)
 {
@@ -251,8 +257,20 @@
 	return FALSE;
 }
 
+static bool str_array_find_prefix(const char *const *prefixes, const char *str)
+{
+	if (prefixes == NULL)
+		return FALSE;
+	for (; *prefixes != NULL; prefixes++) {
+		if (strncmp(*prefixes, str, strlen(*prefixes)) == 0)
+			return TRUE;
+	}
+	return FALSE;
+}
+
 int mountpoint_list_add_missing(struct mountpoint_list *list,
 				const char *default_state,
+				const char *const *ignore_prefixes,
 				const char *const *ignore_types)
 {
 	struct mountpoint_list_rec new_rec, *rec, *const *recp;
@@ -269,15 +287,15 @@
 	/* get a sorted list of all current mountpoints */
 	iter = mountpoint_iter_init();
 	while ((mnt = mountpoint_iter_next(iter)) != NULL) {
-		if (str_array_find(ignore_types, mnt->type))
-			continue;
-
 		rec = mountpoint_list_find(list, mnt->mount_path);
-		if (rec == NULL) {
+		if (rec != NULL) {
+			if (!rec->wildcard)
+				rec->mounted = TRUE;
+		} else if (!str_array_find(ignore_types, mnt->type) &&
+			   !str_array_find_prefix(ignore_prefixes,
+						  mnt->mount_path)) {
 			new_rec.mount_path = mnt->mount_path;
 			mountpoint_list_add(list, &new_rec);
-		} else if (!rec->wildcard) {
-			rec->mounted = TRUE;
 		}
 	}
 	return mountpoint_iter_deinit(&iter);
diff -r e540404debb7 -r a63651897eac src/lib-master/mountpoint-list.h
--- a/src/lib-master/mountpoint-list.h	Sun Mar 04 15:30:31 2012 +0200
+++ b/src/lib-master/mountpoint-list.h	Sun Mar 04 15:48:48 2012 +0200
@@ -21,6 +21,9 @@
 /* A default known good list of mountpoint types that don't contain emails
    (e.g. proc, tmpfs, etc.) */
 extern const char *const mountpoint_list_default_ignore_types[];
+/* A default known good list of directories which shouldn't contain emails
+   (e.g. /media) */
+extern const char *const mountpoint_list_default_ignore_prefixes[];
 
 struct mountpoint_list *
 mountpoint_list_init(const char *perm_path, const char *state_path);
@@ -43,10 +46,12 @@
 			    const char *mount_path);
 /* Add all currently mounted missing mountpoints to the list and update all
    mountpoints' mounted state. The mountpoints that match existing wildcards
-   aren't added. Mountpoints with type in ignore_types list also aren't added.
+   aren't added. Mountpoints with paths under ignore_prefixes aren't added.
+   Mountpoints with type in ignore_types list also aren't added.
    Returns 0 if we successfully iterated through all mountpoints, -1 if not. */
 int mountpoint_list_add_missing(struct mountpoint_list *list,
 				const char *default_state,
+				const char *const *ignore_prefixes,
 				const char *const *ignore_types);
 /* Update "mounted" status for all mountpoints. */
 int mountpoint_list_update_mounted(struct mountpoint_list *list);
diff -r e540404debb7 -r a63651897eac src/master/main.c
--- a/src/master/main.c	Sun Mar 04 15:30:31 2012 +0200
+++ b/src/master/main.c	Sun Mar 04 15:48:48 2012 +0200
@@ -317,6 +317,7 @@
 	mountpoints = mountpoint_list_init(perm_path, state_path);
 
 	if (mountpoint_list_add_missing(mountpoints, MOUNTPOINT_STATE_DEFAULT,
+				mountpoint_list_default_ignore_prefixes,
 				mountpoint_list_default_ignore_types) == 0)
 		mountpoints_warn_missing(mountpoints);
 	(void)mountpoint_list_save(mountpoints);


More information about the dovecot-cvs mailing list