On 09/11/2015 07:33 AM, tilt! wrote:
> [...]
> #1 A "prefix" for XDG_RUNTIME_DIR, meaning the directory where
> runtime directories are created; [...]
>
>    XDG_RUNTIME_PREFIX="/tmp/xdg-runtime/user"
>
> This definition could go to "/etc/xdg/runtime-prefix.default"
>
> #2 A procedure that, if called with no arguments, considers the
> setting of #1 and returns a value for XDG_RUNTIME_DIR for the current
> user:
>
>    . /etc/xdg/runtime-prefix.default
>
>    xdg_runtime_dir_default() {
>       echo "$XDG_RUNTIME_PREFIX/$(/usr/bin/id -ru)"
>    }
>
> This code could go to "/etc/xdg/runtime-dir-default.sh".
>
> #3 An integration in the X session that applies these settings:
>
>    . /etc/xdg/runtime-dir-default.sh
>
>    export XDG_RUNTIME_DIR="$(xdg_runtime_dir_default)"
>
> This code could go to "/etc/X11/Xsession.d/61xdg-runtime-dir".
> [...]
Unaddressed remained the deletion of $XDG_RUNTIME_DIR when a user
has "fully logged out" as mandated by [2].

Ok, that's an understatement, correct is:

Unadressed remains the lifecycle of $XDG_RUNTIME_DIR, specifically:

* When is $XDG_RUNTIME_PREFIX created?

  If $XDG_RUNTIME_PREFIX hosts every user's runtime directory,
  it may not be created with ownership of the user, so to do
  this alone:

     # as user:

     mkdir -p -m 700 "$XDG_RUNTIME_DIR" # wrong!

  is the wrong approach, the prefix has to be created owned by
  root, readable by all, and subdirectories have to be created
  owned by user, read/writeable for user only.

     # as root:

     mkdir -p -m 755 "$XDG_RUNTIME_PREFIX"

  Currently my best guess is that this should be performed
  at system startup.

* When is $XDG_RUNTIME_DIR created?

  If the prefix is created like described above, it requires
  root permissions to create the per-user directory:

    # as root:

    # let $uid be the user ID of the affected user;
    # let $xdg:runtime_dir be the requested runtime directory:

    if ! test -d "$xdg_runtime_dir" ; then
       mkdir -p -m 700 "$xdg_runtime_dir"
       chown $uid:$(id -g $uid) "$xdg_runtime_dir"
    fi

  Currently my best guess is that this should be performed
  everytime the user starts an X session (it's an X thing
  after all, right), but Xsession.d is executed as the
  user, not root. Changing into the user ID is a thing of
  the display manager, there's no general way to hook in.
  Remains PAM. Probably.

* When is $XDG_RUNTIME_DIR deleted?

  If the per-user runtime directory is created as i described
  above, user permissions suffice to delete it, so it was
  sufficent to

    # as user:

    rm -rf "$XDG_RUNTIME_DIR"

  Unfortunately i am in the dark over what it means that a
  user has "fully logged out". Does it mean that no processes
  run with the user's identity anymore? That the user has no
  X session running? That the user has no PAM session running?
  And, if any of these mean that the user has "fully logged
  out", how to hook into such an event and perform the code
  suggested above?

Kind regards,
T.

_______________________________________________
Dng mailing list
Dng@lists.dyne.org
https://mailinglists.dyne.org/cgi-bin/mailman/listinfo/dng

Reply via email to