844 Commits

Author SHA1 Message Date
Gleb Smirnoff
92820eb1ee monitor_kqueue: plug memory leak from strcpy() on directory delete 2022-02-11 07:41:06 -08:00
lqs
a1c8a1856d add webm/rm/rmvb support 2022-02-11 07:11:28 -08:00
Justin Maggard
cfb775682b build: Add buildroot packaging for static build 2022-02-11 00:37:42 -08:00
Justin Maggard
45a0b5fd56 Wrap up version 1.3.1 2022-02-11 00:31:31 -08:00
Peter Urbanec
2c66335a9b upnpevents: Fix leaked sockets
Commit f9a78d598e48132a8c6cf9ce31b51163b6bd2f67 refactored the code, but
in the process introduced a socket leak. When connect() is called on a
socket set to non-blocking mode, the returned error code is EINPROGRESS.
In that case, the code never initialises the ev structure and the socket
reference is lost. Given enough time (on my network about a day and a half)
this will eventually lead to a non-responsive server because the process
runs out of fds. Netstat will show an excessive number of sockets stuck in
CLOSE_WAIT state forever and ls /proc/<pid>/fd will confirm a lot of open
sockets.

Initialising the ev struct before a call to connect() ensures that the
socket reference is not lost. Verifying with netstat, one can see the
sockets in TIME_WAIT state for a brief period of time and /proc/<pid>/fd
shows a reasonable number of sockets being open.
2022-02-11 00:30:04 -08:00
Vlad Starodubtsev
26ce01f473 upnphttp: fix forked process termination at error 2022-02-11 00:30:04 -08:00
Justin Maggard
3c49d66d82 process: avoid negative number of children
The number_of_children child connections number becomes negative (-1) at
server startup due to signal handlers treatments on minidlna.c init().

Opening the webserver status page with no clients connected the opening
connection shows -1 even if client list show 0 for all in the columns.

When connecting the first client, its own connections column goes to 1
and total goes to 0, and so on always one count behind.

Simply allow: number_of_children-- only if not 0

From SF user negan07
2022-02-11 00:30:04 -08:00
Justin Maggard
5c4895a09b build: support gettext 0.20
support compiling if gettext 0.20 or later is found

AM_GNU_GETTEXT_REQUIRE_VERSION overwrites AM_GNU_GETTEXT_VERSION if
autoreconf supports it, so legacy systems are still supported.

From SF user CvH
2022-02-11 00:30:04 -08:00
Justin Maggard
6e18db1a12 upnphttp: Make the :8200 http page automatically refresh
The ReadyMedia :8200 http page reports scanning progress. Why not make it
automatically refresh?

From SF user gharris999
2022-02-11 00:30:04 -08:00
Piotr Trojanek
814b23ee59 Fix descriptor leak with a corrupted DSD file
Detected with cppcheck.
2022-02-11 00:30:04 -08:00
Justin Maggard
696b2c3e1d tivo: Fix multiple definitions of sqlite3 plugin struct 2022-02-10 23:51:28 -08:00
Justin Maggard
c21208508d upnphttp: Protect against DNS rebinding attacks
Validate HTTP requests to protect against DNS rebinding.
2022-02-10 23:51:28 -08:00
Justin Maggard
8d8d04785b build: Fix configure error on some platforms
Fixes libid3tag and libavformat detection errors.
2022-02-10 23:51:28 -08:00
Justin Maggard
b4e55102af minissdp: Harden SSDP request parsing
Avoids a potential crash from malformed header.
2022-02-10 23:51:28 -08:00
Gleb Smirnoff
1d363c209f Use timevals everywhere where it is possible, including API between main
loop and event dispatchers. This simplifies code and eliminates a bug,
when kevent dispatcher is called with 0 timeout.

While here, in the main loop call gettimeofday() right after event
dispatcher returns. Otherwise, we are using outdated "timeofday" in
second part of the loop. I don't know any bugs because of that, but
they are possible.
2021-01-07 11:02:51 -08:00
Gleb Smirnoff
cad8c922f0 Consolidate start/finish of monitor on different platforms into
one API. Monitor is started either before main loop, if scanner
isn't running, or in the main loop once we finished waiting for
the scanner.
2021-01-07 11:02:44 -08:00
Gleb Smirnoff
ee912576b3 Separate platform indepenent code into monitor.c, and move inotify(7)
specific code to monitor_inotify.c.
Both monitor_inotify.c and monitor_kqueue.c provide their functions
for adding and removing watches. Prefix these functions with monitor_.
2021-01-07 10:58:29 -08:00
Justin Maggard
109d63cb11 Wrap up version 1.3.0 2020-11-24 10:53:50 -08:00
Justin Maggard
e31c420e27 locale: Add missing translation string to ru.po 2020-11-24 10:53:50 -08:00
Gleb Smirnoff
36b9136d2b Use newer IP_MULTICAST_IF API
Use newer API for IP_MULTICAST_IF which allows one to specify
interface by index, not by address. Introduced in Linux 3.5, it IMHO should
be available on all systems that declare struct ip_mreqn.

This fixes operation failure when a system has multiple interfaces
with same address, but only on of them is desired. Example:

> grep interface /usr/local/etc/minidlna.conf
network_interface=igb0
> ifconfig igb0
igb0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        ether 0c:c4:7a:xx:xx:xx
        inet 10.1.10.3 netmask 0xffffff00 broadcast 10.1.10.255
        media: Ethernet autoselect (1000baseT <full-duplex>)
        status: active
> ifconfig ng0
ng0: flags=88d1<UP,POINTOPOINT,RUNNING,NOARP,SIMPLEX,MULTICAST> metric 0 mtu 1454
        inet 10.1.10.3 --> 10.1.10.2 netmask 0xffffffff

In such configuration, ng0 would be chosen before this fix.
2020-11-24 10:53:50 -08:00
Justin Maggard
256d271201 clients: Add webOS TV 3.5 FLAC support
webOS TV 3.5 needs a sepcial FLAC mime type.
2020-11-18 14:45:11 -08:00
Justin Maggard
42646c99e0 upnpsoap: Add "path" SortCriteria support
Useful for manual sort overrides, to sort by filename.
2020-11-18 14:45:11 -08:00
Andreas Boeckler
13efe02e2d activated systemd-foreground-option on OS X for launchd 2020-11-18 14:45:11 -08:00
Justin Maggard
a668daa9da upnphttp: Downgrade "HTTP Connection closed unexpectedly"
Lots of clients trigger this during normal operation.
2020-11-18 14:45:11 -08:00
Vlad Starodubtsev
204a0ded8d monitor: fix setting max_user_watches.
reset file position after read.
2020-11-18 14:45:11 -08:00
Justin Maggard
347aafa6d7 Fix some build warnings when building with musl 2020-11-18 14:45:11 -08:00
Justin Maggard
379b66ca95 Use $USER instead of $LOGNAME for default friendly_name
Using $USER in the friendly name will display which user minidlna is
running as on the clients, which can be helpful for detecting problems.
Using $LOGNAME on the other hand will display "root" as the username if
minidlna was started using the init script, regardless of which user
minidlna is currently running as.

Originally added by Benoît Knecht <benoit.knecht@fsfe.org>
2020-11-18 14:45:11 -08:00
Fabrice Fontaine
b5e75ff7d1 fix build with gcc 10
Define setjmp_buffer as static to avoid the following build failure with
gcc 10 (which defaults to -fno-common):

/home/buildroot/autobuild/instance-1/output-1/host/lib/gcc/arm-buildroot-linux-gnueabihf/10.2.0/../../../../arm-buildroot-linux-gnueabihf/bin/ld: image_utils.o:(.bss+0x0): multiple definition of `setjmp_buffer'; metadata.o:(.bss+0x0): first defined here
collect2: error: ld returned 1 exit status

Fixes:
 - http://autobuild.buildroot.org/results/8754bb4f7d749f999d5f8ddfec587470ceec4476

Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
2020-11-18 14:45:11 -08:00
Justin Maggard
9f1677825c Fix some warnings from newer compilers 2020-11-18 14:45:11 -08:00
Justin Maggard
9fba41008a upnphttp: Disallow negative HTTP chunk lengths
[CVE-2020-28926]

This fixes a couple vulnerabilities that could lead to an infinite loop
or heap corruption.
2020-11-18 14:44:42 -08:00
Justin Maggard
06ee114731 upnphttp: Validate SUBSCRIBE callback URL
The UPnP protocol specification mandates that subscribers can request a
callback to an arbitrary URL. This recently resulted in CVE-2020-12695
(CallStranger) outlining the risk of information disclosure and DoS
attacks.

This commit ensures that the callback URL sent in a SUBSCRIBE request
points to the same IP address that made the request.
2020-11-18 14:44:33 -08:00
Justin Maggard
0763719f27 tagutils: Fix spurious warnings with ogg coverart
Silences common "Vorbis coverart too long" / "Vorbis
METADATA_BLOCK_PICTURE too long" warning messages.
2019-12-09 21:34:44 -08:00
Justin Maggard
8f14d7223d upnpsoap: Return truncated results on full buffer
If our response buffer fills up to the max buffer size on a UPnP Browse
request, we should return short results rather than erroring out.

Fixes: #314 (Cannot browse MiniDLNA 1.2.1 with VLC 2.2.6 (UPnPError 709: Unsupported or invalid sort criteria))
2019-12-09 21:14:59 -08:00
Alex Stanev
ca6dbba183 clients: Fix bookmarks on Samsung Q series
Add flag for milliseconds conversion for bookmarks and model for Samsung Q
series, which needs this. This allows for bookmark synchronization when 2
or more TVs are using the same DLNA server.
2019-07-01 09:59:43 -07:00
Takeshich NAKAMURA
799e6cf505 Add DSD file support
* add mimetype audio/x-dsd  (.dsf/.dff)
* add id3tag and fileinfo support (only .dsf)
2018-05-04 16:11:25 -07:00
Josh Watzman
ade51e9c94 Fix potential stack smash in getsyshwaddr on OS X
getsyshwaddr assumed that the first ifaddr it came across was the MAC
address, and as such assumes that it has the right length. After
upgrading to OS X 10.13.4, this causes minidlnad to crash on startup due
to tripping stack smash protection -- I'm not sure if the order of
addresses returned previously happened to accidentally hit this
invariant, or if this was always an issue and the stack smash protection
got smarter.

In any event, we just need to look for the AF_LINK address and use that.
As an extra check, we make sure the length is the length we expect to
copy into the target buffer.
2018-04-11 10:01:21 -07:00
Justin Maggard
138d03db19 Reload log file on SIGHUP
There's a report about a nightly "crash" when users download, compile
from source, and replace their distro's mindlnad binary.  This is because
the Debian package includes a patch that uses SIGUSR2 to reopen the log
file and sends SIGUSR2 from logrotate instead of just using the
"copytruncate" logrotate option.  Then logrotate sends SIGUSR2 at 6:25AM,
which causes us to abort due to the unhandled signal.

I don't want to sacrifice SIGUSR2 just for log rotation, especially when
we already do some reload operations on SIGHUP.  So to avoid this
Debian/Ubuntu issue, we'll explicitly ignore SIGUSR2, and add log file
reopening to the SIGHUP handler.  Then hopefully a future Debian package
version will remove the SIGUSR2 patch and use SIGHUP instead (or
copytruncate).

Fixes: SF Bug #313 (log rotation kills minidlna service)
2018-01-23 22:01:10 -08:00
Justin Maggard
7a8ef80af0 Clean up event module on shutdown
Fixes a harmless memory leak reported by Valgrind.
2018-01-23 22:00:02 -08:00
Justin Maggard
fa20ca8526 upnpsoap: Work around some bad SearchCriteria
The Control4 app apparently sends us badly-formatted SearchCriteria,
where they don't quote the upnp:class value.  So we'll add it in for them
if we detect that situation.

Fixes: SF Patches #173 (DLNA search query not as minidlna expects)
2018-01-18 17:35:02 -08:00
Justin Maggard
f2294ebea8 upnpsoap: Move watch count set code to a new function 2018-01-16 17:43:15 -08:00
Justin Maggard
4c4485d225 upnpsoap: Only return sec:dcmInfo with a bookmark
There's no point in returning bookmark info without a bookmark.  It also
has been reported that certain Samsung models may have issues with
subtitles if we send dcmInfo data.  So we'll only return it if we have a
bookmark set.

[minidlna:support-requests] #52 External srt subtitles for Samsung UA48JU7800
2018-01-16 17:38:37 -08:00
Justin Maggard
9bb6cf5051 minissdp: Re-add SSDP filtering
Add back SSDP filtering.  Relying on the kernel to filter out multicast
traffic from non-member interfaces simply doesn't work the way many
people think it does, so we need to re-introduce manual filtering.  But
this time we will use in_pktinfo's ifindex for comparison rather than a
netmask comparison, so SSDP packets from other subnets should still work.
2018-01-16 17:12:20 -08:00
Gleb Smirnoff
8fe7293c7a Fix compilation warning for undeclared struct event. 2018-01-16 17:05:53 -08:00
Gleb Smirnoff
f7604117c0 Fix more compilation mistakes from 338ee4bd7bb44 in TiVo. 2018-01-16 17:05:51 -08:00
Gleb Smirnoff
3e8da9bb1a Return back checking file for sparseness. Use lseek(SEEK_HOLE) if supported by the system, otherwise fallback to block check. This allows to workaround bugs with SMB client and not introduce new bugs for filesystems with compression and deduplication.
This has theoretical bug if our collection spans different
filesystems and some filesystems support holes, and some not.
If this ever encountered we should use pathconf(2) and cache
its result for directories.
2018-01-16 17:05:44 -08:00
Gleb Smirnoff
debb502ff3 Fix compilation mistakes from 338ee4bd7bb44 in TiVo. 2018-01-16 17:05:42 -08:00
Gleb Smirnoff
da30df3350 Remove C99 code. 2018-01-16 17:05:40 -08:00
Gleb Smirnoff
7428b8dede This file is derived from code by Bernard Spil. Fix copyright. 2018-01-16 17:04:32 -08:00
Gleb Smirnoff
1cb676f51d Add license and my copyright to monitor_kqueue.c. The file contains portions of code that were made either by William or by Stefan. Since I am unsure about that, put them both. To be clarified later. 2018-01-16 17:03:20 -08:00
Gleb Smirnoff
a4dc9a1996 Add nginx's and my copyright to the files that borrow ideas from nginx. 2018-01-16 17:03:00 -08:00