if (!path_is_valid(root))
return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS,
"New root directory must be a valid path.");
+
if (!path_is_absolute(root))
return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS,
"New root path '%s' is not absolute.", root);
- if (path_equal(root, "/"))
+
+ r = path_is_root(root);
+ if (r < 0)
+ return sd_bus_error_set_errnof(error, r,
+ "Failed to check if new root directory '%s' is the same as old root: %m",
+ root);
+ if (r > 0)
return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS,
"New root directory cannot be the old root directory.");
}
#include "bus-error.h"
#include "bus-locator.h"
#include "chase.h"
+#include "fd-util.h"
#include "parse-util.h"
#include "path-util.h"
#include "proc-cmdline.h"
if (argc >= 2) {
root = argv[1];
+
if (!path_is_valid(root))
return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Invalid root path: %s", root);
+
if (!path_is_absolute(root))
return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Root path is not absolute: %s", root);
- if (path_equal(root, "/"))
+
+ r = path_is_root(root);
+ if (r < 0)
+ return log_error_errno(r, "Failed to check if switch-root directory '%s' is current root: %m", root);
+ if (r > 0)
return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Cannot switch to current root directory: %s", root);
} else
root = "/sysroot";