From: Dave Reisner Date: Wed, 15 Aug 2012 00:00:30 +0000 (-0400) Subject: dev-setup: allow a path prefix for use in chroots X-Git-Tag: v189~20 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=8f0e73f250f4a397ea07d29a339bd7e64d077612;ds=inline dev-setup: allow a path prefix for use in chroots With this adjustment, we can reuse this code elsewhere, such as in nspawn. --- diff --git a/src/core/mount-setup.c b/src/core/mount-setup.c index e86a89321..be11bb8f3 100644 --- a/src/core/mount-setup.c +++ b/src/core/mount-setup.c @@ -398,7 +398,7 @@ int mount_setup(bool loaded_policy) { /* Create a few default symlinks, which are normally created * by udevd, but some scripts might need them before we start * udevd. */ - dev_setup(); + dev_setup(""); /* Mark the root directory as shared in regards to mount * propagation. The kernel defaults to "private", but we think diff --git a/src/shared/dev-setup.c b/src/shared/dev-setup.c index 0b3d648ac..759ecd799 100644 --- a/src/shared/dev-setup.c +++ b/src/shared/dev-setup.c @@ -50,7 +50,7 @@ static int symlink_and_label(const char *old_path, const char *new_path) { return r; } -void dev_setup(void) { +void dev_setup(const char *pathprefix) { const char *j, *k; static const char symlinks[] = @@ -60,6 +60,16 @@ void dev_setup(void) { "/proc/self/fd/1\0" "/dev/stdout\0" "/proc/self/fd/2\0" "/dev/stderr\0"; - NULSTR_FOREACH_PAIR(j, k, symlinks) - symlink_and_label(j, k); + NULSTR_FOREACH_PAIR(j, k, symlinks) { + char *linkname; + + if (asprintf(&linkname, "%s/%s", pathprefix, k) < 0) { + log_oom(); + break; + } + + symlink_and_label(j, linkname); + + free(linkname); + } } diff --git a/src/shared/dev-setup.h b/src/shared/dev-setup.h index 58507587d..320c0b30b 100644 --- a/src/shared/dev-setup.h +++ b/src/shared/dev-setup.h @@ -1,7 +1,6 @@ /*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ -#ifndef foodevsetuphfoo -#define foodevsetuphfoo +#pragma once /*** This file is part of systemd. @@ -22,6 +21,4 @@ along with systemd; If not, see . ***/ -void dev_setup(void); - -#endif +void dev_setup(const char *pathprefix); diff --git a/src/udev/udevd.c b/src/udev/udevd.c index 23351aebd..1bb15d8c9 100644 --- a/src/udev/udevd.c +++ b/src/udev/udevd.c @@ -1155,7 +1155,7 @@ int main(int argc, char *argv[]) mkdir("/run/udev", 0755); - dev_setup(); + dev_setup(""); static_dev_create_from_modules(udev); /* before opening new files, make sure std{in,out,err} fds are in a sane state */