From d3689161a2870a56ba5a2837daa2ca3463e24710 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Wed, 25 Aug 2010 03:11:26 +0200 Subject: mount: add global configuration options for handling of auto mounts --- src/dbus-manager.c | 6 ++++++ src/main.c | 29 +++++++++++++++++++---------- src/manager.h | 4 ++++ src/mount.c | 7 +++++-- src/swap.c | 4 +++- src/system.conf | 5 ++++- 6 files changed, 41 insertions(+), 14 deletions(-) diff --git a/src/dbus-manager.c b/src/dbus-manager.c index eb3768455c..557124712a 100644 --- a/src/dbus-manager.c +++ b/src/dbus-manager.c @@ -141,6 +141,9 @@ " \n" \ " \n" \ " \n" \ + " \n" \ + " \n" \ + " \n" \ " \n" #define INTROSPECTION_BEGIN \ @@ -252,6 +255,9 @@ static DBusHandlerResult bus_manager_message_handler(DBusConnection *connection, { "org.freedesktop.systemd1.Manager", "SysVRcndPath", bus_property_append_strv, "as", m->lookup_paths.sysvrcnd_path }, { "org.freedesktop.systemd1.Manager", "NotifySocket", bus_property_append_string, "s", m->notify_socket }, { "org.freedesktop.systemd1.Manager", "ControlGroupHierarchy", bus_property_append_string, "s", m->cgroup_hierarchy }, + { "org.freedesktop.systemd1.Manager", "MountOnPlug", bus_property_append_bool, "b", &m->mount_on_plug }, + { "org.freedesktop.systemd1.Manager", "SwapOnPlug", bus_property_append_bool, "b", &m->swap_on_plug }, + { "org.freedesktop.systemd1.Manager", "MountAuto", bus_property_append_bool, "b", &m->mount_auto }, { NULL, NULL, NULL, NULL, NULL } }; diff --git a/src/main.c b/src/main.c index 35ee1c73e1..54fc0540ac 100644 --- a/src/main.c +++ b/src/main.c @@ -64,6 +64,9 @@ static int arg_crash_chvt = -1; static bool arg_confirm_spawn = false; static bool arg_show_status = true; static bool arg_sysv_console = true; +static bool arg_mount_on_plug = true; +static bool arg_swap_on_plug = true; +static bool arg_mount_auto = true; static FILE* serialization = NULL; @@ -472,16 +475,19 @@ static int config_parse_cpu_affinity( static int parse_config_file(void) { const ConfigItem items[] = { - { "LogLevel", config_parse_level, NULL, "Manager" }, - { "LogTarget", config_parse_target, NULL, "Manager" }, - { "LogColor", config_parse_color, NULL, "Manager" }, - { "LogLocation", config_parse_location, NULL, "Manager" }, - { "DumpCore", config_parse_bool, &arg_dump_core, "Manager" }, - { "CrashShell", config_parse_bool, &arg_crash_shell, "Manager" }, - { "ShowStatus", config_parse_bool, &arg_show_status, "Manager" }, - { "SysVConsole", config_parse_bool, &arg_sysv_console,"Manager" }, - { "CrashChVT", config_parse_int, &arg_crash_chvt, "Manager" }, - { "CPUAffinity", config_parse_cpu_affinity, NULL, "Manager" }, + { "LogLevel", config_parse_level, NULL, "Manager" }, + { "LogTarget", config_parse_target, NULL, "Manager" }, + { "LogColor", config_parse_color, NULL, "Manager" }, + { "LogLocation", config_parse_location, NULL, "Manager" }, + { "DumpCore", config_parse_bool, &arg_dump_core, "Manager" }, + { "CrashShell", config_parse_bool, &arg_crash_shell, "Manager" }, + { "ShowStatus", config_parse_bool, &arg_show_status, "Manager" }, + { "SysVConsole", config_parse_bool, &arg_sysv_console, "Manager" }, + { "CrashChVT", config_parse_int, &arg_crash_chvt, "Manager" }, + { "CPUAffinity", config_parse_cpu_affinity, NULL, "Manager" }, + { "MountOnPlug", config_parse_bool, &arg_mount_on_plug, "Manager" }, + { "SwapOnPlug", config_parse_bool, &arg_swap_on_plug, "Manager" }, + { "MountAuto", config_parse_bool, &arg_mount_auto, "Manager" }, { NULL, NULL, NULL, NULL } }; @@ -986,6 +992,9 @@ int main(int argc, char *argv[]) { m->confirm_spawn = arg_confirm_spawn; m->show_status = arg_show_status; m->sysv_console = arg_sysv_console; + m->mount_on_plug = arg_mount_on_plug; + m->swap_on_plug = arg_swap_on_plug; + m->mount_auto = arg_mount_auto; if ((r = manager_startup(m, serialization, fds)) < 0) log_error("Failed to fully start up daemon: %s", strerror(-r)); diff --git a/src/manager.h b/src/manager.h index 2b4eee933d..dd48593d4c 100644 --- a/src/manager.h +++ b/src/manager.h @@ -202,6 +202,10 @@ struct Manager { bool confirm_spawn; bool sysv_console; + bool mount_on_plug; + bool swap_on_plug; + bool mount_auto; + int n_deserializing; }; diff --git a/src/mount.c b/src/mount.c index b667ae52c9..b49443ced1 100644 --- a/src/mount.c +++ b/src/mount.c @@ -244,7 +244,8 @@ static int mount_add_target_links(Mount *m) { noauto = !!mount_test_option(p->options, MNTOPT_NOAUTO); user = mount_test_option(p->options, "user") || mount_test_option(p->options, "users"); - handle = !!mount_test_option(p->options, "comment=systemd.mount"); + handle = !!mount_test_option(p->options, "comment=systemd.mount") || + m->meta.manager->mount_auto; automount = !!mount_test_option(p->options, "comment=systemd.automount"); if (mount_test_option(p->options, "_netdev") || @@ -362,7 +363,9 @@ static int mount_load(Unit *u) { what = m->parameters_proc_self_mountinfo.what; if (what && !path_equal(m->where, "/")) - if ((r = unit_add_node_link(u, what, u->meta.manager->running_as == MANAGER_SYSTEM)) < 0) + if ((r = unit_add_node_link(u, what, + u->meta.manager->running_as == MANAGER_SYSTEM && + u->meta.manager->mount_on_plug)) < 0) return r; if ((r = mount_add_mount_links(m)) < 0) diff --git a/src/swap.c b/src/swap.c index c81fd67cc8..4a672fbdff 100644 --- a/src/swap.c +++ b/src/swap.c @@ -195,7 +195,9 @@ static int swap_load(Unit *u) { if ((r = unit_set_description(u, s->what)) < 0) return r; - if ((r = unit_add_node_link(u, s->what, u->meta.manager->running_as == MANAGER_SYSTEM)) < 0) + if ((r = unit_add_node_link(u, s->what, + u->meta.manager->running_as == MANAGER_SYSTEM && + u->meta.manager->swap_on_plug)) < 0) return r; if ((r = swap_add_mount_links(s)) < 0) diff --git a/src/system.conf b/src/system.conf index 11885e0b59..9d87c6dfda 100644 --- a/src/system.conf +++ b/src/system.conf @@ -5,7 +5,7 @@ # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # -# See system.conf(5) for details +# See systemd(1) for details [Manager] #LogLevel=info @@ -18,3 +18,6 @@ #SysVConsole=yes #CrashChVT=1 #CPUAffinity=1 2 +#MountOnPlug=yes +#SwapOnPlug=yes +#MountAuto=yes -- cgit v1.2.3-54-g00ecf