diff --git a/man/systemd.socket.xml b/man/systemd.socket.xml index 1d20a8f7f7..1409b0c5f4 100644 --- a/man/systemd.socket.xml +++ b/man/systemd.socket.xml @@ -803,8 +803,8 @@ is used, only one AF_UNIX socket in the file system or one FIFO may be configured for the socket unit. Use this option to manage one or more symlinked alias names for a socket, binding - their lifecycle together. Defaults to the empty - list. + their lifecycle together. If the empty string is assigned, the + list of paths is reset. Defaults to the empty list. diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c index 7fa1bafaef..4d0a0bb142 100644 --- a/src/core/load-fragment.c +++ b/src/core/load-fragment.c @@ -283,6 +283,23 @@ int config_parse_unit_path_strv_printf( assert(rvalue); assert(u); + if (isempty(rvalue)) { + char **empty; + + /* Empty assignment resets the list. As a special rule + * we actually fill in a real empty array here rather + * than NULL, since some code wants to know if + * something was set at all... */ + empty = new0(char*, 1); + if (!empty) + return log_oom(); + + strv_free(*x); + *x = empty; + + return 0; + } + for (p = rvalue;;) { _cleanup_free_ char *word = NULL, *k = NULL;