X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fautomount.c;h=0689ec77896b5cb89454edd53540804f8dd5cf29;hb=4e1e43c8f066c356aa5337156a1501b8ae4aef04;hp=75c10538b7dd4bcc55f26902d6cbd8f9d45de0ef;hpb=4cd1fbcc0648a289e9bf9d9047621bbdf7ec0ece;p=elogind.git diff --git a/src/automount.c b/src/automount.c index 75c10538b..0689ec778 100644 --- a/src/automount.c +++ b/src/automount.c @@ -40,7 +40,7 @@ static const UnitActiveState state_translation_table[_AUTOMOUNT_STATE_MAX] = { [AUTOMOUNT_DEAD] = UNIT_INACTIVE, [AUTOMOUNT_WAITING] = UNIT_ACTIVE, [AUTOMOUNT_RUNNING] = UNIT_ACTIVE, - [AUTOMOUNT_MAINTENANCE] = UNIT_INACTIVE, + [AUTOMOUNT_MAINTENANCE] = UNIT_MAINTENANCE }; static int open_dev_autofs(Manager *m); @@ -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) { @@ -123,10 +125,7 @@ int automount_add_one_mount_link(Automount *a, Mount *m) { if (path_equal(a->where, m->where)) return 0; - if ((r = unit_add_dependency(UNIT(m), UNIT_BEFORE, UNIT(a), true)) < 0) - return r; - - if ((r = unit_add_dependency(UNIT(a), UNIT_REQUIRES, UNIT(m), true)) < 0) + if ((r = unit_add_two_dependencies(UNIT(a), UNIT_AFTER, UNIT_REQUIRES, UNIT(m), true)) < 0) return r; return 0; @@ -253,9 +252,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 +537,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; }