| Commit message (Collapse) | Author | Files | Lines |
|
|
|
|
|
|
|
Keep the parent process around until MPD has finished initializing.
This is important for libraries that are allergic to fork(), such as
libupnp.
|
|
|
|
Prepare for more advanced daemonization code, which will not work with
daemon(). Let's just require fork(). Everybody who supports daemon()
also supports fork().
|
|
|
|
We can assume that initgroups() would be a no-op in that case, however
initgroups() is not allowed for unprivileged users anyway.
|
|
|
|
|
|
|
|
|
|
|
|
The new class Path only holds a string pointer without being
responsible for allocation/deallocation. The FileSystem.hxx library
accepts Path arguments instead of AllocatedPath, to avoid forcing
callers to allocate another string object.
|
|
Prepare to migrate away from GLib. Currently, we're still using GLib
as a backend.
|
|
|
|
Migrate all callers to use Path directly, instead of doing the
conversion in each caller.
|
|
|
|
|
|
|
|
These fixes were mostly generated with `codespell' [0] and manually
reviewed.
[0] http://git.profusion.mobi/cgit.cgi/lucas/codespell/
|
|
|
|
Replaced all occurrences of g_error() with MPD_ERROR() located in a new header
file 'mpd_error.h'. This macro uses g_critical() to print the error message
and then exits gracefully in contrast to g_error() which would internally call
abort() to produce a core dump.
The macro name is distinctive and allows to find all places with dubious error
handling. The long-term goal is to get rid of MPD_ERROR() altogether. To
facilitate the eventual removal of this macro it was added in a new header
file rather than to an existing header file.
This fixes #2995 and #3007.
|
|
|
|
For systems that cannot support fork() (like no-mmu Linux), use daemon() if
it is available for the daemonizing code.
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
|
|
Changed function to first close standard input (this may
fail but we don't care) and then try to open /dev/null (this
may fail but it shouldn't on Unix platforms plus we don't
know what to do in such case anyways). Since standard input
has the "zeroth" descriptor number next "open" will use it.
Since there is no "/dev/null" on Windows (It's not even
a valid path!) the second step is skipped if WIN32 is
defined.
As a final touch, since the function consists of merely two
function calls it has been moved to header file and declared
static inline.
[mk: un-inline daemonize_close_stdin()]
|
|
On Windows only daemonize_close_stdin() function does
something. Other functions are either empty or generate an
error. Those have been moved to header file and declared
static inline so compiler can remove the call all together.
|
|
The "group" configuration option is similar to "user" as it
sets user set what group MPD shall run as. With "user"
option, MPD changed GID to the GID of the user, however,
more control could be desired.
Moreover, the patch changes the way of checking whether no
setuid(2)/setgid(2) is required -- previously user names
were compered, now UID and GIDs are compered (ie. the one we
already have (getuid(2)/getgid(2)) with the one we want to
change to).
|
|
This updates the copyright header to all be the same, which is
pretty much an update of where to mail request for a copy of the GPL
and the years of the MPD project. This also puts all committers under
'The Music Player Project' umbrella. These entries should go
individually in the AUTHORS file, for consistancy.
|
|
|
|
Define the GLib logging domain in the following libraries: conf,
daemon, event_pipe, log.
|
|
If no "user" is configured, return from daemonize_set_user(). Save
one level of indent.
|
|
If mpd.conf specifies a user, and MPD is invoked by exactly this user,
ignore the "user" setting. Don't bother to look up its groups and
don't attempt to change uid, it won't work anyway.
|
|
|
|
Print details on why the fork() fails.
|
|
Moved the code which detaches from the parent process/session to a
separate function.
|
|
This causes a segmentation fault...
|
|
This way, we don't have to pass the full "Options" object to
daemonize().
|
|
The constructor/destructor functions parse and free the configuration
properly. This way, we don't have to load the pid file path more than
once.
|
|
Moved changeToUser(), cleanUpPidFile(), killFromPidFile() to
daemon.c. These are daemonization functions.
|
|
Renamed functions, types, variables.
|
|
There is only one valid error condition for setsid(): when the current
process is already the process group leader. This is non-critical.
|
|
To detach from the parent process, fork once and make the old process
exit. No need to do that twice.
|
|
Don't bother to call fstat() or isatty() on STDIN_FILENO.
|
|
redirect_stdin() is a daemonization function, and disconnecting from
the standard input is always a good idea for MPD.
|
|
|