systemd-mount: allow to specify an arbitrary string for arg_mount_what when vfs is used

Fixes #6591.
This commit is contained in:
Yu Watanabe 2017-09-04 10:55:51 +09:00
parent 4185da7c4d
commit e2be442e79
3 changed files with 34 additions and 1 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]);