[systemd-devel] [PATCH] systemctl: "systemctl --root=container/ set-default ... is totally borked."

Zbigniew Jędrzejewski-Szmek zbyszek at in.waw.pl
Thu Apr 17 04:42:23 PDT 2014


On Thu, Apr 17, 2014 at 10:40:37AM +0200, Jan Chaloupka wrote:
> On 04/17/2014 04:59 AM, Zbigniew Je;drzejewski-Szmek wrote:
> >On Thu, Apr 17, 2014 at 01:41:51AM +0100, Djalal Harouni wrote:
> >>BTW, I've a question, why there is this item in the TODO:
> >>"systemctl --root=container/ set-default ... is totally borked."
> >>
> >>Can someone please shed some light on this?
> >I added this, and I guess I should have been more specific, because I had
> >to test this again, to see what is wrong :)
> >
> >systemctl --root=/var/tmp/inst1 set-default multi-user.target
> >
> >creates a symlink /var/tmp/inst1//usr/etc/systemd/system/default.target -> /var/tmp/inst1//lib/systemd/system/multi-user.target, i.e. leaks the container name.
> If understood correctly, proper symlink should be
> 
> /var/tmp/inst1//usr/etc/systemd/system/default.target -> /lib/systemd/system/multi-user.target
> 
> Not appending --root prefix in unit_file_search will fix it
> 
> ---
>  shared/install.c | 5 +----
>  1 file changed, 1 insertion(+), 4 deletions(-)
> 
> diff --git a/shared/install.c b/shared/install.c
> index 6334833..75d3455 100644
> --- a/shared/install.c
> +++ b/shared/install.c
> @@ -1045,10 +1045,7 @@ static int unit_file_search(
>          STRV_FOREACH(p, paths->unit_path) {
>                  char *path = NULL;
> 
> -                if (isempty(root_dir))
> -                        asprintf(&path, "%s/%s", *p, info->name);
> -                else
> -                        asprintf(&path, "%s/%s/%s", root_dir, *p, info->name);
> +                asprintf(&path, "%s/%s", *p, info->name);
> 
This path is used to load the file a few lines down... Such a simple
fix is unlikely to work.

Zbyszek


More information about the systemd-devel mailing list