[pulseaudio-discuss] --check option seems not to work from su(1) as daemon user
Tanu Kaskinen
tanu.kaskinen at linux.intel.com
Thu Aug 21 05:31:13 PDT 2014
On Wed, 2014-08-20 at 06:15 -0600, Glenn Golden wrote:
> Tanu Kaskinen <tanu.kaskinen at linux.intel.com> [2014-08-20 13:26:19 +0300]:
> >
> > (added pulseaudio-discuss back to CC)
> >
> Thx, I hit the wrong button on the reply earlier.
>
> >
> > On Tue, 2014-08-19 at 16:26 -0600, Glenn Golden wrote:
> > > This is completely misleading: The test that is performed by the --check
> > > option evidently has _nothing whatsoever_ to do with the "calling user",
> > > it is determined entirely by the XDG_RUNTIME_DIR envar, regardless of the
> > > user who executed the "pulaseaudio --check" command. The blurb should
> > > simply state that the check is performed based on the user whose runtime
> > > pid dir is pointed to by XDG_RUNTIME_DIR, and then it will be entirely
> > > accurate and complete.
> >
> > I'd rather say that the check is performed with the assumption that
> > XDG_RUNTIME_DIR is set correctly for the calling user.
> >
>
> But that phrasing simply introduces a subtler ambiguity: What does "set
> correctly" mean in the context of a calling user who has used (e.g.) su(1)
> or runuser(1) or an SUID executable to switch UID or EUID?
>
> Example: A process can be running with UID = xyz, EUID = 0, and so accesss
> would be allowed to all /run/user/* directories, not just the directory of
> user xyz. Who is the "correct" user in this situation?
>
> Otoh, simply stating that "the test is performed based on XDG_RUNTIME_DIR"
> without any further qualification provides the reader with both the necessary
> and sufficient information to inform him as to how the check is performed.
> Let the reader infer what he wishes about the notion of "correctness" of
> the setting of XDG_RUNTIME_DIR in his particular situation.
>
> >
> > The check is non-functional if XDG_RUNTIME_DIR points to the wrong directory,
> > because the answer will always be "not running", because most likely
> > pulseaudio won't have access to the directory that XDG_RUNTIME_DIR points to.
> >
>
> Exactly. So wouldn't it make sense to say just state that in the doc?
>
> "The check is performed based on the runtime directory specified by
> $XDG_RUNTIME_DIR. If this envar points to a directory which is not
> accessible to the process owner, then the return code is undefined."
>
> (Or perhaps "non-zero" instead of "undefined" above, if that is the case.)
>
> >
> > Also, if you're going to mention XDG_RUNTIME_DIR in the documentation,
> > you should probably also mention that if XDG_RUNTIME_DIR isn't set at
> > all, then the check assumes that HOME[1] is set correctly.
> >
>
> The above does not seem to be the case on my Arch linux setup: In the following
> example, the PA daemon is running as user gdg, and yet:
>
> # id
> uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys), \
> 4(adm),6(disk),10(wheel),19(log)
>
> # su - gdg
> $ id
> uid=501(gdg) gid=501(gdg) groups=501(gdg),19(log),92(audio), \
> 190(systemd-journal)
> $ unset XDG_RUNTIME_DIR
> $ echo $HOME
> /home/gdg
> $ pulseaudio --check -v
> I: [pulseaudio] main.c: Daemon not running
>
> From an xterm which is directly logged in as user gdg, the --check option
> correctly reports the daemon info:
>
> $ id
> uid=501(gdg) gid=501(gdg) groups=501(gdg),19(log),92(audio), \
> 190(systemd-journal)
> $ echo $HOME
> /home/gdg
> $ echo $XDG_RUNTIME_DIR
> /run/user/501
> $ pulseaudio --check -v
> I: [pulseaudio] main.c: Daemon running as PID 29731
>
> So... before I submit a doc patch, it would probably be worthwhile to get
> hold of a confirmed explanation of exactly what is being done for the check.
Unsetting XDG_RUNTIME_DIR thing didn't work, because the pulseaudio
instance that was running was started in an environment where
XDG_RUNTIME_DIR was set, and it was set to point to /run/user/501, so
that directory was used to store the pid file. When you ran pulseaudio
--check, XDG_RUNTIME_DIR was not set, so pulseaudio couldn't figure out
that it should have used /run/user/501 for the runtime directory.
Instead, --check used
~/.config/pulse/f8bba75988c34d26965f9d0486fe30af-runtime, and it didn't
find the pid file there.
> If you can point me to a sourcefile, I'll try to plumb the details myself,
> and then get back to you with my findings and see if you agree before
> submitting a doc patch.
pa_pid_file_check_running() is in src/pulsecore/pid.c, the runtime
directory logic is in src/pulsecore/core-util.c.
--
Tanu
More information about the pulseaudio-discuss
mailing list