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