chiark / gitweb /
automount: add DirectoryMode= setting
authorLennart Poettering <lennart@poettering.net>
Thu, 1 Jul 2010 23:17:21 +0000 (01:17 +0200)
committerLennart Poettering <lennart@poettering.net>
Thu, 1 Jul 2010 23:17:21 +0000 (01:17 +0200)
src/automount.c
src/automount.h
src/load-fragment.c

index 5e669c5..b8d7ad2 100644 (file)
@@ -53,6 +53,8 @@ static void automount_init(Unit *u) {
 
         a->pipe_watch.fd = a->pipe_fd = -1;
         a->pipe_watch.type = WATCH_INVALID;
+
+        a->directory_mode = 0755;
 }
 
 static void repeat_unmout(const char *path) {
@@ -253,9 +255,11 @@ static void automount_dump(Unit *u, FILE *f, const char *prefix) {
 
         fprintf(f,
                 "%sAutomount State: %s\n"
-                "%sWhere: %s\n",
+                "%sWhere: %s\n"
+                "%sDirectoryMode: %04o\n",
                 prefix, automount_state_to_string(a->state),
-                prefix, a->where);
+                prefix, a->where,
+                prefix, a->directory_mode);
 }
 
 static void automount_enter_dead(Automount *a, bool success) {
@@ -536,9 +540,10 @@ static void automount_enter_runnning(Automount *a) {
         assert(a);
         assert(a->mount);
 
-        /* Before we do anything, let's see if somebody is playing games with us? */
+        mkdir_p(a->where, a->directory_mode);
 
-        if (stat(a->where, &st) < 0) {
+        /* Before we do anything, let's see if somebody is playing games with us? */
+        if (lstat(a->where, &st) < 0) {
                 log_warning("%s failed stat automount point: %m", a->meta.id);
                 goto fail;
         }
index 44e6100..13b56ef 100644 (file)
@@ -48,6 +48,8 @@ struct Automount {
         Watch pipe_watch;
         dev_t dev_id;
 
+        mode_t directory_mode;
+
         Set *tokens;
 
         bool failure:1;
index 43a4027..49b577f 100644 (file)
@@ -1566,6 +1566,7 @@ static int load_from_path(Unit *u, const char *path) {
                 EXEC_CONTEXT_CONFIG_ITEMS(u->mount.exec_context, "Mount"),
 
                 { "Where",                  config_parse_path,            &u->automount.where,                             "Automount" },
+                { "DirectoryMode",          config_parse_mode,            &u->automount.directory_mode,                    "Automount" },
 
                 { "What",                   config_parse_path,            &u->swap.parameters_fragment.what,               "Swap"    },
                 { "Priority",               config_parse_int,             &u->swap.parameters_fragment.priority,           "Swap"    },