chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
e1ae975
)
base-filesystem: explicitely check existence of the platform's ABI dynamic loader
author
Kay Sievers
<kay@vrfy.org>
Tue, 1 Jul 2014 10:12:40 +0000
(12:12 +0200)
committer
Kay Sievers
<kay@vrfy.org>
Tue, 1 Jul 2014 10:12:40 +0000
(12:12 +0200)
src/shared/base-filesystem.c
patch
|
blob
|
history
diff --git
a/src/shared/base-filesystem.c
b/src/shared/base-filesystem.c
index 682155bb4538335b7e96be4a6d279d0bf13ec6bf..f68386b8e35ba9d5858fc3f243f7286260158fa6 100644
(file)
--- a/
src/shared/base-filesystem.c
+++ b/
src/shared/base-filesystem.c
@@
-38,16
+38,17
@@
typedef struct BaseFilesystem {
const char *dir;
mode_t mode;
const char *target;
const char *dir;
mode_t mode;
const char *target;
+ const char *exists;
} BaseFilesystem;
static const BaseFilesystem table[] = {
} BaseFilesystem;
static const BaseFilesystem table[] = {
- { "bin", 0, "usr/bin" },
- { "lib", 0, "usr/lib" },
+ { "bin", 0, "usr/bin", NULL },
+ { "lib", 0, "usr/lib", NULL },
+ { "root", 0755, NULL, NULL },
+ { "sbin", 0, "usr/sbin", NULL },
#if defined(__i386__) || defined(__x86_64__)
#if defined(__i386__) || defined(__x86_64__)
- { "lib64", 0, "usr/lib/x86_64-linux-gnu\0usr/lib64" },
+ { "lib64", 0, "usr/lib/x86_64-linux-gnu\0usr/lib64"
, "ld-linux-x86-64.so.2"
},
#endif
#endif
- { "root", 0755, NULL },
- { "sbin", 0, "usr/sbin" },
};
int base_filesystem_create(const char *root) {
};
int base_filesystem_create(const char *root) {
@@
-69,6
+70,18
@@
int base_filesystem_create(const char *root) {
if (faccessat(fd, s, F_OK, AT_SYMLINK_NOFOLLOW) < 0)
continue;
if (faccessat(fd, s, F_OK, AT_SYMLINK_NOFOLLOW) < 0)
continue;
+ /* check if a specific file exists at the target path */
+ if (table[i].exists) {
+ _cleanup_free_ char *p = NULL;
+
+ p = strjoin(s, "/", table[i].exists, NULL);
+ if (!p)
+ return log_oom();
+
+ if (faccessat(fd, p, F_OK, AT_SYMLINK_NOFOLLOW) < 0)
+ continue;
+ }
+
target = s;
break;
}
target = s;
break;
}