[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