1
0
mirror of https://github.com/systemd/systemd.git synced 2024-11-07 01:27:11 +03:00

Merge pull request #6721 from yuwata/mount-vfs

systemd-mount: allow to specify an arbitrary string for arg_mount_what when vfs is used
This commit is contained in:
Lennart Poettering 2017-09-04 15:37:15 +02:00 committed by GitHub
commit f4b0b3f188
3 changed files with 35 additions and 3 deletions

View File

@ -552,6 +552,32 @@ bool fstype_is_network(const char *fstype) {
return nulstr_contains(table, fstype);
}
bool fstype_is_api_vfs(const char *fstype) {
static const char table[] =
"autofs\0"
"bpf\0"
"cgroup\0"
"cgroup2\0"
"configfs\0"
"cpuset\0"
"debugfs\0"
"devpts\0"
"devtmpfs\0"
"efivarfs\0"
"hugetlbfs\0"
"mqueue\0"
"proc\0"
"pstore\0"
"ramfs\0"
"securityfs\0"
"sysfs\0"
"tmpfs\0"
"tracefs\0"
;
return nulstr_contains(table, fstype);
}
int repeat_unmount(const char *path, int flags) {
bool done = false;

View File

@ -44,6 +44,7 @@ DEFINE_TRIVIAL_CLEANUP_FUNC(FILE*, endmntent);
#define _cleanup_endmntent_ _cleanup_(endmntentp)
bool fstype_is_network(const char *fstype);
bool fstype_is_api_vfs(const char *fstype);
union file_handle_union {
struct file_handle handle;

View File

@ -30,6 +30,7 @@
#include "fd-util.h"
#include "fileio.h"
#include "fstab-util.h"
#include "mount-util.h"
#include "pager.h"
#include "parse-util.h"
#include "path-util.h"
@ -330,7 +331,12 @@ static int parse_argv(int argc, char *argv[]) {
return -EINVAL;
}
if (arg_transport == BUS_TRANSPORT_LOCAL) {
if (arg_mount_type && (fstype_is_api_vfs(arg_mount_type) || fstype_is_network(arg_mount_type))) {
arg_mount_what = strdup(argv[optind]);
if (!arg_mount_what)
return log_oom();
} else if (arg_transport == BUS_TRANSPORT_LOCAL) {
_cleanup_free_ char *u = NULL, *p = NULL;
u = fstab_node_to_udev_node(argv[optind]);
@ -344,9 +350,8 @@ static int parse_argv(int argc, char *argv[]) {
arg_mount_what = canonicalize_file_name(p);
if (!arg_mount_what)
return log_error_errno(errno, "Failed to canonicalize path: %m");
} else {
arg_mount_what = strdup(argv[optind+1]);
arg_mount_what = strdup(argv[optind]);
if (!arg_mount_what)
return log_oom();