Rework unit_name_mangle_with_suffix() to (very slightly) simplify the path
'systemctl status /../dev' now looks for 'dev.mount', not '-..-dev.service', and 'systemctl status /../foo' looks for 'foo.mount', not '-..-foo.service'. I think this much more useful. I think the escaping is not very useful, so I plan to submit a later series which changes that behaviour. But I think this first step here is already useful on its own. Note that the patch is smaller than it seems: before, is_device_path() would return true only for absolute paths, so moving of is_device_path() under the path_is_absolute() conditional doesn't influence the logic.
This commit is contained in:
+18
-12
@@ -708,7 +708,7 @@ int unit_name_mangle_with_suffix(
|
||||
char **ret) {
|
||||
|
||||
_cleanup_free_ char *s = NULL;
|
||||
bool mangled, suggest_escape = true;
|
||||
bool mangled, suggest_escape = true, warn = flags & UNIT_NAME_MANGLE_WARN;
|
||||
int r;
|
||||
|
||||
assert(name);
|
||||
@@ -729,22 +729,28 @@ int unit_name_mangle_with_suffix(
|
||||
if (string_is_glob(name) && in_charset(name, VALID_CHARS_GLOB)) {
|
||||
if (flags & UNIT_NAME_MANGLE_GLOB)
|
||||
goto good;
|
||||
log_full(flags & UNIT_NAME_MANGLE_WARN ? LOG_NOTICE : LOG_DEBUG,
|
||||
log_full(warn ? LOG_NOTICE : LOG_DEBUG,
|
||||
"Glob pattern passed%s%s, but globs are not supported for this.",
|
||||
operation ? " " : "", strempty(operation));
|
||||
suggest_escape = false;
|
||||
}
|
||||
|
||||
if (is_device_path(name)) {
|
||||
r = unit_name_from_path(name, ".device", ret);
|
||||
if (r >= 0)
|
||||
return 1;
|
||||
if (r != -EINVAL)
|
||||
return r;
|
||||
}
|
||||
|
||||
if (path_is_absolute(name)) {
|
||||
r = unit_name_from_path(name, ".mount", ret);
|
||||
_cleanup_free_ char *n = NULL;
|
||||
|
||||
r = path_simplify_alloc(name, &n);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
if (is_device_path(n)) {
|
||||
r = unit_name_from_path(n, ".device", ret);
|
||||
if (r >= 0)
|
||||
return 1;
|
||||
if (r != -EINVAL)
|
||||
return r;
|
||||
}
|
||||
|
||||
r = unit_name_from_path(n, ".mount", ret);
|
||||
if (r >= 0)
|
||||
return 1;
|
||||
if (r != -EINVAL)
|
||||
@@ -757,7 +763,7 @@ int unit_name_mangle_with_suffix(
|
||||
|
||||
mangled = do_escape_mangle(name, flags & UNIT_NAME_MANGLE_GLOB, s);
|
||||
if (mangled)
|
||||
log_full(flags & UNIT_NAME_MANGLE_WARN ? LOG_NOTICE : LOG_DEBUG,
|
||||
log_full(warn ? LOG_NOTICE : LOG_DEBUG,
|
||||
"Invalid unit name \"%s\" escaped as \"%s\"%s.",
|
||||
name, s,
|
||||
suggest_escape ? " (maybe you should use systemd-escape?)" : "");
|
||||
|
||||
Reference in New Issue
Block a user